parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21

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 (191) hide show
  1. package/README.md +45 -17
  2. package/lib/AccountLockout.js +11 -26
  3. package/lib/Adapters/AdapterLoader.js +8 -14
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  5. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  6. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  7. package/lib/Adapters/Auth/apple.js +6 -22
  8. package/lib/Adapters/Auth/facebook.js +7 -37
  9. package/lib/Adapters/Auth/gcenter.js +8 -37
  10. package/lib/Adapters/Auth/github.js +7 -10
  11. package/lib/Adapters/Auth/google.js +11 -34
  12. package/lib/Adapters/Auth/gpgames.js +5 -8
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  14. package/lib/Adapters/Auth/index.js +20 -65
  15. package/lib/Adapters/Auth/instagram.js +5 -9
  16. package/lib/Adapters/Auth/janraincapture.js +8 -12
  17. package/lib/Adapters/Auth/janrainengage.js +7 -11
  18. package/lib/Adapters/Auth/keycloak.js +5 -19
  19. package/lib/Adapters/Auth/ldap.js +1 -15
  20. package/lib/Adapters/Auth/line.js +7 -10
  21. package/lib/Adapters/Auth/linkedin.js +7 -12
  22. package/lib/Adapters/Auth/meetup.js +7 -10
  23. package/lib/Adapters/Auth/microsoft.js +7 -10
  24. package/lib/Adapters/Auth/oauth2.js +6 -18
  25. package/lib/Adapters/Auth/phantauth.js +8 -10
  26. package/lib/Adapters/Auth/qq.js +7 -13
  27. package/lib/Adapters/Auth/spotify.js +7 -14
  28. package/lib/Adapters/Auth/twitter.js +5 -15
  29. package/lib/Adapters/Auth/vkontakte.js +9 -15
  30. package/lib/Adapters/Auth/wechat.js +7 -10
  31. package/lib/Adapters/Auth/weibo.js +7 -11
  32. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  33. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  34. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  35. package/lib/Adapters/Cache/LRUCache.js +1 -11
  36. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  37. package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
  38. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  39. package/lib/Adapters/Email/MailAdapter.js +2 -7
  40. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  41. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  42. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  43. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  44. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  45. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  46. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  47. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  48. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  49. package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
  50. package/lib/Adapters/Push/PushAdapter.js +2 -8
  51. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  52. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  53. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  54. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  55. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  56. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  57. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  58. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  59. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  62. package/lib/Auth.js +54 -121
  63. package/lib/ClientSDK.js +3 -11
  64. package/lib/Config.js +69 -113
  65. package/lib/Controllers/AdaptableController.js +6 -18
  66. package/lib/Controllers/AnalyticsController.js +1 -9
  67. package/lib/Controllers/CacheController.js +3 -23
  68. package/lib/Controllers/DatabaseController.js +147 -345
  69. package/lib/Controllers/FilesController.js +5 -34
  70. package/lib/Controllers/HooksController.js +1 -51
  71. package/lib/Controllers/LiveQueryController.js +4 -23
  72. package/lib/Controllers/LoggerController.js +15 -54
  73. package/lib/Controllers/ParseGraphQLController.js +49 -104
  74. package/lib/Controllers/PushController.js +20 -59
  75. package/lib/Controllers/SchemaController.js +154 -344
  76. package/lib/Controllers/UserController.js +11 -72
  77. package/lib/Controllers/index.js +19 -68
  78. package/lib/Controllers/types.js +1 -1
  79. package/lib/Deprecator/Deprecations.js +1 -8
  80. package/lib/Deprecator/Deprecator.js +9 -18
  81. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  82. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  83. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  84. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  85. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  86. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  87. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  88. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  89. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  90. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  91. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  92. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  93. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  94. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  95. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  96. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  97. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  98. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  99. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  100. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  101. package/lib/GraphQL/transformers/className.js +1 -4
  102. package/lib/GraphQL/transformers/constraintType.js +1 -20
  103. package/lib/GraphQL/transformers/inputType.js +1 -20
  104. package/lib/GraphQL/transformers/mutation.js +6 -51
  105. package/lib/GraphQL/transformers/outputType.js +1 -20
  106. package/lib/GraphQL/transformers/query.js +6 -42
  107. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  108. package/lib/KeyPromiseQueue.js +1 -12
  109. package/lib/LiveQuery/Client.js +1 -25
  110. package/lib/LiveQuery/Id.js +1 -7
  111. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  112. package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
  113. package/lib/LiveQuery/ParsePubSub.js +1 -12
  114. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  115. package/lib/LiveQuery/QueryTools.js +14 -116
  116. package/lib/LiveQuery/RequestSchema.js +1 -1
  117. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  118. package/lib/LiveQuery/Subscription.js +4 -18
  119. package/lib/LiveQuery/equalObjects.js +2 -14
  120. package/lib/Options/Definitions.js +79 -10
  121. package/lib/Options/docs.js +23 -3
  122. package/lib/Options/index.js +4 -12
  123. package/lib/Options/parsers.js +1 -18
  124. package/lib/Page.js +1 -9
  125. package/lib/ParseMessageQueue.js +1 -10
  126. package/lib/ParseServer.js +144 -182
  127. package/lib/ParseServerRESTController.js +6 -33
  128. package/lib/PromiseRouter.js +16 -50
  129. package/lib/Push/PushQueue.js +3 -15
  130. package/lib/Push/PushWorker.js +7 -32
  131. package/lib/Push/utils.js +9 -38
  132. package/lib/RestQuery.js +105 -242
  133. package/lib/RestWrite.js +212 -377
  134. package/lib/Routers/AggregateRouter.js +14 -51
  135. package/lib/Routers/AnalyticsRouter.js +2 -8
  136. package/lib/Routers/AudiencesRouter.js +1 -15
  137. package/lib/Routers/ClassesRouter.js +3 -53
  138. package/lib/Routers/CloudCodeRouter.js +1 -19
  139. package/lib/Routers/FeaturesRouter.js +1 -10
  140. package/lib/Routers/FilesRouter.js +29 -76
  141. package/lib/Routers/FunctionsRouter.js +5 -28
  142. package/lib/Routers/GlobalConfigRouter.js +4 -18
  143. package/lib/Routers/GraphQLRouter.js +1 -14
  144. package/lib/Routers/HooksRouter.js +1 -29
  145. package/lib/Routers/IAPValidationRouter.js +6 -29
  146. package/lib/Routers/InstallationsRouter.js +2 -12
  147. package/lib/Routers/LogsRouter.js +4 -16
  148. package/lib/Routers/PagesRouter.js +69 -129
  149. package/lib/Routers/PublicAPIRouter.js +3 -62
  150. package/lib/Routers/PurgeRouter.js +1 -15
  151. package/lib/Routers/PushRouter.js +2 -18
  152. package/lib/Routers/RolesRouter.js +1 -7
  153. package/lib/Routers/SchemasRouter.js +4 -34
  154. package/lib/Routers/SecurityRouter.js +1 -12
  155. package/lib/Routers/SessionsRouter.js +3 -19
  156. package/lib/Routers/UsersRouter.js +58 -155
  157. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  158. package/lib/SchemaMigrations/Migrations.js +2 -8
  159. package/lib/Security/Check.js +8 -16
  160. package/lib/Security/CheckGroup.js +4 -11
  161. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  162. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  163. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  164. package/lib/Security/CheckRunner.js +22 -41
  165. package/lib/StatusHandler.js +12 -69
  166. package/lib/TestUtils.js +1 -6
  167. package/lib/Utils.js +27 -66
  168. package/lib/batch.js +17 -28
  169. package/lib/cache.js +1 -3
  170. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  171. package/lib/cli/definitions/parse-server.js +1 -3
  172. package/lib/cli/parse-live-query-server.js +1 -6
  173. package/lib/cli/parse-server.js +11 -21
  174. package/lib/cli/utils/commander.js +13 -51
  175. package/lib/cli/utils/runner.js +1 -14
  176. package/lib/cloud-code/Parse.Cloud.js +71 -92
  177. package/lib/cryptoUtils.js +11 -19
  178. package/lib/defaults.js +2 -14
  179. package/lib/deprecated.js +1 -2
  180. package/lib/index.js +16 -34
  181. package/lib/logger.js +6 -13
  182. package/lib/middlewares.js +147 -151
  183. package/lib/password.js +6 -10
  184. package/lib/request.js +173 -2
  185. package/lib/requiredParameter.js +1 -3
  186. package/lib/rest.js +19 -41
  187. package/lib/triggers.js +54 -252
  188. package/lib/vendor/mongodbUrl.js +125 -305
  189. package/package.json +22 -19
  190. package/lib/cloud-code/HTTPResponse.js +0 -73
  191. package/lib/cloud-code/httpRequest.js +0 -192
@@ -4,23 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FunctionsRouter = void 0;
7
-
8
7
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
9
-
10
8
  var _middlewares = require("../middlewares");
11
-
12
9
  var _StatusHandler = require("../StatusHandler");
13
-
14
10
  var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
11
  var _logger = require("../logger");
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  // FunctionsRouter.js
21
- var Parse = require('parse/node').Parse,
22
- triggers = require('../triggers');
23
14
 
15
+ var Parse = require('parse/node').Parse,
16
+ triggers = require('../triggers');
24
17
  function parseObject(obj) {
25
18
  if (Array.isArray(obj)) {
26
19
  return obj.map(item => {
@@ -36,11 +29,9 @@ function parseObject(obj) {
36
29
  return obj;
37
30
  }
38
31
  }
39
-
40
32
  function parseParams(params) {
41
33
  return _lodash.default.mapValues(params, parseObject);
42
34
  }
43
-
44
35
  class FunctionsRouter extends _PromiseRouter.default {
45
36
  mountRoutes() {
46
37
  this.route('POST', '/functions/:functionName', _middlewares.promiseEnsureIdempotency, FunctionsRouter.handleCloudFunction);
@@ -51,17 +42,14 @@ class FunctionsRouter extends _PromiseRouter.default {
51
42
  return FunctionsRouter.handleCloudJob(req);
52
43
  });
53
44
  }
54
-
55
45
  static handleCloudJob(req) {
56
46
  const jobName = req.params.jobName || req.body.jobName;
57
47
  const applicationId = req.config.applicationId;
58
48
  const jobHandler = (0, _StatusHandler.jobStatusHandler)(req.config);
59
49
  const jobFunction = triggers.getJob(jobName, applicationId);
60
-
61
50
  if (!jobFunction) {
62
51
  throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Invalid job.');
63
52
  }
64
-
65
53
  let params = Object.assign({}, req.body, req.query);
66
54
  params = parseParams(params);
67
55
  const request = {
@@ -73,8 +61,8 @@ class FunctionsRouter extends _PromiseRouter.default {
73
61
  message: jobHandler.setMessage.bind(jobHandler)
74
62
  };
75
63
  return jobHandler.setRunning(jobName, params).then(jobStatus => {
76
- request.jobId = jobStatus.objectId; // run the function async
77
-
64
+ request.jobId = jobStatus.objectId;
65
+ // run the function async
78
66
  process.nextTick(() => {
79
67
  Promise.resolve().then(() => {
80
68
  return jobFunction(request);
@@ -92,7 +80,6 @@ class FunctionsRouter extends _PromiseRouter.default {
92
80
  };
93
81
  });
94
82
  }
95
-
96
83
  static createResponseObject(resolve, reject) {
97
84
  return {
98
85
  success: function (result) {
@@ -108,16 +95,13 @@ class FunctionsRouter extends _PromiseRouter.default {
108
95
  }
109
96
  };
110
97
  }
111
-
112
98
  static handleCloudFunction(req) {
113
99
  const functionName = req.params.functionName;
114
100
  const applicationId = req.config.applicationId;
115
101
  const theFunction = triggers.getFunction(functionName, applicationId);
116
-
117
102
  if (!theFunction) {
118
103
  throw new Parse.Error(Parse.Error.SCRIPT_FAILED, `Invalid function: "${functionName}"`);
119
104
  }
120
-
121
105
  let params = Object.assign({}, req.body, req.query);
122
106
  params = parseParams(params);
123
107
  const request = {
@@ -133,22 +117,18 @@ class FunctionsRouter extends _PromiseRouter.default {
133
117
  };
134
118
  return new Promise(function (resolve, reject) {
135
119
  const userString = req.auth && req.auth.user ? req.auth.user.id : undefined;
136
-
137
120
  const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
138
-
139
121
  const {
140
122
  success,
141
123
  error
142
124
  } = FunctionsRouter.createResponseObject(result => {
143
125
  try {
144
126
  const cleanResult = _logger.logger.truncateLogMessage(JSON.stringify(result.response.result));
145
-
146
127
  _logger.logger.info(`Ran cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Result: ${cleanResult}`, {
147
128
  functionName,
148
129
  params,
149
130
  user: userString
150
131
  });
151
-
152
132
  resolve(result);
153
133
  } catch (e) {
154
134
  reject(e);
@@ -161,7 +141,6 @@ class FunctionsRouter extends _PromiseRouter.default {
161
141
  params,
162
142
  user: userString
163
143
  });
164
-
165
144
  reject(error);
166
145
  } catch (e) {
167
146
  reject(e);
@@ -174,8 +153,6 @@ class FunctionsRouter extends _PromiseRouter.default {
174
153
  }).then(success, error);
175
154
  });
176
155
  }
177
-
178
156
  }
179
-
180
157
  exports.FunctionsRouter = FunctionsRouter;
181
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0Z1bmN0aW9uc1JvdXRlci5qcyJdLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJ0cmlnZ2VycyIsInBhcnNlT2JqZWN0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIl9fdHlwZSIsIk9iamVjdCIsImFzc2lnbiIsIkRhdGUiLCJpc28iLCJGaWxlIiwiZnJvbUpTT04iLCJwYXJzZVBhcmFtcyIsInBhcmFtcyIsIl8iLCJtYXBWYWx1ZXMiLCJGdW5jdGlvbnNSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImhhbmRsZUNsb3VkRnVuY3Rpb24iLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcSIsImhhbmRsZUNsb3VkSm9iIiwiam9iTmFtZSIsImJvZHkiLCJhcHBsaWNhdGlvbklkIiwiY29uZmlnIiwiam9iSGFuZGxlciIsImpvYkZ1bmN0aW9uIiwiZ2V0Sm9iIiwiRXJyb3IiLCJTQ1JJUFRfRkFJTEVEIiwicXVlcnkiLCJyZXF1ZXN0IiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImhlYWRlcnMiLCJpcCIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwiYmluZCIsInNldFJ1bm5pbmciLCJ0aGVuIiwiam9iU3RhdHVzIiwiam9iSWQiLCJvYmplY3RJZCIsInByb2Nlc3MiLCJuZXh0VGljayIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzdWx0Iiwic2V0U3VjY2VlZGVkIiwiZXJyb3IiLCJzZXRGYWlsZWQiLCJyZXNwb25zZSIsImNyZWF0ZVJlc3BvbnNlT2JqZWN0IiwicmVqZWN0Iiwic3VjY2VzcyIsIl9lbmNvZGUiLCJyZXNvbHZlRXJyb3IiLCJmdW5jdGlvbk5hbWUiLCJ0aGVGdW5jdGlvbiIsImdldEZ1bmN0aW9uIiwibWFzdGVyIiwiYXV0aCIsImlzTWFzdGVyIiwidXNlciIsImluc3RhbGxhdGlvbklkIiwiaW5mbyIsImNvbnRleHQiLCJ1c2VyU3RyaW5nIiwiaWQiLCJ1bmRlZmluZWQiLCJjbGVhbklucHV0IiwibG9nZ2VyIiwidHJ1bmNhdGVMb2dNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuUmVzdWx0IiwiZSIsIm1heWJlUnVuVmFsaWRhdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFUQTtBQUVBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBUCxDQUFzQkQsS0FBbEM7QUFBQSxJQUNFRSxRQUFRLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBRHBCOztBQVNBLFNBQVNFLFdBQVQsQ0FBcUJDLEdBQXJCLEVBQTBCO0FBQ3hCLE1BQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixHQUFkLENBQUosRUFBd0I7QUFDdEIsV0FBT0EsR0FBRyxDQUFDRyxHQUFKLENBQVFDLElBQUksSUFBSTtBQUNyQixhQUFPTCxXQUFXLENBQUNLLElBQUQsQ0FBbEI7QUFDRCxLQUZNLENBQVA7QUFHRCxHQUpELE1BSU8sSUFBSUosR0FBRyxJQUFJQSxHQUFHLENBQUNLLE1BQUosSUFBYyxNQUF6QixFQUFpQztBQUN0QyxXQUFPQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxJQUFJQyxJQUFKLENBQVNSLEdBQUcsQ0FBQ1MsR0FBYixDQUFkLEVBQWlDVCxHQUFqQyxDQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDSyxNQUFKLElBQWMsTUFBekIsRUFBaUM7QUFDdEMsV0FBT1QsS0FBSyxDQUFDYyxJQUFOLENBQVdDLFFBQVgsQ0FBb0JYLEdBQXBCLENBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSUEsR0FBRyxJQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUExQixFQUFvQztBQUN6QyxXQUFPWSxXQUFXLENBQUNaLEdBQUQsQ0FBbEI7QUFDRCxHQUZNLE1BRUE7QUFDTCxXQUFPQSxHQUFQO0FBQ0Q7QUFDRjs7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QW9DMkIsWUFBcEMsRUFBa0R2QyxHQUFHLENBQUMyQyxJQUF0RCxDQUFQO0FBQ0QsT0FISSxFQUlKdEIsSUFKSSxDQUlDLE1BQU07QUFDVixlQUFPbUIsV0FBVyxDQUFDNUIsT0FBRCxDQUFsQjtBQUNELE9BTkksRUFPSlMsSUFQSSxDQU9DZSxPQVBELEVBT1VMLEtBUFYsQ0FBUDtBQVFELEtBOUNNLENBQVA7QUErQ0Q7O0FBdkpnRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZ1bmN0aW9uc1JvdXRlci5qc1xuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcblxuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgeyBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHsgam9iU3RhdHVzSGFuZGxlciB9IGZyb20gJy4uL1N0YXR1c0hhbmRsZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0KG9iaikge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VPYmplY3QoaXRlbSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob2JqICYmIG9iai5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IERhdGUob2JqLmlzbyksIG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIG9iai5fX3R5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgcmV0dXJuIFBhcnNlLkZpbGUuZnJvbUpTT04ob2JqKTtcbiAgfSBlbHNlIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gcGFyc2VQYXJhbXMob2JqKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zKHBhcmFtcykge1xuICByZXR1cm4gXy5tYXBWYWx1ZXMocGFyYW1zLCBwYXJzZU9iamVjdCk7XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNSb3V0ZXIgZXh0ZW5kcyBQcm9taXNlUm91dGVyIHtcbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQT1NUJyxcbiAgICAgICcvZnVuY3Rpb25zLzpmdW5jdGlvbk5hbWUnLFxuICAgICAgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LFxuICAgICAgRnVuY3Rpb25zUm91dGVyLmhhbmRsZUNsb3VkRnVuY3Rpb25cbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2pvYnMvOmpvYk5hbWUnLFxuICAgICAgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5LFxuICAgICAgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2pvYnMnLCBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgZnVuY3Rpb24gKHJlcSkge1xuICAgICAgcmV0dXJuIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEpvYihyZXEpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUNsb3VkSm9iKHJlcSkge1xuICAgIGNvbnN0IGpvYk5hbWUgPSByZXEucGFyYW1zLmpvYk5hbWUgfHwgcmVxLmJvZHkuam9iTmFtZTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gcmVxLmNvbmZpZy5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IGpvYkhhbmRsZXIgPSBqb2JTdGF0dXNIYW5kbGVyKHJlcS5jb25maWcpO1xuICAgIGNvbnN0IGpvYkZ1bmN0aW9uID0gdHJpZ2dlcnMuZ2V0Sm9iKGpvYk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICgham9iRnVuY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELCAnSW52YWxpZCBqb2IuJyk7XG4gICAgfVxuICAgIGxldCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCByZXEuYm9keSwgcmVxLnF1ZXJ5KTtcbiAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIGxvZzogcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgICAgaGVhZGVyczogcmVxLmNvbmZpZy5oZWFkZXJzLFxuICAgICAgaXA6IHJlcS5jb25maWcuaXAsXG4gICAgICBqb2JOYW1lLFxuICAgICAgbWVzc2FnZTogam9iSGFuZGxlci5zZXRNZXNzYWdlLmJpbmQoam9iSGFuZGxlciksXG4gICAgfTtcblxuICAgIHJldHVybiBqb2JIYW5kbGVyLnNldFJ1bm5pbmcoam9iTmFtZSwgcGFyYW1zKS50aGVuKGpvYlN0YXR1cyA9PiB7XG4gICAgICByZXF1ZXN0LmpvYklkID0gam9iU3RhdHVzLm9iamVjdElkO1xuICAgICAgLy8gcnVuIHRoZSBmdW5jdGlvbiBhc3luY1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGpvYkZ1bmN0aW9uKHJlcXVlc3QpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICBqb2JIYW5kbGVyLnNldFN1Y2NlZWRlZChyZXN1bHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgam9iSGFuZGxlci5zZXRGYWlsZWQoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkJzogam9iU3RhdHVzLm9iamVjdElkLFxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVJlc3BvbnNlT2JqZWN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICByZXN1bHQ6IFBhcnNlLl9lbmNvZGUocmVzdWx0KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGhhbmRsZUNsb3VkRnVuY3Rpb24ocmVxKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxLnBhcmFtcy5mdW5jdGlvbk5hbWU7XG4gICAgY29uc3QgYXBwbGljYXRpb25JZCA9IHJlcS5jb25maWcuYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB0aGVGdW5jdGlvbiA9IHRyaWdnZXJzLmdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG5cbiAgICBpZiAoIXRoZUZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCwgYEludmFsaWQgZnVuY3Rpb246IFwiJHtmdW5jdGlvbk5hbWV9XCJgKTtcbiAgICB9XG4gICAgbGV0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5LCByZXEucXVlcnkpO1xuICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHBhcmFtcyk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgbWFzdGVyOiByZXEuYXV0aCAmJiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgIHVzZXI6IHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBsb2c6IHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICAgIGhlYWRlcnM6IHJlcS5jb25maWcuaGVhZGVycyxcbiAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgY29udGV4dDogcmVxLmluZm8uY29udGV4dCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IHVzZXJTdHJpbmcgPSByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNsZWFuSW5wdXQgPSBsb2dnZXIudHJ1bmNhdGVMb2dNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpO1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gRnVuY3Rpb25zUm91dGVyLmNyZWF0ZVJlc3BvbnNlT2JqZWN0KFxuICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhblJlc3VsdCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0LnJlc3BvbnNlLnJlc3VsdCkpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBSYW4gY2xvdWQgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9IGZvciB1c2VyICR7dXNlclN0cmluZ30gd2l0aDpcXG4gIElucHV0OiAke2NsZWFuSW5wdXR9XFxuICBSZXN1bHQ6ICR7Y2xlYW5SZXN1bHR9YCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGVycm9yKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRyaWdnZXJzLm1heWJlUnVuVmFsaWRhdG9yKHJlcXVlc3QsIGZ1bmN0aW9uTmFtZSwgcmVxLmF1dGgpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoZUZ1bmN0aW9uKHJlcXVlc3QpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihzdWNjZXNzLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
158
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJ0cmlnZ2VycyIsInBhcnNlT2JqZWN0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIl9fdHlwZSIsIk9iamVjdCIsImFzc2lnbiIsIkRhdGUiLCJpc28iLCJGaWxlIiwiZnJvbUpTT04iLCJwYXJzZVBhcmFtcyIsInBhcmFtcyIsIl8iLCJtYXBWYWx1ZXMiLCJGdW5jdGlvbnNSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImhhbmRsZUNsb3VkRnVuY3Rpb24iLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcSIsImhhbmRsZUNsb3VkSm9iIiwiam9iTmFtZSIsImJvZHkiLCJhcHBsaWNhdGlvbklkIiwiY29uZmlnIiwiam9iSGFuZGxlciIsImpvYlN0YXR1c0hhbmRsZXIiLCJqb2JGdW5jdGlvbiIsImdldEpvYiIsIkVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsInF1ZXJ5IiwicmVxdWVzdCIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJoZWFkZXJzIiwiaXAiLCJtZXNzYWdlIiwic2V0TWVzc2FnZSIsImJpbmQiLCJzZXRSdW5uaW5nIiwidGhlbiIsImpvYlN0YXR1cyIsImpvYklkIiwib2JqZWN0SWQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdCIsInNldFN1Y2NlZWRlZCIsImVycm9yIiwic2V0RmFpbGVkIiwicmVzcG9uc2UiLCJjcmVhdGVSZXNwb25zZU9iamVjdCIsInJlamVjdCIsInN1Y2Nlc3MiLCJfZW5jb2RlIiwicmVzb2x2ZUVycm9yIiwiZnVuY3Rpb25OYW1lIiwidGhlRnVuY3Rpb24iLCJnZXRGdW5jdGlvbiIsIm1hc3RlciIsImF1dGgiLCJpc01hc3RlciIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsImluZm8iLCJjb250ZXh0IiwidXNlclN0cmluZyIsImlkIiwidW5kZWZpbmVkIiwiY2xlYW5JbnB1dCIsImxvZ2dlciIsInRydW5jYXRlTG9nTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhblJlc3VsdCIsImUiLCJtYXliZVJ1blZhbGlkYXRvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0Z1bmN0aW9uc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGdW5jdGlvbnNSb3V0ZXIuanNcblxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlLFxuICB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5cbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0IHsgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCB7IGpvYlN0YXR1c0hhbmRsZXIgfSBmcm9tICcuLi9TdGF0dXNIYW5kbGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9sb2dnZXInO1xuXG5mdW5jdGlvbiBwYXJzZU9iamVjdChvYmopIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0KGl0ZW0pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdEYXRlJykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBEYXRlKG9iai5pc28pLCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdGaWxlJykge1xuICAgIHJldHVybiBQYXJzZS5GaWxlLmZyb21KU09OKG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHBhcnNlUGFyYW1zKG9iaik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIF8ubWFwVmFsdWVzKHBhcmFtcywgcGFyc2VPYmplY3QpO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2Z1bmN0aW9ucy86ZnVuY3Rpb25OYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9qb2JzLzpqb2JOYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgZnVuY3Rpb24gKHJlcSkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25zUm91dGVyLmhhbmRsZUNsb3VkSm9iKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9qb2JzJywgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIGZ1bmN0aW9uIChyZXEpIHtcbiAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVDbG91ZEpvYihyZXEpIHtcbiAgICBjb25zdCBqb2JOYW1lID0gcmVxLnBhcmFtcy5qb2JOYW1lIHx8IHJlcS5ib2R5LmpvYk5hbWU7XG4gICAgY29uc3QgYXBwbGljYXRpb25JZCA9IHJlcS5jb25maWcuYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCBqb2JIYW5kbGVyID0gam9iU3RhdHVzSGFuZGxlcihyZXEuY29uZmlnKTtcbiAgICBjb25zdCBqb2JGdW5jdGlvbiA9IHRyaWdnZXJzLmdldEpvYihqb2JOYW1lLCBhcHBsaWNhdGlvbklkKTtcbiAgICBpZiAoIWpvYkZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCwgJ0ludmFsaWQgam9iLicpO1xuICAgIH1cbiAgICBsZXQgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxLmJvZHksIHJlcS5xdWVyeSk7XG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMocGFyYW1zKTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBsb2c6IHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICAgIGhlYWRlcnM6IHJlcS5jb25maWcuaGVhZGVycyxcbiAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgam9iTmFtZSxcbiAgICAgIG1lc3NhZ2U6IGpvYkhhbmRsZXIuc2V0TWVzc2FnZS5iaW5kKGpvYkhhbmRsZXIpLFxuICAgIH07XG5cbiAgICByZXR1cm4gam9iSGFuZGxlci5zZXRSdW5uaW5nKGpvYk5hbWUsIHBhcmFtcykudGhlbihqb2JTdGF0dXMgPT4ge1xuICAgICAgcmVxdWVzdC5qb2JJZCA9IGpvYlN0YXR1cy5vYmplY3RJZDtcbiAgICAgIC8vIHJ1biB0aGUgZnVuY3Rpb24gYXN5bmNcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBqb2JGdW5jdGlvbihyZXF1ZXN0KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgam9iSGFuZGxlci5zZXRTdWNjZWVkZWQocmVzdWx0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGpvYkhhbmRsZXIuc2V0RmFpbGVkKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtUGFyc2UtSm9iLVN0YXR1cy1JZCc6IGpvYlN0YXR1cy5vYmplY3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVSZXNwb25zZU9iamVjdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcmVzdWx0OiBQYXJzZS5fZW5jb2RlKHJlc3VsdCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKG1lc3NhZ2UpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBoYW5kbGVDbG91ZEZ1bmN0aW9uKHJlcSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcS5wYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdGhlRnVuY3Rpb24gPSB0cmlnZ2Vycy5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuXG4gICAgaWYgKCF0aGVGdW5jdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsIGBJbnZhbGlkIGZ1bmN0aW9uOiBcIiR7ZnVuY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuICAgIGxldCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCByZXEuYm9keSwgcmVxLnF1ZXJ5KTtcbiAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIG1hc3RlcjogcmVxLmF1dGggJiYgcmVxLmF1dGguaXNNYXN0ZXIsXG4gICAgICB1c2VyOiByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgbG9nOiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIsXG4gICAgICBoZWFkZXJzOiByZXEuY29uZmlnLmhlYWRlcnMsXG4gICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGNvbnRleHQ6IHJlcS5pbmZvLmNvbnRleHQsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCB1c2VyU3RyaW5nID0gcmVxLmF1dGggJiYgcmVxLmF1dGgudXNlciA/IHJlcS5hdXRoLnVzZXIuaWQgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IEZ1bmN0aW9uc1JvdXRlci5jcmVhdGVSZXNwb25zZU9iamVjdChcbiAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSBsb2dnZXIudHJ1bmNhdGVMb2dNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5yZXNwb25zZS5yZXN1bHQpKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICBgUmFuIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgUmVzdWx0OiAke2NsZWFuUmVzdWx0fWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgcnVubmluZyBjbG91ZCBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoOlxcbiAgSW5wdXQ6ICR7Y2xlYW5JbnB1dH1cXG4gIEVycm9yOiBgICtcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlcnJvciksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBmdW5jdGlvbk5hbWUsIHJlcS5hdXRoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGVGdW5jdGlvbihyZXF1ZXN0KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oc3VjY2VzcywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBbUM7QUFUbkM7O0FBRUEsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7RUFDckNFLFFBQVEsR0FBR0QsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQVFuQyxTQUFTRSxXQUFXLENBQUNDLEdBQUcsRUFBRTtFQUN4QixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7SUFDdEIsT0FBT0EsR0FBRyxDQUFDRyxHQUFHLENBQUNDLElBQUksSUFBSTtNQUNyQixPQUFPTCxXQUFXLENBQUNLLElBQUksQ0FBQztJQUMxQixDQUFDLENBQUM7RUFDSixDQUFDLE1BQU0sSUFBSUosR0FBRyxJQUFJQSxHQUFHLENBQUNLLE1BQU0sSUFBSSxNQUFNLEVBQUU7SUFDdEMsT0FBT0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSUMsSUFBSSxDQUFDUixHQUFHLENBQUNTLEdBQUcsQ0FBQyxFQUFFVCxHQUFHLENBQUM7RUFDOUMsQ0FBQyxNQUFNLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDSyxNQUFNLElBQUksTUFB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
@@ -4,20 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.GlobalConfigRouter = void 0;
7
-
8
7
  var _node = _interopRequireDefault(require("parse/node"));
9
-
10
8
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
11
-
12
9
  var middleware = _interopRequireWildcard(require("../middlewares"));
13
-
14
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  // global_config.js
14
+
21
15
  class GlobalConfigRouter extends _PromiseRouter.default {
22
16
  getGlobalConfig(req) {
23
17
  return req.config.database.find('_GlobalConfig', {
@@ -33,9 +27,7 @@ class GlobalConfigRouter extends _PromiseRouter.default {
33
27
  }
34
28
  };
35
29
  }
36
-
37
30
  const globalConfig = results[0];
38
-
39
31
  if (!req.auth.isMaster && globalConfig.masterKeyOnly !== undefined) {
40
32
  for (const param in globalConfig.params) {
41
33
  if (globalConfig.masterKeyOnly[param]) {
@@ -44,7 +36,6 @@ class GlobalConfigRouter extends _PromiseRouter.default {
44
36
  }
45
37
  }
46
38
  }
47
-
48
39
  return {
49
40
  response: {
50
41
  params: globalConfig.params,
@@ -53,15 +44,13 @@ class GlobalConfigRouter extends _PromiseRouter.default {
53
44
  };
54
45
  });
55
46
  }
56
-
57
47
  updateGlobalConfig(req) {
58
48
  if (req.auth.isReadOnly) {
59
49
  throw new _node.default.Error(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the config.");
60
50
  }
61
-
62
51
  const params = req.body.params;
63
- const masterKeyOnly = req.body.masterKeyOnly || {}; // Transform in dot notation to make sure it works
64
-
52
+ const masterKeyOnly = req.body.masterKeyOnly || {};
53
+ // Transform in dot notation to make sure it works
65
54
  const update = Object.keys(params).reduce((acc, key) => {
66
55
  acc[`params.${key}`] = params[key];
67
56
  acc[`masterKeyOnly.${key}`] = masterKeyOnly[key] || false;
@@ -77,7 +66,6 @@ class GlobalConfigRouter extends _PromiseRouter.default {
77
66
  }
78
67
  }));
79
68
  }
80
-
81
69
  mountRoutes() {
82
70
  this.route('GET', '/config', req => {
83
71
  return this.getGlobalConfig(req);
@@ -86,10 +74,8 @@ class GlobalConfigRouter extends _PromiseRouter.default {
86
74
  return this.updateGlobalConfig(req);
87
75
  });
88
76
  }
89
-
90
77
  }
91
-
92
78
  exports.GlobalConfigRouter = GlobalConfigRouter;
93
79
  var _default = GlobalConfigRouter;
94
80
  exports.default = _default;
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dsb2JhbENvbmZpZ1JvdXRlci5qcyJdLCJuYW1lcyI6WyJHbG9iYWxDb25maWdSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiZ2V0R2xvYmFsQ29uZmlnIiwicmVxIiwiY29uZmlnIiwiZGF0YWJhc2UiLCJmaW5kIiwib2JqZWN0SWQiLCJsaW1pdCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwicmVzcG9uc2UiLCJwYXJhbXMiLCJnbG9iYWxDb25maWciLCJhdXRoIiwiaXNNYXN0ZXIiLCJtYXN0ZXJLZXlPbmx5IiwidW5kZWZpbmVkIiwicGFyYW0iLCJ1cGRhdGVHbG9iYWxDb25maWciLCJpc1JlYWRPbmx5IiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJib2R5IiwidXBkYXRlIiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImFjYyIsImtleSIsInVwc2VydCIsInJlc3VsdCIsIm1vdW50Um91dGVzIiwicm91dGUiLCJtaWRkbGV3YXJlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFIQTtBQUtPLE1BQU1BLGtCQUFOLFNBQWlDQyxzQkFBakMsQ0FBK0M7QUFDcERDLEVBQUFBLGVBQWUsQ0FBQ0MsR0FBRCxFQUFNO0FBQ25CLFdBQU9BLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxRQUFYLENBQ0pDLElBREksQ0FDQyxlQURELEVBQ2tCO0FBQUVDLE1BQUFBLFFBQVEsRUFBRTtBQUFaLEtBRGxCLEVBQ3FDO0FBQUVDLE1BQUFBLEtBQUssRUFBRTtBQUFULEtBRHJDLEVBRUpDLElBRkksQ0FFQ0MsT0FBTyxJQUFJO0FBQ2YsVUFBSUEsT0FBTyxDQUFDQyxNQUFSLElBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCO0FBQ0EsZUFBTztBQUFFQyxVQUFBQSxRQUFRLEVBQUU7QUFBRUMsWUFBQUEsTUFBTSxFQUFFO0FBQVY7QUFBWixTQUFQO0FBQ0Q7O0FBQ0QsWUFBTUMsWUFBWSxHQUFHSixPQUFPLENBQUMsQ0FBRCxDQUE1Qjs7QUFDQSxVQUFJLENBQUNQLEdBQUcsQ0FBQ1ksSUFBSixDQUFTQyxRQUFWLElBQXNCRixZQUFZLENBQUNHLGFBQWIsS0FBK0JDLFNBQXpELEVBQW9FO0FBQ2xFLGFBQUssTUFBTUMsS0FBWCxJQUFvQkwsWUFBWSxDQUFDRCxNQUFqQyxFQUF5QztBQUN2QyxjQUFJQyxZQUFZLENBQUNHLGFBQWIsQ0FBMkJFLEtBQTNCLENBQUosRUFBdUM7QUFDckMsbUJBQU9MLFlBQVksQ0FBQ0QsTUFBYixDQUFvQk0sS0FBcEIsQ0FBUDtBQUNBLG1CQUFPTCxZQUFZLENBQUNHLGFBQWIsQ0FBMkJFLEtBQTNCLENBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsYUFBTztBQUNMUCxRQUFBQSxRQUFRLEVBQUU7QUFDUkMsVUFBQUEsTUFBTSxFQUFFQyxZQUFZLENBQUNELE1BRGI7QUFFUkksVUFBQUEsYUFBYSxFQUFFSCxZQUFZLENBQUNHO0FBRnBCO0FBREwsT0FBUDtBQU1ELEtBdEJJLENBQVA7QUF1QkQ7O0FBRURHLEVBQUFBLGtCQUFrQixDQUFDakIsR0FBRCxFQUFNO0FBQ3RCLFFBQUlBLEdBQUcsQ0FBQ1ksSUFBSixDQUFTTSxVQUFiLEVBQXlCO0FBQ3ZCLFlBQU0sSUFBSUMsY0FBTUMsS0FBVixDQUNKRCxjQUFNQyxLQUFOLENBQVlDLG1CQURSLEVBRUoseURBRkksQ0FBTjtBQUlEOztBQUNELFVBQU1YLE1BQU0sR0FBR1YsR0FBRyxDQUFDc0IsSUFBSixDQUFTWixNQUF4QjtBQUNBLFVBQU1JLGFBQWEsR0FBR2QsR0FBRyxDQUFDc0IsSUFBSixDQUFTUixhQUFULElBQTBCLEVBQWhELENBUnNCLENBU3RCOztBQUNBLFVBQU1TLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlmLE1BQVosRUFBb0JnQixNQUFwQixDQUEyQixDQUFDQyxHQUFELEVBQU1DLEdBQU4sS0FBYztBQUN0REQsTUFBQUEsR0FBRyxDQUFFLFVBQVNDLEdBQUksRUFBZixDQUFILEdBQXVCbEIsTUFBTSxDQUFDa0IsR0FBRCxDQUE3QjtBQUNBRCxNQUFBQSxHQUFHLENBQUUsaUJBQWdCQyxHQUFJLEVBQXRCLENBQUgsR0FBOEJkLGFBQWEsQ0FBQ2MsR0FBRCxDQUFiLElBQXNCLEtBQXBEO0FBQ0EsYUFBT0QsR0FBUDtBQUNELEtBSmMsRUFJWixFQUpZLENBQWY7QUFLQSxXQUFPM0IsR0FBRyxDQUFDQyxNQUFKLENBQVdDLFFBQVgsQ0FDSnFCLE1BREksQ0FDRyxlQURILEVBQ29CO0FBQUVuQixNQUFBQSxRQUFRLEVBQUU7QUFBWixLQURwQixFQUN1Q21CLE1BRHZDLEVBQytDO0FBQUVNLE1BQUFBLE1BQU0sRUFBRTtBQUFWLEtBRC9DLEVBRUp2QixJQUZJLENBRUMsT0FBTztBQUFFRyxNQUFBQSxRQUFRLEVBQUU7QUFBRXFCLFFBQUFBLE1BQU0sRUFBRTtBQUFWO0FBQVosS0FBUCxDQUZELENBQVA7QUFHRDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1osU0FBS0MsS0FBTCxDQUFXLEtBQVgsRUFBa0IsU0FBbEIsRUFBNkJoQyxHQUFHLElBQUk7QUFDbEMsYUFBTyxLQUFLRCxlQUFMLENBQXFCQyxHQUFyQixDQUFQO0FBQ0QsS0FGRDtBQUdBLFNBQUtnQyxLQUFMLENBQVcsS0FBWCxFQUFrQixTQUFsQixFQUE2QkMsVUFBVSxDQUFDQyw2QkFBeEMsRUFBdUVsQyxHQUFHLElBQUk7QUFDNUUsYUFBTyxLQUFLaUIsa0JBQUwsQ0FBd0JqQixHQUF4QixDQUFQO0FBQ0QsS0FGRDtBQUdEOztBQXREbUQ7OztlQXlEdkNILGtCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2xvYmFsX2NvbmZpZy5qc1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBnZXRHbG9iYWxDb25maWcocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2VcbiAgICAgIC5maW5kKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHsgbGltaXQ6IDEgfSlcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNvbmZpZyBpbiB0aGUgZGF0YWJhc2UgLSByZXR1cm4gZW1wdHkgY29uZmlnLlxuICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczoge30gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IHJlc3VsdHNbMF07XG4gICAgICAgIGlmICghcmVxLmF1dGguaXNNYXN0ZXIgJiYgZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyYW0gaW4gZ2xvYmFsQ29uZmlnLnBhcmFtcykge1xuICAgICAgICAgICAgaWYgKGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5W3BhcmFtXSkge1xuICAgICAgICAgICAgICBkZWxldGUgZ2xvYmFsQ29uZmlnLnBhcmFtc1twYXJhbV07XG4gICAgICAgICAgICAgIGRlbGV0ZSBnbG9iYWxDb25maWcubWFzdGVyS2V5T25seVtwYXJhbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIHBhcmFtczogZ2xvYmFsQ29uZmlnLnBhcmFtcyxcbiAgICAgICAgICAgIG1hc3RlcktleU9ubHk6IGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUdsb2JhbENvbmZpZyhyZXEpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byB1cGRhdGUgdGhlIGNvbmZpZy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zID0gcmVxLmJvZHkucGFyYW1zO1xuICAgIGNvbnN0IG1hc3RlcktleU9ubHkgPSByZXEuYm9keS5tYXN0ZXJLZXlPbmx5IHx8IHt9O1xuICAgIC8vIFRyYW5zZm9ybSBpbiBkb3Qgbm90YXRpb24gdG8gbWFrZSBzdXJlIGl0IHdvcmtzXG4gICAgY29uc3QgdXBkYXRlID0gT2JqZWN0LmtleXMocGFyYW1zKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2NbYHBhcmFtcy4ke2tleX1gXSA9IHBhcmFtc1trZXldO1xuICAgICAgYWNjW2BtYXN0ZXJLZXlPbmx5LiR7a2V5fWBdID0gbWFzdGVyS2V5T25seVtrZXldIHx8IGZhbHNlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2VcbiAgICAgIC51cGRhdGUoJ19HbG9iYWxDb25maWcnLCB7IG9iamVjdElkOiAnMScgfSwgdXBkYXRlLCB7IHVwc2VydDogdHJ1ZSB9KVxuICAgICAgLnRoZW4oKCkgPT4gKHsgcmVzcG9uc2U6IHsgcmVzdWx0OiB0cnVlIH0gfSkpO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jb25maWcnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9jb25maWcnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR2xvYmFsQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsQ29uZmlnUm91dGVyO1xuIl19
81
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHbG9iYWxDb25maWdSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiZ2V0R2xvYmFsQ29uZmlnIiwicmVxIiwiY29uZmlnIiwiZGF0YWJhc2UiLCJmaW5kIiwib2JqZWN0SWQiLCJsaW1pdCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwicmVzcG9uc2UiLCJwYXJhbXMiLCJnbG9iYWxDb25maWciLCJhdXRoIiwiaXNNYXN0ZXIiLCJtYXN0ZXJLZXlPbmx5IiwidW5kZWZpbmVkIiwicGFyYW0iLCJ1cGRhdGVHbG9iYWxDb25maWciLCJpc1JlYWRPbmx5IiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJib2R5IiwidXBkYXRlIiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImFjYyIsImtleSIsInVwc2VydCIsInJlc3VsdCIsIm1vdW50Um91dGVzIiwicm91dGUiLCJtaWRkbGV3YXJlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9HbG9iYWxDb25maWdSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2xvYmFsX2NvbmZpZy5qc1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBnZXRHbG9iYWxDb25maWcocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2VcbiAgICAgIC5maW5kKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHsgbGltaXQ6IDEgfSlcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGNvbmZpZyBpbiB0aGUgZGF0YWJhc2UgLSByZXR1cm4gZW1wdHkgY29uZmlnLlxuICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczoge30gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IHJlc3VsdHNbMF07XG4gICAgICAgIGlmICghcmVxLmF1dGguaXNNYXN0ZXIgJiYgZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyYW0gaW4gZ2xvYmFsQ29uZmlnLnBhcmFtcykge1xuICAgICAgICAgICAgaWYgKGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5W3BhcmFtXSkge1xuICAgICAgICAgICAgICBkZWxldGUgZ2xvYmFsQ29uZmlnLnBhcmFtc1twYXJhbV07XG4gICAgICAgICAgICAgIGRlbGV0ZSBnbG9iYWxDb25maWcubWFzdGVyS2V5T25seVtwYXJhbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIHBhcmFtczogZ2xvYmFsQ29uZmlnLnBhcmFtcyxcbiAgICAgICAgICAgIG1hc3RlcktleU9ubHk6IGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUdsb2JhbENvbmZpZyhyZXEpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byB1cGRhdGUgdGhlIGNvbmZpZy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zID0gcmVxLmJvZHkucGFyYW1zO1xuICAgIGNvbnN0IG1hc3RlcktleU9ubHkgPSByZXEuYm9keS5tYXN0ZXJLZXlPbmx5IHx8IHt9O1xuICAgIC8vIFRyYW5zZm9ybSBpbiBkb3Qgbm90YXRpb24gdG8gbWFrZSBzdXJlIGl0IHdvcmtzXG4gICAgY29uc3QgdXBkYXRlID0gT2JqZWN0LmtleXMocGFyYW1zKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2NbYHBhcmFtcy4ke2tleX1gXSA9IHBhcmFtc1trZXldO1xuICAgICAgYWNjW2BtYXN0ZXJLZXlPbmx5LiR7a2V5fWBdID0gbWFzdGVyS2V5T25seVtrZXldIHx8IGZhbHNlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2VcbiAgICAgIC51cGRhdGUoJ19HbG9iYWxDb25maWcnLCB7IG9iamVjdElkOiAnMScgfSwgdXBkYXRlLCB7IHVwc2VydDogdHJ1ZSB9KVxuICAgICAgLnRoZW4oKCkgPT4gKHsgcmVzcG9uc2U6IHsgcmVzdWx0OiB0cnVlIH0gfSkpO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jb25maWcnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9jb25maWcnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR2xvYmFsQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsQ29uZmlnUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFBNkM7QUFBQTtBQUFB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
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.GraphQLRouter = void 0;
7
-
8
7
  var _node = _interopRequireDefault(require("parse/node"));
9
-
10
8
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
11
-
12
9
  var middleware = _interopRequireWildcard(require("../middlewares"));
13
-
14
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  const GraphQLConfigPath = '/graphql-config';
21
-
22
14
  class GraphQLRouter extends _PromiseRouter.default {
23
15
  async getGraphQLConfig(req) {
24
16
  const result = await req.config.parseGraphQLController.getGraphQLConfig();
@@ -26,18 +18,15 @@ class GraphQLRouter extends _PromiseRouter.default {
26
18
  response: result
27
19
  };
28
20
  }
29
-
30
21
  async updateGraphQLConfig(req) {
31
22
  if (req.auth.isReadOnly) {
32
23
  throw new _node.default.Error(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the GraphQL config.");
33
24
  }
34
-
35
25
  const data = await req.config.parseGraphQLController.updateGraphQLConfig(req.body.params);
36
26
  return {
37
27
  response: data
38
28
  };
39
29
  }
40
-
41
30
  mountRoutes() {
42
31
  this.route('GET', GraphQLConfigPath, middleware.promiseEnforceMasterKeyAccess, req => {
43
32
  return this.getGraphQLConfig(req);
@@ -46,10 +35,8 @@ class GraphQLRouter extends _PromiseRouter.default {
46
35
  return this.updateGraphQLConfig(req);
47
36
  });
48
37
  }
49
-
50
38
  }
51
-
52
39
  exports.GraphQLRouter = GraphQLRouter;
53
40
  var _default = GraphQLRouter;
54
41
  exports.default = _default;
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dyYXBoUUxSb3V0ZXIuanMiXSwibmFtZXMiOlsiR3JhcGhRTENvbmZpZ1BhdGgiLCJHcmFwaFFMUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsImdldEdyYXBoUUxDb25maWciLCJyZXEiLCJyZXN1bHQiLCJjb25maWciLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwicmVzcG9uc2UiLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiYXV0aCIsImlzUmVhZE9ubHkiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImRhdGEiLCJib2R5IiwicGFyYW1zIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsIm1pZGRsZXdhcmUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLGlCQUExQjs7QUFFTyxNQUFNQyxhQUFOLFNBQTRCQyxzQkFBNUIsQ0FBMEM7QUFDekIsUUFBaEJDLGdCQUFnQixDQUFDQyxHQUFELEVBQU07QUFDMUIsVUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsTUFBSixDQUFXQyxzQkFBWCxDQUFrQ0osZ0JBQWxDLEVBQXJCO0FBQ0EsV0FBTztBQUNMSyxNQUFBQSxRQUFRLEVBQUVIO0FBREwsS0FBUDtBQUdEOztBQUV3QixRQUFuQkksbUJBQW1CLENBQUNMLEdBQUQsRUFBTTtBQUM3QixRQUFJQSxHQUFHLENBQUNNLElBQUosQ0FBU0MsVUFBYixFQUF5QjtBQUN2QixZQUFNLElBQUlDLGNBQU1DLEtBQVYsQ0FDSkQsY0FBTUMsS0FBTixDQUFZQyxtQkFEUixFQUVKLGlFQUZJLENBQU47QUFJRDs7QUFDRCxVQUFNQyxJQUFJLEdBQUcsTUFBTVgsR0FBRyxDQUFDRSxNQUFKLENBQVdDLHNCQUFYLENBQWtDRSxtQkFBbEMsQ0FBc0RMLEdBQUcsQ0FBQ1ksSUFBSixDQUFTQyxNQUEvRCxDQUFuQjtBQUNBLFdBQU87QUFDTFQsTUFBQUEsUUFBUSxFQUFFTztBQURMLEtBQVA7QUFHRDs7QUFFREcsRUFBQUEsV0FBVyxHQUFHO0FBQ1osU0FBS0MsS0FBTCxDQUFXLEtBQVgsRUFBa0JuQixpQkFBbEIsRUFBcUNvQixVQUFVLENBQUNDLDZCQUFoRCxFQUErRWpCLEdBQUcsSUFBSTtBQUNwRixhQUFPLEtBQUtELGdCQUFMLENBQXNCQyxHQUF0QixDQUFQO0FBQ0QsS0FGRDtBQUdBLFNBQUtlLEtBQUwsQ0FBVyxLQUFYLEVBQWtCbkIsaUJBQWxCLEVBQXFDb0IsVUFBVSxDQUFDQyw2QkFBaEQsRUFBK0VqQixHQUFHLElBQUk7QUFDcEYsYUFBTyxLQUFLSyxtQkFBTCxDQUF5QkwsR0FBekIsQ0FBUDtBQUNELEtBRkQ7QUFHRDs7QUE1QjhDOzs7ZUErQmxDSCxhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuY29uc3QgR3JhcGhRTENvbmZpZ1BhdGggPSAnL2dyYXBocWwtY29uZmlnJztcblxuZXhwb3J0IGNsYXNzIEdyYXBoUUxSb3V0ZXIgZXh0ZW5kcyBQcm9taXNlUm91dGVyIHtcbiAgYXN5bmMgZ2V0R3JhcGhRTENvbmZpZyhyZXEpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIuZ2V0R3JhcGhRTENvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogcmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVHcmFwaFFMQ29uZmlnKHJlcSkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHVwZGF0ZSB0aGUgR3JhcGhRTCBjb25maWcuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXEuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhyZXEuYm9keS5wYXJhbXMpO1xuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogZGF0YSxcbiAgICB9O1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgR3JhcGhRTENvbmZpZ1BhdGgsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRHcmFwaFFMQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgR3JhcGhRTENvbmZpZ1BhdGgsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmFwaFFMQ29uZmlnKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JhcGhRTFJvdXRlcjtcbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHcmFwaFFMQ29uZmlnUGF0aCIsIkdyYXBoUUxSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiZ2V0R3JhcGhRTENvbmZpZyIsInJlcSIsInJlc3VsdCIsImNvbmZpZyIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJyZXNwb25zZSIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJhdXRoIiwiaXNSZWFkT25seSIsIlBhcnNlIiwiRXJyb3IiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiZGF0YSIsImJvZHkiLCJwYXJhbXMiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwibWlkZGxld2FyZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvR3JhcGhRTFJvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuXG5jb25zdCBHcmFwaFFMQ29uZmlnUGF0aCA9ICcvZ3JhcGhxbC1jb25maWcnO1xuXG5leHBvcnQgY2xhc3MgR3JhcGhRTFJvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBhc3luYyBnZXRHcmFwaFFMQ29uZmlnKHJlcSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlci5nZXRHcmFwaFFMQ29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiByZXN1bHQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUdyYXBoUUxDb25maWcocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gdXBkYXRlIHRoZSBHcmFwaFFMIGNvbmZpZy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcS5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlci51cGRhdGVHcmFwaFFMQ29uZmlnKHJlcS5ib2R5LnBhcmFtcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmFwaFFMUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBNkM7QUFBQTtBQUFBO0FBRTdDLE1BQU1BLGlCQUFpQixHQUFHLGlCQUFpQjtBQUVwQyxNQUFNQyxhQUFhLFNBQVNDLHNCQUFhLENBQUM7RUFDL0MsTUFBTUMsZ0JBQWdCLENBQUNDLEdBQUcsRUFBRTtJQUMxQixNQUFNQyxNQUFNLEdBQUcsTUFBTUQsR0FBRyxDQUFDRSxNQUFNLENBQUNDLHNCQUFzQixDQUFDSixnQkFBZ0IsRUFBRTtJQUN6RSxPQUFPO01BQ0xLLFFBQVEsRUFBRUg7SUFDWixDQUFDO0VBQ0g7RUFFQSxNQUFNSSxtQkFBbUIsQ0FBQ0wsR0FBRyxFQUFFO0lBQzdCLElBQUlBLEdBQUcsQ0FBQ00sSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDdkIsTUFBTSxJQUFJQyxhQUFLLENBQUNDLEtBQUssQ0FDbkJELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxtQkFBbUIsRUFDL0IsaUVBQWlFLENBQ2xFO0lBQ0g7SUFDQSxNQUFNQyxJQUFJLEdBQUcsTUFBTVgsR0FBRyxDQUFDRSxNQUFNLENBQUNDLHNCQUFzQixDQUFDRSxtQkFBbUIsQ0FBQ0wsR0FBRyxDQUFDWSxJQUFJLENBQUNDLE1BQU0sQ0FBQztJQUN6RixPQUFPO01BQ0xULFFBQVEsRUFBRU87SUFDWixDQUFDO0VBQ0g7RUFFQUcsV0FBVyxHQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsS0FBSyxFQUFFbkIsaUJBQWlCLEVBQUVvQixVQUFVLENBQUNDLDZCQUE2QixFQUFFakIsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0MsR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ2UsS0FBSyxDQUFDLEtBQUssRUFBRW5CLGlCQUFpQixFQUFFb0IsVUFBVSxDQUFDQyw2QkFBNkIsRUFBRWpCLEdBQUcsSUFBSTtNQUNwRixPQUFPLElBQUksQ0FBQ0ssbUJBQW1CLENBQUNMLEdBQUcsQ0FBQztJQUN0QyxDQUFDLENBQUM7RUFDSjtBQUNGO0FBQUM7QUFBQSxlQUVjSCxhQUFhO0FBQUEifQ==
@@ -4,51 +4,38 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.HooksRouter = void 0;
7
-
8
7
  var _node = require("parse/node");
9
-
10
8
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
11
-
12
9
  var middleware = _interopRequireWildcard(require("../middlewares"));
13
-
14
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  class HooksRouter extends _PromiseRouter.default {
21
14
  createHook(aHook, config) {
22
15
  return config.hooksController.createHook(aHook).then(hook => ({
23
16
  response: hook
24
17
  }));
25
18
  }
26
-
27
19
  updateHook(aHook, config) {
28
20
  return config.hooksController.updateHook(aHook).then(hook => ({
29
21
  response: hook
30
22
  }));
31
23
  }
32
-
33
24
  handlePost(req) {
34
25
  return this.createHook(req.body, req.config);
35
26
  }
36
-
37
27
  handleGetFunctions(req) {
38
28
  var hooksController = req.config.hooksController;
39
-
40
29
  if (req.params.functionName) {
41
30
  return hooksController.getFunction(req.params.functionName).then(foundFunction => {
42
31
  if (!foundFunction) {
43
32
  throw new _node.Parse.Error(143, `no function named: ${req.params.functionName} is defined`);
44
33
  }
45
-
46
34
  return Promise.resolve({
47
35
  response: foundFunction
48
36
  });
49
37
  });
50
38
  }
51
-
52
39
  return hooksController.getFunctions().then(functions => {
53
40
  return {
54
41
  response: functions || []
@@ -57,30 +44,24 @@ class HooksRouter extends _PromiseRouter.default {
57
44
  throw err;
58
45
  });
59
46
  }
60
-
61
47
  handleGetTriggers(req) {
62
48
  var hooksController = req.config.hooksController;
63
-
64
49
  if (req.params.className && req.params.triggerName) {
65
50
  return hooksController.getTrigger(req.params.className, req.params.triggerName).then(foundTrigger => {
66
51
  if (!foundTrigger) {
67
52
  throw new _node.Parse.Error(143, `class ${req.params.className} does not exist`);
68
53
  }
69
-
70
54
  return Promise.resolve({
71
55
  response: foundTrigger
72
56
  });
73
57
  });
74
58
  }
75
-
76
59
  return hooksController.getTriggers().then(triggers => ({
77
60
  response: triggers || []
78
61
  }));
79
62
  }
80
-
81
63
  handleDelete(req) {
82
64
  var hooksController = req.config.hooksController;
83
-
84
65
  if (req.params.functionName) {
85
66
  return hooksController.deleteFunction(req.params.functionName).then(() => ({
86
67
  response: {}
@@ -90,15 +71,12 @@ class HooksRouter extends _PromiseRouter.default {
90
71
  response: {}
91
72
  }));
92
73
  }
93
-
94
74
  return Promise.resolve({
95
75
  response: {}
96
76
  });
97
77
  }
98
-
99
78
  handleUpdate(req) {
100
79
  var hook;
101
-
102
80
  if (req.params.functionName && req.body.url) {
103
81
  hook = {};
104
82
  hook.functionName = req.params.functionName;
@@ -111,20 +89,16 @@ class HooksRouter extends _PromiseRouter.default {
111
89
  } else {
112
90
  throw new _node.Parse.Error(143, 'invalid hook declaration');
113
91
  }
114
-
115
92
  return this.updateHook(hook, req.config);
116
93
  }
117
-
118
94
  handlePut(req) {
119
95
  var body = req.body;
120
-
121
96
  if (body.__op == 'Delete') {
122
97
  return this.handleDelete(req);
123
98
  } else {
124
99
  return this.handleUpdate(req);
125
100
  }
126
101
  }
127
-
128
102
  mountRoutes() {
129
103
  this.route('GET', '/hooks/functions', middleware.promiseEnforceMasterKeyAccess, this.handleGetFunctions.bind(this));
130
104
  this.route('GET', '/hooks/triggers', middleware.promiseEnforceMasterKeyAccess, this.handleGetTriggers.bind(this));
@@ -135,10 +109,8 @@ class HooksRouter extends _PromiseRouter.default {
135
109
  this.route('PUT', '/hooks/functions/:functionName', middleware.promiseEnforceMasterKeyAccess, this.handlePut.bind(this));
136
110
  this.route('PUT', '/hooks/triggers/:className/:triggerName', middleware.promiseEnforceMasterKeyAccess, this.handlePut.bind(this));
137
111
  }
138
-
139
112
  }
140
-
141
113
  exports.HooksRouter = HooksRouter;
142
114
  var _default = HooksRouter;
143
115
  exports.default = _default;
144
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0hvb2tzUm91dGVyLmpzIl0sIm5hbWVzIjpbIkhvb2tzUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsImNyZWF0ZUhvb2siLCJhSG9vayIsImNvbmZpZyIsImhvb2tzQ29udHJvbGxlciIsInRoZW4iLCJob29rIiwicmVzcG9uc2UiLCJ1cGRhdGVIb29rIiwiaGFuZGxlUG9zdCIsInJlcSIsImJvZHkiLCJoYW5kbGVHZXRGdW5jdGlvbnMiLCJwYXJhbXMiLCJmdW5jdGlvbk5hbWUiLCJnZXRGdW5jdGlvbiIsImZvdW5kRnVuY3Rpb24iLCJQYXJzZSIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRGdW5jdGlvbnMiLCJmdW5jdGlvbnMiLCJlcnIiLCJoYW5kbGVHZXRUcmlnZ2VycyIsImNsYXNzTmFtZSIsInRyaWdnZXJOYW1lIiwiZ2V0VHJpZ2dlciIsImZvdW5kVHJpZ2dlciIsImdldFRyaWdnZXJzIiwidHJpZ2dlcnMiLCJoYW5kbGVEZWxldGUiLCJkZWxldGVGdW5jdGlvbiIsImRlbGV0ZVRyaWdnZXIiLCJoYW5kbGVVcGRhdGUiLCJ1cmwiLCJoYW5kbGVQdXQiLCJfX29wIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsIm1pZGRsZXdhcmUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImJpbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFTyxNQUFNQSxXQUFOLFNBQTBCQyxzQkFBMUIsQ0FBd0M7QUFDN0NDLEVBQUFBLFVBQVUsQ0FBQ0MsS0FBRCxFQUFRQyxNQUFSLEVBQWdCO0FBQ3hCLFdBQU9BLE1BQU0sQ0FBQ0MsZUFBUCxDQUF1QkgsVUFBdkIsQ0FBa0NDLEtBQWxDLEVBQXlDRyxJQUF6QyxDQUE4Q0MsSUFBSSxLQUFLO0FBQUVDLE1BQUFBLFFBQVEsRUFBRUQ7QUFBWixLQUFMLENBQWxELENBQVA7QUFDRDs7QUFFREUsRUFBQUEsVUFBVSxDQUFDTixL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QixDQUpGO0FBTUEsU0FBS0gsS0FBTCxDQUNFLE1BREYsRUFFRSxrQkFGRixFQUdFQyxVQUFVLENBQUNDLDZCQUhiLEVBSUUsS0FBS2hDLFVBQUwsQ0FBZ0JpQyxJQUFoQixDQUFxQixJQUFyQixDQUpGO0FBTUEsU0FBS0gsS0FBTCxDQUNFLE1BREYsRUFFRSxpQkFGRixFQUdFQyxVQUFVLENBQUNDLDZCQUhiLEVBSUUsS0FBS2hDLFVBQUwsQ0FBZ0JpQyxJQUFoQixDQUFxQixJQUFyQixDQUpGO0FBTUEsU0FBS0gsS0FBTCxDQUNFLEtBREYsRUFFRSxnQ0FGRixFQUdFQyxVQUFVLENBQUNDLDZCQUhiLEVBSUUsS0FBS0wsU0FBTCxDQUFlTSxJQUFmLENBQW9CLElBQXBCLENBSkY7QUFNQSxTQUFLSCxLQUFMLENBQ0UsS0FERixFQUVFLHlDQUZGLEVBR0VDLFVBQVUsQ0FBQ0MsNkJBSGIsRUFJRSxLQUFLTCxTQUFMLENBQWVNLElBQWYsQ0FBb0IsSUFBcEIsQ0FKRjtBQU1EOztBQXpJNEM7OztlQTRJaEMzQyxXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2UgfSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5cbmV4cG9ydCBjbGFzcyBIb29rc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjcmVhdGVIb29rKGFIb29rLCBjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnLmhvb2tzQ29udHJvbGxlci5jcmVhdGVIb29rKGFIb29rKS50aGVuKGhvb2sgPT4gKHsgcmVzcG9uc2U6IGhvb2sgfSkpO1xuICB9XG5cbiAgdXBkYXRlSG9vayhhSG9vaywgY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5ob29rc0NvbnRyb2xsZXIudXBkYXRlSG9vayhhSG9vaykudGhlbihob29rID0+ICh7IHJlc3BvbnNlOiBob29rIH0pKTtcbiAgfVxuXG4gIGhhbmRsZVBvc3QocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlSG9vayhyZXEuYm9keSwgcmVxLmNvbmZpZyk7XG4gIH1cblxuICBoYW5kbGVHZXRGdW5jdGlvbnMocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5nZXRGdW5jdGlvbihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkudGhlbihmb3VuZEZ1bmN0aW9uID0+IHtcbiAgICAgICAgaWYgKCFmb3VuZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDE0MywgYG5vIGZ1bmN0aW9uIG5hbWVkOiAke3JlcS5wYXJhbXMuZnVuY3Rpb25OYW1lfSBpcyBkZWZpbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiBmb3VuZEZ1bmN0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5nZXRGdW5jdGlvbnMoKS50aGVuKFxuICAgICAgZnVuY3Rpb25zID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IGZ1bmN0aW9ucyB8fCBbXSB9O1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaGFuZGxlR2V0VHJpZ2dlcnMocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSAmJiByZXEucGFyYW1zLnRyaWdnZXJOYW1lKSB7XG4gICAgICByZXR1cm4gaG9va3NDb250cm9sbGVyXG4gICAgICAgIC5nZXRUcmlnZ2VyKHJlcS5wYXJhbXMuY2xhc3NOYW1lLCByZXEucGFyYW1zLnRyaWdnZXJOYW1lKVxuICAgICAgICAudGhlbihmb3VuZFRyaWdnZXIgPT4ge1xuICAgICAgICAgIGlmICghZm91bmRUcmlnZ2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBgY2xhc3MgJHtyZXEucGFyYW1zLmNsYXNzTmFtZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiBmb3VuZFRyaWdnZXIgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBob29rc0NvbnRyb2xsZXIuZ2V0VHJpZ2dlcnMoKS50aGVuKHRyaWdnZXJzID0+ICh7IHJlc3BvbnNlOiB0cmlnZ2VycyB8fCBbXSB9KSk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5kZWxldGVGdW5jdGlvbihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkudGhlbigoKSA9PiAoeyByZXNwb25zZToge30gfSkpO1xuICAgIH0gZWxzZSBpZiAocmVxLnBhcmFtcy5jbGFzc05hbWUgJiYgcmVxLnBhcmFtcy50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlclxuICAgICAgICAuZGVsZXRlVHJpZ2dlcihyZXEucGFyYW1zLmNsYXNzTmFtZSwgcmVxLnBhcmFtcy50cmlnZ2VyTmFtZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gKHsgcmVzcG9uc2U6IHt9IH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiB7fSB9KTtcbiAgfVxuXG4gIGhhbmRsZVVwZGF0ZShyZXEpIHtcbiAgICB2YXIgaG9vaztcbiAgICBpZiAocmVxLnBhcmFtcy5mdW5jdGlvbk5hbWUgJiYgcmVxLmJvZHkudXJsKSB7XG4gICAgICBob29rID0ge307XG4gICAgICBob29rLmZ1bmN0aW9uTmFtZSA9IHJlcS5wYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgICAgaG9vay51cmwgPSByZXEuYm9keS51cmw7XG4gICAgfSBlbHNlIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSAmJiByZXEucGFyYW1zLnRyaWdnZXJOYW1lICYmIHJlcS5ib2R5LnVybCkge1xuICAgICAgaG9vayA9IHt9O1xuICAgICAgaG9vay5jbGFzc05hbWUgPSByZXEucGFyYW1zLmNsYXNzTmFtZTtcbiAgICAgIGhvb2sudHJpZ2dlck5hbWUgPSByZXEucGFyYW1zLnRyaWdnZXJOYW1lO1xuICAgICAgaG9vay51cmwgPSByZXEuYm9keS51cmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsICdpbnZhbGlkIGhvb2sgZGVjbGFyYXRpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlSG9vayhob29rLCByZXEuY29uZmlnKTtcbiAgfVxuXG4gIGhhbmRsZVB1dChyZXEpIHtcbiAgICB2YXIgYm9keSA9IHJlcS5ib2R5O1xuICAgIGlmIChib2R5Ll9fb3AgPT0gJ0RlbGV0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICB9XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVHZXRGdW5jdGlvbnMuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgJy9ob29rcy90cmlnZ2VycycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVHZXRUcmlnZ2Vycy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucy86ZnVuY3Rpb25OYW1lJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZUdldEZ1bmN0aW9ucy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL3RyaWdnZXJzLzpjbGFzc05hbWUvOnRyaWdnZXJOYW1lJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZUdldFRyaWdnZXJzLmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQb3N0LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2hvb2tzL3RyaWdnZXJzJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZVBvc3QuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9ob29rcy9mdW5jdGlvbnMvOmZ1bmN0aW9uTmFtZScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQdXQuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9ob29rcy90cmlnZ2Vycy86Y2xhc3NOYW1lLzp0cmlnZ2VyTmFtZScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQdXQuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSG9va3NSb3V0ZXI7XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIb29rc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjcmVhdGVIb29rIiwiYUhvb2siLCJjb25maWciLCJob29rc0NvbnRyb2xsZXIiLCJ0aGVuIiwiaG9vayIsInJlc3BvbnNlIiwidXBkYXRlSG9vayIsImhhbmRsZVBvc3QiLCJyZXEiLCJib2R5IiwiaGFuZGxlR2V0RnVuY3Rpb25zIiwicGFyYW1zIiwiZnVuY3Rpb25OYW1lIiwiZ2V0RnVuY3Rpb24iLCJmb3VuZEZ1bmN0aW9uIiwiUGFyc2UiLCJFcnJvciIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0RnVuY3Rpb25zIiwiZnVuY3Rpb25zIiwiZXJyIiwiaGFuZGxlR2V0VHJpZ2dlcnMiLCJjbGFzc05hbWUiLCJ0cmlnZ2VyTmFtZSIsImdldFRyaWdnZXIiLCJmb3VuZFRyaWdnZXIiLCJnZXRUcmlnZ2VycyIsInRyaWdnZXJzIiwiaGFuZGxlRGVsZXRlIiwiZGVsZXRlRnVuY3Rpb24iLCJkZWxldGVUcmlnZ2VyIiwiaGFuZGxlVXBkYXRlIiwidXJsIiwiaGFuZGxlUHV0IiwiX19vcCIsIm1vdW50Um91dGVzIiwicm91dGUiLCJtaWRkbGV3YXJlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJiaW5kIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvSG9va3NSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2UgfSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5cbmV4cG9ydCBjbGFzcyBIb29rc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjcmVhdGVIb29rKGFIb29rLCBjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnLmhvb2tzQ29udHJvbGxlci5jcmVhdGVIb29rKGFIb29rKS50aGVuKGhvb2sgPT4gKHsgcmVzcG9uc2U6IGhvb2sgfSkpO1xuICB9XG5cbiAgdXBkYXRlSG9vayhhSG9vaywgY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5ob29rc0NvbnRyb2xsZXIudXBkYXRlSG9vayhhSG9vaykudGhlbihob29rID0+ICh7IHJlc3BvbnNlOiBob29rIH0pKTtcbiAgfVxuXG4gIGhhbmRsZVBvc3QocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlSG9vayhyZXEuYm9keSwgcmVxLmNvbmZpZyk7XG4gIH1cblxuICBoYW5kbGVHZXRGdW5jdGlvbnMocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5nZXRGdW5jdGlvbihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkudGhlbihmb3VuZEZ1bmN0aW9uID0+IHtcbiAgICAgICAgaWYgKCFmb3VuZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDE0MywgYG5vIGZ1bmN0aW9uIG5hbWVkOiAke3JlcS5wYXJhbXMuZnVuY3Rpb25OYW1lfSBpcyBkZWZpbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiBmb3VuZEZ1bmN0aW9uIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5nZXRGdW5jdGlvbnMoKS50aGVuKFxuICAgICAgZnVuY3Rpb25zID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IGZ1bmN0aW9ucyB8fCBbXSB9O1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaGFuZGxlR2V0VHJpZ2dlcnMocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSAmJiByZXEucGFyYW1zLnRyaWdnZXJOYW1lKSB7XG4gICAgICByZXR1cm4gaG9va3NDb250cm9sbGVyXG4gICAgICAgIC5nZXRUcmlnZ2VyKHJlcS5wYXJhbXMuY2xhc3NOYW1lLCByZXEucGFyYW1zLnRyaWdnZXJOYW1lKVxuICAgICAgICAudGhlbihmb3VuZFRyaWdnZXIgPT4ge1xuICAgICAgICAgIGlmICghZm91bmRUcmlnZ2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBgY2xhc3MgJHtyZXEucGFyYW1zLmNsYXNzTmFtZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiBmb3VuZFRyaWdnZXIgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBob29rc0NvbnRyb2xsZXIuZ2V0VHJpZ2dlcnMoKS50aGVuKHRyaWdnZXJzID0+ICh7IHJlc3BvbnNlOiB0cmlnZ2VycyB8fCBbXSB9KSk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUocmVxKSB7XG4gICAgdmFyIGhvb2tzQ29udHJvbGxlciA9IHJlcS5jb25maWcuaG9va3NDb250cm9sbGVyO1xuICAgIGlmIChyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlci5kZWxldGVGdW5jdGlvbihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSkudGhlbigoKSA9PiAoeyByZXNwb25zZToge30gfSkpO1xuICAgIH0gZWxzZSBpZiAocmVxLnBhcmFtcy5jbGFzc05hbWUgJiYgcmVxLnBhcmFtcy50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIGhvb2tzQ29udHJvbGxlclxuICAgICAgICAuZGVsZXRlVHJpZ2dlcihyZXEucGFyYW1zLmNsYXNzTmFtZSwgcmVxLnBhcmFtcy50cmlnZ2VyTmFtZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gKHsgcmVzcG9uc2U6IHt9IH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHJlc3BvbnNlOiB7fSB9KTtcbiAgfVxuXG4gIGhhbmRsZVVwZGF0ZShyZXEpIHtcbiAgICB2YXIgaG9vaztcbiAgICBpZiAocmVxLnBhcmFtcy5mdW5jdGlvbk5hbWUgJiYgcmVxLmJvZHkudXJsKSB7XG4gICAgICBob29rID0ge307XG4gICAgICBob29rLmZ1bmN0aW9uTmFtZSA9IHJlcS5wYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgICAgaG9vay51cmwgPSByZXEuYm9keS51cmw7XG4gICAgfSBlbHNlIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSAmJiByZXEucGFyYW1zLnRyaWdnZXJOYW1lICYmIHJlcS5ib2R5LnVybCkge1xuICAgICAgaG9vayA9IHt9O1xuICAgICAgaG9vay5jbGFzc05hbWUgPSByZXEucGFyYW1zLmNsYXNzTmFtZTtcbiAgICAgIGhvb2sudHJpZ2dlck5hbWUgPSByZXEucGFyYW1zLnRyaWdnZXJOYW1lO1xuICAgICAgaG9vay51cmwgPSByZXEuYm9keS51cmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsICdpbnZhbGlkIGhvb2sgZGVjbGFyYXRpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlSG9vayhob29rLCByZXEuY29uZmlnKTtcbiAgfVxuXG4gIGhhbmRsZVB1dChyZXEpIHtcbiAgICB2YXIgYm9keSA9IHJlcS5ib2R5O1xuICAgIGlmIChib2R5Ll9fb3AgPT0gJ0RlbGV0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICB9XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVHZXRGdW5jdGlvbnMuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgJy9ob29rcy90cmlnZ2VycycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVHZXRUcmlnZ2Vycy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucy86ZnVuY3Rpb25OYW1lJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZUdldEZ1bmN0aW9ucy5iaW5kKHRoaXMpXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL2hvb2tzL3RyaWdnZXJzLzpjbGFzc05hbWUvOnRyaWdnZXJOYW1lJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZUdldFRyaWdnZXJzLmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2hvb2tzL2Z1bmN0aW9ucycsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQb3N0LmJpbmQodGhpcylcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2hvb2tzL3RyaWdnZXJzJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmhhbmRsZVBvc3QuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9ob29rcy9mdW5jdGlvbnMvOmZ1bmN0aW9uTmFtZScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQdXQuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9ob29rcy90cmlnZ2Vycy86Y2xhc3NOYW1lLzp0cmlnZ2VyTmFtZScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5oYW5kbGVQdXQuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSG9va3NSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUE2QztBQUFBO0FBQUE7QUFFdEMsTUFBTUEsV0FBVyxTQUFTQyxzQkFBYSxDQUFDO0VBQzdDQyxVQUFVLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFO0lBQ3hCLE9BQU9BLE1BQU0sQ0FBQ0MsZUFBZSxDQUFDSCxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDRyxJQUFJLENBQUNDLElBQUksS0FBSztNQUFFQyxRQUFRLEVBQUVEO0lBQUssQ0FBQyxDQUFDLENBQUM7RUFDcEY7RUFFQUUsVUFBVSxDQUFDTixLQUFLLEVBQUVDLE1BQU0sRUFBRTtJQUN4QixPQUFPQSxNQUFNLENBQUNDLGVBQWUsQ0FBQ0ksVUFBVSxDQUFDTixLQUFLLENBQUMsQ0FBQ0csSUFBSSxDQUFDQyxJQUFJLEtBQUs7TUFBRUMsUUFBUSxFQUFFRDtJQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3BGO0VBRUFHLFVBQVUsQ0FBQ0MsR0FBRyxFQUFFO0lBQ2QsT0FBTyxJQUFJLENB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