parse-server 6.0.0 → 6.1.0-beta.1
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/lib/Adapters/Auth/apple.js +3 -11
- package/lib/Adapters/Auth/facebook.js +3 -11
- package/lib/Adapters/Auth/google.js +3 -11
- package/lib/Adapters/Auth/utils.js +17 -0
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +7 -4
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +7 -3
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Config.js +47 -19
- package/lib/Controllers/SchemaController.js +30 -4
- package/lib/LiveQuery/Client.js +5 -5
- package/lib/LiveQuery/ParseLiveQueryServer.js +10 -5
- package/lib/LiveQuery/RequestSchema.js +33 -1
- package/lib/Options/Definitions.js +12 -1
- package/lib/Options/docs.js +3 -1
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +2 -1
- package/lib/Routers/UsersRouter.js +16 -14
- package/package.json +3 -3
|
@@ -7,6 +7,7 @@ const Parse = require('parse/node').Parse;
|
|
|
7
7
|
const jwksClient = require('jwks-rsa');
|
|
8
8
|
const util = require('util');
|
|
9
9
|
const jwt = require('jsonwebtoken');
|
|
10
|
+
const authUtils = require('./utils');
|
|
10
11
|
const TOKEN_ISSUER = 'https://appleid.apple.com';
|
|
11
12
|
const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
12
13
|
const client = jwksClient({
|
|
@@ -24,15 +25,6 @@ const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
24
25
|
}
|
|
25
26
|
return key;
|
|
26
27
|
};
|
|
27
|
-
const getHeaderFromToken = token => {
|
|
28
|
-
const decodedToken = jwt.decode(token, {
|
|
29
|
-
complete: true
|
|
30
|
-
});
|
|
31
|
-
if (!decodedToken) {
|
|
32
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
33
|
-
}
|
|
34
|
-
return decodedToken.header;
|
|
35
|
-
};
|
|
36
28
|
const verifyIdToken = async ({
|
|
37
29
|
token,
|
|
38
30
|
id
|
|
@@ -47,7 +39,7 @@ const verifyIdToken = async ({
|
|
|
47
39
|
const {
|
|
48
40
|
kid: keyId,
|
|
49
41
|
alg: algorithm
|
|
50
|
-
} = getHeaderFromToken(token);
|
|
42
|
+
} = authUtils.getHeaderFromToken(token);
|
|
51
43
|
const ONE_HOUR_IN_MS = 3600000;
|
|
52
44
|
let jwtClaims;
|
|
53
45
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -86,4 +78,4 @@ module.exports = {
|
|
|
86
78
|
validateAppId,
|
|
87
79
|
validateAuthData
|
|
88
80
|
};
|
|
89
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsImdldEFwcGxlS2V5QnlLZXlJZCIsImtleUlkIiwiY2FjaGVNYXhFbnRyaWVzIiwiY2FjaGVNYXhBZ2UiLCJjbGllbnQiLCJqd2tzVXJpIiwiY2FjaGUiLCJhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbiIsInByb21pc2lmeSIsImdldFNpZ25pbmdLZXkiLCJrZXkiLCJlcnJvciIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZlcmlmeUlkVG9rZW4iLCJ0b2tlbiIsImlkIiwiY2xpZW50SWQiLCJraWQiLCJhbGciLCJhbGdvcml0aG0iLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJPTkVfSE9VUl9JTl9NUyIsImp3dENsYWltcyIsImFwcGxlS2V5Iiwic2lnbmluZ0tleSIsInB1YmxpY0tleSIsInJzYVB1YmxpY0tleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2FwcGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFwcGxlIFNpZ25JbiBBdXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9zaWduaW53aXRoYXBwbGVyZXN0YXBpXG5cbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuY29uc3Qgandrc0NsaWVudCA9IHJlcXVpcmUoJ2p3a3MtcnNhJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBhdXRoVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IFRPS0VOX0lTU1VFUiA9ICdodHRwczovL2FwcGxlaWQuYXBwbGUuY29tJztcblxuY29uc3QgZ2V0QXBwbGVLZXlCeUtleUlkID0gYXN5bmMgKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgIGp3a3NVcmk6IGAke1RPS0VOX0lTU1VFUn0vYXV0aC9rZXlzYCxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZU1heEVudHJpZXMsXG4gICAgY2FjaGVNYXhBZ2UsXG4gIH0pO1xuXG4gIGNvbnN0IGFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uID0gdXRpbC5wcm9taXNpZnkoY2xpZW50LmdldFNpZ25pbmdLZXkpO1xuXG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gYXdhaXQgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24oa2V5SWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcga2V5IGZvciBLZXkgSUQ6ICR7a2V5SWR9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IHZlcmlmeUlkVG9rZW4gPSBhc3luYyAoeyB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSB9KSA9PiB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGlkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgYXBwbGVLZXkgPSBhd2FpdCBnZXRBcHBsZUtleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gYXBwbGVLZXkucHVibGljS2V5IHx8IGFwcGxlS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGlkIHRva2VuIGlzIHZhbGlkXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0QsS0FBSztBQUN6QyxNQUFNRSxVQUFVLEdBQUdELE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUUsSUFBSSxHQUFHRixPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1HLEdBQUcsR0FBR0gsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTUssWUFBWSxHQUFHLDJCQUEyQjtBQUVoRCxNQUFNQyxrQkFBa0IsR0FBRyxP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
|
|
@@ -7,6 +7,7 @@ const jwksClient = require('jwks-rsa');
|
|
|
7
7
|
const util = require('util');
|
|
8
8
|
const jwt = require('jsonwebtoken');
|
|
9
9
|
const httpsRequest = require('./httpsRequest');
|
|
10
|
+
const authUtils = require('./utils');
|
|
10
11
|
const TOKEN_ISSUER = 'https://facebook.com';
|
|
11
12
|
function getAppSecretPath(authData, options = {}) {
|
|
12
13
|
const appSecret = options.appSecret;
|
|
@@ -56,15 +57,6 @@ const getFacebookKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
56
57
|
}
|
|
57
58
|
return key;
|
|
58
59
|
};
|
|
59
|
-
const getHeaderFromToken = token => {
|
|
60
|
-
const decodedToken = jwt.decode(token, {
|
|
61
|
-
complete: true
|
|
62
|
-
});
|
|
63
|
-
if (!decodedToken) {
|
|
64
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'provided token does not decode as JWT');
|
|
65
|
-
}
|
|
66
|
-
return decodedToken.header;
|
|
67
|
-
};
|
|
68
60
|
const verifyIdToken = async ({
|
|
69
61
|
token,
|
|
70
62
|
id
|
|
@@ -79,7 +71,7 @@ const verifyIdToken = async ({
|
|
|
79
71
|
const {
|
|
80
72
|
kid: keyId,
|
|
81
73
|
alg: algorithm
|
|
82
|
-
} = getHeaderFromToken(token);
|
|
74
|
+
} = authUtils.getHeaderFromToken(token);
|
|
83
75
|
const ONE_HOUR_IN_MS = 3600000;
|
|
84
76
|
let jwtClaims;
|
|
85
77
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -131,4 +123,4 @@ module.exports = {
|
|
|
131
123
|
validateAppId: validateAppId,
|
|
132
124
|
validateAuthData: validateAuthData
|
|
133
125
|
};
|
|
134
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJjcnlwdG8iLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImh0dHBzUmVxdWVzdCIsIlRPS0VOX0lTU1VFUiIsImdldEFwcFNlY3JldFBhdGgiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJhcHBTZWNyZXQiLCJhcHBzZWNyZXRfcHJvb2YiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiYWNjZXNzX3Rva2VuIiwiZGlnZXN0IiwidmFsaWRhdGVHcmFwaFRva2VuIiwiZ3JhcGhSZXF1ZXN0IiwidGhlbiIsImRhdGEiLCJpZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVHcmFwaEFwcElkIiwiYXBwSWRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJnZXRGYWNlYm9va0tleUJ5S2V5SWQiLCJrZXlJZCIsImNhY2hlTWF4RW50cmllcyIsImNhY2hlTWF4QWdlIiwiY2xpZW50Iiwiandrc1VyaSIsImNhY2hlIiwiYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24iLCJwcm9taXNpZnkiLCJnZXRTaWduaW5nS2V5Iiwia2V5IiwiZXJyb3IiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiaGVhZGVyIiwidmVyaWZ5SWRUb2tlbiIsImNsaWVudElkIiwia2lkIiwiYWxnIiwiYWxnb3JpdGhtIiwiT05FX0hPVVJfSU5fTVMiLCJqd3RDbGFpbXMiLCJmYWNlYm9va0tleSIsInNpZ25pbmdLZXkiLCJwdWJsaWNLZXkiLCJyc2FQdWJsaWNLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwidmFsaWRhdGVBdXRoRGF0YSIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvZmFjZWJvb2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBGYWNlYm9vayBHcmFwaCBBUEkuXG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3Qgandrc0NsaWVudCA9IHJlcXVpcmUoJ2p3a3MtcnNhJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuXG5jb25zdCBUT0tFTl9JU1NVRVIgPSAnaHR0cHM6Ly9mYWNlYm9vay5jb20nO1xuXG5mdW5jdGlvbiBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYXBwU2VjcmV0ID0gb3B0aW9ucy5hcHBTZWNyZXQ7XG4gIGlmICghYXBwU2VjcmV0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IGFwcHNlY3JldF9wcm9vZiA9IGNyeXB0b1xuICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCBhcHBTZWNyZXQpXG4gICAgLnVwZGF0ZShhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pXG4gICAgLmRpZ2VzdCgnaGV4Jyk7XG5cbiAgcmV0dXJuIGAmYXBwc2VjcmV0X3Byb29mPSR7YXBwc2VjcmV0X3Byb29mfWA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gZ3JhcGhSZXF1ZXN0KFxuICAgICdtZT9maWVsZHM9aWQmYWNjZXNzX3Rva2VuPScgKyBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4gKyBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKVxuICApLnRoZW4oZGF0YSA9PiB7XG4gICAgaWYgKChkYXRhICYmIGRhdGEuaWQgPT0gYXV0aERhdGEuaWQpIHx8IChwcm9jZXNzLmVudi5URVNUSU5HICYmIGF1dGhEYXRhLmlkID09PSAndGVzdCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucykge1xuICB2YXIgYWNjZXNzX3Rva2VuID0gYXV0aERhdGEuYWNjZXNzX3Rva2VuO1xuICBpZiAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhY2Nlc3NfdG9rZW4gPT09ICd0ZXN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXBwSWRzKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXBwSWRzIG11c3QgYmUgYW4gYXJyYXkuJyk7XG4gIH1cbiAgaWYgKCFhcHBJZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBncmFwaFJlcXVlc3QoXG4gICAgYGFwcD9hY2Nlc3NfdG9rZW49JHthY2Nlc3NfdG9rZW59JHtnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKX1gXG4gICk7XG4gIGlmICghZGF0YSB8fCAhYXBwSWRzLmluY2x1ZGVzKGRhdGEuaWQpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5jb25zdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQgPSBhc3luYyAoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpID0+IHtcbiAgY29uc3QgY2xpZW50ID0gandrc0NsaWVudCh7XG4gICAgandrc1VyaTogYCR7VE9LRU5fSVNTVUVSfS8ud2VsbC1rbm93bi9vYXV0aC9vcGVuaWQvandrcy9gLFxuICAgIGNhY2hlOiB0cnVlLFxuICAgIGNhY2hlTWF4RW50cmllcyxcbiAgICBjYWNoZU1heEFnZSxcbiAgfSk7XG5cbiAgY29uc3QgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24gPSB1dGlsLnByb21pc2lmeShjbGllbnQuZ2V0U2lnbmluZ0tleSk7XG5cbiAgbGV0IGtleTtcbiAgdHJ5IHtcbiAgICBrZXkgPSBhd2FpdCBhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbihrZXlJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBVbmFibGUgdG8gZmluZCBtYXRjaGluZyBrZXkgZm9yIEtleSBJRDogJHtrZXlJZH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcblxuY29uc3QgZ2V0SGVhZGVyRnJvbVRva2VuID0gdG9rZW4gPT4ge1xuICBjb25zdCBkZWNvZGVkVG9rZW4gPSBqd3QuZGVjb2RlKHRva2VuLCB7IGNvbXBsZXRlOiB0cnVlIH0pO1xuICBpZiAoIWRlY29kZWRUb2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAncHJvdmlkZWQgdG9rZW4gZG9lcyBub3QgZGVjb2RlIGFzIEpXVCcpO1xuICB9XG5cbiAgcmV0dXJuIGRlY29kZWRUb2tlbi5oZWFkZXI7XG59O1xuXG5jb25zdCB2ZXJpZnlJZFRva2VuID0gYXN5bmMgKHsgdG9rZW4sIGlkIH0sIHsgY2xpZW50SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UgfSkgPT4ge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdpZCB0b2tlbiBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cblxuICBjb25zdCB7IGtpZDoga2V5SWQsIGFsZzogYWxnb3JpdGhtIH0gPSBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgZmFjZWJvb2tLZXkgPSBhd2FpdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gZmFjZWJvb2tLZXkucHVibGljS2V5IHx8IGZhY2Vib29rS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoYXV0aERhdGEudG9rZW4pIHtcbiAgICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKGF1dGhEYXRhLnRva2VuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBGQiBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1JLEdBQUcsR0FBR0osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNTSxZQUFZLEdBQUcsc0JBQXNCO0FBRTNDLFNBQVNDLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRCxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0MsU0FBUztFQUNuQyxJQUFJLENBQUNBLFNBQVMsRUFBRTtJQUNkLE9BQU8sRUFBRTtFQUNYO0VBQ0EsTUFBTUMsZUFBZSxHQUFHVixNQUFNLENBQzNCVyxVQUFVLENBQUMsUUFBUSxFQUFFRixTQUFTLENBQUMsQ0FDL0JH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
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJjcnlwdG8iLCJqd2tzQ2xpZW50IiwidXRpbCIsImp3dCIsImh0dHBzUmVxdWVzdCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsImdldEFwcFNlY3JldFBhdGgiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJhcHBTZWNyZXQiLCJhcHBzZWNyZXRfcHJvb2YiLCJjcmVhdGVIbWFjIiwidXBkYXRlIiwiYWNjZXNzX3Rva2VuIiwiZGlnZXN0IiwidmFsaWRhdGVHcmFwaFRva2VuIiwiZ3JhcGhSZXF1ZXN0IiwidGhlbiIsImRhdGEiLCJpZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVHcmFwaEFwcElkIiwiYXBwSWRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJnZXRGYWNlYm9va0tleUJ5S2V5SWQiLCJrZXlJZCIsImNhY2hlTWF4RW50cmllcyIsImNhY2hlTWF4QWdlIiwiY2xpZW50Iiwiandrc1VyaSIsImNhY2hlIiwiYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24iLCJwcm9taXNpZnkiLCJnZXRTaWduaW5nS2V5Iiwia2V5IiwiZXJyb3IiLCJ2ZXJpZnlJZFRva2VuIiwidG9rZW4iLCJjbGllbnRJZCIsImtpZCIsImFsZyIsImFsZ29yaXRobSIsImdldEhlYWRlckZyb21Ub2tlbiIsIk9ORV9IT1VSX0lOX01TIiwiand0Q2xhaW1zIiwiZmFjZWJvb2tLZXkiLCJzaWduaW5nS2V5IiwicHVibGljS2V5IiwicnNhUHVibGljS2V5IiwidmVyaWZ5IiwiYWxnb3JpdGhtcyIsImF1ZGllbmNlIiwiZXhjZXB0aW9uIiwibWVzc2FnZSIsImlzcyIsInN1YiIsInZhbGlkYXRlQXV0aERhdGEiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwiZ2V0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2ZhY2Vib29rLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgRmFjZWJvb2sgR3JhcGggQVBJLlxuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IGp3a3NDbGllbnQgPSByZXF1aXJlKCdqd2tzLXJzYScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbmNvbnN0IGF1dGhVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vZmFjZWJvb2suY29tJztcblxuZnVuY3Rpb24gZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGFwcFNlY3JldCA9IG9wdGlvbnMuYXBwU2VjcmV0O1xuICBpZiAoIWFwcFNlY3JldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBhcHBzZWNyZXRfcHJvb2YgPSBjcnlwdG9cbiAgICAuY3JlYXRlSG1hYygnc2hhMjU2JywgYXBwU2VjcmV0KVxuICAgIC51cGRhdGUoYXV0aERhdGEuYWNjZXNzX3Rva2VuKVxuICAgIC5kaWdlc3QoJ2hleCcpO1xuXG4gIHJldHVybiBgJmFwcHNlY3JldF9wcm9vZj0ke2FwcHNlY3JldF9wcm9vZn1gO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyYXBoVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdChcbiAgICAnbWU/ZmllbGRzPWlkJmFjY2Vzc190b2tlbj0nICsgYXV0aERhdGEuYWNjZXNzX3Rva2VuICsgZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucylcbiAgKS50aGVuKGRhdGEgPT4ge1xuICAgIGlmICgoZGF0YSAmJiBkYXRhLmlkID09IGF1dGhEYXRhLmlkKSB8fCAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhdXRoRGF0YS5pZCA9PT0gJ3Rlc3QnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ZhY2Vib29rIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVHcmFwaEFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGFjY2Vzc190b2tlbiA9IGF1dGhEYXRhLmFjY2Vzc190b2tlbjtcbiAgaWYgKHByb2Nlc3MuZW52LlRFU1RJTkcgJiYgYWNjZXNzX3Rva2VuID09PSAndGVzdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFwcElkcykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2FwcElkcyBtdXN0IGJlIGFuIGFycmF5LicpO1xuICB9XG4gIGlmICghYXBwSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgZ3JhcGhSZXF1ZXN0KFxuICAgIGBhcHA/YWNjZXNzX3Rva2VuPSR7YWNjZXNzX3Rva2VufSR7Z2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyl9YFxuICApO1xuICBpZiAoIWRhdGEgfHwgIWFwcElkcy5pbmNsdWRlcyhkYXRhLmlkKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0RmFjZWJvb2tLZXlCeUtleUlkID0gYXN5bmMgKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgIGp3a3NVcmk6IGAke1RPS0VOX0lTU1VFUn0vLndlbGwta25vd24vb2F1dGgvb3BlbmlkL2p3a3MvYCxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZU1heEVudHJpZXMsXG4gICAgY2FjaGVNYXhBZ2UsXG4gIH0pO1xuXG4gIGNvbnN0IGFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uID0gdXRpbC5wcm9taXNpZnkoY2xpZW50LmdldFNpZ25pbmdLZXkpO1xuXG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gYXdhaXQgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24oa2V5SWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcga2V5IGZvciBLZXkgSUQ6ICR7a2V5SWR9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IHZlcmlmeUlkVG9rZW4gPSBhc3luYyAoeyB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSB9KSA9PiB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2lkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBjb25zdCBPTkVfSE9VUl9JTl9NUyA9IDM2MDAwMDA7XG4gIGxldCBqd3RDbGFpbXM7XG5cbiAgY2FjaGVNYXhBZ2UgPSBjYWNoZU1heEFnZSB8fCBPTkVfSE9VUl9JTl9NUztcbiAgY2FjaGVNYXhFbnRyaWVzID0gY2FjaGVNYXhFbnRyaWVzIHx8IDU7XG5cbiAgY29uc3QgZmFjZWJvb2tLZXkgPSBhd2FpdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpO1xuICBjb25zdCBzaWduaW5nS2V5ID0gZmFjZWJvb2tLZXkucHVibGljS2V5IHx8IGZhY2Vib29rS2V5LnJzYVB1YmxpY0tleTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIHNpZ25pbmdLZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IGFsZ29yaXRobSxcbiAgICAgIC8vIHRoZSBhdWRpZW5jZSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQvb3IgcmVndWxhciBleHByZXNzaW9ucy5cbiAgICAgIGF1ZGllbmNlOiBjbGllbnRJZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5tZXNzYWdlO1xuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgT3BlbklEIHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxuICByZXR1cm4gand0Q2xhaW1zO1xufTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoYXV0aERhdGEudG9rZW4pIHtcbiAgICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKGF1dGhEYXRhLnRva2VuKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBGQiBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNRSxVQUFVLEdBQUdGLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDdEMsTUFBTUcsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1JLEdBQUcsR0FBR0osT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNSyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxNQUFNTSxTQUFTLEdBQUdOLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTU8sWUFBWSxHQUFHLHNCQUFzQjtBQUUzQyxTQUFTQyxnQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDaEQsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUNDLFNBQVM7RUFDbkMsSUFBSSxDQUFDQSxTQUFTLEVBQUU7SUFDZCxPQUFPLEVBQUU7RUFDWDtFQUNBLE1BQU1DLGVBQWUsR0FBR1gsTUFBTSxDQUMzQlksVUFBVSxDQUFDLFFBQVEsRUFBRUYsU0FBUyxDQUFDLENBQy9CRyxNQUFNLENBQUNMLFFBQVEsQ0FBQ00sWUFBWSxDQUFDLENBQzdCQyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBRWhCLE9BQVEsb0JBQW1CSixlQUFnQixFQUFDO0FBQzlDO0FBRUEsU0FBU0ssa0JBQWtCLENBQUNSLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0VBQzdDLE9BQU9RLFlBQVksQ0FDakIsNEJBQTRCLEdBQUdULFFBQVEsQ0FBQ00sWUFBWSxHQUFHUCxnQkFBZ0IsQ0FB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
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
5
|
const https = require('https');
|
|
6
6
|
const jwt = require('jsonwebtoken');
|
|
7
|
+
const authUtils = require('./utils');
|
|
7
8
|
const TOKEN_ISSUER = 'accounts.google.com';
|
|
8
9
|
const HTTPS_TOKEN_ISSUER = 'https://accounts.google.com';
|
|
9
10
|
let cache = {};
|
|
@@ -43,15 +44,6 @@ function getGoogleKeyByKeyId(keyId) {
|
|
|
43
44
|
}).on('error', reject);
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
|
-
function getHeaderFromToken(token) {
|
|
47
|
-
const decodedToken = jwt.decode(token, {
|
|
48
|
-
complete: true
|
|
49
|
-
});
|
|
50
|
-
if (!decodedToken) {
|
|
51
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
52
|
-
}
|
|
53
|
-
return decodedToken.header;
|
|
54
|
-
}
|
|
55
47
|
async function verifyIdToken({
|
|
56
48
|
id_token: token,
|
|
57
49
|
id
|
|
@@ -64,7 +56,7 @@ async function verifyIdToken({
|
|
|
64
56
|
const {
|
|
65
57
|
kid: keyId,
|
|
66
58
|
alg: algorithm
|
|
67
|
-
} = getHeaderFromToken(token);
|
|
59
|
+
} = authUtils.getHeaderFromToken(token);
|
|
68
60
|
let jwtClaims;
|
|
69
61
|
const googleKey = await getGoogleKeyByKeyId(keyId);
|
|
70
62
|
try {
|
|
@@ -141,4 +133,4 @@ function encodeLengthHex(n) {
|
|
|
141
133
|
const lengthOfLengthByte = 128 + nHex.length / 2;
|
|
142
134
|
return toHex(lengthOfLengthByte) + nHex;
|
|
143
135
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaGVhZGVyIiwidmVyaWZ5SWRUb2tlbiIsImlkX3Rva2VuIiwiaWQiLCJjbGllbnRJZCIsImFsZyIsImFsZ29yaXRobSIsImp3dENsYWltcyIsImdvb2dsZUtleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJhdWQiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwidmFsaWRhdGVBcHBJZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtb2R1bHVzQjY0IiwiZXhwb25lbnRCNjQiLCJCdWZmZXIiLCJleHBvbmVudCIsIm1vZHVsdXNIZXgiLCJwcmVwYWRTaWduZWQiLCJleHBvbmVudEhleCIsIm1vZGxlbiIsImxlbmd0aCIsImV4cGxlbiIsImVuY29kZWRNb2RsZW4iLCJlbmNvZGVMZW5ndGhIZXgiLCJlbmNvZGVkRXhwbGVuIiwiZW5jb2RlZFB1YmtleSIsImRlciIsInBlbSIsImpvaW4iLCJoZXhTdHIiLCJtc2IiLCJ0b0hleCIsIm51bWJlciIsIm5zdHIiLCJuSGV4IiwibGVuZ3RoT2ZMZW5ndGhCeXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvZ29vZ2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBnb29nbGUgQVBJLlxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCBqd3QgPSByZXF1aXJlKCdqc29ud2VidG9rZW4nKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2FjY291bnRzLmdvb2dsZS5jb20nO1xuY29uc3QgSFRUUFNfVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSc7XG5cbmxldCBjYWNoZSA9IHt9O1xuXG4vLyBSZXRyaWV2ZSBHb29nbGUgU2lnbmluIEtleXMgKHdpdGggY2FjaGUgY29udHJvbClcbmZ1bmN0aW9uIGdldEdvb2dsZUtleUJ5S2V5SWQoa2V5SWQpIHtcbiAgaWYgKGNhY2hlW2tleUlkXSAmJiBjYWNoZS5leHBpcmVzQXQgPiBuZXcgRGF0ZSgpKSB7XG4gICAgcmV0dXJuIGNhY2hlW2tleUlkXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cHNcbiAgICAgIC5nZXQoYGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92My9jZXJ0c2AsIHJlcyA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICBkYXRhICs9IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGtleXMgfSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgY29uc3QgcGVtcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAgICAgKHBlbXMsIHsgbjogbW9kdWx1cywgZTogZXhwb3NhbnQsIGtpZCB9KSA9PlxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBlbXMsIHtcbiAgICAgICAgICAgICAgICBba2lkXTogcnNhUHVibGljS2V5VG9QRU0obW9kdWx1cywgZXhwb3NhbnQpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgICB2YXIgZXhwaXJlID0gcmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXS5tYXRjaCgvbWF4LWFnZT0oWzAtOV0rKS8pO1xuXG4gICAgICAgICAgICBpZiAoZXhwaXJlKSB7XG4gICAgICAgICAgICAgIGNhY2hlID0gT2JqZWN0LmFzc2lnbih7fSwgcGVtcywge1xuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyBOdW1iZXIoZXhwaXJlWzFdKSAqIDEwMDApLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHBlbXNba2V5SWRdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pIHtcbiAgY29uc3QgZGVjb2RlZFRva2VuID0gand0LmRlY29kZSh0b2tlbiwgeyBjb21wbGV0ZTogdHJ1ZSB9KTtcblxuICBpZiAoIWRlY29kZWRUb2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgcHJvdmlkZWQgdG9rZW4gZG9lcyBub3QgZGVjb2RlIGFzIEpXVGApO1xuICB9XG5cbiAgcmV0dXJuIGRlY29kZWRUb2tlbi5oZWFkZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUlkVG9rZW4oeyBpZF90b2tlbjogdG9rZW4sIGlkIH0sIHsgY2xpZW50SWQgfSkge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBpZCB0b2tlbiBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBjb25zdCB7IGtpZDoga2V5SWQsIGFsZzogYWxnb3JpdGhtIH0gPSBnZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBsZXQgand0Q2xhaW1zO1xuICBjb25zdCBnb29nbGVLZXkgPSBhd2FpdCBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIGdvb2dsZUtleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSICYmIGp3dENsYWltcy5pc3MgIT09IEhUVFBTX1RPS0VOX0lTU1VFUikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGlzc3VlZCBieSBjb3JyZWN0IHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSBvciAke0hUVFBTX1RPS0VOX0lTU1VFUn0gfCBmcm9tOiAke2p3dENsYWltcy5pc3N9YFxuICAgICk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLnN1YiAhPT0gaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGF1dGggZGF0YSBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBpZiAoY2xpZW50SWQgJiYgand0Q2xhaW1zLmF1ZCAhPT0gY2xpZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBhdXRob3JpemVkIGZvciB0aGlzIGNsaWVudElkLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGp3dENsYWltcztcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG5cbi8vIEhlbHBlcnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIFJTQSBjZXJ0cyB0byBQRU0gKGZyb20gandrcy1yc2EpXG5mdW5jdGlvbiByc2FQdWJsaWNLZXlUb1BFTShtb2R1bHVzQjY0LCBleHBvbmVudEI2NCkge1xuICBjb25zdCBtb2R1bHVzID0gbmV3IEJ1ZmZlcihtb2R1bHVzQjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGV4cG9uZW50ID0gbmV3IEJ1ZmZlcihleHBvbmVudEI2NCwgJ2Jhc2U2NCcpO1xuICBjb25zdCBtb2R1bHVzSGV4ID0gcHJlcGFkU2lnbmVkKG1vZHVsdXMudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgZXhwb25lbnRIZXggPSBwcmVwYWRTaWduZWQoZXhwb25lbnQudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgbW9kbGVuID0gbW9kdWx1c0hleC5sZW5ndGggLyAyO1xuICBjb25zdCBleHBsZW4gPSBleHBvbmVudEhleC5sZW5ndGggLyAyO1xuXG4gIGNvbnN0IGVuY29kZWRNb2RsZW4gPSBlbmNvZGVMZW5ndGhIZXgobW9kbGVuKTtcbiAgY29uc3QgZW5jb2RlZEV4cGxlbiA9IGVuY29kZUxlbmd0aEhleChleHBsZW4pO1xuICBjb25zdCBlbmNvZGVkUHVia2V5ID1cbiAgICAnMzAnICtcbiAgICBlbmNvZGVMZW5ndGhIZXgobW9kbGVuICsgZXhwbGVuICsgZW5jb2RlZE1vZGxlbi5sZW5ndGggLyAyICsgZW5jb2RlZEV4cGxlbi5sZW5ndGggLyAyICsgMikgK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRNb2RsZW4gK1xuICAgIG1vZHVsdXNIZXggK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRFeHBsZW4gK1xuICAgIGV4cG9uZW50SGV4O1xuXG4gIGNvbnN0IGRlciA9IG5ldyBCdWZmZXIoZW5jb2RlZFB1YmtleSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgcGVtID0gJy0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcbic7XG4gIHBlbSArPSBgJHtkZXIubWF0Y2goLy57MSw2NH0vZykuam9pbignXFxuJyl9YDtcbiAgcGVtICs9ICdcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcmV0dXJuIHBlbTtcbn1cblxuZnVuY3Rpb24gcHJlcGFkU2lnbmVkKGhleFN0cikge1xuICBjb25zdCBtc2IgPSBoZXhTdHJbMF07XG4gIGlmIChtc2IgPCAnMCcgfHwgbXNiID4gJzcnKSB7XG4gICAgcmV0dXJuIGAwMCR7aGV4U3RyfWA7XG4gIH1cbiAgcmV0dXJuIGhleFN0cjtcbn1cblxuZnVuY3Rpb24gdG9IZXgobnVtYmVyKSB7XG4gIGNvbnN0IG5zdHIgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuICBpZiAobnN0ci5sZW5ndGggJSAyKSB7XG4gICAgcmV0dXJuIGAwJHtuc3RyfWA7XG4gIH1cbiAgcmV0dXJuIG5zdHI7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUxlbmd0aEhleChuKSB7XG4gIGlmIChuIDw9IDEyNykge1xuICAgIHJldHVybiB0b0hleChuKTtcbiAgfVxuICBjb25zdCBuSGV4ID0gdG9IZXgobik7XG4gIGNvbnN0IGxlbmd0aE9mTGVuZ3RoQnl0ZSA9IDEyOCArIG5IZXgubGVuZ3RoIC8gMjtcbiAgcmV0dXJuIHRvSGV4KGxlbmd0aE9mTGVuZ3RoQnl0ZSkgKyBuSGV4O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUVaO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsTUFBTUUsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUVuQyxNQUFNRyxZQUFZLEdBQUcscUJBQXFCO0FBQzFDLE1BQU1DLGtCQUFrQixHQUFHLDZCQUE2QjtBQUV4RCxJQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFDOztBQUVkO0FBQ0EsU0FBU0MsbUJBQW1CLENBQUNDLEtBQUssRUFBRTtFQUNsQyxJQUFJRixLQUFLLENBQUNFLEtBQUssQ0FBQyxJQUFJRixLQUFLLENBQUNHLFNBQVMsR0FBRyxJQUFJQyxJ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
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJ2ZXJpZnlJZFRva2VuIiwiaWRfdG9rZW4iLCJ0b2tlbiIsImlkIiwiY2xpZW50SWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJhbGciLCJhbGdvcml0aG0iLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJqd3RDbGFpbXMiLCJnb29nbGVLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwiYXVkIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIiwibW9kdWx1c0I2NCIsImV4cG9uZW50QjY0IiwiQnVmZmVyIiwiZXhwb25lbnQiLCJtb2R1bHVzSGV4IiwicHJlcGFkU2lnbmVkIiwiZXhwb25lbnRIZXgiLCJtb2RsZW4iLCJsZW5ndGgiLCJleHBsZW4iLCJlbmNvZGVkTW9kbGVuIiwiZW5jb2RlTGVuZ3RoSGV4IiwiZW5jb2RlZEV4cGxlbiIsImVuY29kZWRQdWJrZXkiLCJkZXIiLCJwZW0iLCJqb2luIiwiaGV4U3RyIiwibXNiIiwidG9IZXgiLCJudW1iZXIiLCJuc3RyIiwibkhleCIsImxlbmd0aE9mTGVuZ3RoQnl0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2dvb2dsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgZ29vZ2xlIEFQSS5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBhdXRoVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IFRPS0VOX0lTU1VFUiA9ICdhY2NvdW50cy5nb29nbGUuY29tJztcbmNvbnN0IEhUVFBTX1RPS0VOX0lTU1VFUiA9ICdodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20nO1xuXG5sZXQgY2FjaGUgPSB7fTtcblxuLy8gUmV0cmlldmUgR29vZ2xlIFNpZ25pbiBLZXlzICh3aXRoIGNhY2hlIGNvbnRyb2wpXG5mdW5jdGlvbiBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKSB7XG4gIGlmIChjYWNoZVtrZXlJZF0gJiYgY2FjaGUuZXhwaXJlc0F0ID4gbmV3IERhdGUoKSkge1xuICAgIHJldHVybiBjYWNoZVtrZXlJZF07XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGh0dHBzXG4gICAgICAuZ2V0KGBodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjMvY2VydHNgLCByZXMgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICAgICAgZGF0YSArPSBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBrZXlzIH0gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHBlbXMgPSBrZXlzLnJlZHVjZShcbiAgICAgICAgICAgIChwZW1zLCB7IG46IG1vZHVsdXMsIGU6IGV4cG9zYW50LCBraWQgfSkgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwZW1zLCB7XG4gICAgICAgICAgICAgICAgW2tpZF06IHJzYVB1YmxpY0tleVRvUEVNKG1vZHVsdXMsIGV4cG9zYW50KSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSkge1xuICAgICAgICAgICAgdmFyIGV4cGlyZSA9IHJlcy5oZWFkZXJzWydjYWNoZS1jb250cm9sJ10ubWF0Y2goL21heC1hZ2U9KFswLTldKykvKTtcblxuICAgICAgICAgICAgaWYgKGV4cGlyZSkge1xuICAgICAgICAgICAgICBjYWNoZSA9IE9iamVjdC5hc3NpZ24oe30sIHBlbXMsIHtcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgTnVtYmVyKGV4cGlyZVsxXSkgKiAxMDAwKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZShwZW1zW2tleUlkXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCByZWplY3QpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5SWRUb2tlbih7IGlkX3Rva2VuOiB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCB9KSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGlkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGF1dGhVdGlscy5nZXRIZWFkZXJGcm9tVG9rZW4odG9rZW4pO1xuICBsZXQgand0Q2xhaW1zO1xuICBjb25zdCBnb29nbGVLZXkgPSBhd2FpdCBnZXRHb29nbGVLZXlCeUtleUlkKGtleUlkKTtcblxuICB0cnkge1xuICAgIGp3dENsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIGdvb2dsZUtleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke21lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLmlzcyAhPT0gVE9LRU5fSVNTVUVSICYmIGp3dENsYWltcy5pc3MgIT09IEhUVFBTX1RPS0VOX0lTU1VFUikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGlzc3VlZCBieSBjb3JyZWN0IHByb3ZpZGVyIC0gZXhwZWN0ZWQ6ICR7VE9LRU5fSVNTVUVSfSBvciAke0hUVFBTX1RPS0VOX0lTU1VFUn0gfCBmcm9tOiAke2p3dENsYWltcy5pc3N9YFxuICAgICk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLnN1YiAhPT0gaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGF1dGggZGF0YSBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gIH1cblxuICBpZiAoY2xpZW50SWQgJiYgand0Q2xhaW1zLmF1ZCAhPT0gY2xpZW50SWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBhdXRob3JpemVkIGZvciB0aGlzIGNsaWVudElkLmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGp3dENsYWltcztcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG5cbi8vIEhlbHBlcnMgZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIFJTQSBjZXJ0cyB0byBQRU0gKGZyb20gandrcy1yc2EpXG5mdW5jdGlvbiByc2FQdWJsaWNLZXlUb1BFTShtb2R1bHVzQjY0LCBleHBvbmVudEI2NCkge1xuICBjb25zdCBtb2R1bHVzID0gbmV3IEJ1ZmZlcihtb2R1bHVzQjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGV4cG9uZW50ID0gbmV3IEJ1ZmZlcihleHBvbmVudEI2NCwgJ2Jhc2U2NCcpO1xuICBjb25zdCBtb2R1bHVzSGV4ID0gcHJlcGFkU2lnbmVkKG1vZHVsdXMudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgZXhwb25lbnRIZXggPSBwcmVwYWRTaWduZWQoZXhwb25lbnQudG9TdHJpbmcoJ2hleCcpKTtcbiAgY29uc3QgbW9kbGVuID0gbW9kdWx1c0hleC5sZW5ndGggLyAyO1xuICBjb25zdCBleHBsZW4gPSBleHBvbmVudEhleC5sZW5ndGggLyAyO1xuXG4gIGNvbnN0IGVuY29kZWRNb2RsZW4gPSBlbmNvZGVMZW5ndGhIZXgobW9kbGVuKTtcbiAgY29uc3QgZW5jb2RlZEV4cGxlbiA9IGVuY29kZUxlbmd0aEhleChleHBsZW4pO1xuICBjb25zdCBlbmNvZGVkUHVia2V5ID1cbiAgICAnMzAnICtcbiAgICBlbmNvZGVMZW5ndGhIZXgobW9kbGVuICsgZXhwbGVuICsgZW5jb2RlZE1vZGxlbi5sZW5ndGggLyAyICsgZW5jb2RlZEV4cGxlbi5sZW5ndGggLyAyICsgMikgK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRNb2RsZW4gK1xuICAgIG1vZHVsdXNIZXggK1xuICAgICcwMicgK1xuICAgIGVuY29kZWRFeHBsZW4gK1xuICAgIGV4cG9uZW50SGV4O1xuXG4gIGNvbnN0IGRlciA9IG5ldyBCdWZmZXIoZW5jb2RlZFB1YmtleSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICBsZXQgcGVtID0gJy0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcbic7XG4gIHBlbSArPSBgJHtkZXIubWF0Y2goLy57MSw2NH0vZykuam9pbignXFxuJyl9YDtcbiAgcGVtICs9ICdcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcmV0dXJuIHBlbTtcbn1cblxuZnVuY3Rpb24gcHJlcGFkU2lnbmVkKGhleFN0cikge1xuICBjb25zdCBtc2IgPSBoZXhTdHJbMF07XG4gIGlmIChtc2IgPCAnMCcgfHwgbXNiID4gJzcnKSB7XG4gICAgcmV0dXJuIGAwMCR7aGV4U3RyfWA7XG4gIH1cbiAgcmV0dXJuIGhleFN0cjtcbn1cblxuZnVuY3Rpb24gdG9IZXgobnVtYmVyKSB7XG4gIGNvbnN0IG5zdHIgPSBudW1iZXIudG9TdHJpbmcoMTYpO1xuICBpZiAobnN0ci5sZW5ndGggJSAyKSB7XG4gICAgcmV0dXJuIGAwJHtuc3RyfWA7XG4gIH1cbiAgcmV0dXJuIG5zdHI7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUxlbmd0aEhleChuKSB7XG4gIGlmIChuIDw9IDEyNykge1xuICAgIHJldHVybiB0b0hleChuKTtcbiAgfVxuICBjb25zdCBuSGV4ID0gdG9IZXgobik7XG4gIGNvbnN0IGxlbmd0aE9mTGVuZ3RoQnl0ZSA9IDEyOCArIG5IZXgubGVuZ3RoIC8gMjtcbiAgcmV0dXJuIHRvSGV4KGxlbmd0aE9mTGVuZ3RoQnl0ZSkgKyBuSGV4O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUVaO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFFdkMsTUFBTUUsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNuQyxNQUFNRyxTQUFTLEdBQUdILE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFFcEMsTUFBTUksWUFBWSxHQUFHLHFCQUFxQjtBQUMxQyxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBNkI7QUFFeEQsSUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs7QUFFZDtBQUNBLFNBQVNDLG1CQUFtQixDQUFDQyxLQUFLLEVBQUU7RUFDbEMsSUFBSUYsS0FBSyxDQUFDRSxLQUFLLENBQUMsSUFBSUYsS0FBSyxDQUFDRyxTQUFTLEdBQUcsSUFBSUMsSUFBSSxFQUFFLEVBQUU7SUFDaEQsT0FBT0osS0FBSyxDQUFDRSxLQUFLLENBQUM7RUFDckI7RUFFQSxPQUFPLElBQUlHLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztJQUN0Q1osS0FBSyxDQUNGYSxHQUFHLENBQUUsNENBQTJDLEVBQUVDLEdBQUcsSUFBSTtNQUN4RCxJQUFJQyxJQUFJLEdBQUcsRUFBRTtNQUNiRCxHQUFHLENBQUNFLEVBQUUsQ0FB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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const jwt = require('jsonwebtoken');
|
|
4
|
+
const Parse = require('parse/node').Parse;
|
|
5
|
+
const getHeaderFromToken = token => {
|
|
6
|
+
const decodedToken = jwt.decode(token, {
|
|
7
|
+
complete: true
|
|
8
|
+
});
|
|
9
|
+
if (!decodedToken) {
|
|
10
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
11
|
+
}
|
|
12
|
+
return decodedToken.header;
|
|
13
|
+
};
|
|
14
|
+
module.exports = {
|
|
15
|
+
getHeaderFromToken
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqd3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaGVhZGVyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBnZXRIZWFkZXJGcm9tVG9rZW4gPSB0b2tlbiA9PiB7XG4gIGNvbnN0IGRlY29kZWRUb2tlbiA9IGp3dC5kZWNvZGUodG9rZW4sIHsgY29tcGxldGU6IHRydWUgfSk7XG4gIGlmICghZGVjb2RlZFRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBwcm92aWRlZCB0b2tlbiBkb2VzIG5vdCBkZWNvZGUgYXMgSldUYCk7XG4gIH1cblxuICByZXR1cm4gZGVjb2RlZFRva2VuLmhlYWRlcjtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0SGVhZGVyRnJvbVRva2VuLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxHQUFHLEdBQUdDLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDbkMsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNDLEtBQUs7QUFDekMsTUFBTUMsa0JBQWtCLEdBQUdDLEtBQUssSUFBSTtFQUNsQyxNQUFNQyxZQUFZLEdBQUdMLEdBQUcsQ0FBQ00sTUFBTSxDQUFDRixLQUFLLEVBQUU7SUFBRUcsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDO0VBQzFELElBQUksQ0FBQ0YsWUFBWSxFQUFFO0lBQ2pCLE1BQU0sSUFBSUgsS0FBSyxDQUFDTSxLQUFLLENBQUNOLEtBQUssQ0FBQ00sS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRyx1Q0FBc0MsQ0FBQztFQUM5RjtFQUVBLE9BQU9KLFlBQVksQ0FBQ0ssTUFBTTtBQUM1QixDQUFDO0FBQ0RDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZUO0FBQ0YsQ0FBQyJ9
|