parse-server 8.0.1 → 8.0.2-alpha.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.
Files changed (37) hide show
  1. package/lib/Adapters/Auth/AuthAdapter.js +16 -9
  2. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  3. package/lib/Adapters/Auth/apple.js +45 -1
  4. package/lib/Adapters/Auth/facebook.js +61 -1
  5. package/lib/Adapters/Auth/gcenter.js +201 -157
  6. package/lib/Adapters/Auth/github.js +119 -31
  7. package/lib/Adapters/Auth/google.js +45 -1
  8. package/lib/Adapters/Auth/gpgames.js +120 -27
  9. package/lib/Adapters/Auth/index.js +33 -33
  10. package/lib/Adapters/Auth/instagram.js +114 -24
  11. package/lib/Adapters/Auth/janraincapture.js +45 -1
  12. package/lib/Adapters/Auth/janrainengage.js +11 -2
  13. package/lib/Adapters/Auth/keycloak.js +68 -35
  14. package/lib/Adapters/Auth/ldap.js +75 -1
  15. package/lib/Adapters/Auth/line.js +119 -32
  16. package/lib/Adapters/Auth/linkedin.js +111 -35
  17. package/lib/Adapters/Auth/meetup.js +16 -8
  18. package/lib/Adapters/Auth/mfa.js +80 -2
  19. package/lib/Adapters/Auth/microsoft.js +105 -30
  20. package/lib/Adapters/Auth/oauth2.js +96 -109
  21. package/lib/Adapters/Auth/phantauth.js +16 -8
  22. package/lib/Adapters/Auth/qq.js +107 -36
  23. package/lib/Adapters/Auth/spotify.js +108 -39
  24. package/lib/Adapters/Auth/twitter.js +187 -40
  25. package/lib/Adapters/Auth/vkontakte.js +20 -13
  26. package/lib/Adapters/Auth/wechat.js +105 -25
  27. package/lib/Adapters/Auth/weibo.js +135 -37
  28. package/lib/Auth.js +26 -17
  29. package/lib/Config.js +14 -1
  30. package/lib/Deprecator/Deprecations.js +5 -2
  31. package/lib/Options/Definitions.js +7 -1
  32. package/lib/Options/docs.js +2 -1
  33. package/lib/Options/index.js +1 -1
  34. package/lib/RestWrite.js +4 -5
  35. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +10 -1
  36. package/lib/cli/parse-server.js +1 -1
  37. package/package.json +6 -6
@@ -1,36 +1,111 @@
1
1
  "use strict";
2
2
 
3
- // Helper functions for accessing the microsoft graph API.
4
- var Parse = require('parse/node').Parse;
5
- const httpsRequest = require('./httpsRequest');
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _BaseCodeAuthAdapter = _interopRequireDefault(require("./BaseCodeAuthAdapter"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Parse Server authentication adapter for Microsoft.
11
+ *
12
+ * @class MicrosoftAdapter
13
+ * @param {Object} options - The adapter configuration options.
14
+ * @param {string} options.clientId - Your Microsoft App Client ID. Required for secure authentication.
15
+ * @param {string} options.clientSecret - Your Microsoft App Client Secret. Required for secure authentication.
16
+ * @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
17
+ *
18
+ * @description
19
+ * ## Parse Server Configuration
20
+ * To configure Parse Server for Microsoft authentication, use the following structure:
21
+ * ### Secure Configuration
22
+ * ```json
23
+ * {
24
+ * "auth": {
25
+ * "microsoft": {
26
+ * "clientId": "your-client-id",
27
+ * "clientSecret": "your-client-secret"
28
+ * }
29
+ * }
30
+ * }
31
+ * ```
32
+ * ### Insecure Configuration (Not Recommended)
33
+ * ```json
34
+ * {
35
+ * "auth": {
36
+ * "microsoft": {
37
+ * "enableInsecureAuth": true
38
+ * }
39
+ * }
40
+ * }
41
+ * ```
42
+ *
43
+ * The adapter requires the following `authData` fields:
44
+ * - **Secure Authentication**: `code`, `redirect_uri`.
45
+ * - **Insecure Authentication (Not Recommended)**: `id`, `access_token`.
46
+ *
47
+ * ## Auth Payloads
48
+ * ### Secure Authentication Payload
49
+ * ```json
50
+ * {
51
+ * "microsoft": {
52
+ * "code": "lmn789opq012rst345uvw",
53
+ * "redirect_uri": "https://your-redirect-uri.com/callback"
54
+ * }
55
+ * }
56
+ * ```
57
+ * ### Insecure Authentication Payload (Not Recommended)
58
+ * ```json
59
+ * {
60
+ * "microsoft": {
61
+ * "id": "7654321",
62
+ * "access_token": "AQXNnd2hIT6z9bHFzZz2Kp1ghiMz_RtyuvwXYZ123abc"
63
+ * }
64
+ * }
65
+ * ```
66
+ *
67
+ * ## Notes
68
+ * - Secure authentication exchanges the `code` and `redirect_uri` provided by the client for an access token using Microsoft's OAuth API.
69
+ * - **Insecure authentication** validates the user ID and access token directly, bypassing OAuth flows (not recommended). This method is deprecated and may be removed in future versions.
70
+ *
71
+ * @see {@link https://docs.microsoft.com/en-us/graph/auth/auth-concepts Microsoft Authentication Documentation}
72
+ */
6
73
 
7
- // Returns a promise that fulfills if this user mail is valid.
8
- function validateAuthData(authData) {
9
- return request('me', authData.access_token).then(response => {
10
- if (response && response.id && response.id == authData.id) {
11
- return;
74
+ class MicrosoftAdapter extends _BaseCodeAuthAdapter.default {
75
+ constructor() {
76
+ super('Microsoft');
77
+ }
78
+ async getUserFromAccessToken(access_token) {
79
+ const userResponse = await fetch('https://graph.microsoft.com/v1.0/me', {
80
+ headers: {
81
+ Authorization: 'Bearer ' + access_token
82
+ }
83
+ });
84
+ if (!userResponse.ok) {
85
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Microsoft API request failed.');
12
86
  }
13
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Microsoft Graph auth is invalid for this user.');
14
- });
15
- }
16
-
17
- // Returns a promise that fulfills if this app id is valid.
18
- function validateAppId() {
19
- return Promise.resolve();
20
- }
21
-
22
- // A promisey wrapper for api requests
23
- function request(path, access_token) {
24
- return httpsRequest.get({
25
- host: 'graph.microsoft.com',
26
- path: '/v1.0/' + path,
27
- headers: {
28
- Authorization: 'Bearer ' + access_token
87
+ return userResponse.json();
88
+ }
89
+ async getAccessTokenFromCode(authData) {
90
+ const response = await fetch('https://login.microsoftonline.com/common/oauth2/v2.0/token', {
91
+ method: 'POST',
92
+ headers: {
93
+ 'Content-Type': 'application/x-www-form-urlencoded'
94
+ },
95
+ body: new URLSearchParams({
96
+ client_id: this.clientId,
97
+ client_secret: this.clientSecret,
98
+ grant_type: 'authorization_code',
99
+ redirect_uri: authData.redirect_uri,
100
+ code: authData.code
101
+ })
102
+ });
103
+ if (!response.ok) {
104
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Microsoft API request failed.');
29
105
  }
30
- });
106
+ const json = await response.json();
107
+ return json.access_token;
108
+ }
31
109
  }
32
- module.exports = {
33
- validateAppId: validateAppId,
34
- validateAuthData: validateAuthData
35
- };
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsInJlc3BvbnNlIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwiZ2V0IiwiaG9zdCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL21pY3Jvc29mdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIG1pY3Jvc29mdCBncmFwaCBBUEkuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBtYWlsIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICByZXR1cm4gcmVxdWVzdCgnbWUnLCBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5pZCAmJiByZXNwb25zZS5pZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ01pY3Jvc29mdCBHcmFwaCBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KHBhdGgsIGFjY2Vzc190b2tlbikge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCh7XG4gICAgaG9zdDogJ2dyYXBoLm1pY3Jvc29mdC5jb20nLFxuICAgIHBhdGg6ICcvdjEuMC8nICsgcGF0aCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgfSxcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3ZDLE1BQU1FLFlBQVksR0FBR0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUU5QztBQUNBLFNBQVNFLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFO0VBQ2xDLE9BQU9DLE9BQU8sQ0FBQyxJQUFJLEVBQUVELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxJQUFJO0lBQzNELElBQUlBLFFBQVEsSUFBSUEsUUFBUSxDQUFDQyxFQUFFLElBQUlELFFBQVEsQ0FBQ0MsRUFBRSxJQUFJTCxRQUFRLENBQUNLLEVBQUUsRUFBRTtNQUN6RDtJQUNGO0lBQ0EsTUFBTSxJQUFJVCxLQUFLLENBQUNVLEtBQUssQ0FDbkJWLEtBQUssQ0FBQ1UsS0FBSyxDQUFDQyxnQkFBZ0IsRUFDNUIsZ0RBQ0YsQ0FBQztFQUNILENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0EsU0FBU0MsYUFBYUEsQ0FBQSxFQUFHO0VBQ3ZCLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7QUFDMUI7O0FBRUE7QUFDQSxTQUFTVCxPQUFPQSxDQUFDVSxJQUFJLEVBQUVULFlBQVksRUFBRTtFQUNuQyxPQUFPSixZQUFZLENBQUNjLEdBQUcsQ0FBQztJQUN0QkMsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQkYsSUFBSSxFQUFFLFFBQVEsR0FBR0EsSUFBSTtJQUNyQkcsT0FBTyxFQUFFO01BQ1BDLGFBQWEsRUFBRSxTQUFTLEdBQUdiO0lBQzdCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQWMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlQsYUFBYSxFQUFFQSxhQUFhO0VBQzVCVCxnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
110
+ var _default = exports.default = new MicrosoftAdapter();
111
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTWljcm9zb2Z0QWRhcHRlciIsIkJhc2VBdXRoQ29kZUFkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsImdldFVzZXJGcm9tQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJ1c2VyUmVzcG9uc2UiLCJmZXRjaCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwib2siLCJQYXJzZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsImpzb24iLCJnZXRBY2Nlc3NUb2tlbkZyb21Db2RlIiwiYXV0aERhdGEiLCJyZXNwb25zZSIsIm1ldGhvZCIsImJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJjbGllbnRfaWQiLCJjbGllbnRJZCIsImNsaWVudF9zZWNyZXQiLCJjbGllbnRTZWNyZXQiLCJncmFudF90eXBlIiwicmVkaXJlY3RfdXJpIiwiY29kZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL21pY3Jvc29mdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlIFNlcnZlciBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGZvciBNaWNyb3NvZnQuXG4gKlxuICogQGNsYXNzIE1pY3Jvc29mdEFkYXB0ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50SWQgLSBZb3VyIE1pY3Jvc29mdCBBcHAgQ2xpZW50IElELiBSZXF1aXJlZCBmb3Igc2VjdXJlIGF1dGhlbnRpY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50U2VjcmV0IC0gWW91ciBNaWNyb3NvZnQgQXBwIENsaWVudCBTZWNyZXQuIFJlcXVpcmVkIGZvciBzZWN1cmUgYXV0aGVudGljYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZUluc2VjdXJlQXV0aD1mYWxzZV0gLSAqKltERVBSRUNBVEVEXSoqIEVuYWJsZSBpbnNlY3VyZSBhdXRoZW50aWNhdGlvbiAobm90IHJlY29tbWVuZGVkKS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICMjIFBhcnNlIFNlcnZlciBDb25maWd1cmF0aW9uXG4gKiBUbyBjb25maWd1cmUgUGFyc2UgU2VydmVyIGZvciBNaWNyb3NvZnQgYXV0aGVudGljYXRpb24sIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAqICMjIyBTZWN1cmUgQ29uZmlndXJhdGlvblxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwibWljcm9zb2Z0XCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiLFxuICogICAgICAgXCJjbGllbnRTZWNyZXRcIjogXCJ5b3VyLWNsaWVudC1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwibWljcm9zb2Z0XCI6IHtcbiAqICAgICAgIFwiZW5hYmxlSW5zZWN1cmVBdXRoXCI6IHRydWVcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtICoqU2VjdXJlIEF1dGhlbnRpY2F0aW9uKio6IGBjb2RlYCwgYHJlZGlyZWN0X3VyaWAuXG4gKiAtICoqSW5zZWN1cmUgQXV0aGVudGljYXRpb24gKE5vdCBSZWNvbW1lbmRlZCkqKjogYGlkYCwgYGFjY2Vzc190b2tlbmAuXG4gKlxuICogIyMgQXV0aCBQYXlsb2Fkc1xuICogIyMjIFNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwibWljcm9zb2Z0XCI6IHtcbiAqICAgICBcImNvZGVcIjogXCJsbW43ODlvcHEwMTJyc3QzNDV1dndcIixcbiAqICAgICBcInJlZGlyZWN0X3VyaVwiOiBcImh0dHBzOi8veW91ci1yZWRpcmVjdC11cmkuY29tL2NhbGxiYWNrXCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQXV0aGVudGljYXRpb24gUGF5bG9hZCAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcIm1pY3Jvc29mdFwiOiB7XG4gKiAgICAgXCJpZFwiOiBcIjc2NTQzMjFcIixcbiAqICAgICBcImFjY2Vzc190b2tlblwiOiBcIkFRWE5uZDJoSVQ2ejliSEZ6WnoyS3AxZ2hpTXpfUnR5dXZ3WFlaMTIzYWJjXCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogIyMgTm90ZXNcbiAqIC0gU2VjdXJlIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlcyB0aGUgYGNvZGVgIGFuZCBgcmVkaXJlY3RfdXJpYCBwcm92aWRlZCBieSB0aGUgY2xpZW50IGZvciBhbiBhY2Nlc3MgdG9rZW4gdXNpbmcgTWljcm9zb2Z0J3MgT0F1dGggQVBJLlxuICogLSAqKkluc2VjdXJlIGF1dGhlbnRpY2F0aW9uKiogdmFsaWRhdGVzIHRoZSB1c2VyIElEIGFuZCBhY2Nlc3MgdG9rZW4gZGlyZWN0bHksIGJ5cGFzc2luZyBPQXV0aCBmbG93cyAobm90IHJlY29tbWVuZGVkKS4gVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2dyYXBoL2F1dGgvYXV0aC1jb25jZXB0cyBNaWNyb3NvZnQgQXV0aGVudGljYXRpb24gRG9jdW1lbnRhdGlvbn1cbiAqL1xuXG5pbXBvcnQgQmFzZUF1dGhDb2RlQWRhcHRlciBmcm9tICcuL0Jhc2VDb2RlQXV0aEFkYXB0ZXInO1xuY2xhc3MgTWljcm9zb2Z0QWRhcHRlciBleHRlbmRzIEJhc2VBdXRoQ29kZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignTWljcm9zb2Z0Jyk7XG4gIH1cbiAgYXN5bmMgZ2V0VXNlckZyb21BY2Nlc3NUb2tlbihhY2Nlc3NfdG9rZW4pIHtcbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YxLjAvbWUnLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGFjY2Vzc190b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXJSZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdNaWNyb3NvZnQgQVBJIHJlcXVlc3QgZmFpbGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Gcm9tQ29kZShhdXRoRGF0YSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vb2F1dGgyL3YyLjAvdG9rZW4nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiBhdXRoRGF0YS5yZWRpcmVjdF91cmksXG4gICAgICAgIGNvZGU6IGF1dGhEYXRhLmNvZGUsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnTWljcm9zb2Z0IEFQSSByZXF1ZXN0IGZhaWxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBqc29uLmFjY2Vzc190b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTWljcm9zb2Z0QWRhcHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFpRUEsSUFBQUEsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3RCxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWpFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0EsTUFBTUcsZ0JBQWdCLFNBQVNDLDRCQUFtQixDQUFDO0VBQ2pEQyxXQUFXQSxDQUFBLEVBQUc7SUFDWixLQUFLLENBQUMsV0FBVyxDQUFDO0VBQ3BCO0VBQ0EsTUFBTUMsc0JBQXNCQSxDQUFDQyxZQUFZLEVBQUU7SUFDekMsTUFBTUMsWUFBWSxHQUFHLE1BQU1DLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRTtNQUN0RUMsT0FBTyxFQUFFO1FBQ1BDLGFBQWEsRUFBRSxTQUFTLEdBQUdKO01BQzdCO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDQyxZQUFZLENBQUNJLEVBQUUsRUFBRTtNQUNwQixNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsK0JBQStCLENBQUM7SUFDdEY7SUFFQSxPQUFPUCxZQUFZLENBQUNRLElBQUksQ0FBQyxDQUFDO0VBQzVCO0VBRUEsTUFBTUMsc0JBQXNCQSxDQUFDQyxRQUFRLEVBQUU7SUFDckMsTUFBTUMsUUFBUSxHQUFHLE1BQU1WLEtBQUssQ0FBQyw0REFBNEQsRUFBRTtNQUN6RlcsTUFBTSxFQUFFLE1BQU07TUFDZFYsT0FBTyxFQUFFO1FBQ1AsY0FBYyxFQUFFO01BQ2xCLENBQUM7TUFDRFcsSUFBSSxFQUFFLElBQUlDLGVBQWUsQ0FBQztRQUN4QkMsU0FBUyxFQUFFLElBQUksQ0FBQ0MsUUFBUTtRQUN4QkMsYUFBYSxFQUFFLElBQUksQ0FBQ0MsWUFBWTtRQUNoQ0MsVUFBVSxFQUFFLG9CQUFvQjtRQUNoQ0MsWUFBWSxFQUFFVixRQUFRLENBQUNVLFlBQVk7UUFDbkNDLElBQUksRUFBRVgsUUFBUSxDQUFDVztNQUNqQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDVixRQUFRLENBQUNQLEVBQUUsRUFBRTtNQUNoQixNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsK0JBQStCLENBQUM7SUFDdEY7SUFFQSxNQUFNQyxJQUFJLEdBQUcsTUFBTUcsUUFBUSxDQUFDSCxJQUFJLENBQUMsQ0FBQztJQUNsQyxPQUFPQSxJQUFJLENBQUNULFlBQVk7RUFDMUI7QUFDRjtBQUFDLElBQUF1QixRQUFBLEdBQUFDLE9BQUEsQ0FBQTdCLE9BQUEsR0FFYyxJQUFJQyxnQkFBZ0IsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,128 +1,115 @@
1
1
  "use strict";
2
2
 
3
- /*
4
- * This auth adapter is based on the OAuth 2.0 Token Introspection specification.
5
- * See RFC 7662 for details (https://tools.ietf.org/html/rfc7662).
6
- * It's purpose is to validate OAuth2 access tokens using the OAuth2 provider's
7
- * token introspection endpoint (if implemented by the provider).
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _AuthAdapter = _interopRequireDefault(require("./AuthAdapter"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Parse Server authentication adapter for OAuth2 Token Introspection.
8
11
  *
9
- * The adapter accepts the following config parameters:
12
+ * @class OAuth2Adapter
13
+ * @param {Object} options - The adapter configuration options.
14
+ * @param {string} options.tokenIntrospectionEndpointUrl - The URL of the token introspection endpoint. Required.
15
+ * @param {boolean} options.oauth2 - Indicates that the request should be handled by the OAuth2 adapter. Required.
16
+ * @param {string} [options.useridField] - The field in the introspection response that contains the user ID. Optional.
17
+ * @param {string} [options.appidField] - The field in the introspection response that contains the app ID. Optional.
18
+ * @param {string[]} [options.appIds] - List of allowed app IDs. Required if `appidField` is defined.
19
+ * @param {string} [options.authorizationHeader] - The Authorization header value for the introspection request. Optional.
10
20
  *
11
- * 1. "tokenIntrospectionEndpointUrl" (string, required)
12
- * The URL of the token introspection endpoint of the OAuth2 provider that
13
- * issued the access token to the client that is to be validated.
14
- *
15
- * 2. "useridField" (string, optional)
16
- * The name of the field in the token introspection response that contains
17
- * the userid. If specified, it will be used to verify the value of the "id"
18
- * field in the "authData" JSON that is coming from the client.
19
- * This can be the "aud" (i.e. audience), the "sub" (i.e. subject) or the
20
- * "username" field in the introspection response, but since only the
21
- * "active" field is required and all other reponse fields are optional
22
- * in the RFC, it has to be optional in this adapter as well.
23
- * Default: - (undefined)
24
- *
25
- * 3. "appidField" (string, optional)
26
- * The name of the field in the token introspection response that contains
27
- * the appId of the client. If specified, it will be used to verify it's
28
- * value against the set of appIds in the adapter config. The concept of
29
- * appIds comes from the two major social login providers
30
- * (Google and Facebook). They have not yet implemented the token
31
- * introspection endpoint, but the concept can be valid for any OAuth2
32
- * provider.
33
- * Default: - (undefined)
34
- *
35
- * 4. "appIds" (array of strings, required if appidField is defined)
36
- * A set of appIds that are used to restrict accepted access tokens based
37
- * on a specific field's value in the token introspection response.
38
- * Default: - (undefined)
39
- *
40
- * 5. "authorizationHeader" (string, optional)
41
- * The value of the "Authorization" HTTP header in requests sent to the
42
- * introspection endpoint. It must contain the raw value.
43
- * Thus if HTTP Basic authorization is to be used, it must contain the
44
- * "Basic" string, followed by whitespace, then by the base64 encoded
45
- * version of the concatenated <username> + ":" + <password> string.
46
- * Eg. "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
21
+ * @description
22
+ * ## Parse Server Configuration
23
+ * To configure Parse Server for OAuth2 Token Introspection, use the following structure:
24
+ * ```json
25
+ * {
26
+ * "auth": {
27
+ * "oauth2Provider": {
28
+ * "tokenIntrospectionEndpointUrl": "https://provider.com/introspect",
29
+ * "useridField": "sub",
30
+ * "appidField": "aud",
31
+ * "appIds": ["my-app-id"],
32
+ * "authorizationHeader": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=",
33
+ * "oauth2": true
34
+ * }
35
+ * }
36
+ * }
37
+ * ```
47
38
  *
48
- * The adapter expects requests with the following authData JSON:
39
+ * The adapter requires the following `authData` fields:
40
+ * - `id`: The user ID provided by the client.
41
+ * - `access_token`: The access token provided by the client.
49
42
  *
43
+ * ## Auth Payload
44
+ * ### Example Auth Payload
45
+ * ```json
50
46
  * {
51
- * "someadapter": {
52
- * "id": "user's OAuth2 provider-specific id as a string",
53
- * "access_token": "an authorized OAuth2 access token for the user",
47
+ * "oauth2": {
48
+ * "id": "user-id",
49
+ * "access_token": "access-token"
54
50
  * }
55
51
  * }
52
+ * ```
53
+ *
54
+ * ## Notes
55
+ * - `tokenIntrospectionEndpointUrl` is mandatory and should point to a valid OAuth2 provider's introspection endpoint.
56
+ * - If `appidField` is defined, `appIds` must also be specified to validate the app ID in the introspection response.
57
+ * - `authorizationHeader` can be used to authenticate requests to the token introspection endpoint.
58
+ *
59
+ * @see {@link https://datatracker.ietf.org/doc/html/rfc7662 OAuth 2.0 Token Introspection Specification}
56
60
  */
57
61
 
58
- const Parse = require('parse/node').Parse;
59
- const querystring = require('querystring');
60
- const httpsRequest = require('./httpsRequest');
61
- const INVALID_ACCESS = 'OAuth2 access token is invalid for this user.';
62
- const INVALID_ACCESS_APPID = "OAuth2: the access_token's appID is empty or is not in the list of permitted appIDs in the auth configuration.";
63
- const MISSING_APPIDS = 'OAuth2 configuration is missing the client app IDs ("appIds" config parameter).';
64
- const MISSING_URL = 'OAuth2 token introspection endpoint URL is missing from configuration!';
65
-
66
- // Returns a promise that fulfills if this user id is valid.
67
- function validateAuthData(authData, options) {
68
- return requestTokenInfo(options, authData.access_token).then(response => {
69
- if (!response || !response.active || options.useridField && authData.id !== response[options.useridField]) {
70
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, INVALID_ACCESS);
62
+ class OAuth2Adapter extends _AuthAdapter.default {
63
+ validateOptions(options) {
64
+ super.validateOptions(options);
65
+ if (!options.tokenIntrospectionEndpointUrl) {
66
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'OAuth2 token introspection endpoint URL is missing.');
71
67
  }
72
- });
73
- }
74
- function validateAppId(appIds, authData, options) {
75
- if (!options || !options.appidField) {
76
- return Promise.resolve();
77
- }
78
- if (!appIds || appIds.length === 0) {
79
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, MISSING_APPIDS);
68
+ if (options.appidField && !options.appIds?.length) {
69
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'OAuth2 configuration is missing app IDs.');
70
+ }
71
+ this.tokenIntrospectionEndpointUrl = options.tokenIntrospectionEndpointUrl;
72
+ this.useridField = options.useridField;
73
+ this.appidField = options.appidField;
74
+ this.appIds = options.appIds;
75
+ this.authorizationHeader = options.authorizationHeader;
80
76
  }
81
- return requestTokenInfo(options, authData.access_token).then(response => {
82
- if (!response || !response.active) {
83
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, INVALID_ACCESS);
77
+ async validateAppId(authData) {
78
+ if (!this.appidField) {
79
+ return;
84
80
  }
85
- const appidField = options.appidField;
86
- if (!response[appidField]) {
87
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, INVALID_ACCESS_APPID);
81
+ const response = await this.requestTokenInfo(authData.access_token);
82
+ const appIdFieldValue = response[this.appidField];
83
+ const isValidAppId = Array.isArray(appIdFieldValue) ? appIdFieldValue.some(appId => this.appIds.includes(appId)) : this.appIds.includes(appIdFieldValue);
84
+ if (!isValidAppId) {
85
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'OAuth2: Invalid app ID.');
88
86
  }
89
- const responseValue = response[appidField];
90
- if (!Array.isArray(responseValue) && appIds.includes(responseValue)) {
91
- return;
92
- } else if (Array.isArray(responseValue) && responseValue.some(appId => appIds.includes(appId))) {
93
- return;
94
- } else {
95
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, INVALID_ACCESS_APPID);
87
+ }
88
+ async validateAuthData(authData) {
89
+ const response = await this.requestTokenInfo(authData.access_token);
90
+ if (!response.active || this.useridField && authData.id !== response[this.useridField]) {
91
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'OAuth2 access token is invalid for this user.');
96
92
  }
97
- });
98
- }
99
-
100
- // A promise wrapper for requests to the OAuth2 token introspection endpoint.
101
- function requestTokenInfo(options, access_token) {
102
- if (!options || !options.tokenIntrospectionEndpointUrl) {
103
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, MISSING_URL);
93
+ return {};
104
94
  }
105
- const parsedUrl = new URL(options.tokenIntrospectionEndpointUrl);
106
- const postData = querystring.stringify({
107
- token: access_token
108
- });
109
- const headers = {
110
- 'Content-Type': 'application/x-www-form-urlencoded',
111
- 'Content-Length': Buffer.byteLength(postData)
112
- };
113
- if (options.authorizationHeader) {
114
- headers['Authorization'] = options.authorizationHeader;
95
+ async requestTokenInfo(accessToken) {
96
+ const response = await fetch(this.tokenIntrospectionEndpointUrl, {
97
+ method: 'POST',
98
+ headers: {
99
+ 'Content-Type': 'application/x-www-form-urlencoded',
100
+ ...(this.authorizationHeader && {
101
+ Authorization: this.authorizationHeader
102
+ })
103
+ },
104
+ body: new URLSearchParams({
105
+ token: accessToken
106
+ })
107
+ });
108
+ if (!response.ok) {
109
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'OAuth2 token introspection request failed.');
110
+ }
111
+ return response.json();
115
112
  }
116
- const postOptions = {
117
- hostname: parsedUrl.hostname,
118
- path: parsedUrl.pathname,
119
- method: 'POST',
120
- headers: headers
121
- };
122
- return httpsRequest.request(postOptions, postData);
123
113
  }
124
- module.exports = {
125
- validateAppId: validateAppId,
126
- validateAuthData: validateAuthData
127
- };
128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJxdWVyeXN0cmluZyIsImh0dHBzUmVxdWVzdCIsIklOVkFMSURfQUNDRVNTIiwiSU5WQUxJRF9BQ0NFU1NfQVBQSUQiLCJNSVNTSU5HX0FQUElEUyIsIk1JU1NJTkdfVVJMIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsInJlcXVlc3RUb2tlbkluZm8iLCJhY2Nlc3NfdG9rZW4iLCJ0aGVuIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJ1c2VyaWRGaWVsZCIsImlkIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVBcHBJZCIsImFwcElkcyIsImFwcGlkRmllbGQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImxlbmd0aCIsInJlc3BvbnNlVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsInNvbWUiLCJhcHBJZCIsInRva2VuSW50cm9zcGVjdGlvbkVuZHBvaW50VXJsIiwicGFyc2VkVXJsIiwiVVJMIiwicG9zdERhdGEiLCJzdHJpbmdpZnkiLCJ0b2tlbiIsImhlYWRlcnMiLCJCdWZmZXIiLCJieXRlTGVuZ3RoIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsInBvc3RPcHRpb25zIiwiaG9zdG5hbWUiLCJwYXRoIiwicGF0aG5hbWUiLCJtZXRob2QiLCJyZXF1ZXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL29hdXRoMi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogVGhpcyBhdXRoIGFkYXB0ZXIgaXMgYmFzZWQgb24gdGhlIE9BdXRoIDIuMCBUb2tlbiBJbnRyb3NwZWN0aW9uIHNwZWNpZmljYXRpb24uXG4gKiBTZWUgUkZDIDc2NjIgZm9yIGRldGFpbHMgKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjYyKS5cbiAqIEl0J3MgcHVycG9zZSBpcyB0byB2YWxpZGF0ZSBPQXV0aDIgYWNjZXNzIHRva2VucyB1c2luZyB0aGUgT0F1dGgyIHByb3ZpZGVyJ3NcbiAqIHRva2VuIGludHJvc3BlY3Rpb24gZW5kcG9pbnQgKGlmIGltcGxlbWVudGVkIGJ5IHRoZSBwcm92aWRlcikuXG4gKlxuICogVGhlIGFkYXB0ZXIgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNvbmZpZyBwYXJhbWV0ZXJzOlxuICpcbiAqIDEuIFwidG9rZW5JbnRyb3NwZWN0aW9uRW5kcG9pbnRVcmxcIiAoc3RyaW5nLCByZXF1aXJlZClcbiAqICAgICAgVGhlIFVSTCBvZiB0aGUgdG9rZW4gaW50cm9zcGVjdGlvbiBlbmRwb2ludCBvZiB0aGUgT0F1dGgyIHByb3ZpZGVyIHRoYXRcbiAqICAgICAgaXNzdWVkIHRoZSBhY2Nlc3MgdG9rZW4gdG8gdGhlIGNsaWVudCB0aGF0IGlzIHRvIGJlIHZhbGlkYXRlZC5cbiAqXG4gKiAyLiBcInVzZXJpZEZpZWxkXCIgKHN0cmluZywgb3B0aW9uYWwpXG4gKiAgICAgIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBpbiB0aGUgdG9rZW4gaW50cm9zcGVjdGlvbiByZXNwb25zZSB0aGF0IGNvbnRhaW5zXG4gKiAgICAgIHRoZSB1c2VyaWQuIElmIHNwZWNpZmllZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgdmFsdWUgb2YgdGhlIFwiaWRcIlxuICogICAgICBmaWVsZCBpbiB0aGUgXCJhdXRoRGF0YVwiIEpTT04gdGhhdCBpcyBjb21pbmcgZnJvbSB0aGUgY2xpZW50LlxuICogICAgICBUaGlzIGNhbiBiZSB0aGUgXCJhdWRcIiAoaS5lLiBhdWRpZW5jZSksIHRoZSBcInN1YlwiIChpLmUuIHN1YmplY3QpIG9yIHRoZVxuICogICAgICBcInVzZXJuYW1lXCIgZmllbGQgaW4gdGhlIGludHJvc3BlY3Rpb24gcmVzcG9uc2UsIGJ1dCBzaW5jZSBvbmx5IHRoZVxuICogICAgICBcImFjdGl2ZVwiIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBhbGwgb3RoZXIgcmVwb25zZSBmaWVsZHMgYXJlIG9wdGlvbmFsXG4gKiAgICAgIGluIHRoZSBSRkMsIGl0IGhhcyB0byBiZSBvcHRpb25hbCBpbiB0aGlzIGFkYXB0ZXIgYXMgd2VsbC5cbiAqICAgICAgRGVmYXVsdDogLSAodW5kZWZpbmVkKVxuICpcbiAqIDMuIFwiYXBwaWRGaWVsZFwiIChzdHJpbmcsIG9wdGlvbmFsKVxuICogICAgICBUaGUgbmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIHRva2VuIGludHJvc3BlY3Rpb24gcmVzcG9uc2UgdGhhdCBjb250YWluc1xuICogICAgICB0aGUgYXBwSWQgb2YgdGhlIGNsaWVudC4gSWYgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGl0J3NcbiAqICAgICAgdmFsdWUgYWdhaW5zdCB0aGUgc2V0IG9mIGFwcElkcyBpbiB0aGUgYWRhcHRlciBjb25maWcuIFRoZSBjb25jZXB0IG9mXG4gKiAgICAgIGFwcElkcyBjb21lcyBmcm9tIHRoZSB0d28gbWFqb3Igc29jaWFsIGxvZ2luIHByb3ZpZGVyc1xuICogICAgICAoR29vZ2xlIGFuZCBGYWNlYm9vaykuIFRoZXkgaGF2ZSBub3QgeWV0IGltcGxlbWVudGVkIHRoZSB0b2tlblxuICogICAgICBpbnRyb3NwZWN0aW9uIGVuZHBvaW50LCBidXQgdGhlIGNvbmNlcHQgY2FuIGJlIHZhbGlkIGZvciBhbnkgT0F1dGgyXG4gKiAgICAgIHByb3ZpZGVyLlxuICogICAgICBEZWZhdWx0OiAtICh1bmRlZmluZWQpXG4gKlxuICogNC4gXCJhcHBJZHNcIiAoYXJyYXkgb2Ygc3RyaW5ncywgcmVxdWlyZWQgaWYgYXBwaWRGaWVsZCBpcyBkZWZpbmVkKVxuICogICAgICBBIHNldCBvZiBhcHBJZHMgdGhhdCBhcmUgdXNlZCB0byByZXN0cmljdCBhY2NlcHRlZCBhY2Nlc3MgdG9rZW5zIGJhc2VkXG4gKiAgICAgIG9uIGEgc3BlY2lmaWMgZmllbGQncyB2YWx1ZSBpbiB0aGUgdG9rZW4gaW50cm9zcGVjdGlvbiByZXNwb25zZS5cbiAqICAgICAgRGVmYXVsdDogLSAodW5kZWZpbmVkKVxuICpcbiAqIDUuIFwiYXV0aG9yaXphdGlvbkhlYWRlclwiIChzdHJpbmcsIG9wdGlvbmFsKVxuICogICAgICBUaGUgdmFsdWUgb2YgdGhlIFwiQXV0aG9yaXphdGlvblwiIEhUVFAgaGVhZGVyIGluIHJlcXVlc3RzIHNlbnQgdG8gdGhlXG4gKiAgICAgIGludHJvc3BlY3Rpb24gZW5kcG9pbnQuIEl0IG11c3QgY29udGFpbiB0aGUgcmF3IHZhbHVlLlxuICogICAgICBUaHVzIGlmIEhUVFAgQmFzaWMgYXV0aG9yaXphdGlvbiBpcyB0byBiZSB1c2VkLCBpdCBtdXN0IGNvbnRhaW4gdGhlXG4gKiAgICAgIFwiQmFzaWNcIiBzdHJpbmcsIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UsIHRoZW4gYnkgdGhlIGJhc2U2NCBlbmNvZGVkXG4gKiAgICAgIHZlcnNpb24gb2YgdGhlIGNvbmNhdGVuYXRlZCA8dXNlcm5hbWU+ICsgXCI6XCIgKyA8cGFzc3dvcmQ+IHN0cmluZy5cbiAqICAgICAgRWcuIFwiQmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9XCJcbiAqXG4gKiBUaGUgYWRhcHRlciBleHBlY3RzIHJlcXVlc3RzIHdpdGggdGhlIGZvbGxvd2luZyBhdXRoRGF0YSBKU09OOlxuICpcbiAqIHtcbiAqICAgXCJzb21lYWRhcHRlclwiOiB7XG4gKiAgICAgXCJpZFwiOiBcInVzZXIncyBPQXV0aDIgcHJvdmlkZXItc3BlY2lmaWMgaWQgYXMgYSBzdHJpbmdcIixcbiAqICAgICBcImFjY2Vzc190b2tlblwiOiBcImFuIGF1dGhvcml6ZWQgT0F1dGgyIGFjY2VzcyB0b2tlbiBmb3IgdGhlIHVzZXJcIixcbiAqICAgfVxuICogfVxuICovXG5cbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuY29uc3QgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcblxuY29uc3QgSU5WQUxJRF9BQ0NFU1MgPSAnT0F1dGgyIGFjY2VzcyB0b2tlbiBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJztcbmNvbnN0IElOVkFMSURfQUNDRVNTX0FQUElEID1cbiAgXCJPQXV0aDI6IHRoZSBhY2Nlc3NfdG9rZW4ncyBhcHBJRCBpcyBlbXB0eSBvciBpcyBub3QgaW4gdGhlIGxpc3Qgb2YgcGVybWl0dGVkIGFwcElEcyBpbiB0aGUgYXV0aCBjb25maWd1cmF0aW9uLlwiO1xuY29uc3QgTUlTU0lOR19BUFBJRFMgPVxuICAnT0F1dGgyIGNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZyB0aGUgY2xpZW50IGFwcCBJRHMgKFwiYXBwSWRzXCIgY29uZmlnIHBhcmFtZXRlcikuJztcbmNvbnN0IE1JU1NJTkdfVVJMID0gJ09BdXRoMiB0b2tlbiBpbnRyb3NwZWN0aW9uIGVuZHBvaW50IFVSTCBpcyBtaXNzaW5nIGZyb20gY29uZmlndXJhdGlvbiEnO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHJlcXVlc3RUb2tlbkluZm8ob3B0aW9ucywgYXV0aERhdGEuYWNjZXNzX3Rva2VuKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBpZiAoXG4gICAgICAhcmVzcG9uc2UgfHxcbiAgICAgICFyZXNwb25zZS5hY3RpdmUgfHxcbiAgICAgIChvcHRpb25zLnVzZXJpZEZpZWxkICYmIGF1dGhEYXRhLmlkICE9PSByZXNwb25zZVtvcHRpb25zLnVzZXJpZEZpZWxkXSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBJTlZBTElEX0FDQ0VTUyk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5hcHBpZEZpZWxkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGlmICghYXBwSWRzIHx8IGFwcElkcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgTUlTU0lOR19BUFBJRFMpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0VG9rZW5JbmZvKG9wdGlvbnMsIGF1dGhEYXRhLmFjY2Vzc190b2tlbikudGhlbihyZXNwb25zZSA9PiB7XG4gICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UuYWN0aXZlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgSU5WQUxJRF9BQ0NFU1MpO1xuICAgIH1cbiAgICBjb25zdCBhcHBpZEZpZWxkID0gb3B0aW9ucy5hcHBpZEZpZWxkO1xuICAgIGlmICghcmVzcG9uc2VbYXBwaWRGaWVsZF0pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBJTlZBTElEX0FDQ0VTU19BUFBJRCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZVthcHBpZEZpZWxkXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgJiYgYXBwSWRzLmluY2x1ZGVzKHJlc3BvbnNlVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIEFycmF5LmlzQXJyYXkocmVzcG9uc2VWYWx1ZSkgJiZcbiAgICAgIHJlc3BvbnNlVmFsdWUuc29tZShhcHBJZCA9PiBhcHBJZHMuaW5jbHVkZXMoYXBwSWQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgSU5WQUxJRF9BQ0NFU1NfQVBQSUQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIEEgcHJvbWlzZSB3cmFwcGVyIGZvciByZXF1ZXN0cyB0byB0aGUgT0F1dGgyIHRva2VuIGludHJvc3BlY3Rpb24gZW5kcG9pbnQuXG5mdW5jdGlvbiByZXF1ZXN0VG9rZW5JbmZvKG9wdGlvbnMsIGFjY2Vzc190b2tlbikge1xuICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMudG9rZW5JbnRyb3NwZWN0aW9uRW5kcG9pbnRVcmwpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgTUlTU0lOR19VUkwpO1xuICB9XG4gIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwob3B0aW9ucy50b2tlbkludHJvc3BlY3Rpb25FbmRwb2ludFVybCk7XG4gIGNvbnN0IHBvc3REYXRhID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHtcbiAgICB0b2tlbjogYWNjZXNzX3Rva2VuLFxuICB9KTtcbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgJ0NvbnRlbnQtTGVuZ3RoJzogQnVmZmVyLmJ5dGVMZW5ndGgocG9zdERhdGEpLFxuICB9O1xuICBpZiAob3B0aW9ucy5hdXRob3JpemF0aW9uSGVhZGVyKSB7XG4gICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gb3B0aW9ucy5hdXRob3JpemF0aW9uSGVhZGVyO1xuICB9XG4gIGNvbnN0IHBvc3RPcHRpb25zID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGhuYW1lLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gIH07XG4gIHJldHVybiBodHRwc1JlcXVlc3QucmVxdWVzdChwb3N0T3B0aW9ucywgcG9zdERhdGEpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLFdBQVcsR0FBR0QsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMxQyxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNRyxjQUFjLEdBQUcsK0NBQStDO0FBQ3RFLE1BQU1DLG9CQUFvQixHQUN4QixnSEFBZ0g7QUFDbEgsTUFBTUMsY0FBYyxHQUNsQixpRkFBaUY7QUFDbkYsTUFBTUMsV0FBVyxHQUFHLHdFQUF3RTs7QUFFNUY7QUFDQSxTQUFTQyxnQkFBZ0JBLENBQUNDLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0VBQzNDLE9BQU9DLGdCQUFnQixDQUFDRCxPQUFPLEVBQUVELFFBQVEsQ0FBQ0csWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxJQUFJO0lBQ3ZFLElBQ0UsQ0FBQ0EsUUFBUSxJQUNULENBQUNBLFFBQVEsQ0FBQ0MsTUFBTSxJQUNmTCxPQUFPLENBQUNNLFdBQVcsSUFBSVAsUUFBUSxDQUFDUSxFQUFFLEtBQUtILFFBQVEsQ0FBQ0osT0FBTyxDQUFDTSxXQUFXLENBQUUsRUFDdEU7TUFDQSxNQUFNLElBQUloQixLQUFLLENBQUNrQixLQUFLLENBQUNsQixLQUFLLENBQUNrQixLQUFLLENBQUNDLGdCQUFnQixFQUFFZixjQUFjLENBQUM7SUFDckU7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNnQixhQUFhQSxDQUFDQyxNQUFNLEVBQUVaLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0VBQ2hELElBQUksQ0FBQ0EsT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQ1ksVUFBVSxFQUFFO0lBQ25DLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDMUI7RUFDQSxJQUFJLENBQUNILE1BQU0sSUFBSUEsTUFBTSxDQUFDSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ2xDLE1BQU0sSUFBSXpCLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQ2xCLEtBQUssQ0FBQ2tCLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUViLGNBQWMsQ0FBQztFQUNyRTtFQUNBLE9BQU9LLGdCQUFnQixDQUFDRCxPQUFPLEVBQUVELFFBQVEsQ0FBQ0csWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsUUFBUSxJQUFJO0lBQ3ZFLElBQUksQ0FBQ0EsUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsTUFBTSxFQUFFO01BQ2pDLE1BQU0sSUFBSWYsS0FBSyxDQUFDa0IsS0FBSyxDQUFDbEIsS0FBSyxDQUFDa0IsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRWYsY0FBYyxDQUFDO0lBQ3JFO0lBQ0EsTUFBTWtCLFVBQVUsR0FBR1osT0FBTyxDQUFDWSxVQUFVO0lBQ3JDLElBQUksQ0FBQ1IsUUFBUSxDQUFDUSxVQUFVLENBQUMsRUFBRTtNQUN6QixNQUFNLElBQUl0QixLQUFLLENBQUNrQixLQUFLLENBQUNsQixLQUFLLENBQUNrQixLQUFLLENBQUNDLGdCQUFnQixFQUFFZCxvQkFBb0IsQ0FBQztJQUMzRTtJQUNBLE1BQU1xQixhQUFhLEdBQUdaLFFBQVEsQ0FBQ1EsVUFBVSxDQUFDO0lBQzFDLElBQUksQ0FBQ0ssS0FBSyxDQUFDQyxPQUFPLENBQUNGLGFBQWEsQ0FBQyxJQUFJTCxNQUFNLENBQUNRLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLEVBQUU7TUFDbkU7SUFDRixDQUFDLE1BQU0sSUFDTEMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLGFBQWEsQ0FBQyxJQUM1QkEsYUFBYSxDQUFDSSxJQUFJLENBQUNDLEtBQUssSUFBSVYsTUFBTSxDQUFDUSxRQUFRLENBQUNFLEtBQUssQ0FBQyxDQUFDLEVBQ25EO01BQ0E7SUFDRixDQUFDLE1BQU07TUFDTCxNQUFNLElBQUkvQixLQUFLLENBQUNrQixLQUFLLENBQUNsQixLQUFLLENBQUNrQixLQUFLLENBQUNDLGdCQUFnQixFQUFFZCxvQkFBb0IsQ0FBQztJQUMzRTtFQUNGLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0EsU0FBU00sZ0JBQWdCQSxDQUFDRCxPQUFPLEVBQUVFLFlBQVksRUFBRTtFQUMvQyxJQUFJLENBQUNGLE9BQU8sSUFBSSxDQUFDQSxPQUFPLENBQUNzQiw2QkFBNkIsRUFBRTtJQUN0RCxNQUFNLElBQUloQyxLQUFLLENBQUNrQixLQUFLLENBQUNsQixLQUFLLENBQUNrQixLQUFLLENBQUNDLGdCQUFnQixFQUFFWixXQUFXLENBQUM7RUFDbEU7RUFDQSxNQUFNMEIsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBQ3hCLE9BQU8sQ0FBQ3NCLDZCQUE2QixDQUFDO0VBQ2hFLE1BQU1HLFFBQVEsR0FBR2pDLFdBQVcsQ0FBQ2tDLFNBQVMsQ0FBQztJQUNyQ0MsS0FBSyxFQUFFekI7RUFDVCxDQUFDLENBQUM7RUFDRixNQUFNMEIsT0FBTyxHQUFHO0lBQ2QsY0FBYyxFQUFFLG1DQUFtQztJQUNuRCxnQkFBZ0IsRUFBRUMsTUFBTSxDQUFDQyxVQUFVLENBQUNMLFFBQVE7RUFDOUMsQ0FBQztFQUNELElBQUl6QixPQUFPLENBQUMrQixtQkFBbUIsRUFBRTtJQUMvQkgsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHNUIsT0FBTyxDQUFDK0IsbUJBQW1CO0VBQ3hEO0VBQ0EsTUFBTUMsV0FBVyxHQUFHO0lBQ2xCQyxRQUFRLEVBQUVWLFNBQVMsQ0FBQ1UsUUFBUTtJQUM1QkMsSUFBSSxFQUFFWCxTQUFTLENBQUNZLFFBQVE7SUFDeEJDLE1BQU0sRUFBRSxNQUFNO0lBQ2RSLE9BQU8sRUFBRUE7RUFDWCxDQUFDO0VBQ0QsT0FBT25DLFlBQVksQ0FBQzRDLE9BQU8sQ0FBQ0wsV0FBVyxFQUFFUCxRQUFRLENBQUM7QUFDcEQ7QUFFQWEsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZjdCLGFBQWEsRUFBRUEsYUFBYTtFQUM1QlosZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
114
+ var _default = exports.default = new OAuth2Adapter();
115
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXV0aEFkYXB0ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk9BdXRoMkFkYXB0ZXIiLCJBdXRoQWRhcHRlciIsInZhbGlkYXRlT3B0aW9ucyIsIm9wdGlvbnMiLCJ0b2tlbkludHJvc3BlY3Rpb25FbmRwb2ludFVybCIsIlBhcnNlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiYXBwaWRGaWVsZCIsImFwcElkcyIsImxlbmd0aCIsInVzZXJpZEZpZWxkIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsInZhbGlkYXRlQXBwSWQiLCJhdXRoRGF0YSIsInJlc3BvbnNlIiwicmVxdWVzdFRva2VuSW5mbyIsImFjY2Vzc190b2tlbiIsImFwcElkRmllbGRWYWx1ZSIsImlzVmFsaWRBcHBJZCIsIkFycmF5IiwiaXNBcnJheSIsInNvbWUiLCJhcHBJZCIsImluY2x1ZGVzIiwidmFsaWRhdGVBdXRoRGF0YSIsImFjdGl2ZSIsImlkIiwiYWNjZXNzVG9rZW4iLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBdXRob3JpemF0aW9uIiwiYm9keSIsIlVSTFNlYXJjaFBhcmFtcyIsInRva2VuIiwib2siLCJqc29uIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvb2F1dGgyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgU2VydmVyIGF1dGhlbnRpY2F0aW9uIGFkYXB0ZXIgZm9yIE9BdXRoMiBUb2tlbiBJbnRyb3NwZWN0aW9uLlxuICpcbiAqIEBjbGFzcyBPQXV0aDJBZGFwdGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnRva2VuSW50cm9zcGVjdGlvbkVuZHBvaW50VXJsIC0gVGhlIFVSTCBvZiB0aGUgdG9rZW4gaW50cm9zcGVjdGlvbiBlbmRwb2ludC4gUmVxdWlyZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMub2F1dGgyIC0gSW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIE9BdXRoMiBhZGFwdGVyLiBSZXF1aXJlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51c2VyaWRGaWVsZF0gLSBUaGUgZmllbGQgaW4gdGhlIGludHJvc3BlY3Rpb24gcmVzcG9uc2UgdGhhdCBjb250YWlucyB0aGUgdXNlciBJRC4gT3B0aW9uYWwuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYXBwaWRGaWVsZF0gLSBUaGUgZmllbGQgaW4gdGhlIGludHJvc3BlY3Rpb24gcmVzcG9uc2UgdGhhdCBjb250YWlucyB0aGUgYXBwIElELiBPcHRpb25hbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtvcHRpb25zLmFwcElkc10gLSBMaXN0IG9mIGFsbG93ZWQgYXBwIElEcy4gUmVxdWlyZWQgaWYgYGFwcGlkRmllbGRgIGlzIGRlZmluZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYXV0aG9yaXphdGlvbkhlYWRlcl0gLSBUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUgZm9yIHRoZSBpbnRyb3NwZWN0aW9uIHJlcXVlc3QuIE9wdGlvbmFsLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogIyMgUGFyc2UgU2VydmVyIENvbmZpZ3VyYXRpb25cbiAqIFRvIGNvbmZpZ3VyZSBQYXJzZSBTZXJ2ZXIgZm9yIE9BdXRoMiBUb2tlbiBJbnRyb3NwZWN0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiYXV0aFwiOiB7XG4gKiAgICAgXCJvYXV0aDJQcm92aWRlclwiOiB7XG4gKiAgICAgICBcInRva2VuSW50cm9zcGVjdGlvbkVuZHBvaW50VXJsXCI6IFwiaHR0cHM6Ly9wcm92aWRlci5jb20vaW50cm9zcGVjdFwiLFxuICogICAgICAgXCJ1c2VyaWRGaWVsZFwiOiBcInN1YlwiLFxuICogICAgICAgXCJhcHBpZEZpZWxkXCI6IFwiYXVkXCIsXG4gKiAgICAgICBcImFwcElkc1wiOiBbXCJteS1hcHAtaWRcIl0sXG4gKiAgICAgICBcImF1dGhvcml6YXRpb25IZWFkZXJcIjogXCJCYXNpYyBkWE5sY201aGJXVTZjR0Z6YzNkdmNtUT1cIixcbiAqICAgICAgIFwib2F1dGgyXCI6IHRydWVcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtIGBpZGA6IFRoZSB1c2VyIElEIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuXG4gKiAtIGBhY2Nlc3NfdG9rZW5gOiBUaGUgYWNjZXNzIHRva2VuIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuXG4gKlxuICogIyMgQXV0aCBQYXlsb2FkXG4gKiAjIyMgRXhhbXBsZSBBdXRoIFBheWxvYWRcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJvYXV0aDJcIjoge1xuICogICAgIFwiaWRcIjogXCJ1c2VyLWlkXCIsXG4gKiAgICAgXCJhY2Nlc3NfdG9rZW5cIjogXCJhY2Nlc3MtdG9rZW5cIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBOb3Rlc1xuICogLSBgdG9rZW5JbnRyb3NwZWN0aW9uRW5kcG9pbnRVcmxgIGlzIG1hbmRhdG9yeSBhbmQgc2hvdWxkIHBvaW50IHRvIGEgdmFsaWQgT0F1dGgyIHByb3ZpZGVyJ3MgaW50cm9zcGVjdGlvbiBlbmRwb2ludC5cbiAqIC0gSWYgYGFwcGlkRmllbGRgIGlzIGRlZmluZWQsIGBhcHBJZHNgIG11c3QgYWxzbyBiZSBzcGVjaWZpZWQgdG8gdmFsaWRhdGUgdGhlIGFwcCBJRCBpbiB0aGUgaW50cm9zcGVjdGlvbiByZXNwb25zZS5cbiAqIC0gYGF1dGhvcml6YXRpb25IZWFkZXJgIGNhbiBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgdG9rZW4gaW50cm9zcGVjdGlvbiBlbmRwb2ludC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzc2NjIgT0F1dGggMi4wIFRva2VuIEludHJvc3BlY3Rpb24gU3BlY2lmaWNhdGlvbn1cbiAqL1xuXG5cbmltcG9ydCBBdXRoQWRhcHRlciBmcm9tICcuL0F1dGhBZGFwdGVyJztcblxuY2xhc3MgT0F1dGgyQWRhcHRlciBleHRlbmRzIEF1dGhBZGFwdGVyIHtcbiAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBzdXBlci52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAoIW9wdGlvbnMudG9rZW5JbnRyb3NwZWN0aW9uRW5kcG9pbnRVcmwpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT0F1dGgyIHRva2VuIGludHJvc3BlY3Rpb24gZW5kcG9pbnQgVVJMIGlzIG1pc3NpbmcuJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFwcGlkRmllbGQgJiYgIW9wdGlvbnMuYXBwSWRzPy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT0F1dGgyIGNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZyBhcHAgSURzLicpO1xuICAgIH1cblxuICAgIHRoaXMudG9rZW5JbnRyb3NwZWN0aW9uRW5kcG9pbnRVcmwgPSBvcHRpb25zLnRva2VuSW50cm9zcGVjdGlvbkVuZHBvaW50VXJsO1xuICAgIHRoaXMudXNlcmlkRmllbGQgPSBvcHRpb25zLnVzZXJpZEZpZWxkO1xuICAgIHRoaXMuYXBwaWRGaWVsZCA9IG9wdGlvbnMuYXBwaWRGaWVsZDtcbiAgICB0aGlzLmFwcElkcyA9IG9wdGlvbnMuYXBwSWRzO1xuICAgIHRoaXMuYXV0aG9yaXphdGlvbkhlYWRlciA9IG9wdGlvbnMuYXV0aG9yaXphdGlvbkhlYWRlcjtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXBwSWQoYXV0aERhdGEpIHtcbiAgICBpZiAoIXRoaXMuYXBwaWRGaWVsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0VG9rZW5JbmZvKGF1dGhEYXRhLmFjY2Vzc190b2tlbik7XG5cbiAgICBjb25zdCBhcHBJZEZpZWxkVmFsdWUgPSByZXNwb25zZVt0aGlzLmFwcGlkRmllbGRdO1xuICAgIGNvbnN0IGlzVmFsaWRBcHBJZCA9IEFycmF5LmlzQXJyYXkoYXBwSWRGaWVsZFZhbHVlKVxuICAgICAgPyBhcHBJZEZpZWxkVmFsdWUuc29tZShhcHBJZCA9PiB0aGlzLmFwcElkcy5pbmNsdWRlcyhhcHBJZCkpXG4gICAgICA6IHRoaXMuYXBwSWRzLmluY2x1ZGVzKGFwcElkRmllbGRWYWx1ZSk7XG5cbiAgICBpZiAoIWlzVmFsaWRBcHBJZCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPQXV0aDI6IEludmFsaWQgYXBwIElELicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdFRva2VuSW5mbyhhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5hY3RpdmUgfHwgKHRoaXMudXNlcmlkRmllbGQgJiYgYXV0aERhdGEuaWQgIT09IHJlc3BvbnNlW3RoaXMudXNlcmlkRmllbGRdKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPQXV0aDIgYWNjZXNzIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyByZXF1ZXN0VG9rZW5JbmZvKGFjY2Vzc1Rva2VuKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnRva2VuSW50cm9zcGVjdGlvbkVuZHBvaW50VXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAuLi4odGhpcy5hdXRob3JpemF0aW9uSGVhZGVyICYmIHsgQXV0aG9yaXphdGlvbjogdGhpcy5hdXRob3JpemF0aW9uSGVhZGVyIH0pXG4gICAgICB9LFxuICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRva2VuOiBhY2Nlc3NUb2tlbiB9KVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPQXV0aDIgdG9rZW4gaW50cm9zcGVjdGlvbiByZXF1ZXN0IGZhaWxlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBPQXV0aDJBZGFwdGVyKCk7XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBc0RBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQXREeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ var _Config = _interopRequireDefault(require("../../Config"));
4
+ var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator"));
5
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
3
6
  /*
4
7
  * PhantAuth was designed to simplify testing for applications using OpenID Connect
5
8
  * authentication by making use of random generated users.
@@ -11,15 +14,20 @@ const {
11
14
  Parse
12
15
  } = require('parse/node');
13
16
  const httpsRequest = require('./httpsRequest');
14
-
15
17
  // Returns a promise that fulfills if this user id is valid.
16
- function validateAuthData(authData) {
17
- return request('auth/userinfo', authData.access_token).then(data => {
18
- if (data && data.sub == authData.id) {
19
- return;
20
- }
21
- throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'PhantAuth auth is invalid for this user.');
18
+ async function validateAuthData(authData) {
19
+ const config = _Config.default.get(Parse.applicationId);
20
+ _Deprecator.default.logRuntimeDeprecation({
21
+ usage: 'phantauth adapter'
22
22
  });
23
+ const phantauthConfig = config.auth.phantauth;
24
+ if (!phantauthConfig?.enableInsecureAuth) {
25
+ throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'PhantAuth only works with enableInsecureAuth: true');
26
+ }
27
+ const data = await request('auth/userinfo', authData.access_token);
28
+ if (data?.sub !== authData.id) {
29
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'PhantAuth auth is invalid for this user.');
30
+ }
23
31
  }
24
32
 
25
33
  // Returns a promise that fulfills if this app id is valid.
@@ -42,4 +50,4 @@ module.exports = {
42
50
  validateAppId: validateAppId,
43
51
  validateAuthData: validateAuthData
44
52
  };
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsImRhdGEiLCJzdWIiLCJpZCIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJob3N0IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvcGhhbnRhdXRoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQaGFudEF1dGggd2FzIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRlc3RpbmcgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBPcGVuSUQgQ29ubmVjdFxuICogYXV0aGVudGljYXRpb24gYnkgbWFraW5nIHVzZSBvZiByYW5kb20gZ2VuZXJhdGVkIHVzZXJzLlxuICpcbiAqIFRvIGxlYXJuIG1vcmUsIHBsZWFzZSBnbyB0bzogaHR0cHM6Ly93d3cucGhhbnRhdXRoLm5ldFxuICovXG5cbmNvbnN0IHsgUGFyc2UgfSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKTtcbmNvbnN0IGh0dHBzUmVxdWVzdCA9IHJlcXVpcmUoJy4vaHR0cHNSZXF1ZXN0Jyk7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICByZXR1cm4gcmVxdWVzdCgnYXV0aC91c2VyaW5mbycsIGF1dGhEYXRhLmFjY2Vzc190b2tlbikudGhlbihkYXRhID0+IHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnN1YiA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1BoYW50QXV0aCBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KHBhdGgsIGFjY2Vzc190b2tlbikge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCh7XG4gICAgaG9zdDogJ3BoYW50YXV0aC5uZXQnLFxuICAgIHBhdGg6ICcvJyArIHBhdGgsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogJ2JlYXJlciAnICsgYWNjZXNzX3Rva2VuLFxuICAgICAgJ1VzZXItQWdlbnQnOiAncGFyc2Utc2VydmVyJyxcbiAgICB9LFxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNO0VBQUVBO0FBQU0sQ0FBQyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLE1BQU1DLFlBQVksR0FBR0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUU5QztBQUNBLFNBQVNFLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFO0VBQ2xDLE9BQU9DLE9BQU8sQ0FBQyxlQUFlLEVBQUVELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxJQUFJO0lBQ2xFLElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxHQUFHLElBQUlMLFFBQVEsQ0FBQ00sRUFBRSxFQUFFO01BQ25DO0lBQ0Y7SUFDQSxNQUFNLElBQUlWLEtBQUssQ0FBQ1csS0FBSyxDQUFDWCxLQUFLLENBQUNXLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsMENBQTBDLENBQUM7RUFDakcsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTQyxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNWLE9BQU9BLENBQUNXLElBQUksRUFBRVYsWUFBWSxFQUFFO0VBQ25DLE9BQU9KLFlBQVksQ0FBQ2UsR0FBRyxDQUFDO0lBQ3RCQyxJQUFJLEVBQUUsZUFBZTtJQUNyQkYsSUFBSSxFQUFFLEdBQUcsR0FBR0EsSUFBSTtJQUNoQkcsT0FBTyxFQUFFO01BQ1BDLGFBQWEsRUFBRSxTQUFTLEdBQUdkLFlBQVk7TUFDdkMsWUFBWSxFQUFFO0lBQ2hCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQWUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlQsYUFBYSxFQUFFQSxhQUFhO0VBQzVCVixnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwiaHR0cHNSZXF1ZXN0IiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwiYXBwbGljYXRpb25JZCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsInBoYW50YXV0aENvbmZpZyIsImF1dGgiLCJwaGFudGF1dGgiLCJlbmFibGVJbnNlY3VyZUF1dGgiLCJFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImRhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwic3ViIiwiaWQiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicGF0aCIsImhvc3QiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9waGFudGF1dGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFBoYW50QXV0aCB3YXMgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGVzdGluZyBmb3IgYXBwbGljYXRpb25zIHVzaW5nIE9wZW5JRCBDb25uZWN0XG4gKiBhdXRoZW50aWNhdGlvbiBieSBtYWtpbmcgdXNlIG9mIHJhbmRvbSBnZW5lcmF0ZWQgdXNlcnMuXG4gKlxuICogVG8gbGVhcm4gbW9yZSwgcGxlYXNlIGdvIHRvOiBodHRwczovL3d3dy5waGFudGF1dGgubmV0XG4gKi9cblxuY29uc3QgeyBQYXJzZSB9ID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vLi4vQ29uZmlnJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4uLy4uL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuXG4gIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHsgdXNhZ2U6ICdwaGFudGF1dGggYWRhcHRlcicgfSk7XG5cbiAgY29uc3QgcGhhbnRhdXRoQ29uZmlnID0gY29uZmlnLmF1dGgucGhhbnRhdXRoO1xuICBpZiAoIXBoYW50YXV0aENvbmZpZz8uZW5hYmxlSW5zZWN1cmVBdXRoKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ1BoYW50QXV0aCBvbmx5IHdvcmtzIHdpdGggZW5hYmxlSW5zZWN1cmVBdXRoOiB0cnVlJyk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgcmVxdWVzdCgnYXV0aC91c2VyaW5mbycsIGF1dGhEYXRhLmFjY2Vzc190b2tlbik7XG4gIGlmIChkYXRhPy5zdWIgIT09IGF1dGhEYXRhLmlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdQaGFudEF1dGggYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBhcGkgcmVxdWVzdHNcbmZ1bmN0aW9uIHJlcXVlc3QocGF0aCwgYWNjZXNzX3Rva2VuKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KHtcbiAgICBob3N0OiAncGhhbnRhdXRoLm5ldCcsXG4gICAgcGF0aDogJy8nICsgcGF0aCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiAnYmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgICAnVXNlci1BZ2VudCc6ICdwYXJzZS1zZXJ2ZXInLFxuICAgIH0sXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBU0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQXFELFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBVnJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNO0VBQUVHO0FBQU0sQ0FBQyxHQUFHTCxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ3ZDLE1BQU1NLFlBQVksR0FBR04sT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBSTlDO0FBQ0EsZUFBZU8sZ0JBQWdCQSxDQUFDQyxRQUFRLEVBQUU7RUFDeEMsTUFBTUMsTUFBTSxHQUFHQyxlQUFNLENBQUNDLEdBQUcsQ0FBQ04sS0FBSyxDQUFDTyxhQUFhLENBQUM7RUFFOUNDLG1CQUFVLENBQUNDLHFCQUFxQixDQUFDO0lBQUVDLEtBQUssRUFBRTtFQUFvQixDQUFDLENBQUM7RUFFaEUsTUFBTUMsZUFBZSxHQUFHUCxNQUFNLENBQUNRLElBQUksQ0FBQ0MsU0FBUztFQUM3QyxJQUFJLENBQUNGLGVBQWUsRUFBRUcsa0JBQWtCLEVBQUU7SUFDeEMsTUFBTSxJQUFJZCxLQUFLLENBQUNlLEtBQUssQ0FBQ2YsS0FBSyxDQUFDZSxLQUFLLENBQUNDLHFCQUFxQixFQUFFLG9EQUFvRCxDQUFDO0VBQ2hIO0VBRUEsTUFBTUMsSUFBSSxHQUFHLE1BQU1DLE9BQU8sQ0FBQyxlQUFlLEVBQUVmLFFBQVEsQ0FBQ2dCLFlBQVksQ0FBQztFQUNsRSxJQUFJRixJQUFJLEVBQUVHLEdBQUcsS0FBS2pCLFFBQVEsQ0FBQ2tCLEVBQUUsRUFBRTtJQUM3QixNQUFNLElBQUlyQixLQUFLLENBQUNlLEtBQUssQ0FBQ2YsS0FBSyxDQUFDZSxLQUFLLENBQUNPLGdCQUFnQixFQUFFLDBDQUEwQyxDQUFDO0VBQ2pHO0FBQ0Y7O0FBRUE7QUFDQSxTQUFTQyxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNQLE9BQU9BLENBQUNRLElBQUksRUFBRVAsWUFBWSxFQUFFO0VBQ25DLE9BQU9sQixZQUFZLENBQUNLLEdBQUcsQ0FBQztJQUN0QnFCLElBQUksRUFBRSxlQUFlO0lBQ3JCRCxJQUFJLEVBQUUsR0FBRyxHQUFHQSxJQUFJO0lBQ2hCRSxPQUFPLEVBQUU7TUFDUEMsYUFBYSxFQUFFLFNBQVMsR0FBR1YsWUFBWTtNQUN2QyxZQUFZLEVBQUU7SUFDaEI7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVBVyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmUixhQUFhLEVBQUVBLGFBQWE7RUFDNUJyQixnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==