parse-server 5.4.0-beta.1 → 6.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/lib/Adapters/Auth/AuthAdapter.js +92 -11
- package/lib/Adapters/Auth/index.js +81 -23
- package/lib/Adapters/Cache/LRUCache.js +3 -3
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +7 -2
- package/lib/Auth.js +214 -6
- package/lib/Config.js +10 -2
- package/lib/Controllers/DatabaseController.js +4 -3
- package/lib/Deprecator/Deprecations.js +4 -1
- package/lib/GraphQL/loaders/parseClassTypes.js +9 -4
- package/lib/GraphQL/loaders/usersMutations.js +75 -9
- package/lib/Options/Definitions.js +7 -1
- package/lib/Options/docs.js +2 -1
- package/lib/Options/index.js +1 -1
- package/lib/RestQuery.js +3 -3
- package/lib/RestWrite.js +165 -166
- package/lib/Routers/FilesRouter.js +16 -1
- package/lib/Routers/UsersRouter.js +167 -3
- package/lib/cloud-code/Parse.Cloud.js +2 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
3
|
---
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
[](https://github.com/parse-community/parse-server/actions?query=workflow%3Aci+branch%3Aalpha)
|
|
6
|
+
[](https://github.com/parse-community/parse-server/actions?query=workflow%3Aci+branch%3Abeta)
|
|
7
|
+
[](https://github.com/parse-community/parse-server/actions?query=workflow%3Aci+branch%3Arelease)
|
|
6
8
|
[](https://snyk.io/test/github/parse-community/parse-server)
|
|
7
9
|
[](https://codecov.io/github/parse-community/parse-server?branch=alpha)
|
|
8
10
|
[](https://github.com/parse-community/parse-dashboard/releases)
|
|
@@ -126,10 +128,8 @@ Parse Server is continuously tested with the most recent releases of Node.js to
|
|
|
126
128
|
|
|
127
129
|
| Version | Latest Version | End-of-Life | Compatible |
|
|
128
130
|
|------------|----------------|-------------|------------|
|
|
129
|
-
| Node.js 12 | 12.22.11 | April 2022 | ✅ Yes |
|
|
130
131
|
| Node.js 14 | 14.19.1 | April 2023 | ✅ Yes |
|
|
131
132
|
| Node.js 16 | 16.14.2 | April 2024 | ✅ Yes |
|
|
132
|
-
| Node.js 17 | 17.9.0 | June 2022 | ✅ Yes |
|
|
133
133
|
| Node.js 18 | 18.1.0 | April 2025 | ✅ Yes |
|
|
134
134
|
|
|
135
135
|
#### MongoDB
|
|
@@ -389,7 +389,7 @@ const server = ParseServer({
|
|
|
389
389
|
},
|
|
390
390
|
|
|
391
391
|
// The password policy
|
|
392
|
-
passwordPolicy: {
|
|
392
|
+
passwordPolicy: {
|
|
393
393
|
// Enforce a password of at least 8 characters which contain at least 1 lower case, 1 upper case and 1 digit
|
|
394
394
|
validatorPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/,
|
|
395
395
|
// Do not allow the username as part of the password
|
|
@@ -430,7 +430,7 @@ const api = new ParseServer({
|
|
|
430
430
|
|
|
431
431
|
The above route can be invoked by sending a `GET` request to:
|
|
432
432
|
`https://[parseServerPublicUrl]/[parseMount]/[pagesEndpoint]/[appId]/[customRoute]`
|
|
433
|
-
|
|
433
|
+
|
|
434
434
|
The `handler` receives the `request` and returns a `custom_page.html` webpage from the `pages.pagesPath` directory as response. The advantage of building a custom route this way is that it automatically makes use of Parse Server's built-in capabilities, such as [page localization](#pages) and [dynamic placeholders](#dynamic-placeholders).
|
|
435
435
|
|
|
436
436
|
### Reserved Paths
|
|
@@ -518,7 +518,7 @@ Parse Server allows developers to choose from several options when hosting files
|
|
|
518
518
|
`GridFSBucketAdapter` is used by default and requires no setup, but if you're interested in using Amazon S3, Google Cloud Storage, or local file storage, additional configuration information is available in the [Parse Server guide](http://docs.parseplatform.org/parse-server/guide/#configuring-file-adapters).
|
|
519
519
|
|
|
520
520
|
## Idempotency Enforcement
|
|
521
|
-
|
|
521
|
+
|
|
522
522
|
**Caution, this is an experimental feature that may not be appropriate for production.**
|
|
523
523
|
|
|
524
524
|
This feature deduplicates identical requests that are received by Parse Server multiple times, typically due to network issues or network adapter access restrictions on mobile operating systems.
|
|
@@ -6,23 +6,104 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = exports.AuthAdapter = void 0;
|
|
7
7
|
|
|
8
8
|
/*eslint no-unused-vars: "off"*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @interface ParseAuthResponse
|
|
12
|
+
* @property {Boolean} [doNotSave] If true, Parse Server will not save provided authData.
|
|
13
|
+
* @property {Object} [response] If set, Parse Server will send the provided response to the client under authDataResponse
|
|
14
|
+
* @property {Object} [save] If set, Parse Server will save the object provided into this key, instead of client provided authData
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* AuthPolicy
|
|
19
|
+
* default: can be combined with ONE additional auth provider if additional configured on user
|
|
20
|
+
* additional: could be only used with a default policy auth provider
|
|
21
|
+
* solo: Will ignore ALL additional providers if additional configured on user
|
|
22
|
+
* @typedef {"default" | "additional" | "solo"} AuthPolicy
|
|
23
|
+
*/
|
|
9
24
|
class AuthAdapter {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
25
|
+
constructor() {
|
|
26
|
+
/**
|
|
27
|
+
* Usage policy
|
|
28
|
+
* @type {AuthPolicy}
|
|
29
|
+
*/
|
|
30
|
+
this.policy = 'default';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @param appIds The specified app IDs in the configuration
|
|
34
|
+
* @param {Object} authData The client provided authData
|
|
35
|
+
* @param {Object} options additional adapter options
|
|
36
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
37
|
+
* @returns {(Promise<undefined|void>|void|undefined)} resolves or returns if the applicationId is valid
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
validateAppId(appIds, authData, options, request) {
|
|
42
|
+
return Promise.resolve({});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Legacy usage, if provided it will be triggered when authData related to this provider is touched (signup/update/login)
|
|
46
|
+
* otherwise you should implement validateSetup, validateLogin and validateUpdate
|
|
47
|
+
* @param {Object} authData The client provided authData
|
|
48
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
49
|
+
* @param {Object} options additional adapter options
|
|
50
|
+
* @returns {Promise<ParseAuthResponse|void|undefined>}
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
validateAuthData(authData, request, options) {
|
|
55
|
+
return Promise.resolve({});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Triggered when user provide for the first time this auth provider
|
|
59
|
+
* could be a register or the user adding a new auth service
|
|
60
|
+
* @param {Object} authData The client provided authData
|
|
61
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
62
|
+
* @param {Object} options additional adapter options
|
|
63
|
+
* @returns {Promise<ParseAuthResponse|void|undefined>}
|
|
15
64
|
*/
|
|
16
|
-
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
validateSetUp(authData, req, options) {
|
|
68
|
+
return Promise.resolve({});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Triggered when user provide authData related to this provider
|
|
72
|
+
* The user is not logged in and has already set this provider before
|
|
73
|
+
* @param {Object} authData The client provided authData
|
|
74
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
75
|
+
* @param {Object} options additional adapter options
|
|
76
|
+
* @returns {Promise<ParseAuthResponse|void|undefined>}
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
validateLogin(authData, req, options) {
|
|
81
|
+
return Promise.resolve({});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Triggered when user provide authData related to this provider
|
|
85
|
+
* the user is logged in and has already set this provider before
|
|
86
|
+
* @param {Object} authData The client provided authData
|
|
87
|
+
* @param {Object} options additional adapter options
|
|
88
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
89
|
+
* @returns {Promise<ParseAuthResponse|void|undefined>}
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
validateUpdate(authData, req, options) {
|
|
17
94
|
return Promise.resolve({});
|
|
18
95
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Triggered in pre authentication process if needed (like webauthn, SMS OTP)
|
|
98
|
+
* @param {Object} challengeData Data provided by the client
|
|
99
|
+
* @param {(Object|undefined)} authData Auth data provided by the client, can be used for validation
|
|
100
|
+
* @param {Object} options additional adapter options
|
|
101
|
+
* @param {Parse.Cloud.TriggerRequest} request
|
|
102
|
+
* @returns {Promise<Object>} A promise that resolves, resolved value will be added to challenge response under challenge key
|
|
22
103
|
*/
|
|
23
104
|
|
|
24
105
|
|
|
25
|
-
|
|
106
|
+
challenge(challengeData, authData, options, request) {
|
|
26
107
|
return Promise.resolve({});
|
|
27
108
|
}
|
|
28
109
|
|
|
@@ -31,4 +112,4 @@ class AuthAdapter {
|
|
|
31
112
|
exports.AuthAdapter = AuthAdapter;
|
|
32
113
|
var _default = AuthAdapter;
|
|
33
114
|
exports.default = _default;
|
|
34
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIl0sIm5hbWVzIjpbIkF1dGhBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJwb2xpY3kiLCJ2YWxpZGF0ZUFwcElkIiwiYXBwSWRzIiwiYXV0aERhdGEiLCJvcHRpb25zIiwicmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBdXRoRGF0YSIsInZhbGlkYXRlU2V0VXAiLCJyZXEiLCJ2YWxpZGF0ZUxvZ2luIiwidmFsaWRhdGVVcGRhdGUiLCJjaGFsbGVuZ2UiLCJjaGFsbGVuZ2VEYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRU8sTUFBTUEsV0FBTixDQUFrQjtBQUN2QkMsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDSjtBQUNBO0FBQ0E7QUFDSSxTQUFLQyxNQUFMLEdBQWMsU0FBZDtBQUNEO0FBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFQyxFQUFBQSxhQUFhLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsT0FBbkIsRUFBNEJDLE9BQTVCLEVBQXFDO0FBQ2hELFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUMsRUFBQUEsZ0JBQWdCLENBQUNMLFFBQUQsRUFBV0UsT0FBWCxFQUFvQkQsT0FBcEIsRUFBNkI7QUFDM0MsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFRSxFQUFBQSxhQUFhLENBQUNOLFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDcEMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFSSxFQUFBQSxhQUFhLENBQUNSLFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDcEMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFSyxFQUFBQSxjQUFjLENBQUNULFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDckMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFTSxFQUFBQSxTQUFTLENBQUNDLGFBQUQsRUFBZ0JYLFFBQWhCLEVBQTBCQyxPQUExQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFDbkQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDs7QUE3RXNCOzs7ZUFnRlZULFciLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYXJzZUF1dGhSZXNwb25zZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZG9Ob3RTYXZlXSBJZiB0cnVlLCBQYXJzZSBTZXJ2ZXIgd2lsbCBub3Qgc2F2ZSBwcm92aWRlZCBhdXRoRGF0YS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVzcG9uc2VdIElmIHNldCwgUGFyc2UgU2VydmVyIHdpbGwgc2VuZCB0aGUgcHJvdmlkZWQgcmVzcG9uc2UgdG8gdGhlIGNsaWVudCB1bmRlciBhdXRoRGF0YVJlc3BvbnNlXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3NhdmVdIElmIHNldCwgUGFyc2UgU2VydmVyIHdpbGwgc2F2ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGludG8gdGhpcyBrZXksIGluc3RlYWQgb2YgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gKi9cblxuLyoqXG4gKiBBdXRoUG9saWN5XG4gKiBkZWZhdWx0OiBjYW4gYmUgY29tYmluZWQgd2l0aCBPTkUgYWRkaXRpb25hbCBhdXRoIHByb3ZpZGVyIGlmIGFkZGl0aW9uYWwgY29uZmlndXJlZCBvbiB1c2VyXG4gKiBhZGRpdGlvbmFsOiBjb3VsZCBiZSBvbmx5IHVzZWQgd2l0aCBhIGRlZmF1bHQgcG9saWN5IGF1dGggcHJvdmlkZXJcbiAqIHNvbG86IFdpbGwgaWdub3JlIEFMTCBhZGRpdGlvbmFsIHByb3ZpZGVycyBpZiBhZGRpdGlvbmFsIGNvbmZpZ3VyZWQgb24gdXNlclxuICogQHR5cGVkZWYge1wiZGVmYXVsdFwiIHwgXCJhZGRpdGlvbmFsXCIgfCBcInNvbG9cIn0gQXV0aFBvbGljeVxuICovXG5cbmV4cG9ydCBjbGFzcyBBdXRoQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFVzYWdlIHBvbGljeVxuICAgICAqIEB0eXBlIHtBdXRoUG9saWN5fVxuICAgICAqL1xuICAgIHRoaXMucG9saWN5ID0gJ2RlZmF1bHQnO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gYXBwSWRzIFRoZSBzcGVjaWZpZWQgYXBwIElEcyBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTx1bmRlZmluZWR8dm9pZD58dm9pZHx1bmRlZmluZWQpfSByZXNvbHZlcyBvciByZXR1cm5zIGlmIHRoZSBhcHBsaWNhdGlvbklkIGlzIHZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZWdhY3kgdXNhZ2UsIGlmIHByb3ZpZGVkIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyIGlzIHRvdWNoZWQgKHNpZ251cC91cGRhdGUvbG9naW4pXG4gICAqIG90aGVyd2lzZSB5b3Ugc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0ZVNldHVwLCB2YWxpZGF0ZUxvZ2luIGFuZCB2YWxpZGF0ZVVwZGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgZm9yIHRoZSBmaXJzdCB0aW1lIHRoaXMgYXV0aCBwcm92aWRlclxuICAgKiBjb3VsZCBiZSBhIHJlZ2lzdGVyIG9yIHRoZSB1c2VyIGFkZGluZyBhIG5ldyBhdXRoIHNlcnZpY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCByZXEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyXG4gICAqIFRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4gYW5kIGhhcyBhbHJlYWR5IHNldCB0aGlzIHByb3ZpZGVyIGJlZm9yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlTG9naW4oYXV0aERhdGEsIHJlcSwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXJcbiAgICogdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBoYXMgYWxyZWFkeSBzZXQgdGhpcyBwcm92aWRlciBiZWZvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgcmVxLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIGluIHByZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGlmIG5lZWRlZCAobGlrZSB3ZWJhdXRobiwgU01TIE9UUClcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYWxsZW5nZURhdGEgRGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50XG4gICAqIEBwYXJhbSB7KE9iamVjdHx1bmRlZmluZWQpfSBhdXRoRGF0YSBBdXRoIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgY2FuIGJlIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcywgcmVzb2x2ZWQgdmFsdWUgd2lsbCBiZSBhZGRlZCB0byBjaGFsbGVuZ2UgcmVzcG9uc2UgdW5kZXIgY2hhbGxlbmdlIGtleVxuICAgKi9cbiAgY2hhbGxlbmdlKGNoYWxsZW5nZURhdGEsIGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aEFkYXB0ZXI7XG4iXX0=
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _AdapterLoader = _interopRequireDefault(require("../AdapterLoader"));
|
|
4
4
|
|
|
5
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
6
|
+
|
|
5
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
8
|
|
|
7
9
|
const apple = require('./apple');
|
|
@@ -86,27 +88,84 @@ const providers = {
|
|
|
86
88
|
microsoft,
|
|
87
89
|
keycloak,
|
|
88
90
|
ldap
|
|
91
|
+
}; // Indexed auth policies
|
|
92
|
+
|
|
93
|
+
const authAdapterPolicies = {
|
|
94
|
+
default: true,
|
|
95
|
+
solo: true,
|
|
96
|
+
additional: true
|
|
89
97
|
};
|
|
90
98
|
|
|
91
|
-
function authDataValidator(adapter, appIds, options) {
|
|
92
|
-
return function (authData) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
function authDataValidator(provider, adapter, appIds, options) {
|
|
100
|
+
return async function (authData, req, user, requestObject) {
|
|
101
|
+
if (appIds && typeof adapter.validateAppId === 'function') {
|
|
102
|
+
await Promise.resolve(adapter.validateAppId(appIds, authData, options, requestObject));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (adapter.policy && !authAdapterPolicies[adapter.policy]) {
|
|
106
|
+
throw new _node.default.Error(_node.default.Error.OTHER_CAUSE, 'AuthAdapter policy is not configured correctly. The value must be either "solo", "additional", "default" or undefined (will be handled as "default")');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (typeof adapter.validateAuthData === 'function') {
|
|
110
|
+
return adapter.validateAuthData(authData, options, requestObject);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (typeof adapter.validateSetUp !== 'function' || typeof adapter.validateLogin !== 'function' || typeof adapter.validateUpdate !== 'function') {
|
|
114
|
+
throw new _node.default.Error(_node.default.Error.OTHER_CAUSE, 'Adapter is not configured. Implement either validateAuthData or all of the following: validateSetUp, validateLogin and validateUpdate');
|
|
115
|
+
} // When masterKey is detected, we should trigger a logged in user
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
const isLoggedIn = req.auth.user && user && req.auth.user.id === user.id || user && req.auth.isMaster;
|
|
119
|
+
let hasAuthDataConfigured = false;
|
|
120
|
+
|
|
121
|
+
if (user && user.get('authData') && user.get('authData')[provider]) {
|
|
122
|
+
hasAuthDataConfigured = true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (isLoggedIn) {
|
|
126
|
+
// User is updating their authData
|
|
127
|
+
if (hasAuthDataConfigured) {
|
|
128
|
+
return {
|
|
129
|
+
method: 'validateUpdate',
|
|
130
|
+
validator: () => adapter.validateUpdate(authData, options, requestObject)
|
|
131
|
+
};
|
|
132
|
+
} // Set up if the user does not have the provider configured
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
method: 'validateSetUp',
|
|
137
|
+
validator: () => adapter.validateSetUp(authData, options, requestObject)
|
|
138
|
+
};
|
|
139
|
+
} // Not logged in and authData is configured on the user
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
if (hasAuthDataConfigured) {
|
|
143
|
+
return {
|
|
144
|
+
method: 'validateLogin',
|
|
145
|
+
validator: () => adapter.validateLogin(authData, options, requestObject)
|
|
146
|
+
};
|
|
147
|
+
} // User not logged in and the provider is not set up, for example when a new user
|
|
148
|
+
// signs up or an existing user uses a new auth provider
|
|
149
|
+
|
|
97
150
|
|
|
98
|
-
|
|
99
|
-
|
|
151
|
+
return {
|
|
152
|
+
method: 'validateSetUp',
|
|
153
|
+
validator: () => adapter.validateSetUp(authData, options, requestObject)
|
|
154
|
+
};
|
|
100
155
|
};
|
|
101
156
|
}
|
|
102
157
|
|
|
103
158
|
function loadAuthAdapter(provider, authOptions) {
|
|
104
|
-
|
|
159
|
+
// providers are auth providers implemented by default
|
|
160
|
+
let defaultAdapter = providers[provider]; // authOptions can contain complete custom auth adapters or
|
|
161
|
+
// a default auth adapter like Facebook
|
|
162
|
+
|
|
105
163
|
const providerOptions = authOptions[provider];
|
|
106
164
|
|
|
107
165
|
if (providerOptions && Object.prototype.hasOwnProperty.call(providerOptions, 'oauth2') && providerOptions['oauth2'] === true) {
|
|
108
166
|
defaultAdapter = oauth2;
|
|
109
|
-
}
|
|
167
|
+
} // Default provider not found and a custom auth provider was not provided
|
|
168
|
+
|
|
110
169
|
|
|
111
170
|
if (!defaultAdapter && !providerOptions) {
|
|
112
171
|
return;
|
|
@@ -119,20 +178,12 @@ function loadAuthAdapter(provider, authOptions) {
|
|
|
119
178
|
const optionalAdapter = (0, _AdapterLoader.default)(providerOptions, undefined, providerOptions);
|
|
120
179
|
|
|
121
180
|
if (optionalAdapter) {
|
|
122
|
-
['validateAuthData', 'validateAppId'].forEach(key => {
|
|
181
|
+
['validateAuthData', 'validateAppId', 'validateSetUp', 'validateLogin', 'validateUpdate', 'challenge', 'policy'].forEach(key => {
|
|
123
182
|
if (optionalAdapter[key]) {
|
|
124
183
|
adapter[key] = optionalAdapter[key];
|
|
125
184
|
}
|
|
126
185
|
});
|
|
127
186
|
}
|
|
128
|
-
} // TODO: create a new module from validateAdapter() in
|
|
129
|
-
// src/Controllers/AdaptableController.js so we can use it here for adapter
|
|
130
|
-
// validation based on the src/Adapters/Auth/AuthAdapter.js expected class
|
|
131
|
-
// signature.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (!adapter.validateAuthData || !adapter.validateAppId) {
|
|
135
|
-
return;
|
|
136
187
|
}
|
|
137
188
|
|
|
138
189
|
return {
|
|
@@ -152,15 +203,22 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
|
|
|
152
203
|
|
|
153
204
|
const getValidatorForProvider = function (provider) {
|
|
154
205
|
if (provider === 'anonymous' && !_enableAnonymousUsers) {
|
|
155
|
-
return
|
|
206
|
+
return {
|
|
207
|
+
validator: undefined
|
|
208
|
+
};
|
|
156
209
|
}
|
|
157
210
|
|
|
211
|
+
const authAdapter = loadAuthAdapter(provider, authOptions);
|
|
212
|
+
if (!authAdapter) return;
|
|
158
213
|
const {
|
|
159
214
|
adapter,
|
|
160
215
|
appIds,
|
|
161
216
|
providerOptions
|
|
162
|
-
} =
|
|
163
|
-
return
|
|
217
|
+
} = authAdapter;
|
|
218
|
+
return {
|
|
219
|
+
validator: authDataValidator(provider, adapter, appIds, providerOptions),
|
|
220
|
+
adapter
|
|
221
|
+
};
|
|
164
222
|
};
|
|
165
223
|
|
|
166
224
|
return Object.freeze({
|
|
@@ -170,4 +228,4 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
|
|
|
170
228
|
};
|
|
171
229
|
|
|
172
230
|
module.exports.loadAuthAdapter = loadAuthAdapter;
|
|
173
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luZGV4LmpzIl0sIm5hbWVzIjpbImFwcGxlIiwicmVxdWlyZSIsImdjZW50ZXIiLCJncGdhbWVzIiwiZmFjZWJvb2siLCJpbnN0YWdyYW0iLCJsaW5rZWRpbiIsIm1lZXR1cCIsImdvb2dsZSIsImdpdGh1YiIsInR3aXR0ZXIiLCJzcG90aWZ5IiwiZGlnaXRzIiwiamFucmFpbmVuZ2FnZSIsImphbnJhaW5jYXB0dXJlIiwibGluZSIsInZrb250YWt0ZSIsInFxIiwid2VjaGF0Iiwid2VpYm8iLCJvYXV0aDIiLCJwaGFudGF1dGgiLCJtaWNyb3NvZnQiLCJrZXljbG9hayIsImxkYXAiLCJhbm9ueW1vdXMiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ2YWxpZGF0ZUFwcElkIiwicHJvdmlkZXJzIiwiYXV0aERhdGFWYWxpZGF0b3IiLCJhZGFwdGVyIiwiYXBwSWRzIiwib3B0aW9ucyIsImF1dGhEYXRhIiwidGhlbiIsImxvYWRBdXRoQWRhcHRlciIsInByb3ZpZGVyIiwiYXV0aE9wdGlvbnMiLCJkZWZhdWx0QWRhcHRlciIsInByb3ZpZGVyT3B0aW9ucyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFzc2lnbiIsInVuZGVmaW5lZCIsIm9wdGlvbmFsQWRhcHRlciIsImZvckVhY2giLCJrZXkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZW5hYmxlQW5vbnltb3VzVXNlcnMiLCJfZW5hYmxlQW5vbnltb3VzVXNlcnMiLCJzZXRFbmFibGVBbm9ueW1vdXNVc2VycyIsImVuYWJsZSIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwiZnJlZXplIl0sIm1hcHBpbmdzIjoiOztBQUFBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsU0FBRCxDQUFyQjs7QUFDQSxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNB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T0FBUCxDQUFlZixlQUFmLEdBQWlDQSxlQUFqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkQWRhcHRlciBmcm9tICcuLi9BZGFwdGVyTG9hZGVyJztcblxuY29uc3QgYXBwbGUgPSByZXF1aXJlKCcuL2FwcGxlJyk7XG5jb25zdCBnY2VudGVyID0gcmVxdWlyZSgnLi9nY2VudGVyJyk7XG5jb25zdCBncGdhbWVzID0gcmVxdWlyZSgnLi9ncGdhbWVzJyk7XG5jb25zdCBmYWNlYm9vayA9IHJlcXVpcmUoJy4vZmFjZWJvb2snKTtcbmNvbnN0IGluc3RhZ3JhbSA9IHJlcXVpcmUoJy4vaW5zdGFncmFtJyk7XG5jb25zdCBsaW5rZWRpbiA9IHJlcXVpcmUoJy4vbGlua2VkaW4nKTtcbmNvbnN0IG1lZXR1cCA9IHJlcXVpcmUoJy4vbWVldHVwJyk7XG5jb25zdCBnb29nbGUgPSByZXF1aXJlKCcuL2dvb2dsZScpO1xuY29uc3QgZ2l0aHViID0gcmVxdWlyZSgnLi9naXRodWInKTtcbmNvbnN0IHR3aXR0ZXIgPSByZXF1aXJlKCcuL3R3aXR0ZXInKTtcbmNvbnN0IHNwb3RpZnkgPSByZXF1aXJlKCcuL3Nwb3RpZnknKTtcbmNvbnN0IGRpZ2l0cyA9IHJlcXVpcmUoJy4vdHdpdHRlcicpOyAvLyBkaWdpdHMgdG9rZW5zIGFyZSB2YWxpZGF0ZWQgYnkgdHdpdHRlclxuY29uc3QgamFucmFpbmVuZ2FnZSA9IHJlcXVpcmUoJy4vamFucmFpbmVuZ2FnZScpO1xuY29uc3QgamFucmFpbmNhcHR1cmUgPSByZXF1aXJlKCcuL2phbnJhaW5jYXB0dXJlJyk7XG5jb25zdCBsaW5lID0gcmVxdWlyZSgnLi9saW5lJyk7XG5jb25zdCB2a29udGFrdGUgPSByZXF1aXJlKCcuL3Zrb250YWt0ZScpO1xuY29uc3QgcXEgPSByZXF1aXJlKCcuL3FxJyk7XG5jb25zdCB3ZWNoYXQgPSByZXF1aXJlKCcuL3dlY2hhdCcpO1xuY29uc3Qgd2VpYm8gPSByZXF1aXJlKCcuL3dlaWJvJyk7XG5jb25zdCBvYXV0aDIgPSByZXF1aXJlKCcuL29hdXRoMicpO1xuY29uc3QgcGhhbnRhdXRoID0gcmVxdWlyZSgnLi9waGFudGF1dGgnKTtcbmNvbnN0IG1pY3Jvc29mdCA9IHJlcXVpcmUoJy4vbWljcm9zb2Z0Jyk7XG5jb25zdCBrZXljbG9hayA9IHJlcXVpcmUoJy4va2V5Y2xvYWsnKTtcbmNvbnN0IGxkYXAgPSByZXF1aXJlKCcuL2xkYXAnKTtcblxuY29uc3QgYW5vbnltb3VzID0ge1xuICB2YWxpZGF0ZUF1dGhEYXRhOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxuICB2YWxpZGF0ZUFwcElkOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxufTtcblxuY29uc3QgcHJvdmlkZXJzID0ge1xuICBhcHBsZSxcbiAgZ2NlbnRlcixcbiAgZ3BnYW1lcyxcbiAgZmFjZWJvb2ssXG4gIGluc3RhZ3JhbSxcbiAgbGlua2VkaW4sXG4gIG1lZXR1cCxcbiAgZ29vZ2xlLFxuICBnaXRodWIsXG4gIHR3aXR0ZXIsXG4gIHNwb3RpZnksXG4gIGFub255bW91cyxcbiAgZGlnaXRzLFxuICBqYW5yYWluZW5nYWdlLFxuICBqYW5yYWluY2FwdHVyZSxcbiAgbGluZSxcbiAgdmtvbnRha3RlLFxuICBxcSxcbiAgd2VjaGF0LFxuICB3ZWlibyxcbiAgcGhhbnRhdXRoLFxuICBtaWNyb3NvZnQsXG4gIGtleWNsb2FrLFxuICBsZGFwLFxufTtcblxuZnVuY3Rpb24gYXV0aERhdGFWYWxpZGF0b3IoYWRhcHRlciwgYXBwSWRzLCBvcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYXV0aERhdGEpIHtcbiAgICByZXR1cm4gYWRhcHRlci52YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChhcHBJZHMpIHtcbiAgICAgICAgcmV0dXJuIGFkYXB0ZXIudmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZEF1dGhBZGFwdGVyKHByb3ZpZGVyLCBhdXRoT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdEFkYXB0ZXIgPSBwcm92aWRlcnNbcHJvdmlkZXJdO1xuICBjb25zdCBwcm92aWRlck9wdGlvbnMgPSBhdXRoT3B0aW9uc1twcm92aWRlcl07XG4gIGlmIChcbiAgICBwcm92aWRlck9wdGlvbnMgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdmlkZXJPcHRpb25zLCAnb2F1dGgyJykgJiZcbiAgICBwcm92aWRlck9wdGlvbnNbJ29hdXRoMiddID09PSB0cnVlXG4gICkge1xuICAgIGRlZmF1bHRBZGFwdGVyID0gb2F1dGgyO1xuICB9XG5cbiAgaWYgKCFkZWZhdWx0QWRhcHRlciAmJiAhcHJvdmlkZXJPcHRpb25zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRBZGFwdGVyKTtcbiAgY29uc3QgYXBwSWRzID0gcHJvdmlkZXJPcHRpb25zID8gcHJvdmlkZXJPcHRpb25zLmFwcElkcyA6IHVuZGVmaW5lZDtcblxuICAvLyBUcnkgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kc1xuICBpZiAocHJvdmlkZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0aW9uYWxBZGFwdGVyID0gbG9hZEFkYXB0ZXIocHJvdmlkZXJPcHRpb25zLCB1bmRlZmluZWQsIHByb3ZpZGVyT3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbmFsQWRhcHRlcikge1xuICAgICAgWyd2YWxpZGF0ZUF1dGhEYXRhJywgJ3ZhbGlkYXRlQXBwSWQnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25hbEFkYXB0ZXJba2V5XSkge1xuICAgICAgICAgIGFkYXB0ZXJba2V5XSA9IG9wdGlvbmFsQWRhcHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBjcmVhdGUgYSBuZXcgbW9kdWxlIGZyb20gdmFsaWRhdGVBZGFwdGVyKCkgaW5cbiAgLy8gc3JjL0NvbnRyb2xsZXJzL0FkYXB0YWJsZUNvbnRyb2xsZXIuanMgc28gd2UgY2FuIHVzZSBpdCBoZXJlIGZvciBhZGFwdGVyXG4gIC8vIHZhbGlkYXRpb24gYmFzZWQgb24gdGhlIHNyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIGV4cGVjdGVkIGNsYXNzXG4gIC8vIHNpZ25hdHVyZS5cbiAgaWYgKCFhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEgfHwgIWFkYXB0ZXIudmFsaWRhdGVBcHBJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB7IGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGF1dGhPcHRpb25zID0ge30sIGVuYWJsZUFub255bW91c1VzZXJzID0gdHJ1ZSkge1xuICBsZXQgX2VuYWJsZUFub255bW91c1VzZXJzID0gZW5hYmxlQW5vbnltb3VzVXNlcnM7XG4gIGNvbnN0IHNldEVuYWJsZUFub255bW91c1VzZXJzID0gZnVuY3Rpb24gKGVuYWJsZSkge1xuICAgIF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZTtcbiAgfTtcbiAgLy8gVG8gaGFuZGxlIHRoZSB0ZXN0IGNhc2VzIG9uIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIgPT09ICdhbm9ueW1vdXMnICYmICFfZW5hYmxlQW5vbnltb3VzVXNlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zIH0gPSBsb2FkQXV0aEFkYXB0ZXIocHJvdmlkZXIsIGF1dGhPcHRpb25zKTtcblxuICAgIHJldHVybiBhdXRoRGF0YVZhbGlkYXRvcihhZGFwdGVyLCBhcHBJZHMsIHByb3ZpZGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIGdldFZhbGlkYXRvckZvclByb3ZpZGVyLFxuICAgIHNldEVuYWJsZUFub255bW91c1VzZXJzLFxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmxvYWRBdXRoQWRhcHRlciA9IGxvYWRBdXRoQWRhcHRlcjtcbiJdfQ==
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luZGV4LmpzIl0sIm5hbWVzIjpbImFwcGxlIiwicmVxdWlyZSIsImdjZW50ZXIiLCJncGdhbWVzIiwiZmFjZWJvb2siLCJpbnN0YWdyYW0iLCJsaW5rZWRpbiIsIm1lZXR1cCIsImdvb2dsZSIsImdpdGh1YiIsInR3aXR0ZXIiLCJzcG90aWZ5IiwiZGlnaXRzIiwiamFucmFpbmVuZ2FnZSIsImphbnJhaW5jYXB0dXJlIiwibGluZSIsInZrb250YWt0ZSIsInFxIiwid2VjaGF0Iiwid2VpYm8iLCJvYXV0aDIiLCJwaGFudGF1dGgiLCJtaWNyb3NvZnQiLCJrZXljbG9hayIsImxkYXAiLCJhbm9ueW1vdXMiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ2YWxpZGF0ZUFwcElkIiwicHJvdmlkZXJzIiwiYXV0aEFkYXB0ZXJQb2xpY2llcyIsImRlZmF1bHQiLCJzb2xvIiwiYWRkaXRpb25hbCIsImF1dGhEYXRhVmFsaWRhdG9yIiwicHJvdmlkZXIiLCJhZGFwdGVyIiwiYXBwSWRzIiwib3B0aW9ucyIsImF1dGhEYXRhIiwicmVxIiwidXNlciIsInJlcXVlc3RPYmplY3QiLCJwb2xpY3kiLCJQYXJzZSIsIkVycm9yIiwiT1RIRVJfQ0FVU0UiLCJ2YWxpZGF0ZVNldFVwIiwidmFsaWRhdGVMb2dpbiIsInZhbGlkYXRlVXBkYXRlIiwiaXNMb2dnZWRJbiIsImF1dGgiLCJpZCIsImlzTWFzdGVyIiwiaGFzQXV0aERhdGFDb25maWd1cmVkIiwiZ2V0IiwibWV0aG9kIiwidmFsaWRhdG9yIiwibG9hZEF1dGhBZGFwdGVyIiwiYXV0aE9wdGlvbnMiLCJkZWZhdWx0QWRhcHRlciIsInByb3ZpZGVyT3B0aW9ucyIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFzc2lnbiIsInVuZGVmaW5lZCIsIm9wdGlvbmFsQWRhcHRlciIsImZvckVhY2giLCJrZXkiLCJtb2R1bGUiLCJleHBvcnRzIiwiZW5hYmxlQW5vbnltb3VzVXNlcnMiLCJfZW5hYmxlQW5vbnltb3VzVXNlcnMiLCJzZXRFbmFibGVBbm9ueW1vdXNVc2VycyIsImVuYWJsZSIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwiYXV0aEFkYXB0ZXIiLCJmcmVlemUiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxTQUFELENBQXJCOztBQUNBLE1BQU1DLE9BQU8sR0FBR0QsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsV0FBRCxDQUF2Qjs7QUFDQSxNQUFNRyxRQUFRLEdBQUdILE9BQU8sQ0FBQyxZQUFELENBQXhCOztBQUNBLE1BQU1JLFNBQVMsR0FBR0osT0FBTyxDQUFDLGFBQUQsQ0FBekI7O0FBQ0EsTUFBTUssUUFBUSxHQUFHTCxPQUFPLENBQUMsWUFBRCxDQUF4Qjs7QUFDQSxNQUFNTSxNQUFNLEdBQUdOLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLE1BQU1PLE1BQU0sR0FBR1AsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsTUFBTVEsTUFBTSxHQUFHUixPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxNQUFNUyxPQUFPLEdBQUdULE9BQU8sQ0FBQyxXQUFELENBQXZCOztBQUNBLE1BQU1VLE9BQU8sR0FBR1YsT0FBTyxDQUFDLFdBQUQsQ0FBdkI7O0FBQ0EsTUFBTVcsTUFBTSxHQUFHWCxPQUFPLENBQUMsV0FBRCxDQUF0QixDLENBQXFDOzs7QUFDckMsTUFBTVksYUFBYSxHQUFHWixPQUFPLENBQUMsaUJBQUQsQ0FBN0I7O0FBQ0EsTUFBTWEsY0FBYyxHQUFHYixPQUFPLENBQUMsa0JBQUQsQ0FBOUI7O0FBQ0EsTUFBTWMsSUFBSSxHQUFHZCxPQUFPLENBQUMsUUFBRCxDQUFwQjs7QUFDQSxNQUFNZSxTQUFTLEdBQUdmLE9BQU8sQ0FBQyxhQUFELENBQXpCOztBQUNBLE1B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QUFYO0FBQW1Cd0IsTUFBQUE7QUFBbkIsUUFBdUNpQixXQUE3QztBQUNBLFdBQU87QUFBRXJCLE1BQUFBLFNBQVMsRUFBRXZCLGlCQUFpQixDQUFDQyxRQUFELEVBQVdDLE9BQVgsRUFBb0JDLE1BQXBCLEVBQTRCd0IsZUFBNUIsQ0FBOUI7QUFBNEV6QixNQUFBQTtBQUE1RSxLQUFQO0FBQ0QsR0FSRDs7QUFVQSxTQUFPMEIsTUFBTSxDQUFDaUIsTUFBUCxDQUFjO0FBQ25CRixJQUFBQSx1QkFEbUI7QUFFbkJGLElBQUFBO0FBRm1CLEdBQWQsQ0FBUDtBQUlELENBcEJEOztBQXNCQUosTUFBTSxDQUFDQyxPQUFQLENBQWVkLGVBQWYsR0FBaUNBLGVBQWpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRBZGFwdGVyIGZyb20gJy4uL0FkYXB0ZXJMb2FkZXInO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5jb25zdCBhcHBsZSA9IHJlcXVpcmUoJy4vYXBwbGUnKTtcbmNvbnN0IGdjZW50ZXIgPSByZXF1aXJlKCcuL2djZW50ZXInKTtcbmNvbnN0IGdwZ2FtZXMgPSByZXF1aXJlKCcuL2dwZ2FtZXMnKTtcbmNvbnN0IGZhY2Vib29rID0gcmVxdWlyZSgnLi9mYWNlYm9vaycpO1xuY29uc3QgaW5zdGFncmFtID0gcmVxdWlyZSgnLi9pbnN0YWdyYW0nKTtcbmNvbnN0IGxpbmtlZGluID0gcmVxdWlyZSgnLi9saW5rZWRpbicpO1xuY29uc3QgbWVldHVwID0gcmVxdWlyZSgnLi9tZWV0dXAnKTtcbmNvbnN0IGdvb2dsZSA9IHJlcXVpcmUoJy4vZ29vZ2xlJyk7XG5jb25zdCBnaXRodWIgPSByZXF1aXJlKCcuL2dpdGh1YicpO1xuY29uc3QgdHdpdHRlciA9IHJlcXVpcmUoJy4vdHdpdHRlcicpO1xuY29uc3Qgc3BvdGlmeSA9IHJlcXVpcmUoJy4vc3BvdGlmeScpO1xuY29uc3QgZGlnaXRzID0gcmVxdWlyZSgnLi90d2l0dGVyJyk7IC8vIGRpZ2l0cyB0b2tlbnMgYXJlIHZhbGlkYXRlZCBieSB0d2l0dGVyXG5jb25zdCBqYW5yYWluZW5nYWdlID0gcmVxdWlyZSgnLi9qYW5yYWluZW5nYWdlJyk7XG5jb25zdCBqYW5yYWluY2FwdHVyZSA9IHJlcXVpcmUoJy4vamFucmFpbmNhcHR1cmUnKTtcbmNvbnN0IGxpbmUgPSByZXF1aXJlKCcuL2xpbmUnKTtcbmNvbnN0IHZrb250YWt0ZSA9IHJlcXVpcmUoJy4vdmtvbnRha3RlJyk7XG5jb25zdCBxcSA9IHJlcXVpcmUoJy4vcXEnKTtcbmNvbnN0IHdlY2hhdCA9IHJlcXVpcmUoJy4vd2VjaGF0Jyk7XG5jb25zdCB3ZWlibyA9IHJlcXVpcmUoJy4vd2VpYm8nKTtcbmNvbnN0IG9hdXRoMiA9IHJlcXVpcmUoJy4vb2F1dGgyJyk7XG5jb25zdCBwaGFudGF1dGggPSByZXF1aXJlKCcuL3BoYW50YXV0aCcpO1xuY29uc3QgbWljcm9zb2Z0ID0gcmVxdWlyZSgnLi9taWNyb3NvZnQnKTtcbmNvbnN0IGtleWNsb2FrID0gcmVxdWlyZSgnLi9rZXljbG9haycpO1xuY29uc3QgbGRhcCA9IHJlcXVpcmUoJy4vbGRhcCcpO1xuXG5jb25zdCBhbm9ueW1vdXMgPSB7XG4gIHZhbGlkYXRlQXV0aERhdGE6ICgpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0sXG4gIHZhbGlkYXRlQXBwSWQ6ICgpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0sXG59O1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gIGFwcGxlLFxuICBnY2VudGVyLFxuICBncGdhbWVzLFxuICBmYWNlYm9vayxcbiAgaW5zdGFncmFtLFxuICBsaW5rZWRpbixcbiAgbWVldHVwLFxuICBnb29nbGUsXG4gIGdpdGh1YixcbiAgdHdpdHRlcixcbiAgc3BvdGlmeSxcbiAgYW5vbnltb3VzLFxuICBkaWdpdHMsXG4gIGphbnJhaW5lbmdhZ2UsXG4gIGphbnJhaW5jYXB0dXJlLFxuICBsaW5lLFxuICB2a29udGFrdGUsXG4gIHFxLFxuICB3ZWNoYXQsXG4gIHdlaWJvLFxuICBwaGFudGF1dGgsXG4gIG1pY3Jvc29mdCxcbiAga2V5Y2xvYWssXG4gIGxkYXAsXG59O1xuXG4vLyBJbmRleGVkIGF1dGggcG9saWNpZXNcbmNvbnN0IGF1dGhBZGFwdGVyUG9saWNpZXMgPSB7XG4gIGRlZmF1bHQ6IHRydWUsXG4gIHNvbG86IHRydWUsXG4gIGFkZGl0aW9uYWw6IHRydWUsXG59O1xuXG5mdW5jdGlvbiBhdXRoRGF0YVZhbGlkYXRvcihwcm92aWRlciwgYWRhcHRlciwgYXBwSWRzLCBvcHRpb25zKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoYXV0aERhdGEsIHJlcSwgdXNlciwgcmVxdWVzdE9iamVjdCkge1xuICAgIGlmIChhcHBJZHMgJiYgdHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVBcHBJZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGFkYXB0ZXIudmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSk7XG4gICAgfVxuICAgIGlmIChhZGFwdGVyLnBvbGljeSAmJiAhYXV0aEFkYXB0ZXJQb2xpY2llc1thZGFwdGVyLnBvbGljeV0pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICdBdXRoQWRhcHRlciBwb2xpY3kgaXMgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBUaGUgdmFsdWUgbXVzdCBiZSBlaXRoZXIgXCJzb2xvXCIsIFwiYWRkaXRpb25hbFwiLCBcImRlZmF1bHRcIiBvciB1bmRlZmluZWQgKHdpbGwgYmUgaGFuZGxlZCBhcyBcImRlZmF1bHRcIiknXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFkYXB0ZXIudmFsaWRhdGVBdXRoRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGFkYXB0ZXIudmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlU2V0VXAgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlTG9naW4gIT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlVXBkYXRlICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAnQWRhcHRlciBpcyBub3QgY29uZmlndXJlZC4gSW1wbGVtZW50IGVpdGhlciB2YWxpZGF0ZUF1dGhEYXRhIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nOiB2YWxpZGF0ZVNldFVwLCB2YWxpZGF0ZUxvZ2luIGFuZCB2YWxpZGF0ZVVwZGF0ZSdcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFdoZW4gbWFzdGVyS2V5IGlzIGRldGVjdGVkLCB3ZSBzaG91bGQgdHJpZ2dlciBhIGxvZ2dlZCBpbiB1c2VyXG4gICAgY29uc3QgaXNMb2dnZWRJbiA9XG4gICAgICAocmVxLmF1dGgudXNlciAmJiB1c2VyICYmIHJlcS5hdXRoLnVzZXIuaWQgPT09IHVzZXIuaWQpIHx8ICh1c2VyICYmIHJlcS5hdXRoLmlzTWFzdGVyKTtcbiAgICBsZXQgaGFzQXV0aERhdGFDb25maWd1cmVkID0gZmFsc2U7XG5cbiAgICBpZiAodXNlciAmJiB1c2VyLmdldCgnYXV0aERhdGEnKSAmJiB1c2VyLmdldCgnYXV0aERhdGEnKVtwcm92aWRlcl0pIHtcbiAgICAgIGhhc0F1dGhEYXRhQ29uZmlndXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzTG9nZ2VkSW4pIHtcbiAgICAgIC8vIFVzZXIgaXMgdXBkYXRpbmcgdGhlaXIgYXV0aERhdGFcbiAgICAgIGlmIChoYXNBdXRoRGF0YUNvbmZpZ3VyZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXRob2Q6ICd2YWxpZGF0ZVVwZGF0ZScsXG4gICAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiBhZGFwdGVyLnZhbGlkYXRlVXBkYXRlKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIFNldCB1cCBpZiB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHRoZSBwcm92aWRlciBjb25maWd1cmVkXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICd2YWxpZGF0ZVNldFVwJyxcbiAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiBhZGFwdGVyLnZhbGlkYXRlU2V0VXAoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBOb3QgbG9nZ2VkIGluIGFuZCBhdXRoRGF0YSBpcyBjb25maWd1cmVkIG9uIHRoZSB1c2VyXG4gICAgaWYgKGhhc0F1dGhEYXRhQ29uZmlndXJlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAndmFsaWRhdGVMb2dpbicsXG4gICAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZUxvZ2luKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXNlciBub3QgbG9nZ2VkIGluIGFuZCB0aGUgcHJvdmlkZXIgaXMgbm90IHNldCB1cCwgZm9yIGV4YW1wbGUgd2hlbiBhIG5ldyB1c2VyXG4gICAgLy8gc2lnbnMgdXAgb3IgYW4gZXhpc3RpbmcgdXNlciB1c2VzIGEgbmV3IGF1dGggcHJvdmlkZXJcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiAndmFsaWRhdGVTZXRVcCcsXG4gICAgICB2YWxpZGF0b3I6ICgpID0+IGFkYXB0ZXIudmFsaWRhdGVTZXRVcChhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZEF1dGhBZGFwdGVyKHByb3ZpZGVyLCBhdXRoT3B0aW9ucykge1xuICAvLyBwcm92aWRlcnMgYXJlIGF1dGggcHJvdmlkZXJzIGltcGxlbWVudGVkIGJ5IGRlZmF1bHRcbiAgbGV0IGRlZmF1bHRBZGFwdGVyID0gcHJvdmlkZXJzW3Byb3ZpZGVyXTtcbiAgLy8gYXV0aE9wdGlvbnMgY2FuIGNvbnRhaW4gY29tcGxldGUgY3VzdG9tIGF1dGggYWRhcHRlcnMgb3JcbiAgLy8gYSBkZWZhdWx0IGF1dGggYWRhcHRlciBsaWtlIEZhY2Vib29rXG4gIGNvbnN0IHByb3ZpZGVyT3B0aW9ucyA9IGF1dGhPcHRpb25zW3Byb3ZpZGVyXTtcbiAgaWYgKFxuICAgIHByb3ZpZGVyT3B0aW9ucyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm92aWRlck9wdGlvbnMsICdvYXV0aDInKSAmJlxuICAgIHByb3ZpZGVyT3B0aW9uc1snb2F1dGgyJ10gPT09IHRydWVcbiAgKSB7XG4gICAgZGVmYXVsdEFkYXB0ZXIgPSBvYXV0aDI7XG4gIH1cblxuICAvLyBEZWZhdWx0IHByb3ZpZGVyIG5vdCBmb3VuZCBhbmQgYSBjdXN0b20gYXV0aCBwcm92aWRlciB3YXMgbm90IHByb3ZpZGVkXG4gIGlmICghZGVmYXVsdEFkYXB0ZXIgJiYgIXByb3ZpZGVyT3B0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0QWRhcHRlcik7XG4gIGNvbnN0IGFwcElkcyA9IHByb3ZpZGVyT3B0aW9ucyA/IHByb3ZpZGVyT3B0aW9ucy5hcHBJZHMgOiB1bmRlZmluZWQ7XG5cbiAgLy8gVHJ5IHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHNcbiAgaWYgKHByb3ZpZGVyT3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbmFsQWRhcHRlciA9IGxvYWRBZGFwdGVyKHByb3ZpZGVyT3B0aW9ucywgdW5kZWZpbmVkLCBwcm92aWRlck9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25hbEFkYXB0ZXIpIHtcbiAgICAgIFtcbiAgICAgICAgJ3ZhbGlkYXRlQXV0aERhdGEnLFxuICAgICAgICAndmFsaWRhdGVBcHBJZCcsXG4gICAgICAgICd2YWxpZGF0ZVNldFVwJyxcbiAgICAgICAgJ3ZhbGlkYXRlTG9naW4nLFxuICAgICAgICAndmFsaWRhdGVVcGRhdGUnLFxuICAgICAgICAnY2hhbGxlbmdlJyxcbiAgICAgICAgJ3BvbGljeScsXG4gICAgICBdLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbmFsQWRhcHRlcltrZXldKSB7XG4gICAgICAgICAgYWRhcHRlcltrZXldID0gb3B0aW9uYWxBZGFwdGVyW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGF1dGhPcHRpb25zID0ge30sIGVuYWJsZUFub255bW91c1VzZXJzID0gdHJ1ZSkge1xuICBsZXQgX2VuYWJsZUFub255bW91c1VzZXJzID0gZW5hYmxlQW5vbnltb3VzVXNlcnM7XG4gIGNvbnN0IHNldEVuYWJsZUFub255bW91c1VzZXJzID0gZnVuY3Rpb24gKGVuYWJsZSkge1xuICAgIF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZTtcbiAgfTtcbiAgLy8gVG8gaGFuZGxlIHRoZSB0ZXN0IGNhc2VzIG9uIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIgPT09ICdhbm9ueW1vdXMnICYmICFfZW5hYmxlQW5vbnltb3VzVXNlcnMpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkYXRvcjogdW5kZWZpbmVkIH07XG4gICAgfVxuICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gbG9hZEF1dGhBZGFwdGVyKHByb3ZpZGVyLCBhdXRoT3B0aW9ucyk7XG4gICAgaWYgKCFhdXRoQWRhcHRlcikgcmV0dXJuO1xuICAgIGNvbnN0IHsgYWRhcHRlciwgYXBwSWRzLCBwcm92aWRlck9wdGlvbnMgfSA9IGF1dGhBZGFwdGVyO1xuICAgIHJldHVybiB7IHZhbGlkYXRvcjogYXV0aERhdGFWYWxpZGF0b3IocHJvdmlkZXIsIGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zKSwgYWRhcHRlciB9O1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcixcbiAgICBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyxcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5sb2FkQXV0aEFkYXB0ZXIgPSBsb2FkQXV0aEFkYXB0ZXI7XG4iXX0=
|
|
@@ -31,11 +31,11 @@ class LRUCache {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
del(key) {
|
|
34
|
-
this.cache.
|
|
34
|
+
this.cache.delete(key);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
clear() {
|
|
38
|
-
this.cache.
|
|
38
|
+
this.cache.clear();
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
}
|
|
@@ -43,4 +43,4 @@ class LRUCache {
|
|
|
43
43
|
exports.LRUCache = LRUCache;
|
|
44
44
|
var _default = LRUCache;
|
|
45
45
|
exports.default = _default;
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9MUlVDYWNoZS5qcyJdLCJuYW1lcyI6WyJMUlVDYWNoZSIsImNvbnN0cnVjdG9yIiwidHRsIiwiZGVmYXVsdHMiLCJjYWNoZVRUTCIsIm1heFNpemUiLCJjYWNoZU1heFNpemUiLCJjYWNoZSIsIkxSVSIsIm1heCIsImdldCIsImtleSIsInB1dCIsInZhbHVlIiwic2V0IiwiZGVsIiwiZGVsZXRlIiwiY2xlYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQUVPLE1BQU1BLFFBQU4sQ0FBZTtBQUNwQkMsRUFBQUEsV0FBVyxDQUFDO0FBQUVDLElBQUFBLEdBQUcsR0FBR0Msa0JBQVNDLFFBQWpCO0FBQTJCQyxJQUFBQSxPQUFPLEdBQUdGLGtCQUFTRztBQUE5QyxHQUFELEVBQStEO0FBQ3hFLFNBQUtDLEtBQUwsR0FBYSxJQUFJQyxpQkFBSixDQUFRO0FBQ25CQyxNQUFBQSxHQUFHLEVBQUVKLE9BRGM7QUFFbkJILE1BQUFBO0FBRm1CLEtBQVIsQ0FBYjtBQUlEOztBQUVEUSxFQUFBQSxHQUFHLENBQUNDLEdBQUQsRUFBTTtBQUNQLFdBQU8sS0FBS0osS0FBTCxDQUFXRyxHQUFYLENBQWVDLEdBQWYsS0FBdUIsSUFBOUI7QUFDRDs7QUFFREMsRUFBQUEsR0FBRyxDQUFDRCxHQUFELEVBQU1FLEtBQU4sRUFBYVgsR0FBRyxHQUFHLEtBQUtBLEdBQXhCLEVBQTZCO0FBQzlCLFNBQUtLLEtBQUwsQ0FBV08sR0FBWCxDQUFlSCxHQUFmLEVBQW9CRSxLQUFwQixFQUEyQlgsR0FBM0I7QUFDRDs7QUFFRGEsRUFBQUEsR0FBRyxDQUFDSixHQUFELEVBQU07QUFDUCxTQUFLSixLQUFMLENBQVdTLE1BQVgsQ0FBa0JMLEdBQWxCO0FBQ0Q7O0FBRURNLEVBQUFBLEtBQUssR0FBRztBQUNOLFNBQUtWLEtBQUwsQ0FBV1UsS0FBWDtBQUNEOztBQXRCbUI7OztlQXlCUGpCLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuXG5leHBvcnQgY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3Rvcih7IHR0bCA9IGRlZmF1bHRzLmNhY2hlVFRMLCBtYXhTaXplID0gZGVmYXVsdHMuY2FjaGVNYXhTaXplIH0pIHtcbiAgICB0aGlzLmNhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IG1heFNpemUsXG4gICAgICB0dGwsXG4gICAgfSk7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSkgfHwgbnVsbDtcbiAgfVxuXG4gIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHRoaXMuY2FjaGUuc2V0KGtleSwgdmFsdWUsIHR0bCk7XG4gIH1cblxuICBkZWwoa2V5KSB7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMUlVDYWNoZTtcbiJdfQ==
|