parse-server 2.8.4 → 8.6.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.
Files changed (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -1,15 +1,12 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.AccountLockout = undefined;
7
-
8
- var _node = require('parse/node');
9
-
10
- var _node2 = _interopRequireDefault(_node);
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ exports.default = exports.AccountLockout = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // This class handles the Account Lockout Policy settings.
13
10
 
14
11
  class AccountLockout {
15
12
  constructor(user, config) {
@@ -24,11 +21,9 @@ class AccountLockout {
24
21
  const query = {
25
22
  username: this._user.username
26
23
  };
27
-
28
24
  const updateFields = {
29
25
  _failed_login_count: value
30
26
  };
31
-
32
27
  return this._config.database.update('_User', query, updateFields);
33
28
  }
34
29
 
@@ -38,9 +33,10 @@ class AccountLockout {
38
33
  _isFailedLoginCountSet() {
39
34
  const query = {
40
35
  username: this._user.username,
41
- _failed_login_count: { $exists: true }
36
+ _failed_login_count: {
37
+ $exists: true
38
+ }
42
39
  };
43
-
44
40
  return this._config.database.find('_User', query).then(users => {
45
41
  if (Array.isArray(users) && users.length > 0) {
46
42
  return true;
@@ -69,9 +65,12 @@ class AccountLockout {
69
65
  const query = {
70
66
  username: this._user.username
71
67
  };
72
-
73
- const updateFields = { _failed_login_count: { __op: 'Increment', amount: 1 } };
74
-
68
+ const updateFields = {
69
+ _failed_login_count: {
70
+ __op: 'Increment',
71
+ amount: 1
72
+ }
73
+ };
75
74
  return this._config.database.update('_User', query, updateFields);
76
75
  }
77
76
 
@@ -83,17 +82,16 @@ class AccountLockout {
83
82
  _setLockoutExpiration() {
84
83
  const query = {
85
84
  username: this._user.username,
86
- _failed_login_count: { $gte: this._config.accountLockout.threshold }
85
+ _failed_login_count: {
86
+ $gte: this._config.accountLockout.threshold
87
+ }
87
88
  };
88
-
89
89
  const now = new Date();
90
-
91
90
  const updateFields = {
92
- _account_lockout_expires_at: _node2.default._encode(new Date(now.getTime() + this._config.accountLockout.duration * 60 * 1000))
91
+ _account_lockout_expires_at: _node.default._encode(new Date(now.getTime() + this._config.accountLockout.duration * 60 * 1000))
93
92
  };
94
-
95
93
  return this._config.database.update('_User', query, updateFields).catch(err => {
96
- if (err && err.code && err.message && err.code === 101 && err.message === 'Object not found.') {
94
+ if (err && err.code && err.message && err.code === _node.default.Error.OBJECT_NOT_FOUND && err.message === 'Object not found.') {
97
95
  return; // nothing to update so we are good
98
96
  } else {
99
97
  throw err; // unknown error
@@ -110,13 +108,16 @@ class AccountLockout {
110
108
  _notLocked() {
111
109
  const query = {
112
110
  username: this._user.username,
113
- _account_lockout_expires_at: { $gt: _node2.default._encode(new Date()) },
114
- _failed_login_count: { $gte: this._config.accountLockout.threshold }
111
+ _account_lockout_expires_at: {
112
+ $gt: _node.default._encode(new Date())
113
+ },
114
+ _failed_login_count: {
115
+ $gte: this._config.accountLockout.threshold
116
+ }
115
117
  };
116
-
117
118
  return this._config.database.find('_User', query).then(users => {
118
119
  if (Array.isArray(users) && users.length > 0) {
119
- throw new _node2.default.Error(_node2.default.Error.OBJECT_NOT_FOUND, 'Your account is locked due to multiple failed login attempts. Please try again after ' + this._config.accountLockout.duration + ' minute(s)');
120
+ throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'Your account is locked due to multiple failed login attempts. Please try again after ' + this._config.accountLockout.duration + ' minute(s)');
120
121
  }
121
122
  });
122
123
  }
@@ -152,9 +153,25 @@ class AccountLockout {
152
153
  });
153
154
  }
154
155
 
156
+ /**
157
+ * Removes the account lockout.
158
+ */
159
+ unlockAccount() {
160
+ if (!this._config.accountLockout || !this._config.accountLockout.unlockOnPasswordReset) {
161
+ return Promise.resolve();
162
+ }
163
+ return this._config.database.update('_User', {
164
+ username: this._user.username
165
+ }, {
166
+ _failed_login_count: {
167
+ __op: 'Delete'
168
+ },
169
+ _account_lockout_expires_at: {
170
+ __op: 'Delete'
171
+ }
172
+ });
173
+ }
155
174
  }
156
-
157
- exports.AccountLockout = AccountLockout; // This class handles the Account Lockout Policy settings.
158
-
159
- exports.default = AccountLockout;
160
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9BY2NvdW50TG9ja291dC5qcyJdLCJuYW1lcyI6WyJBY2NvdW50TG9ja291dCIsImNvbnN0cnVjdG9yIiwidXNlciIsImNvbmZpZyIsIl91c2VyIiwiX2NvbmZpZyIsIl9zZXRGYWlsZWRMb2dpbkNvdW50IiwidmFsdWUiLCJxdWVyeSIsInVzZXJuYW1lIiwidXBkYXRlRmllbGRzIiwiX2ZhaWxlZF9sb2dpbl9jb3VudCIsImRhdGFiYXNlIiwidXBkYXRlIiwiX2lzRmFpbGVkTG9naW5Db3VudFNldCIsIiRleGlzdHMiLCJmaW5kIiwidGhlbiIsInVzZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiX2luaXRGYWlsZWRMb2dpbkNvdW50IiwiZmFpbGVkTG9naW5Db3VudElzU2V0IiwiX2luY3JlbWVudEZhaWxlZExvZ2luQ291bnQiLCJfX29wIiwiYW1vdW50IiwiX3NldExvY2tvdXRFeHBpcmF0aW9uIiwiJGd0ZSIsImFjY291bnRMb2Nrb3V0IiwidGhyZXNob2xkIiwibm93IiwiRGF0ZSIsIl9hY2NvdW50X2xvY2tvdXRfZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdldFRpbWUiLCJkdXJhdGlvbiIsImNhdGNoIiwiZXJyIiwiY29kZSIsIm1lc3NhZ2UiLCJfbm90TG9ja2VkIiwiJGd0IiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiX2hhbmRsZUZhaWxlZExvZ2luQXR0ZW1wdCIsImhhbmRsZUxvZ2luQXR0ZW1wdCIsImxvZ2luU3VjY2Vzc2Z1bCIsIlByb21pc2UiLCJyZXNvbHZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVPLE1BQU1BLGNBQU4sQ0FBcUI7QUFDMUJDLGNBQVlDLElBQVosRUFBa0JDLE1BQWxCLEVBQTBCO0FBQ3hCLFNBQUtDLEtBQUwsR0FBYUYsSUFBYjtBQUNBLFNBQUtHLE9BQUwsR0FBZUYsTUFBZjtBQUNEOztBQUVEOzs7QUFHQUcsdUJBQXFCQyxLQUFyQixFQUE0QjtB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IHRoZSBBY2NvdW50IExvY2tvdXQgUG9saWN5IHNldHRpbmdzLlxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5leHBvcnQgY2xhc3MgQWNjb3VudExvY2tvdXQge1xuICBjb25zdHJ1Y3Rvcih1c2VyLCBjb25maWcpIHtcbiAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogc2V0IF9mYWlsZWRfbG9naW5fY291bnQgdG8gdmFsdWVcbiAgICovXG4gIF9zZXRGYWlsZWRMb2dpbkNvdW50KHZhbHVlKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5fdXNlci51c2VybmFtZVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSB7XG4gICAgICBfZmFpbGVkX2xvZ2luX2NvdW50OiB2YWx1ZVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCBxdWVyeSwgdXBkYXRlRmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGUgX2ZhaWxlZF9sb2dpbl9jb3VudCBmaWVsZCBoYXMgYmVlbiBzZXRcbiAgICovXG4gIF9pc0ZhaWxlZExvZ2luQ291bnRTZXQoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5fdXNlci51c2VybmFtZSxcbiAgICAgIF9mYWlsZWRfbG9naW5fY291bnQ6IHsgJGV4aXN0czogdHJ1ZSB9XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCBxdWVyeSlcbiAgICAgIC50aGVuKHVzZXJzID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXNlcnMpICYmIHVzZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIF9mYWlsZWRfbG9naW5fY291bnQgaXMgTk9UIHNldCB0aGVuIHNldCBpdCB0byAwXG4gICAqIGVsc2UgZG8gbm90aGluZ1xuICAgKi9cbiAgX2luaXRGYWlsZWRMb2dpbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9pc0ZhaWxlZExvZ2luQ291bnRTZXQoKVxuICAgICAgLnRoZW4oZmFpbGVkTG9naW5Db3VudElzU2V0ID0+IHtcbiAgICAgICAgaWYgKCFmYWlsZWRMb2dpbkNvdW50SXNTZXQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0RmFpbGVkTG9naW5Db3VudCgwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogaW5jcmVtZW50IF9mYWlsZWRfbG9naW5fY291bnQgYnkgMVxuICAgKi9cbiAgX2luY3JlbWVudEZhaWxlZExvZ2luQ291bnQoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5fdXNlci51c2VybmFtZVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSB7X2ZhaWxlZF9sb2dpbl9jb3VudDoge19fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IDF9fTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIHRoZSBmYWlsZWQgbG9naW4gY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0aHJlc2hvbGRcbiAgICogdGhlbiBzZXRzIGxvY2tvdXQgZXhwaXJhdGlvbiB0byAnY3VycmVudHRpbWUgKyBhY2NvdW50UG9saWN5LmR1cmF0aW9uJywgaS5lLiwgYWNjb3VudCBpcyBsb2NrZWQgb3V0IGZvciB0aGUgbmV4dCAnYWNjb3VudFBvbGljeS5kdXJhdGlvbicgbWludXRlc1xuICAgKiBlbHNlIGRvIG5vdGhpbmdcbiAgICovXG4gIF9zZXRMb2Nrb3V0RXhwaXJhdGlvbigpIHtcbiAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLl91c2VyLnVzZXJuYW1lLFxuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogeyAkZ3RlOiB0aGlzLl9jb25maWcuYWNjb3VudExvY2tvdXQudGhyZXNob2xkIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkcyA9IHtcbiAgICAgIF9hY2NvdW50X2xvY2tvdXRfZXhwaXJlc19hdDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5fY29uZmlnLmFjY291bnRMb2Nrb3V0LmR1cmF0aW9uICogNjAgKiAxMDAwKSlcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5kYXRhYmFzZS51cGRhdGUoJ19Vc2VyJywgcXVlcnksIHVwZGF0ZUZpZWxkcylcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyICYmIGVyci5jb2RlICYmIGVyci5tZXNzYWdlICYmIGVyci5jb2RlID09PSAxMDEgJiYgZXJyLm1lc3NhZ2UgPT09ICdPYmplY3Qgbm90IGZvdW5kLicpIHtcbiAgICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gdXBkYXRlIHNvIHdlIGFyZSBnb29kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyOyAvLyB1bmtub3duIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIF9hY2NvdW50X2xvY2tvdXRfZXhwaXJlc19hdCA+IGN1cnJlbnRfdGltZSBhbmQgX2ZhaWxlZF9sb2dpbl9jb3VudCA+IHRocmVzaG9sZFxuICAgKiAgIHJlamVjdCB3aXRoIGFjY291bnQgbG9ja2VkIGVycm9yXG4gICAqIGVsc2VcbiAgICogICByZXNvbHZlXG4gICAqL1xuICBfbm90TG9ja2VkKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgdXNlcm5hbWU6IHRoaXMuX3VzZXIudXNlcm5hbWUsXG4gICAgICBfYWNjb3VudF9sb2Nrb3V0X2V4cGlyZXNfYXQ6IHsgJGd0OiBQYXJzZS5fZW5jb2RlKG5ldyBEYXRlKCkpIH0sXG4gICAgICBfZmFpbGVkX2xvZ2luX2NvdW50OiB7JGd0ZTogdGhpcy5fY29uZmlnLmFjY291bnRMb2Nrb3V0LnRocmVzaG9sZH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHF1ZXJ5KVxuICAgICAgLnRoZW4odXNlcnMgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh1c2VycykgJiYgdXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnWW91ciBhY2NvdW50IGlzIGxvY2tlZCBkdWUgdG8gbXVsdGlwbGUgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGFmdGVyICcgKyB0aGlzLl9jb25maWcuYWNjb3VudExvY2tvdXQuZHVyYXRpb24gKyAnIG1pbnV0ZShzKScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgYW5kL29yIGluY3JlbWVudCBfZmFpbGVkX2xvZ2luX2NvdW50XG4gICAqIGlmIF9mYWlsZWRfbG9naW5fY291bnQgPiB0aHJlc2hvbGRcbiAgICogICBzZXQgdGhlIF9hY2NvdW50X2xvY2tvdXRfZXhwaXJlc19hdCB0byBjdXJyZW50X3RpbWUgKyBhY2NvdW50UG9saWN5LmR1cmF0aW9uXG4gICAqIGVsc2VcbiAgICogICBkbyBub3RoaW5nXG4gICAqL1xuICBfaGFuZGxlRmFpbGVkTG9naW5BdHRlbXB0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbml0RmFpbGVkTG9naW5Db3VudCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNyZW1lbnRGYWlsZWRMb2dpbkNvdW50KCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0TG9ja291dEV4cGlyYXRpb24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBsb2dpbiBhdHRlbXB0IGlmIHRoZSBBY2NvdW50IExvY2tvdXQgUG9saWN5IGlzIGVuYWJsZWRcbiAgICovXG4gIGhhbmRsZUxvZ2luQXR0ZW1wdChsb2dpblN1Y2Nlc3NmdWwpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hY2NvdW50TG9ja291dCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbm90TG9ja2VkKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKGxvZ2luU3VjY2Vzc2Z1bCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRGYWlsZWRMb2dpbkNvdW50KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGYWlsZWRMb2dpbkF0dGVtcHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBBY2NvdW50TG9ja291dDtcbiJdfQ==
175
+ exports.AccountLockout = AccountLockout;
176
+ var _default = exports.default = AccountLockout;
177
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiQWNjb3VudExvY2tvdXQiLCJjb25zdHJ1Y3RvciIsInVzZXIiLCJjb25maWciLCJfdXNlciIsIl9jb25maWciLCJfc2V0RmFpbGVkTG9naW5Db3VudCIsInZhbHVlIiwicXVlcnkiLCJ1c2VybmFtZSIsInVwZGF0ZUZpZWxkcyIsIl9mYWlsZWRfbG9naW5fY291bnQiLCJkYXRhYmFzZSIsInVwZGF0ZSIsIl9pc0ZhaWxlZExvZ2luQ291bnRTZXQiLCIkZXhpc3RzIiwiZmluZCIsInRoZW4iLCJ1c2VycyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIl9pbml0RmFpbGVkTG9naW5Db3VudCIsImZhaWxlZExvZ2luQ291bnRJc1NldCIsIl9pbmNyZW1lbnRGYWlsZWRMb2dpbkNvdW50IiwiX19vcCIsImFtb3VudCIsIl9zZXRMb2Nrb3V0RXhwaXJhdGlvbiIsIiRndGUiLCJhY2NvdW50TG9ja291dCIsInRocmVzaG9sZCIsIm5vdyIsIkRhdGUiLCJfYWNjb3VudF9sb2Nrb3V0X2V4cGlyZXNfYXQiLCJQYXJzZSIsIl9lbmNvZGUiLCJnZXRUaW1lIiwiZHVyYXRpb24iLCJjYXRjaCIsImVyciIsImNvZGUiLCJtZXNzYWdlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiX25vdExvY2tlZCIsIiRndCIsIl9oYW5kbGVGYWlsZWRMb2dpbkF0dGVtcHQiLCJoYW5kbGVMb2dpbkF0dGVtcHQiLCJsb2dpblN1Y2Nlc3NmdWwiLCJQcm9taXNlIiwicmVzb2x2ZSIsInVubG9ja0FjY291bnQiLCJ1bmxvY2tPblBhc3N3b3JkUmVzZXQiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvQWNjb3VudExvY2tvdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBBY2NvdW50IExvY2tvdXQgUG9saWN5IHNldHRpbmdzLlxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5leHBvcnQgY2xhc3MgQWNjb3VudExvY2tvdXQge1xuICBjb25zdHJ1Y3Rvcih1c2VyLCBjb25maWcpIHtcbiAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogc2V0IF9mYWlsZWRfbG9naW5fY291bnQgdG8gdmFsdWVcbiAgICovXG4gIF9zZXRGYWlsZWRMb2dpbkNvdW50KHZhbHVlKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5fdXNlci51c2VybmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRmllbGRzID0ge1xuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogdmFsdWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIHRoZSBfZmFpbGVkX2xvZ2luX2NvdW50IGZpZWxkIGhhcyBiZWVuIHNldFxuICAgKi9cbiAgX2lzRmFpbGVkTG9naW5Db3VudFNldCgpIHtcbiAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLl91c2VyLnVzZXJuYW1lLFxuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogeyAkZXhpc3RzOiB0cnVlIH0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCBxdWVyeSkudGhlbih1c2VycyA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1c2VycykgJiYgdXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZiBfZmFpbGVkX2xvZ2luX2NvdW50IGlzIE5PVCBzZXQgdGhlbiBzZXQgaXQgdG8gMFxuICAgKiBlbHNlIGRvIG5vdGhpbmdcbiAgICovXG4gIF9pbml0RmFpbGVkTG9naW5Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNGYWlsZWRMb2dpbkNvdW50U2V0KCkudGhlbihmYWlsZWRMb2dpbkNvdW50SXNTZXQgPT4ge1xuICAgICAgaWYgKCFmYWlsZWRMb2dpbkNvdW50SXNTZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldEZhaWxlZExvZ2luQ291bnQoMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogaW5jcmVtZW50IF9mYWlsZWRfbG9naW5fY291bnQgYnkgMVxuICAgKi9cbiAgX2luY3JlbWVudEZhaWxlZExvZ2luQ291bnQoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICB1c2VybmFtZTogdGhpcy5fdXNlci51c2VybmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRmllbGRzID0ge1xuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogeyBfX29wOiAnSW5jcmVtZW50JywgYW1vdW50OiAxIH0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIHRoZSBmYWlsZWQgbG9naW4gY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSB0aHJlc2hvbGRcbiAgICogdGhlbiBzZXRzIGxvY2tvdXQgZXhwaXJhdGlvbiB0byAnY3VycmVudHRpbWUgKyBhY2NvdW50UG9saWN5LmR1cmF0aW9uJywgaS5lLiwgYWNjb3VudCBpcyBsb2NrZWQgb3V0IGZvciB0aGUgbmV4dCAnYWNjb3VudFBvbGljeS5kdXJhdGlvbicgbWludXRlc1xuICAgKiBlbHNlIGRvIG5vdGhpbmdcbiAgICovXG4gIF9zZXRMb2Nrb3V0RXhwaXJhdGlvbigpIHtcbiAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLl91c2VyLnVzZXJuYW1lLFxuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogeyAkZ3RlOiB0aGlzLl9jb25maWcuYWNjb3VudExvY2tvdXQudGhyZXNob2xkIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSB7XG4gICAgICBfYWNjb3VudF9sb2Nrb3V0X2V4cGlyZXNfYXQ6IFBhcnNlLl9lbmNvZGUoXG4gICAgICAgIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyB0aGlzLl9jb25maWcuYWNjb3VudExvY2tvdXQuZHVyYXRpb24gKiA2MCAqIDEwMDApXG4gICAgICApLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCBxdWVyeSwgdXBkYXRlRmllbGRzKS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBlcnIgJiZcbiAgICAgICAgZXJyLmNvZGUgJiZcbiAgICAgICAgZXJyLm1lc3NhZ2UgJiZcbiAgICAgICAgZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQgJiZcbiAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICdPYmplY3Qgbm90IGZvdW5kLidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gdXBkYXRlIHNvIHdlIGFyZSBnb29kXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7IC8vIHVua25vd24gZXJyb3JcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZiBfYWNjb3VudF9sb2Nrb3V0X2V4cGlyZXNfYXQgPiBjdXJyZW50X3RpbWUgYW5kIF9mYWlsZWRfbG9naW5fY291bnQgPiB0aHJlc2hvbGRcbiAgICogICByZWplY3Qgd2l0aCBhY2NvdW50IGxvY2tlZCBlcnJvclxuICAgKiBlbHNlXG4gICAqICAgcmVzb2x2ZVxuICAgKi9cbiAgX25vdExvY2tlZCgpIHtcbiAgICBjb25zdCBxdWVyeSA9IHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLl91c2VyLnVzZXJuYW1lLFxuICAgICAgX2FjY291bnRfbG9ja291dF9leHBpcmVzX2F0OiB7ICRndDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9LFxuICAgICAgX2ZhaWxlZF9sb2dpbl9jb3VudDogeyAkZ3RlOiB0aGlzLl9jb25maWcuYWNjb3VudExvY2tvdXQudGhyZXNob2xkIH0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCBxdWVyeSkudGhlbih1c2VycyA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1c2VycykgJiYgdXNlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAnWW91ciBhY2NvdW50IGlzIGxvY2tlZCBkdWUgdG8gbXVsdGlwbGUgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGFmdGVyICcgK1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmFjY291bnRMb2Nrb3V0LmR1cmF0aW9uICtcbiAgICAgICAgICAgICcgbWludXRlKHMpJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBhbmQvb3IgaW5jcmVtZW50IF9mYWlsZWRfbG9naW5fY291bnRcbiAgICogaWYgX2ZhaWxlZF9sb2dpbl9jb3VudCA+IHRocmVzaG9sZFxuICAgKiAgIHNldCB0aGUgX2FjY291bnRfbG9ja291dF9leHBpcmVzX2F0IHRvIGN1cnJlbnRfdGltZSArIGFjY291bnRQb2xpY3kuZHVyYXRpb25cbiAgICogZWxzZVxuICAgKiAgIGRvIG5vdGhpbmdcbiAgICovXG4gIF9oYW5kbGVGYWlsZWRMb2dpbkF0dGVtcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRGYWlsZWRMb2dpbkNvdW50KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY3JlbWVudEZhaWxlZExvZ2luQ291bnQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRMb2Nrb3V0RXhwaXJhdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGxvZ2luIGF0dGVtcHQgaWYgdGhlIEFjY291bnQgTG9ja291dCBQb2xpY3kgaXMgZW5hYmxlZFxuICAgKi9cbiAgaGFuZGxlTG9naW5BdHRlbXB0KGxvZ2luU3VjY2Vzc2Z1bCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmFjY291bnRMb2Nrb3V0KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ub3RMb2NrZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChsb2dpblN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldEZhaWxlZExvZ2luQ291bnQoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmFpbGVkTG9naW5BdHRlbXB0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgYWNjb3VudCBsb2Nrb3V0LlxuICAgKi9cbiAgdW5sb2NrQWNjb3VudCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hY2NvdW50TG9ja291dCB8fCAhdGhpcy5fY29uZmlnLmFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICdfVXNlcicsXG4gICAgICB7IHVzZXJuYW1lOiB0aGlzLl91c2VyLnVzZXJuYW1lIH0sXG4gICAgICB7XG4gICAgICAgIF9mYWlsZWRfbG9naW5fY291bnQ6IHsgX19vcDogJ0RlbGV0ZScgfSxcbiAgICAgICAgX2FjY291bnRfbG9ja291dF9leHBpcmVzX2F0OiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBY2NvdW50TG9ja291dDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQStCLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRC9COztBQUdPLE1BQU1HLGNBQWMsQ0FBQztFQUMxQkMsV0FBV0EsQ0FBQ0MsSUFBSSxFQUFFQyxNQUFNLEVBQUU7SUFDeEIsSUFBSSxDQUFDQyxLQUFLLEdBQUdGLElBQUk7SUFDakIsSUFBSSxDQUFDRyxPQUFPLEdBQUdGLE1BQU07RUFDdkI7O0VBRUE7QUFDRjtBQUNBO0VBQ0VHLG9CQUFvQkEsQ0FBQ0MsS0FBSyxFQUFFO0lBQzFCLE1BQU1DLEtBQUssR0FBRztNQUNaQyxRQUFRLEVBQUUsSUFBSSxDQUFDTCxLQUFLLENBQUNLO0lBQ3ZCLENBQUM7SUFFRCxNQUFNQyxZQUFZLEdBQUc7TUFDbkJDLG1CQUFtQixFQUFFSjtJQUN2QixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUNGLE9BQU8sQ0FBQ08sUUFBUSxDQUFDQyxNQUFNLENBQUMsT0FBTyxFQUFFTCxLQUFLLEVBQUVFLFlBQVksQ0FBQztFQUNuRTs7RUFFQTtBQUNGO0FBQ0E7RUFDRUksc0JBQXNCQSxDQUFBLEVBQUc7SUFDdkIsTUFBTU4sS0FBSyxHQUFHO01BQ1pDLFFBQVEsRUFB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
@@ -3,7 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
  exports.loadAdapter = loadAdapter;
8
+ exports.loadModule = loadModule;
9
+ /**
10
+ * @module AdapterLoader
11
+ */
12
+ /**
13
+ * @static
14
+ * Attempt to load an adapter or fallback to the default.
15
+ * @param {Adapter} adapter an adapter
16
+ * @param {Adapter} defaultAdapter the default adapter to load
17
+ * @param {any} options options to pass to the contstructor
18
+ * @returns {Object} the loaded adapter
19
+ */
7
20
  function loadAdapter(adapter, defaultAdapter, options) {
8
21
  if (!adapter) {
9
22
  if (!defaultAdapter) {
@@ -11,7 +24,7 @@ function loadAdapter(adapter, defaultAdapter, options) {
11
24
  }
12
25
  // Load from the default adapter when no adapter is set
13
26
  return loadAdapter(defaultAdapter, undefined, options);
14
- } else if (typeof adapter === "function") {
27
+ } else if (typeof adapter === 'function') {
15
28
  try {
16
29
  return adapter(options);
17
30
  } catch (e) {
@@ -22,8 +35,7 @@ function loadAdapter(adapter, defaultAdapter, options) {
22
35
  throw e;
23
36
  }
24
37
  }
25
- } else if (typeof adapter === "string") {
26
- /* eslint-disable */
38
+ } else if (typeof adapter === 'string') {
27
39
  adapter = require(adapter);
28
40
  // If it's define as a module, get the default
29
41
  if (adapter.default) {
@@ -40,6 +52,9 @@ function loadAdapter(adapter, defaultAdapter, options) {
40
52
  // return the adapter as provided
41
53
  return adapter;
42
54
  }
43
-
44
- exports.default = loadAdapter;
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BZGFwdGVycy9BZGFwdGVyTG9hZGVyLmpzIl0sIm5hbWVzIjpbImxvYWRBZGFwdGVyIiwiYWRhcHRlciIsImRlZmF1bHRBZGFwdGVyIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsImUiLCJuYW1lIiwiQWRhcHRlciIsInJlcXVpcmUiLCJkZWZhdWx0IiwibW9kdWxlIiwiY2xhc3MiXSwibWFwcGluZ3MiOiI7Ozs7O1FBQWdCQSxXLEdBQUFBLFc7QUFBVCxTQUFTQSxXQUFULENBQXFCQyxPQUFyQixFQUE4QkMsY0FBOUIsRUFBOENDLE9BQTlDLEVBQXVEO0FBQzVELE1BQUksQ0FBQ0YsT0FBTCxFQUFjO0FBQ1osUUFBSSxDQUFDQyxjQUFMLEVBQXFCO0FBQ25CLGFBQU9DLE9BQVA7QUFDRDtBQUNEO0FBQ0EsV0FBT0gsWUFBWUUsY0FBWixFQUE0QkUsU0FBNUIsRUFBdUNELE9BQXZDLENBQVA7QUFDRCxHQU5ELE1BTU8sSUFBSSxPQUFPRixPQUFQLEtBQW1CLFVBQXZCLEVBQW1DO0FBQ3hDLFFBQUk7QUFDRixhQUFPQSxRQUFRRSxPQUFSLENBQVA7QUFDRCxLQUZELENBRUUsT0FBTUUsQ0FBTixFQUFTO0FBQ1QsVUFBSUEsRUFBRUMsSUFBRixLQUFXLFdBQWYsRUFBNEI7QUFDMUIsWUFBSUMsVUFBVU4sT0FBZDtBQUNBLGVBQU8sSUFBSU0sT0FBSixDQUFZSixPQUFaLENBQVA7QUFDRCxPQUhELE1BR087QUFDTCxjQUFNRSxDQUFOO0FBQ0Q7QUFDRjtBQUNGLEdBWE0sTUFXQSxJQUFJLE9BQU9KLE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDdEM7QUFDQUEsY0FBVU8sUUFBUVAsT0FBUixDQUFWO0FBQ0E7QUFDQSxRQUFJQSxRQUFRUSxPQUFaLEVBQXFCO0FBQ25CUixnQkFBVUEsUUFBUVEsT0FBbEI7QUFDRDtBQUNELFdBQU9ULFlBQVlDLE9BQVosRUFBcUJHLFNBQXJCLEVBQWdDRCxPQUFoQyxDQUFQO0FBQ0QsR0FSTSxNQVFBLElBQUlGLFFBQVFTLE1BQVosRUFBb0I7QUFDekIsV0FBT1YsWUFBWUMsUUFBUVMsTUFBcEIsRUFBNEJOLFNBQTVCLEVBQXVDSCxRQUFRRSxPQUEvQyxDQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUlGLFFBQVFVLEtBQVosRUFBbUI7QUFDeEIsV0FBT1gsWUFBWUMsUUFBUVUsS0FBcEIsRUFBMkJQLFNBQTNCLEVBQXNDSCxRQUFRRSxPQUE5QyxDQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUlGLFFBQVFBLE9BQVosRUFBcUI7QUFDMUIsV0FBT0QsWUFBWUMsUUFBUUEsT0FBcEIsRUFBNkJHLFNBQTdCLEVBQXdDSCxRQUFRRSxPQUFoRCxDQUFQO0FBQ0Q7QUFDRDtBQUNBLFNBQU9GLE9BQVA7QUFDRDs7a0JBRWNELFciLCJmaWxlIjoiQWRhcHRlckxvYWRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBsb2FkQWRhcHRlcihhZGFwdGVyLCBkZWZhdWx0QWRhcHRlciwgb3B0aW9ucykge1xuICBpZiAoIWFkYXB0ZXIpIHtcbiAgICBpZiAoIWRlZmF1bHRBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgLy8gTG9hZCBmcm9tIHRoZSBkZWZhdWx0IGFkYXB0ZXIgd2hlbiBubyBhZGFwdGVyIGlzIHNldFxuICAgIHJldHVybiBsb2FkQWRhcHRlcihkZWZhdWx0QWRhcHRlciwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRhcHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhZGFwdGVyKG9wdGlvbnMpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgaWYgKGUubmFtZSA9PT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgdmFyIEFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgICAgICByZXR1cm4gbmV3IEFkYXB0ZXIob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRhcHRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoYWRhcHRlcik7XG4gICAgLy8gSWYgaXQncyBkZWZpbmUgYXMgYSBtb2R1bGUsIGdldCB0aGUgZGVmYXVsdFxuICAgIGlmIChhZGFwdGVyLmRlZmF1bHQpIHtcbiAgICAgIGFkYXB0ZXIgPSBhZGFwdGVyLmRlZmF1bHQ7XG4gICAgfVxuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIubW9kdWxlKSB7XG4gICAgcmV0dXJuIGxvYWRBZGFwdGVyKGFkYXB0ZXIubW9kdWxlLCB1bmRlZmluZWQsIGFkYXB0ZXIub3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoYWRhcHRlci5jbGFzcykge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLmNsYXNzLCB1bmRlZmluZWQsIGFkYXB0ZXIub3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAoYWRhcHRlci5hZGFwdGVyKSB7XG4gICAgcmV0dXJuIGxvYWRBZGFwdGVyKGFkYXB0ZXIuYWRhcHRlciwgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9XG4gIC8vIHJldHVybiB0aGUgYWRhcHRlciBhcyBwcm92aWRlZFxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbG9hZEFkYXB0ZXI7XG4iXX0=
55
+ async function loadModule(modulePath) {
56
+ const module = await import(modulePath);
57
+ return module?.default || module;
58
+ }
59
+ var _default = exports.default = loadAdapter;
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkQWRhcHRlciIsImFkYXB0ZXIiLCJkZWZhdWx0QWRhcHRlciIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJlIiwibmFtZSIsIkFkYXB0ZXIiLCJyZXF1aXJlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImNsYXNzIiwibG9hZE1vZHVsZSIsIm1vZHVsZVBhdGgiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvQWRhcHRlcnMvQWRhcHRlckxvYWRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgQWRhcHRlckxvYWRlclxuICovXG4vKipcbiAqIEBzdGF0aWNcbiAqIEF0dGVtcHQgdG8gbG9hZCBhbiBhZGFwdGVyIG9yIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0LlxuICogQHBhcmFtIHtBZGFwdGVyfSBhZGFwdGVyIGFuIGFkYXB0ZXJcbiAqIEBwYXJhbSB7QWRhcHRlcn0gZGVmYXVsdEFkYXB0ZXIgdGhlIGRlZmF1bHQgYWRhcHRlciB0byBsb2FkXG4gKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnRzdHJ1Y3RvclxuICogQHJldHVybnMge09iamVjdH0gdGhlIGxvYWRlZCBhZGFwdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQWRhcHRlcjxUPihhZGFwdGVyLCBkZWZhdWx0QWRhcHRlciwgb3B0aW9ucyk6IFQge1xuICBpZiAoIWFkYXB0ZXIpIHtcbiAgICBpZiAoIWRlZmF1bHRBZGFwdGVyKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgLy8gTG9hZCBmcm9tIHRoZSBkZWZhdWx0IGFkYXB0ZXIgd2hlbiBubyBhZGFwdGVyIGlzIHNldFxuICAgIHJldHVybiBsb2FkQWRhcHRlcihkZWZhdWx0QWRhcHRlciwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRhcHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYWRhcHRlcihvcHRpb25zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lID09PSAnVHlwZUVycm9yJykge1xuICAgICAgICB2YXIgQWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHJldHVybiBuZXcgQWRhcHRlcihvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhZGFwdGVyID09PSAnc3RyaW5nJykge1xuICAgIGFkYXB0ZXIgPSByZXF1aXJlKGFkYXB0ZXIpO1xuICAgIC8vIElmIGl0J3MgZGVmaW5lIGFzIGEgbW9kdWxlLCBnZXQgdGhlIGRlZmF1bHRcbiAgICBpZiAoYWRhcHRlci5kZWZhdWx0KSB7XG4gICAgICBhZGFwdGVyID0gYWRhcHRlci5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlciwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChhZGFwdGVyLm1vZHVsZSkge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLm1vZHVsZSwgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuY2xhc3MpIHtcbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlci5jbGFzcywgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuYWRhcHRlcikge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLmFkYXB0ZXIsIHVuZGVmaW5lZCwgYWRhcHRlci5vcHRpb25zKTtcbiAgfVxuICAvLyByZXR1cm4gdGhlIGFkYXB0ZXIgYXMgcHJvdmlkZWRcbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kdWxlKG1vZHVsZVBhdGgpIHtcbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KG1vZHVsZVBhdGgpO1xuICByZXR1cm4gbW9kdWxlPy5kZWZhdWx0IHx8IG1vZHVsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbG9hZEFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFdBQVdBLENBQUlDLE9BQU8sRUFBRUMsY0FBYyxFQUFFQyxPQUFPLEVBQUs7RUFDbEUsSUFBSSxDQUFDRixPQUFPLEVBQUU7SUFDWixJQUFJLENBQUNDLGNBQWMsRUFBRTtNQUNuQixPQUFPQyxPQUFPO0lBQ2hCO0lBQ0E7SUFDQSxPQUFPSCxXQUFXLENBQUNFLGNBQWMsRUFBRUUsU0FBUyxFQUFFRCxPQUFPLENBQUM7RUFDeEQsQ0FBQyxNQUFNLElBQUksT0FBT0YsT0FBTyxLQUFLLFVBQVUsRUFBRTtJQUN4QyxJQUFJO01BQ0YsT0FBT0EsT0FBTyxDQUFDRSxPQUFPLENBQUM7SUFDekIsQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtNQUNWLElBQUlBLENBQUMsQ0FBQ0MsSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUMxQixJQUFJQyxPQUFPLEdBQUdOLE9BQU87UUFDckIsT0FBTyxJQUFJTSxPQUFPLENBQUNKLE9BQU8sQ0FBQztNQUM3QixDQUFDLE1BQU07UUFDTCxNQUFNRSxDQUFDO01BQ1Q7SUFDRjtFQUNGLENBQUMsTUFBTSxJQUFJLE9BQU9KLE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDdENBLE9BQU8sR0FBR08sT0FBTyxDQUFDUCxPQUFPLENBQUM7SUFDMUI7SUFDQSxJQUFJQSxPQUFPLENBQUNRLE9BQU8sRUFBRTtNQUNuQlIsT0FBTyxHQUFHQSxPQUFPLENBQUNRLE9BQU87SUFDM0I7SUFDQSxPQUFPVCxXQUFXLENBQUNDLE9BQU8sRUFBRUcsU0FBUyxFQUFFRCxPQUFPLENBQUM7RUFDakQsQ0FBQyxNQUFNLElBQUlGLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFO0lBQ3pCLE9BQU9WLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDUyxNQUFNLEVBQUVOLFNBQVMsRUFBRUgsT0FBTyxDQUFDRSxPQUFPLENBQUM7RUFDaEUsQ0FBQyxNQUFNLElBQUlGLE9BQU8sQ0FBQ1UsS0FBSyxFQUFFO0lBQ3hCLE9BQU9YLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDVSxLQUFLLEVBQUVQLFNBQVMsRUFBRUgsT0FBTyxDQUFDRSxPQUFPLENBQUM7RUFDL0QsQ0FBQyxNQUFNLElBQUlGLE9BQU8sQ0FBQ0EsT0FBTyxFQUFFO0lBQzFCLE9BQU9ELFdBQVcsQ0FBQ0MsT0FBTyxDQUFDQSxPQUFPLEVBQUVHLFNBQVMsRUFBRUgsT0FBTyxDQUFDRSxPQUFPLENBQUM7RUFDakU7RUFDQTtFQUNBLE9BQU9GLE9BQU87QUFDaEI7QUFFTyxlQUFlVyxVQUFVQSxDQUFDQyxVQUFVLEVBQUU7RUFDM0MsTUFBTUgsTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDRyxVQUFVLENBQUM7RUFDdkMsT0FBT0gsTUFBTSxFQUFFRCxPQUFPLElBQUlDLE1BQU07QUFDbEM7QUFBQyxJQUFBSSxRQUFBLEdBQUFDLE9BQUEsQ0FBQU4sT0FBQSxHQUVjVCxXQUFXIiwiaWdub3JlTGlzdCI6W119
@@ -3,27 +3,30 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- /*eslint no-unused-vars: "off"*/
6
+ exports.default = exports.AnalyticsAdapter = void 0;
7
+ /* eslint-disable unused-imports/no-unused-vars */
8
+ /**
9
+ * @interface AnalyticsAdapter
10
+ * @module Adapters
11
+ */
7
12
  class AnalyticsAdapter {
8
-
9
- /*
10
- @param parameters: the analytics request body, analytics info will be in the dimensions property
11
- @param req: the original http request
13
+ /**
14
+ @param {any} parameters: the analytics request body, analytics info will be in the dimensions property
15
+ @param {Request} req: the original http request
12
16
  */
13
17
  appOpened(parameters, req) {
14
18
  return Promise.resolve({});
15
19
  }
16
20
 
17
- /*
18
- @param eventName: the name of the custom eventName
19
- @param parameters: the analytics request body, analytics info will be in the dimensions property
20
- @param req: the original http request
21
+ /**
22
+ @param {String} eventName: the name of the custom eventName
23
+ @param {any} parameters: the analytics request body, analytics info will be in the dimensions property
24
+ @param {Request} req: the original http request
21
25
  */
22
26
  trackEvent(eventName, parameters, req) {
23
27
  return Promise.resolve({});
24
28
  }
25
29
  }
26
-
27
30
  exports.AnalyticsAdapter = AnalyticsAdapter;
28
- exports.default = AnalyticsAdapter;
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlci5qcyJdLCJuYW1lcyI6WyJBbmFseXRpY3NBZGFwdGVyIiwiYXBwT3BlbmVkIiwicGFyYW1ldGVycyIsInJlcSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhY2tFdmVudCIsImV2ZW50TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNPLE1BQU1BLGdCQUFOLENBQXVCOztBQUU1Qjs7OztBQUlBQyxZQUFVQyxVQUFWLEVBQXNCQyxHQUF0QixFQUEyQjtBQUN6QixXQUFPQyxRQUFRQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDs7QUFFRDs7Ozs7QUFLQUMsYUFBV0MsU0FBWCxFQUFzQkwsVUFBdEIsRUFBa0NDLEdBQWxDLEVBQXVDO0FBQ3JDLFdBQU9DLFFBQVFDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNEO0FBakIyQjs7UUFBakJMLGdCLEdBQUFBLGdCO2tCQW9CRUEsZ0IiLCJmaWxlIjoiQW5hbHl0aWNzQWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiKi9cbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NBZGFwdGVyIHtcblxuICAvKlxuICBAcGFyYW0gcGFyYW1ldGVyczogdGhlIGFuYWx5dGljcyByZXF1ZXN0IGJvZHksIGFuYWx5dGljcyBpbmZvIHdpbGwgYmUgaW4gdGhlIGRpbWVuc2lvbnMgcHJvcGVydHlcbiAgQHBhcmFtIHJlcTogdGhlIG9yaWdpbmFsIGh0dHAgcmVxdWVzdFxuICAgKi9cbiAgYXBwT3BlbmVkKHBhcmFtZXRlcnMsIHJlcSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLypcbiAgQHBhcmFtIGV2ZW50TmFtZTogdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBldmVudE5hbWVcbiAgQHBhcmFtIHBhcmFtZXRlcnM6IHRoZSBhbmFseXRpY3MgcmVxdWVzdCBib2R5LCBhbmFseXRpY3MgaW5mbyB3aWxsIGJlIGluIHRoZSBkaW1lbnNpb25zIHByb3BlcnR5XG4gIEBwYXJhbSByZXE6IHRoZSBvcmlnaW5hbCBodHRwIHJlcXVlc3RcbiAgICovXG4gIHRyYWNrRXZlbnQoZXZlbnROYW1lLCBwYXJhbWV0ZXJzLCByZXEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBbmFseXRpY3NBZGFwdGVyO1xuIl19
31
+ var _default = exports.default = AnalyticsAdapter;
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbmFseXRpY3NBZGFwdGVyIiwiYXBwT3BlbmVkIiwicGFyYW1ldGVycyIsInJlcSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhY2tFdmVudCIsImV2ZW50TmFtZSIsImV4cG9ydHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQW5hbHl0aWNzL0FuYWx5dGljc0FkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQGludGVyZmFjZSBBbmFseXRpY3NBZGFwdGVyXG4gKiBAbW9kdWxlIEFkYXB0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NBZGFwdGVyIHtcbiAgLyoqXG4gIEBwYXJhbSB7YW55fSBwYXJhbWV0ZXJzOiB0aGUgYW5hbHl0aWNzIHJlcXVlc3QgYm9keSwgYW5hbHl0aWNzIGluZm8gd2lsbCBiZSBpbiB0aGUgZGltZW5zaW9ucyBwcm9wZXJ0eVxuICBAcGFyYW0ge1JlcXVlc3R9IHJlcTogdGhlIG9yaWdpbmFsIGh0dHAgcmVxdWVzdFxuICAgKi9cbiAgYXBwT3BlbmVkKHBhcmFtZXRlcnMsIHJlcSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjdXN0b20gZXZlbnROYW1lXG4gIEBwYXJhbSB7YW55fSBwYXJhbWV0ZXJzOiB0aGUgYW5hbHl0aWNzIHJlcXVlc3QgYm9keSwgYW5hbHl0aWNzIGluZm8gd2lsbCBiZSBpbiB0aGUgZGltZW5zaW9ucyBwcm9wZXJ0eVxuICBAcGFyYW0ge1JlcXVlc3R9IHJlcTogdGhlIG9yaWdpbmFsIGh0dHAgcmVxdWVzdFxuICAgKi9cbiAgdHJhY2tFdmVudChldmVudE5hbWUsIHBhcmFtZXRlcnMsIHJlcSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuYWx5dGljc0FkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxnQkFBZ0IsQ0FBQztFQUM1QjtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxTQUFTQSxDQUFDQyxVQUFVLEVBQUVDLEdBQUcsRUFBRTtJQUN6QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLFVBQVVBLENBQUNDLFNBQVMsRUFBRUwsVUFBVSxFQUFFQyxHQUFHLEVBQUU7SUFDckMsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7QUFDRjtBQUFDRyxPQUFBLENBQUFSLGdCQUFBLEdBQUFBLGdCQUFBO0FBQUEsSUFBQVMsUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1YsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
@@ -3,27 +3,130 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- /*eslint no-unused-vars: "off"*/
6
+ exports.default = exports.AuthAdapter = void 0;
7
+ /* eslint-disable unused-imports/no-unused-vars */
8
+
9
+ /**
10
+ * @interface ParseAuthResponse
11
+ * @property {Boolean} [doNotSave] If true, Parse Server will not save provided authData.
12
+ * @property {Object} [response] If set, Parse Server will send the provided response to the client under authDataResponse
13
+ * @property {Object} [save] If set, Parse Server will save the object provided into this key, instead of client provided authData
14
+ */
15
+
16
+ /**
17
+ * AuthPolicy
18
+ * default: can be combined with ONE additional auth provider if additional configured on user
19
+ * additional: could be only used with a default policy auth provider
20
+ * solo: Will ignore ALL additional providers if additional configured on user
21
+ * @typedef {"default" | "additional" | "solo"} AuthPolicy
22
+ */
23
+
7
24
  class AuthAdapter {
25
+ constructor() {
26
+ /**
27
+ * Usage policy
28
+ * @type {AuthPolicy}
29
+ */
30
+ if (!this.policy) {
31
+ this.policy = 'default';
32
+ }
33
+ }
34
+ /**
35
+ * @param appIds The specified app IDs in the configuration
36
+ * @param {Object} authData The client provided authData
37
+ * @param {Object} options additional adapter options
38
+ * @param {Parse.Cloud.TriggerRequest} request
39
+ * @returns {(Promise<undefined|void>|void|undefined)} resolves or returns if the applicationId is valid
40
+ */
41
+ validateAppId(appIds, authData, options, request) {
42
+ return Promise.resolve({});
43
+ }
8
44
 
9
- /*
10
- @param appIds: the specified app ids in the configuration
11
- @param authData: the client provided authData
12
- @returns a promise that resolves if the applicationId is valid
45
+ /**
46
+ * Legacy usage, if provided it will be triggered when authData related to this provider is touched (signup/update/login)
47
+ * otherwise you should implement validateSetup, validateLogin and validateUpdate
48
+ * @param {Object} authData The client provided authData
49
+ * @param {Object} options additional adapter options
50
+ * @param {Parse.Cloud.TriggerRequest} request
51
+ * @returns {Promise<ParseAuthResponse|void|undefined>}
13
52
  */
14
- validateAppId(appIds, authData) {
53
+ validateAuthData(authData, options, request) {
15
54
  return Promise.resolve({});
16
55
  }
17
56
 
18
- /*
19
- @param authData: the client provided authData
20
- @param options: additional options
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 {Object} options additional adapter options
62
+ * @param {Parse.Cloud.TriggerRequest} request
63
+ * @returns {Promise<ParseAuthResponse|void|undefined>}
21
64
  */
22
- validateAuthData(authData, options) {
65
+ validateSetUp(authData, options, req) {
23
66
  return Promise.resolve({});
24
67
  }
25
- }
26
68
 
69
+ /**
70
+ * Triggered when user provide authData related to this provider
71
+ * The user is not logged in and has already set this provider before
72
+ * @param {Object} authData The client provided authData
73
+ * @param {Object} options additional adapter options
74
+ * @param {Parse.Cloud.TriggerRequest} request
75
+ * @returns {Promise<ParseAuthResponse|void|undefined>}
76
+ */
77
+ validateLogin(authData, options, req) {
78
+ return Promise.resolve({});
79
+ }
80
+
81
+ /**
82
+ * Triggered when user provide authData related to this provider
83
+ * the user is logged in and has already set this provider before
84
+ * @param {Object} authData The client provided authData
85
+ * @param {Object} options additional adapter options
86
+ * @param {Parse.Cloud.TriggerRequest} request
87
+ * @returns {Promise<ParseAuthResponse|void|undefined>}
88
+ */
89
+ validateUpdate(authData, options, req) {
90
+ return Promise.resolve({});
91
+ }
92
+
93
+ /**
94
+ * Triggered when user is looked up by authData with this provider. Override the `id` field if needed.
95
+ * @param {Object} authData The client provided authData
96
+ */
97
+ beforeFind(authData) {}
98
+
99
+ /**
100
+ * Triggered in pre authentication process if needed (like webauthn, SMS OTP)
101
+ * @param {Object} challengeData Data provided by the client
102
+ * @param {(Object|undefined)} authData Auth data provided by the client, can be used for validation
103
+ * @param {Object} options additional adapter options
104
+ * @param {Parse.Cloud.TriggerRequest} request
105
+ * @returns {Promise<Object>} A promise that resolves, resolved value will be added to challenge response under challenge key
106
+ */
107
+ challenge(challengeData, authData, options, request) {
108
+ return Promise.resolve({});
109
+ }
110
+
111
+ /**
112
+ * Triggered when auth data is fetched
113
+ * @param {Object} authData authData
114
+ * @param {Object} options additional adapter options
115
+ * @param {Parse.Cloud.TriggerRequest} request
116
+ * @returns {Promise<Object>} Any overrides required to authData
117
+ */
118
+ afterFind(authData, options, request) {
119
+ return Promise.resolve({});
120
+ }
121
+
122
+ /**
123
+ * Triggered when the adapter is first attached to Parse Server
124
+ * @param {Object} options Adapter Options
125
+ */
126
+ validateOptions(options) {
127
+ /* */
128
+ }
129
+ }
27
130
  exports.AuthAdapter = AuthAdapter;
28
- exports.default = AuthAdapter;
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIl0sIm5hbWVzIjpbIkF1dGhBZGFwdGVyIiwidmFsaWRhdGVBcHBJZCIsImFwcElkcyIsImF1dGhEYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwib3B0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNPLE1BQU1BLFdBQU4sQ0FBa0I7O0FBRXZCOzs7OztBQUtBQyxnQkFBY0MsTUFBZCxFQUFzQkMsUUFBdEIsRUFBZ0M7QUFDOUIsV0FBT0MsUUFBUUMsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7QUFJQUMsbUJBQWlCSCxRQUFqQixFQUEyQkksT0FBM0IsRUFBb0M7QUFDbEMsV0FBT0gsUUFBUUMsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0Q7QUFqQnNCOztRQUFaTCxXLEdBQUFBLFc7a0JBb0JFQSxXIiwiZmlsZSI6IkF1dGhBZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyplc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIqL1xuZXhwb3J0IGNsYXNzIEF1dGhBZGFwdGVyIHtcblxuICAvKlxuICBAcGFyYW0gYXBwSWRzOiB0aGUgc3BlY2lmaWVkIGFwcCBpZHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgQHBhcmFtIGF1dGhEYXRhOiB0aGUgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGlmIHRoZSBhcHBsaWNhdGlvbklkIGlzIHZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qXG4gIEBwYXJhbSBhdXRoRGF0YTogdGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICBAcGFyYW0gb3B0aW9uczogYWRkaXRpb25hbCBvcHRpb25zXG4gICAqL1xuICB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aEFkYXB0ZXI7XG4iXX0=
131
+ var _default = exports.default = AuthAdapter;
132
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRoQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicG9saWN5IiwidmFsaWRhdGVBcHBJZCIsImFwcElkcyIsImF1dGhEYXRhIiwib3B0aW9ucyIsInJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInZhbGlkYXRlQXV0aERhdGEiLCJ2YWxpZGF0ZVNldFVwIiwicmVxIiwidmFsaWRhdGVMb2dpbiIsInZhbGlkYXRlVXBkYXRlIiwiYmVmb3JlRmluZCIsImNoYWxsZW5nZSIsImNoYWxsZW5nZURhdGEiLCJhZnRlckZpbmQiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJleHBvcnRzIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvQXV0aEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIFBhcnNlQXV0aFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkb05vdFNhdmVdIElmIHRydWUsIFBhcnNlIFNlcnZlciB3aWxsIG5vdCBzYXZlIHByb3ZpZGVkIGF1dGhEYXRhLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyZXNwb25zZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzZW5kIHRoZSBwcm92aWRlZCByZXNwb25zZSB0byB0aGUgY2xpZW50IHVuZGVyIGF1dGhEYXRhUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2F2ZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzYXZlIHRoZSBvYmplY3QgcHJvdmlkZWQgaW50byB0aGlzIGtleSwgaW5zdGVhZCBvZiBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAqL1xuXG4vKipcbiAqIEF1dGhQb2xpY3lcbiAqIGRlZmF1bHQ6IGNhbiBiZSBjb21iaW5lZCB3aXRoIE9ORSBhZGRpdGlvbmFsIGF1dGggcHJvdmlkZXIgaWYgYWRkaXRpb25hbCBjb25maWd1cmVkIG9uIHVzZXJcbiAqIGFkZGl0aW9uYWw6IGNvdWxkIGJlIG9ubHkgdXNlZCB3aXRoIGEgZGVmYXVsdCBwb2xpY3kgYXV0aCBwcm92aWRlclxuICogc29sbzogV2lsbCBpZ25vcmUgQUxMIGFkZGl0aW9uYWwgcHJvdmlkZXJzIGlmIGFkZGl0aW9uYWwgY29uZmlndXJlZCBvbiB1c2VyXG4gKiBAdHlwZWRlZiB7XCJkZWZhdWx0XCIgfCBcImFkZGl0aW9uYWxcIiB8IFwic29sb1wifSBBdXRoUG9saWN5XG4gKi9cblxuZXhwb3J0IGNsYXNzIEF1dGhBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogVXNhZ2UgcG9saWN5XG4gICAgICogQHR5cGUge0F1dGhQb2xpY3l9XG4gICAgICovXG4gICAgaWYgKCF0aGlzLnBvbGljeSkge1xuICAgICAgdGhpcy5wb2xpY3kgPSAnZGVmYXVsdCc7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gYXBwSWRzIFRoZSBzcGVjaWZpZWQgYXBwIElEcyBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTx1bmRlZmluZWR8dm9pZD58dm9pZHx1bmRlZmluZWQpfSByZXNvbHZlcyBvciByZXR1cm5zIGlmIHRoZSBhcHBsaWNhdGlvbklkIGlzIHZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZWdhY3kgdXNhZ2UsIGlmIHByb3ZpZGVkIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyIGlzIHRvdWNoZWQgKHNpZ251cC91cGRhdGUvbG9naW4pXG4gICAqIG90aGVyd2lzZSB5b3Ugc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0ZVNldHVwLCB2YWxpZGF0ZUxvZ2luIGFuZCB2YWxpZGF0ZVVwZGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgZm9yIHRoZSBmaXJzdCB0aW1lIHRoaXMgYXV0aCBwcm92aWRlclxuICAgKiBjb3VsZCBiZSBhIHJlZ2lzdGVyIG9yIHRoZSB1c2VyIGFkZGluZyBhIG5ldyBhdXRoIHNlcnZpY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCBvcHRpb25zLCByZXEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyXG4gICAqIFRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4gYW5kIGhhcyBhbHJlYWR5IHNldCB0aGlzIHByb3ZpZGVyIGJlZm9yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlTG9naW4oYXV0aERhdGEsIG9wdGlvbnMsIHJlcSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXJcbiAgICogdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBoYXMgYWxyZWFkeSBzZXQgdGhpcyBwcm92aWRlciBiZWZvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgb3B0aW9ucywgcmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIHdoZW4gdXNlciBpcyBsb29rZWQgdXAgYnkgYXV0aERhdGEgd2l0aCB0aGlzIHByb3ZpZGVyLiBPdmVycmlkZSB0aGUgYGlkYCBmaWVsZCBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdXRoRGF0YSBUaGUgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gICAqL1xuICBiZWZvcmVGaW5kKGF1dGhEYXRhKSB7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgaW4gcHJlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaWYgbmVlZGVkIChsaWtlIHdlYmF1dGhuLCBTTVMgT1RQKVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2hhbGxlbmdlRGF0YSBEYXRhIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnRcbiAgICogQHBhcmFtIHsoT2JqZWN0fHVuZGVmaW5lZCl9IGF1dGhEYXRhIEF1dGggZGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50LCBjYW4gYmUgdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzLCByZXNvbHZlZCB2YWx1ZSB3aWxsIGJlIGFkZGVkIHRvIGNoYWxsZW5nZSByZXNwb25zZSB1bmRlciBjaGFsbGVuZ2Uga2V5XG4gICAqL1xuICBjaGFsbGVuZ2UoY2hhbGxlbmdlRGF0YSwgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiBhdXRoIGRhdGEgaXMgZmV0Y2hlZFxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBbnkgb3ZlcnJpZGVzIHJlcXVpcmVkIHRvIGF1dGhEYXRhXG4gICAqL1xuICBhZnRlckZpbmQoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB0aGUgYWRhcHRlciBpcyBmaXJzdCBhdHRhY2hlZCB0byBQYXJzZSBTZXJ2ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgQWRhcHRlciBPcHRpb25zXG4gICAqL1xuICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIC8qICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aEFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxNQUFNQSxXQUFXLENBQUM7RUFDdkJDLFdBQVdBLENBQUEsRUFBRztJQUNaO0FBQ0o7QUFDQTtBQUNBO0lBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsTUFBTSxFQUFFO01BQ2hCLElBQUksQ0FBQ0EsTUFBTSxHQUFHLFNBQVM7SUFDekI7RUFDRjtFQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLGFBQWFBLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRTtJQUNoRCxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLGdCQUFnQkEsQ0FBQ0wsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRTtJQUMzQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VFLGFBQWFBLENBQUNOLFFBQVEsRUFBRUMsT0FBTyxFQUFFTSxHQUFHLEVBQUU7SUFDcEMsT0FBT0osT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFSSxhQUFhQSxDQUFDUixRQUFRLEVBQUVDLE9BQU8sRUFBRU0sR0FBRyxFQUFFO0lBQ3BDLE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUssY0FBY0EsQ0FBQ1QsUUFBUSxFQUFFQyxPQUFPLEVBQUVNLEdBQUcsRUFBRTtJQUNyQyxPQUFPSixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFTSxVQUFVQSxDQUFDVixRQUFRLEVBQUUsQ0FFckI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFVyxTQUFTQSxDQUFDQyxhQUFhLEVBQUVaLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU7SUFDbkQsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRVMsU0FBU0EsQ0FBQ2IsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRTtJQUNwQyxPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFVSxlQUFlQSxDQUFDYixPQUFPLEVBQUU7SUFDdkI7RUFBQTtBQUVKO0FBQUNjLE9BQUEsQ0FBQXBCLFdBQUEsR0FBQUEsV0FBQTtBQUFBLElBQUFxQixRQUFBLEdBQUFELE9BQUEsQ0FBQUUsT0FBQSxHQUVjdEIsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
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
+ // abstract class for auth code adapters
10
+
11
+ class BaseAuthCodeAdapter extends _AuthAdapter.default {
12
+ constructor(adapterName) {
13
+ super();
14
+ this.adapterName = adapterName;
15
+ }
16
+ validateOptions(options) {
17
+ if (!options) {
18
+ throw new Error(`${this.adapterName} options are required.`);
19
+ }
20
+ this.enableInsecureAuth = options.enableInsecureAuth;
21
+ if (this.enableInsecureAuth) {
22
+ return;
23
+ }
24
+ this.clientId = options.clientId;
25
+ this.clientSecret = options.clientSecret;
26
+ if (!this.clientId) {
27
+ throw new Error(`${this.adapterName} clientId is required.`);
28
+ }
29
+ if (!this.clientSecret) {
30
+ throw new Error(`${this.adapterName} clientSecret is required.`);
31
+ }
32
+ }
33
+ async beforeFind(authData) {
34
+ if (this.enableInsecureAuth && !authData?.code) {
35
+ if (!authData?.access_token) {
36
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `${this.adapterName} auth is invalid for this user.`);
37
+ }
38
+ const user = await this.getUserFromAccessToken(authData.access_token, authData);
39
+ if (user.id !== authData.id) {
40
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `${this.adapterName} auth is invalid for this user.`);
41
+ }
42
+ return;
43
+ }
44
+ if (!authData?.code) {
45
+ throw new Parse.Error(Parse.Error.VALIDATION_ERROR, `${this.adapterName} code is required.`);
46
+ }
47
+ const access_token = await this.getAccessTokenFromCode(authData);
48
+ const user = await this.getUserFromAccessToken(access_token, authData);
49
+ if (authData.id && user.id !== authData.id) {
50
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `${this.adapterName} auth is invalid for this user.`);
51
+ }
52
+ authData.access_token = access_token;
53
+ authData.id = user.id;
54
+ delete authData.code;
55
+ delete authData.redirect_uri;
56
+ }
57
+ async getUserFromAccessToken() {
58
+ // abstract method
59
+ throw new Error('getUserFromAccessToken is not implemented');
60
+ }
61
+ async getAccessTokenFromCode() {
62
+ // abstract method
63
+ throw new Error('getAccessTokenFromCode is not implemented');
64
+ }
65
+ validateLogin(authData) {
66
+ // User validation is already done in beforeFind
67
+ return {
68
+ id: authData.id
69
+ };
70
+ }
71
+ validateSetUp(authData) {
72
+ // User validation is already done in beforeFind
73
+ return {
74
+ id: authData.id
75
+ };
76
+ }
77
+ afterFind(authData) {
78
+ return {
79
+ id: authData.id
80
+ };
81
+ }
82
+ validateUpdate(authData) {
83
+ // User validation is already done in beforeFind
84
+ return {
85
+ id: authData.id
86
+ };
87
+ }
88
+ parseResponseData(data) {
89
+ const startPos = data.indexOf('(');
90
+ const endPos = data.indexOf(')');
91
+ if (startPos === -1 || endPos === -1) {
92
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `${this.adapterName} auth is invalid for this user.`);
93
+ }
94
+ const jsonData = data.substring(startPos + 1, endPos);
95
+ return JSON.parse(jsonData);
96
+ }
97
+ }
98
+ exports.default = BaseAuthCodeAdapter;
99
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXV0aEFkYXB0ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkJhc2VBdXRoQ29kZUFkYXB0ZXIiLCJBdXRoQWRhcHRlciIsImNvbnN0cnVjdG9yIiwiYWRhcHRlck5hbWUiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiRXJyb3IiLCJlbmFibGVJbnNlY3VyZUF1dGgiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJlZm9yZUZpbmQiLCJhdXRoRGF0YSIsImNvZGUiLCJhY2Nlc3NfdG9rZW4iLCJQYXJzZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ1c2VyIiwiZ2V0VXNlckZyb21BY2Nlc3NUb2tlbiIsImlkIiwiVkFMSURBVElPTl9FUlJPUiIsImdldEFjY2Vzc1Rva2VuRnJvbUNvZGUiLCJyZWRpcmVjdF91cmkiLCJ2YWxpZGF0ZUxvZ2luIiwidmFsaWRhdGVTZXRVcCIsImFmdGVyRmluZCIsInZhbGlkYXRlVXBkYXRlIiwicGFyc2VSZXNwb25zZURhdGEiLCJkYXRhIiwic3RhcnRQb3MiLCJpbmRleE9mIiwiZW5kUG9zIiwianNvbkRhdGEiLCJzdWJzdHJpbmciLCJKU09OIiwicGFyc2UiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvQmFzZUNvZGVBdXRoQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhYnN0cmFjdCBjbGFzcyBmb3IgYXV0aCBjb2RlIGFkYXB0ZXJzXG5pbXBvcnQgQXV0aEFkYXB0ZXIgZnJvbSAnLi9BdXRoQWRhcHRlcic7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQXV0aENvZGVBZGFwdGVyIGV4dGVuZHMgQXV0aEFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyTmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGFwdGVyTmFtZSA9IGFkYXB0ZXJOYW1lO1xuICB9XG4gIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG5cbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmFkYXB0ZXJOYW1lfSBvcHRpb25zIGFyZSByZXF1aXJlZC5gKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuYWJsZUluc2VjdXJlQXV0aCA9IG9wdGlvbnMuZW5hYmxlSW5zZWN1cmVBdXRoO1xuICAgIGlmICh0aGlzLmVuYWJsZUluc2VjdXJlQXV0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkO1xuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gb3B0aW9ucy5jbGllbnRTZWNyZXQ7XG5cbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmFkYXB0ZXJOYW1lfSBjbGllbnRJZCBpcyByZXF1aXJlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2xpZW50U2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5hZGFwdGVyTmFtZX0gY2xpZW50U2VjcmV0IGlzIHJlcXVpcmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJlZm9yZUZpbmQoYXV0aERhdGEpIHtcbiAgICBpZiAodGhpcy5lbmFibGVJbnNlY3VyZUF1dGggJiYgIWF1dGhEYXRhPy5jb2RlKSB7XG4gICAgICBpZiAoIWF1dGhEYXRhPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke3RoaXMuYWRhcHRlck5hbWV9IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyRnJvbUFjY2Vzc1Rva2VuKGF1dGhEYXRhLmFjY2Vzc190b2tlbiwgYXV0aERhdGEpO1xuXG4gICAgICBpZiAodXNlci5pZCAhPT0gYXV0aERhdGEuaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke3RoaXMuYWRhcHRlck5hbWV9IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoRGF0YT8uY29kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlZBTElEQVRJT05fRVJST1IsIGAke3RoaXMuYWRhcHRlck5hbWV9IGNvZGUgaXMgcmVxdWlyZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXNzX3Rva2VuID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZyb21Db2RlKGF1dGhEYXRhKTtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyRnJvbUFjY2Vzc1Rva2VuKGFjY2Vzc190b2tlbiwgYXV0aERhdGEpO1xuXG4gICAgaWYgKGF1dGhEYXRhLmlkICYmIHVzZXIuaWQgIT09IGF1dGhEYXRhLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYCR7dGhpcy5hZGFwdGVyTmFtZX0gYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuYCk7XG4gICAgfVxuXG4gICAgYXV0aERhdGEuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xuICAgIGF1dGhEYXRhLmlkID0gdXNlci5pZDtcblxuICAgIGRlbGV0ZSBhdXRoRGF0YS5jb2RlO1xuICAgIGRlbGV0ZSBhdXRoRGF0YS5yZWRpcmVjdF91cmk7XG5cbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJGcm9tQWNjZXNzVG9rZW4oKSB7XG4gICAgLy8gYWJzdHJhY3QgbWV0aG9kXG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXRVc2VyRnJvbUFjY2Vzc1Rva2VuIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Gcm9tQ29kZSgpIHtcbiAgICAvLyBhYnN0cmFjdCBtZXRob2RcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldEFjY2Vzc1Rva2VuRnJvbUNvZGUgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICB2YWxpZGF0ZUxvZ2luKGF1dGhEYXRhKSB7XG4gICAgLy8gVXNlciB2YWxpZGF0aW9uIGlzIGFscmVhZHkgZG9uZSBpbiBiZWZvcmVGaW5kXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBhdXRoRGF0YS5pZCxcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVNldFVwKGF1dGhEYXRhKSB7XG4gICAgLy8gVXNlciB2YWxpZGF0aW9uIGlzIGFscmVhZHkgZG9uZSBpbiBiZWZvcmVGaW5kXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBhdXRoRGF0YS5pZCxcbiAgICB9XG4gIH1cblxuICBhZnRlckZpbmQoYXV0aERhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGF1dGhEYXRhLmlkLFxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlVXBkYXRlKGF1dGhEYXRhKSB7XG4gICAgLy8gVXNlciB2YWxpZGF0aW9uIGlzIGFscmVhZHkgZG9uZSBpbiBiZWZvcmVGaW5kXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBhdXRoRGF0YS5pZCxcbiAgICB9XG5cbiAgfVxuXG4gIHBhcnNlUmVzcG9uc2VEYXRhKGRhdGEpIHtcbiAgICBjb25zdCBzdGFydFBvcyA9IGRhdGEuaW5kZXhPZignKCcpO1xuICAgIGNvbnN0IGVuZFBvcyA9IGRhdGEuaW5kZXhPZignKScpO1xuICAgIGlmIChzdGFydFBvcyA9PT0gLTEgfHwgZW5kUG9zID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGAke3RoaXMuYWRhcHRlck5hbWV9IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICAgIH1cbiAgICBjb25zdCBqc29uRGF0YSA9IGRhdGEuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgZW5kUG9zKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uRGF0YSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXdDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRHhDOztBQUVlLE1BQU1HLG1CQUFtQixTQUFTQyxvQkFBVyxDQUFDO0VBQzNEQyxXQUFXQSxDQUFDQyxXQUFXLEVBQUU7SUFDdkIsS0FBSyxDQUFDLENBQUM7SUFDUCxJQUFJLENBQUNBLFdBQVcsR0FBR0EsV0FBVztFQUNoQztFQUNBQyxlQUFlQSxDQUFDQyxPQUFPLEVBQUU7SUFFdkIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDWixNQUFNLElBQUlDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ0gsV0FBVyx3QkFBd0IsQ0FBQztJQUM5RDtJQUVBLElBQUksQ0FBQ0ksa0JBQWtCLEdBQUdGLE9BQU8sQ0FBQ0Usa0JBQWtCO0lBQ3BELElBQUksSUFBSSxDQUFDQSxrQkFBa0IsRUFBRTtNQUMzQjtJQUNGO0lBRUEsSUFBSSxDQUFDQyxRQUFRLEdBQUdILE9BQU8sQ0FBQ0csUUFBUTtJQUNoQyxJQUFJLENBQUNDLFlBQVksR0FBR0osT0FBTyxDQUFDSSxZQUFZO0lBRXhDLElBQUksQ0FBQyxJQUFJLENBQUNELFFBQVEsRUFBRTtNQUNsQixNQUFNLElBQUlGLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ0gsV0FBVyx3QkFBd0IsQ0FBQztJQUM5RDtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNNLFlBQVksRUFBRTtNQUN0QixNQUFNLElBQUlILEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ0gsV0FBVyw0QkFBNEIs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