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,65 +1,55 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FunctionsRouter = undefined;
7
-
8
- var _PromiseRouter = require('../PromiseRouter');
9
-
10
- var _PromiseRouter2 = _interopRequireDefault(_PromiseRouter);
11
-
12
- var _middlewares = require('../middlewares');
13
-
14
- var _StatusHandler = require('../StatusHandler');
15
-
16
- var _lodash = require('lodash');
17
-
18
- var _lodash2 = _interopRequireDefault(_lodash);
19
-
20
- var _logger = require('../logger');
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
6
+ exports.FunctionsRouter = void 0;
7
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
8
+ var _middlewares = require("../middlewares");
9
+ var _StatusHandler = require("../StatusHandler");
10
+ var _lodash = _interopRequireDefault(require("lodash"));
11
+ var _logger = require("../logger");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
13
  // FunctionsRouter.js
25
14
 
26
15
  var Parse = require('parse/node').Parse,
27
- triggers = require('../triggers');
28
-
29
- function parseObject(obj) {
16
+ triggers = require('../triggers');
17
+ function parseObject(obj, config) {
30
18
  if (Array.isArray(obj)) {
31
19
  return obj.map(item => {
32
- return parseObject(item);
20
+ return parseObject(item, config);
33
21
  });
34
22
  } else if (obj && obj.__type == 'Date') {
35
23
  return Object.assign(new Date(obj.iso), obj);
36
24
  } else if (obj && obj.__type == 'File') {
37
25
  return Parse.File.fromJSON(obj);
26
+ } else if (obj && obj.__type == 'Pointer' && config.encodeParseObjectInCloudFunction) {
27
+ return Parse.Object.fromJSON({
28
+ __type: 'Pointer',
29
+ className: obj.className,
30
+ objectId: obj.objectId
31
+ });
38
32
  } else if (obj && typeof obj === 'object') {
39
- return parseParams(obj);
33
+ return parseParams(obj, config);
40
34
  } else {
41
35
  return obj;
42
36
  }
43
37
  }
44
-
45
- function parseParams(params) {
46
- return _lodash2.default.mapValues(params, parseObject);
38
+ function parseParams(params, config) {
39
+ return _lodash.default.mapValues(params, item => parseObject(item, config));
47
40
  }
48
-
49
- class FunctionsRouter extends _PromiseRouter2.default {
50
-
41
+ class FunctionsRouter extends _PromiseRouter.default {
51
42
  mountRoutes() {
52
- this.route('POST', '/functions/:functionName', FunctionsRouter.handleCloudFunction);
53
- this.route('POST', '/jobs/:jobName', _middlewares.promiseEnforceMasterKeyAccess, function (req) {
43
+ this.route('POST', '/functions/:functionName', _middlewares.promiseEnsureIdempotency, FunctionsRouter.handleCloudFunction);
44
+ this.route('POST', '/jobs/:jobName', _middlewares.promiseEnsureIdempotency, _middlewares.promiseEnforceMasterKeyAccess, function (req) {
54
45
  return FunctionsRouter.handleCloudJob(req);
55
46
  });
56
47
  this.route('POST', '/jobs', _middlewares.promiseEnforceMasterKeyAccess, function (req) {
57
48
  return FunctionsRouter.handleCloudJob(req);
58
49
  });
59
50
  }
60
-
61
51
  static handleCloudJob(req) {
62
- const jobName = req.params.jobName || req.body.jobName;
52
+ const jobName = req.params.jobName || req.body?.jobName;
63
53
  const applicationId = req.config.applicationId;
64
54
  const jobHandler = (0, _StatusHandler.jobStatusHandler)(req.config);
65
55
  const jobFunction = triggers.getJob(jobName, applicationId);
@@ -67,24 +57,27 @@ class FunctionsRouter extends _PromiseRouter2.default {
67
57
  throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Invalid job.');
68
58
  }
69
59
  let params = Object.assign({}, req.body, req.query);
70
- params = parseParams(params);
60
+ params = parseParams(params, req.config);
71
61
  const request = {
72
62
  params: params,
73
63
  log: req.config.loggerController,
74
64
  headers: req.config.headers,
75
65
  ip: req.config.ip,
76
- jobName
77
- };
78
- const status = {
79
- success: jobHandler.setSucceeded.bind(jobHandler),
80
- error: jobHandler.setFailed.bind(jobHandler),
66
+ jobName,
67
+ config: req.config,
81
68
  message: jobHandler.setMessage.bind(jobHandler)
82
69
  };
83
- return jobHandler.setRunning(jobName, params).then(jobStatus => {
70
+ return jobHandler.setRunning(jobName).then(jobStatus => {
84
71
  request.jobId = jobStatus.objectId;
85
72
  // run the function async
86
73
  process.nextTick(() => {
87
- jobFunction(request, status);
74
+ Promise.resolve().then(() => {
75
+ return jobFunction(request);
76
+ }).then(result => {
77
+ jobHandler.setSucceeded(result);
78
+ }, error => {
79
+ jobHandler.setFailed(error);
80
+ });
88
81
  });
89
82
  return {
90
83
  headers: {
@@ -94,8 +87,7 @@ class FunctionsRouter extends _PromiseRouter2.default {
94
87
  };
95
88
  });
96
89
  }
97
-
98
- static createResponseObject(resolve, reject, message) {
90
+ static createResponseObject(resolve, reject) {
99
91
  return {
100
92
  success: function (result) {
101
93
  resolve({
@@ -104,84 +96,76 @@ class FunctionsRouter extends _PromiseRouter2.default {
104
96
  }
105
97
  });
106
98
  },
107
- error: function (code, message) {
108
- if (!message) {
109
- if (code instanceof Parse.Error) {
110
- return reject(code);
111
- }
112
- message = code;
113
- code = Parse.Error.SCRIPT_FAILED;
114
- }
115
- reject(new Parse.Error(code, message));
116
- },
117
- message: message
99
+ error: function (message) {
100
+ const error = triggers.resolveError(message);
101
+ reject(error);
102
+ }
118
103
  };
119
104
  }
120
-
121
105
  static handleCloudFunction(req) {
122
106
  const functionName = req.params.functionName;
123
107
  const applicationId = req.config.applicationId;
124
108
  const theFunction = triggers.getFunction(functionName, applicationId);
125
- const theValidator = triggers.getValidator(req.params.functionName, applicationId);
126
- if (theFunction) {
127
- let params = Object.assign({}, req.body, req.query);
128
- params = parseParams(params);
129
- var request = {
130
- params: params,
131
- master: req.auth && req.auth.isMaster,
132
- user: req.auth && req.auth.user,
133
- installationId: req.info.installationId,
134
- log: req.config.loggerController,
135
- headers: req.config.headers,
136
- ip: req.config.ip,
137
- functionName
138
- };
139
-
140
- if (theValidator && typeof theValidator === "function") {
141
- var result = theValidator(request);
142
- if (!result) {
143
- throw new Parse.Error(Parse.Error.VALIDATION_ERROR, 'Validation failed.');
144
- }
145
- }
146
-
147
- return new Promise(function (resolve, reject) {
148
- const userString = req.auth && req.auth.user ? req.auth.user.id : undefined;
149
- const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
150
- var response = FunctionsRouter.createResponseObject(result => {
151
- try {
109
+ if (!theFunction) {
110
+ throw new Parse.Error(Parse.Error.SCRIPT_FAILED, `Invalid function: "${functionName}"`);
111
+ }
112
+ let params = Object.assign({}, req.body, req.query);
113
+ params = parseParams(params, req.config);
114
+ const request = {
115
+ params: params,
116
+ config: req.config,
117
+ master: req.auth && req.auth.isMaster,
118
+ user: req.auth && req.auth.user,
119
+ installationId: req.info.installationId,
120
+ log: req.config.loggerController,
121
+ headers: req.config.headers,
122
+ ip: req.config.ip,
123
+ functionName,
124
+ context: req.info.context
125
+ };
126
+ return new Promise(function (resolve, reject) {
127
+ const userString = req.auth && req.auth.user ? req.auth.user.id : undefined;
128
+ const {
129
+ success,
130
+ error
131
+ } = FunctionsRouter.createResponseObject(result => {
132
+ try {
133
+ if (req.config.logLevels.cloudFunctionSuccess !== 'silent') {
134
+ const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
152
135
  const cleanResult = _logger.logger.truncateLogMessage(JSON.stringify(result.response.result));
153
- _logger.logger.info(`Ran cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Result: ${cleanResult}`, {
136
+ _logger.logger[req.config.logLevels.cloudFunctionSuccess](`Ran cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Result: ${cleanResult}`, {
154
137
  functionName,
155
138
  params,
156
139
  user: userString
157
140
  });
158
- resolve(result);
159
- } catch (e) {
160
- reject(e);
161
141
  }
162
- }, error => {
163
- try {
164
- _logger.logger.error(`Failed running cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Error: ` + JSON.stringify(error), {
142
+ resolve(result);
143
+ } catch (e) {
144
+ reject(e);
145
+ }
146
+ }, error => {
147
+ try {
148
+ if (req.config.logLevels.cloudFunctionError !== 'silent') {
149
+ const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
150
+ _logger.logger[req.config.logLevels.cloudFunctionError](`Failed running cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Error: ` + JSON.stringify(error), {
165
151
  functionName,
166
152
  error,
167
153
  params,
168
154
  user: userString
169
155
  });
170
- reject(error);
171
- } catch (e) {
172
- reject(e);
173
156
  }
174
- });
175
- // Force the keys before the function calls.
176
- Parse.applicationId = req.config.applicationId;
177
- Parse.javascriptKey = req.config.javascriptKey;
178
- Parse.masterKey = req.config.masterKey;
179
- theFunction(request, response);
157
+ reject(error);
158
+ } catch (e) {
159
+ reject(e);
160
+ }
180
161
  });
181
- } else {
182
- throw new Parse.Error(Parse.Error.SCRIPT_FAILED, `Invalid function: "${functionName}"`);
183
- }
162
+ return Promise.resolve().then(() => {
163
+ return triggers.maybeRunValidator(request, functionName, req.auth);
164
+ }).then(() => {
165
+ return theFunction(request);
166
+ }).then(success, error);
167
+ });
184
168
  }
185
169
  }
186
170
  exports.FunctionsRouter = FunctionsRouter;
187
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0Z1bmN0aW9uc1JvdXRlci5qcyJdLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJ0cmlnZ2VycyIsInBhcnNlT2JqZWN0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIl9fdHlwZSIsIk9iamVjdCIsImFzc2lnbiIsIkRhdGUiLCJpc28iLCJGaWxlIiwiZnJvbUpTT04iLCJwYXJzZVBhcmFtcyIsInBhcmFtcyIsIl8iLCJtYXBWYWx1ZXMiLCJGdW5jdGlvbnNSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImhhbmRsZUNsb3VkRnVuY3Rpb24iLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcSIsImhhbmRsZUNsb3VkSm9iIiwiam9iTmFtZSIsImJvZHkiLCJhcHBsaWNhdGlvbklkIiwiY29uZmlnIiwiam9iSGFuZGxlciIsImpvYkZ1bmN0aW9uIiwiZ2V0Sm9iIiwiRXJyb3IiLCJTQ1JJUFRfRkFJTEVEIiwicXVlcnkiLCJyZXF1ZXN0IiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImhlYWRlcnMiLCJpcCIsInN0YXR1cyIsInN1Y2Nlc3MiLCJzZXRTdWNjZWVkZWQiLCJiaW5kIiwiZXJyb3IiLCJzZXRGYWlsZWQiLCJtZXNzYWdlIiwic2V0TWVzc2FnZSIsInNldFJ1bm5pbmciLCJ0aGVuIiwiam9iU3RhdHVzIiwiam9iSWQiLCJvYmplY3RJZCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc3BvbnNlIiwiY3JlYXRlUmVzcG9uc2VPYmplY3QiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzdWx0IiwiX2VuY29kZSIsImNvZGUiLCJmdW5jdGlvbk5hbWUiLCJ0aGVGdW5jdGlvbiIsImdldEZ1bmN0aW9uIiwidGhlVmFsaWRhdG9yIiwiZ2V0VmFsaWRhdG9yIiwibWFzdGVyIiwiYXV0aCIsImlzTWFzdGVyIiwidXNlciIsImluc3RhbGxhdGlvbklkIiwiaW5mbyIsIlZBTElEQVRJT05fRVJST1IiLCJQcm9taXNlIiwidXNlclN0cmluZyIsImlkIiwidW5kZWZpbmVkIiwiY2xlYW5JbnB1dCIsImxvZ2dlciIsInRydW5jYXRlTG9nTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhblJlc3VsdCIsImUiLCJqYXZhc2NyaXB0S2V5IiwibWFzdGVyS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0E7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBVEE7O0FBRUEsSUFBSUEsUUFBUUMsUUFBUSxZQUFSLEVBQXNCRCxLQUFsQztBQUFBLElBQ0VFLFdBQVdELFFBQVEsYUFBUixDQURiOztBQVNBLFNBQVNFLFdBQVQsQ0FBcUJDLEdBQXJCLEVBQTBCO0FBQ3hCLE1BQUlDLE1BQU1DLE9BQU4sQ0FBY0YsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFdBQU9BLElBQUlHLEdBQUosQ0FBU0MsSUFBRCxJQUFVO0FBQ3ZCLGFBQU9MLFlBQVlLLElBQVosQ0FBUDtBQUNELEtBRk0sQ0FBUDtBQUdELEdBSkQsTUFJTyxJQUFJSixPQUFPQSxJQUFJSyxNQUFKLElBQWMsTUFBekIsRUFBaUM7QUFDdEMsV0FBT0MsT0FBT0MsTUFBUCxDQUFjLElBQUlDLElBQUosQ0FBU1IsSUFBSVMsR0FBYixDQUFkLEVBQWlDVCxHQUFqQyxDQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUlBLE9BQU9BLElBQUlLLE1BQUosSUFBYyxNQUF6QixFQUFpQztBQUN0QyxXQUFPVCxNQUFNYyxJQUFOLENBQVdDLFFBQVgsQ0FBb0JYLEdBQXBCLENBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSUEsT0FBTyxPQUFPQSxHQUFQLEtBQWUsUUFBMUIsRUFBb0M7QUFDekMsV0FBT1ksWUFBWVosR0FBWixDQUFQO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsV0FBT0EsR0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU1ksV0FBVCxDQUFxQkMsTUFBckIsRUFBNkI7QUFDM0IsU0FBT0MsaUJBQUVDLFNBQUYsQ0FB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LGlDQUFnQ2tCLFlBQWEsYUFBWWEsVUFBVyxvQkFBbUJHLFVBQVcsYUFBbkcsR0FBa0hHLEtBQUtDLFNBQUwsQ0FBZXRDLEtBQWYsQ0FEcEgsRUFFRTtBQUNFa0IsMEJBREY7QUFFRWxCLG1CQUZGO0FBR0U5QixvQkFIRjtBQUlFd0Qsb0JBQU1LO0FBSlIsYUFGRjtBQVNBakIsbUJBQU9kLEtBQVA7QUFDRCxXQVhELENBV0UsT0FBT3dDLENBQVAsRUFBVTtBQUNWMUIsbUJBQU8wQixDQUFQO0FBQ0Q7QUFDRixTQTlCYyxDQUFmO0FBK0JBO0FBQ0F2RixjQUFNOEIsYUFBTixHQUFzQkosSUFBSUssTUFBSixDQUFXRCxhQUFqQztBQUNBOUIsY0FBTXdGLGFBQU4sR0FBc0I5RCxJQUFJSyxNQUFKLENBQVd5RCxhQUFqQztBQUNBeEYsY0FBTXlGLFNBQU4sR0FBa0IvRCxJQUFJSyxNQUFKLENBQVcwRCxTQUE3QjtBQUNBdkIsb0JBQVk1QixPQUFaLEVBQXFCb0IsUUFBckI7QUFDRCxPQXZDTSxDQUFQO0FBd0NELEtBN0RELE1BNkRPO0FBQ0wsWUFBTSxJQUFJMUQsTUFBTW1DLEtBQVYsQ0FBZ0JuQyxNQUFNbUMsS0FBTixDQUFZQyxhQUE1QixFQUE0QyxzQkFBcUI2QixZQUFhLEdBQTlFLENBQU47QUFDRDtBQUNGO0FBN0lnRDtRQUF0QzdDLGUsR0FBQUEsZSIsImZpbGUiOiJGdW5jdGlvbnNSb3V0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGdW5jdGlvbnNSb3V0ZXIuanNcblxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlLFxuICB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5cbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0IHsgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MgfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBqb2JTdGF0dXNIYW5kbGVyIH0gZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyJztcblxuZnVuY3Rpb24gcGFyc2VPYmplY3Qob2JqKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0KGl0ZW0pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdEYXRlJykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBEYXRlKG9iai5pc28pLCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdGaWxlJykge1xuICAgIHJldHVybiBQYXJzZS5GaWxlLmZyb21KU09OKG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHBhcnNlUGFyYW1zKG9iaik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIF8ubWFwVmFsdWVzKHBhcmFtcywgcGFyc2VPYmplY3QpO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvZnVuY3Rpb25zLzpmdW5jdGlvbk5hbWUnLCBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRGdW5jdGlvbik7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvam9icy86am9iTmFtZScsIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCBmdW5jdGlvbihyZXEpIHtcbiAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9qb2JzJywgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIGZ1bmN0aW9uKHJlcSkge1xuICAgICAgcmV0dXJuIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEpvYihyZXEpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUNsb3VkSm9iKHJlcSkge1xuICAgIGNvbnN0IGpvYk5hbWUgPSByZXEucGFyYW1zLmpvYk5hbWUgfHwgcmVxLmJvZHkuam9iTmFtZTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gcmVxLmNvbmZpZy5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IGpvYkhhbmRsZXIgPSBqb2JTdGF0dXNIYW5kbGVyKHJlcS5jb25maWcpO1xuICAgIGNvbnN0IGpvYkZ1bmN0aW9uID0gdHJpZ2dlcnMuZ2V0Sm9iKGpvYk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICgham9iRnVuY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELCAnSW52YWxpZCBqb2IuJyk7XG4gICAgfVxuICAgIGxldCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCByZXEuYm9keSwgcmVxLnF1ZXJ5KTtcbiAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIGxvZzogcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgICAgaGVhZGVyczogcmVxLmNvbmZpZy5oZWFkZXJzLFxuICAgICAgaXA6IHJlcS5jb25maWcuaXAsXG4gICAgICBqb2JOYW1lXG4gICAgfTtcbiAgICBjb25zdCBzdGF0dXMgPSB7XG4gICAgICBzdWNjZXNzOiBqb2JIYW5kbGVyLnNldFN1Y2NlZWRlZC5iaW5kKGpvYkhhbmRsZXIpLFxuICAgICAgZXJyb3I6IGpvYkhhbmRsZXIuc2V0RmFpbGVkLmJpbmQoam9iSGFuZGxlciksXG4gICAgICBtZXNzYWdlOiBqb2JIYW5kbGVyLnNldE1lc3NhZ2UuYmluZChqb2JIYW5kbGVyKVxuICAgIH1cbiAgICByZXR1cm4gam9iSGFuZGxlci5zZXRSdW5uaW5nKGpvYk5hbWUsIHBhcmFtcykudGhlbigoam9iU3RhdHVzKSA9PiB7XG4gICAgICByZXF1ZXN0LmpvYklkID0gam9iU3RhdHVzLm9iamVjdElkXG4gICAgICAvLyBydW4gdGhlIGZ1bmN0aW9uIGFzeW5jXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgam9iRnVuY3Rpb24ocmVxdWVzdCwgc3RhdHVzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdYLVBhcnNlLUpvYi1TdGF0dXMtSWQnOiBqb2JTdGF0dXMub2JqZWN0SWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2U6IHt9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUmVzcG9uc2VPYmplY3QocmVzb2x2ZSwgcmVqZWN0LCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcmVzdWx0OiBQYXJzZS5fZW5jb2RlKHJlc3VsdClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBmdW5jdGlvbihjb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgIGlmIChjb2RlIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoY29kZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZSA9IGNvZGU7XG4gICAgICAgICAgY29kZSA9IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KG5ldyBQYXJzZS5FcnJvcihjb2RlLCBtZXNzYWdlKSk7XG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogbWVzc2FnZVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVDbG91ZEZ1bmN0aW9uKHJlcSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcS5wYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdGhlRnVuY3Rpb24gPSB0cmlnZ2Vycy5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuICAgIGNvbnN0IHRoZVZhbGlkYXRvciA9IHRyaWdnZXJzLmdldFZhbGlkYXRvcihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG4gICAgaWYgKHRoZUZ1bmN0aW9uKSB7XG4gICAgICBsZXQgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxLmJvZHksIHJlcS5xdWVyeSk7XG4gICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICBtYXN0ZXI6IHJlcS5hdXRoICYmIHJlcS5hdXRoLmlzTWFzdGVyLFxuICAgICAgICB1c2VyOiByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIGxvZzogcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgICAgICBoZWFkZXJzOiByZXEuY29uZmlnLmhlYWRlcnMsXG4gICAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgICBmdW5jdGlvbk5hbWVcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGVWYWxpZGF0b3IgJiYgdHlwZW9mIHRoZVZhbGlkYXRvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGVWYWxpZGF0b3IocmVxdWVzdCk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlZBTElEQVRJT05fRVJST1IsICdWYWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCB1c2VyU3RyaW5nID0gKHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIpID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XG4gICAgICAgIHZhciByZXNwb25zZSA9IEZ1bmN0aW9uc1JvdXRlci5jcmVhdGVSZXNwb25zZU9iamVjdCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuUmVzdWx0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShyZXN1bHQucmVzcG9uc2UucmVzdWx0KSk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgYFJhbiBjbG91ZCBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoOlxcbiAgSW5wdXQ6ICR7Y2xlYW5JbnB1dCB9XFxuICBSZXN1bHQ6ICR7Y2xlYW5SZXN1bHQgfWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6IGAgKyBKU09OLnN0cmluZ2lmeShlcnJvciksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEZvcmNlIHRoZSBrZXlzIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbHMuXG4gICAgICAgIFBhcnNlLmFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgICAgIFBhcnNlLmphdmFzY3JpcHRLZXkgPSByZXEuY29uZmlnLmphdmFzY3JpcHRLZXk7XG4gICAgICAgIFBhcnNlLm1hc3RlcktleSA9IHJlcS5jb25maWcubWFzdGVyS2V5O1xuICAgICAgICB0aGVGdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsIGBJbnZhbGlkIGZ1bmN0aW9uOiBcIiR7ZnVuY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuICB9XG59XG4iXX0=
171
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX21pZGRsZXdhcmVzIiwiX1N0YXR1c0hhbmRsZXIiLCJfbG9kYXNoIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwidHJpZ2dlcnMiLCJwYXJzZU9iamVjdCIsIm9iaiIsImNvbmZpZyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJfX3R5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJEYXRlIiwiaXNvIiwiRmlsZSIsImZyb21KU09OIiwiZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24iLCJjbGFzc05hbWUiLCJvYmplY3RJZCIsInBhcnNlUGFyYW1zIiwicGFyYW1zIiwiXyIsIm1hcFZhbHVlcyIsIkZ1bmN0aW9uc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IiwiaGFuZGxlQ2xvdWRGdW5jdGlvbiIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxIiwiaGFuZGxlQ2xvdWRKb2IiLCJqb2JOYW1lIiwiYm9keSIsImFwcGxpY2F0aW9uSWQiLCJqb2JIYW5kbGVyIiwiam9iU3RhdHVzSGFuZGxlciIsImpvYkZ1bmN0aW9uIiwiZ2V0Sm9iIiwiRXJyb3IiLCJTQ1JJUFRfRkFJTEVEIiwicXVlcnkiLCJyZXF1ZXN0IiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImhlYWRlcnMiLCJpcCIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwiYmluZCIsInNldFJ1bm5pbmciLCJ0aGVuIiwiam9iU3RhdHVzIiwiam9iSWQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdCIsInNldFN1Y2NlZWRlZCIsImVycm9yIiwic2V0RmFpbGVkIiwicmVzcG9uc2UiLCJjcmVhdGVSZXNwb25zZU9iamVjdCIsInJlamVjdCIsInN1Y2Nlc3MiLCJfZW5jb2RlIiwicmVzb2x2ZUVycm9yIiwiZnVuY3Rpb25OYW1lIiwidGhlRnVuY3Rpb24iLCJnZXRGdW5jdGlvbiIsIm1hc3RlciIsImF1dGgiLCJpc01hc3RlciIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsImluZm8iLCJjb250ZXh0IiwidXNlclN0cmluZyIsImlkIiwidW5kZWZpbmVkIiwibG9nTGV2ZWxzIiwiY2xvdWRGdW5jdGlvblN1Y2Nlc3MiLCJjbGVhbklucHV0IiwibG9nZ2VyIiwidHJ1bmNhdGVMb2dNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuUmVzdWx0IiwiY2xvdWRGdW5jdGlvbkVycm9yIiwibWF5YmVSdW5WYWxpZGF0b3IiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZ1bmN0aW9uc1JvdXRlci5qc1xuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcblxuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgeyBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHsgam9iU3RhdHVzSGFuZGxlciB9IGZyb20gJy4uL1N0YXR1c0hhbmRsZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0KG9iaiwgY29uZmlnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiBwYXJzZU9iamVjdChpdGVtLCBjb25maWcpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdEYXRlJykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBEYXRlKG9iai5pc28pLCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdGaWxlJykge1xuICAgIHJldHVybiBQYXJzZS5GaWxlLmZyb21KU09OKG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIG9iai5fX3R5cGUgPT0gJ1BvaW50ZXInICYmIGNvbmZpZy5lbmNvZGVQYXJzZU9iamVjdEluQ2xvdWRGdW5jdGlvbikge1xuICAgIHJldHVybiBQYXJzZS5PYmplY3QuZnJvbUpTT04oe1xuICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICBjbGFzc05hbWU6IG9iai5jbGFzc05hbWUsXG4gICAgICBvYmplY3RJZDogb2JqLm9iamVjdElkLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBwYXJzZVBhcmFtcyhvYmosIGNvbmZpZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhwYXJhbXMsIGNvbmZpZykge1xuICByZXR1cm4gXy5tYXBWYWx1ZXMocGFyYW1zLCBpdGVtID0+IHBhcnNlT2JqZWN0KGl0ZW0sIGNvbmZpZykpO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2Z1bmN0aW9ucy86ZnVuY3Rpb25OYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9qb2JzLzpqb2JOYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgZnVuY3Rpb24gKHJlcSkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25zUm91dGVyLmhhbmRsZUNsb3VkSm9iKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9qb2JzJywgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIGZ1bmN0aW9uIChyZXEpIHtcbiAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVDbG91ZEpvYihyZXEpIHtcbiAgICBjb25zdCBqb2JOYW1lID0gcmVxLnBhcmFtcy5qb2JOYW1lIHx8IHJlcS5ib2R5Py5qb2JOYW1lO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3Qgam9iSGFuZGxlciA9IGpvYlN0YXR1c0hhbmRsZXIocmVxLmNvbmZpZyk7XG4gICAgY29uc3Qgam9iRnVuY3Rpb24gPSB0cmlnZ2Vycy5nZXRKb2Ioam9iTmFtZSwgYXBwbGljYXRpb25JZCk7XG4gICAgaWYgKCFqb2JGdW5jdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsICdJbnZhbGlkIGpvYi4nKTtcbiAgICB9XG4gICAgbGV0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5LCByZXEucXVlcnkpO1xuICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHBhcmFtcywgcmVxLmNvbmZpZyk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgbG9nOiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIsXG4gICAgICBoZWFkZXJzOiByZXEuY29uZmlnLmhlYWRlcnMsXG4gICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgIGpvYk5hbWUsXG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBtZXNzYWdlOiBqb2JIYW5kbGVyLnNldE1lc3NhZ2UuYmluZChqb2JIYW5kbGVyKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpvYkhhbmRsZXIuc2V0UnVubmluZyhqb2JOYW1lKS50aGVuKGpvYlN0YXR1cyA9PiB7XG4gICAgICByZXF1ZXN0LmpvYklkID0gam9iU3RhdHVzLm9iamVjdElkO1xuICAgICAgLy8gcnVuIHRoZSBmdW5jdGlvbiBhc3luY1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGpvYkZ1bmN0aW9uKHJlcXVlc3QpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICBqb2JIYW5kbGVyLnNldFN1Y2NlZWRlZChyZXN1bHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgam9iSGFuZGxlci5zZXRGYWlsZWQoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkJzogam9iU3RhdHVzLm9iamVjdElkLFxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVJlc3BvbnNlT2JqZWN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICByZXN1bHQ6IFBhcnNlLl9lbmNvZGUocmVzdWx0KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGhhbmRsZUNsb3VkRnVuY3Rpb24ocmVxKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxLnBhcmFtcy5mdW5jdGlvbk5hbWU7XG4gICAgY29uc3QgYXBwbGljYXRpb25JZCA9IHJlcS5jb25maWcuYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB0aGVGdW5jdGlvbiA9IHRyaWdnZXJzLmdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG5cbiAgICBpZiAoIXRoZUZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCwgYEludmFsaWQgZnVuY3Rpb246IFwiJHtmdW5jdGlvbk5hbWV9XCJgKTtcbiAgICB9XG4gICAgbGV0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5LCByZXEucXVlcnkpO1xuICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHBhcmFtcywgcmVxLmNvbmZpZyk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgbWFzdGVyOiByZXEuYXV0aCAmJiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgIHVzZXI6IHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBsb2c6IHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICAgIGhlYWRlcnM6IHJlcS5jb25maWcuaGVhZGVycyxcbiAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgY29udGV4dDogcmVxLmluZm8uY29udGV4dCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IHVzZXJTdHJpbmcgPSByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IEZ1bmN0aW9uc1JvdXRlci5jcmVhdGVSZXNwb25zZU9iamVjdChcbiAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25TdWNjZXNzICE9PSAnc2lsZW50Jykge1xuICAgICAgICAgICAgICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICAgICAgICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSBsb2dnZXIudHJ1bmNhdGVMb2dNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5yZXNwb25zZS5yZXN1bHQpKTtcbiAgICAgICAgICAgICAgbG9nZ2VyW3JlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25TdWNjZXNzXShcbiAgICAgICAgICAgICAgICBgUmFuIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgUmVzdWx0OiAke2NsZWFuUmVzdWx0fWAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVxLmNvbmZpZy5sb2dMZXZlbHMuY2xvdWRGdW5jdGlvbkVycm9yICE9PSAnc2lsZW50Jykge1xuICAgICAgICAgICAgICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICAgICAgICAgICAgbG9nZ2VyW3JlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25FcnJvcl0oXG4gICAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXJyb3IpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBmdW5jdGlvbk5hbWUsIHJlcS5hdXRoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGVGdW5jdGlvbihyZXF1ZXN0KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oc3VjY2VzcywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUtBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUFtQyxTQUFBRCx1QkFBQU0sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQVRuQzs7QUFFQSxJQUFJRyxLQUFLLEdBQUdSLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ1EsS0FBSztFQUNyQ0MsUUFBUSxHQUFHVCxPQUFPLENBQUMsYUFBYSxDQUFDO0FBUW5DLFNBQVNVLFdBQVdBLENBQUNDLEdBQUcsRUFBRUMsTUFBTSxFQUFFO0VBQ2hDLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxHQUFHLENBQUMsRUFBRTtJQUN0QixP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
@@ -1,51 +1,114 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.GlobalConfigRouter = undefined;
6
+ exports.default = exports.GlobalConfigRouter = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
9
+ var middleware = _interopRequireWildcard(require("../middlewares"));
10
+ var triggers = _interopRequireWildcard(require("../triggers"));
11
+ var _Error = require("../Error");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ // global_config.js
7
15
 
8
- var _node = require('parse/node');
9
-
10
- var _node2 = _interopRequireDefault(_node);
11
-
12
- var _PromiseRouter = require('../PromiseRouter');
13
-
14
- var _PromiseRouter2 = _interopRequireDefault(_PromiseRouter);
15
-
16
- var _middlewares = require('../middlewares');
17
-
18
- var middleware = _interopRequireWildcard(_middlewares);
19
-
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
24
- class GlobalConfigRouter extends _PromiseRouter2.default {
16
+ const getConfigFromParams = params => {
17
+ const config = new _node.default.Config();
18
+ for (const attr in params) {
19
+ config.attributes[attr] = _node.default._decode(undefined, params[attr]);
20
+ }
21
+ return config;
22
+ };
23
+ class GlobalConfigRouter extends _PromiseRouter.default {
25
24
  getGlobalConfig(req) {
26
- return req.config.database.find('_GlobalConfig', { objectId: "1" }, { limit: 1 }).then(results => {
25
+ return req.config.database.find('_GlobalConfig', {
26
+ objectId: '1'
27
+ }, {
28
+ limit: 1
29
+ }).then(results => {
27
30
  if (results.length != 1) {
28
31
  // If there is no config in the database - return empty config.
29
- return { response: { params: {} } };
32
+ return {
33
+ response: {
34
+ params: {}
35
+ }
36
+ };
30
37
  }
31
38
  const globalConfig = results[0];
32
- return { response: { params: globalConfig.params } };
39
+ if (!req.auth.isMaster && globalConfig.masterKeyOnly !== undefined) {
40
+ for (const param in globalConfig.params) {
41
+ if (globalConfig.masterKeyOnly[param]) {
42
+ delete globalConfig.params[param];
43
+ delete globalConfig.masterKeyOnly[param];
44
+ }
45
+ }
46
+ }
47
+ return {
48
+ response: {
49
+ params: globalConfig.params,
50
+ masterKeyOnly: globalConfig.masterKeyOnly
51
+ }
52
+ };
33
53
  });
34
54
  }
35
-
36
- updateGlobalConfig(req) {
55
+ async updateGlobalConfig(req) {
37
56
  if (req.auth.isReadOnly) {
38
- throw new _node2.default.Error(_node2.default.Error.OPERATION_FORBIDDEN, 'read-only masterKey isn\'t allowed to update the config.');
57
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the config.", req.config);
39
58
  }
40
- const params = req.body.params;
59
+ const params = req.body.params || {};
60
+ const masterKeyOnly = req.body?.masterKeyOnly || {};
41
61
  // Transform in dot notation to make sure it works
42
62
  const update = Object.keys(params).reduce((acc, key) => {
43
63
  acc[`params.${key}`] = params[key];
64
+ acc[`masterKeyOnly.${key}`] = masterKeyOnly[key] || false;
44
65
  return acc;
45
66
  }, {});
46
- return req.config.database.update('_GlobalConfig', { objectId: "1" }, update, { upsert: true }).then(() => ({ response: { result: true } }));
67
+ const className = triggers.getClassName(_node.default.Config);
68
+ const hasBeforeSaveHook = triggers.triggerExists(className, triggers.Types.beforeSave, req.config.applicationId);
69
+ const hasAfterSaveHook = triggers.triggerExists(className, triggers.Types.afterSave, req.config.applicationId);
70
+ let originalConfigObject;
71
+ let updatedConfigObject;
72
+ const configObject = new _node.default.Config();
73
+ configObject.attributes = params;
74
+ const results = await req.config.database.find('_GlobalConfig', {
75
+ objectId: '1'
76
+ }, {
77
+ limit: 1
78
+ });
79
+ const isNew = results.length !== 1;
80
+ if (!isNew && (hasBeforeSaveHook || hasAfterSaveHook)) {
81
+ originalConfigObject = getConfigFromParams(results[0].params);
82
+ }
83
+ try {
84
+ await triggers.maybeRunGlobalConfigTrigger(triggers.Types.beforeSave, req.auth, configObject, originalConfigObject, req.config, req.context);
85
+ if (isNew) {
86
+ await req.config.database.update('_GlobalConfig', {
87
+ objectId: '1'
88
+ }, update, {
89
+ upsert: true
90
+ }, true);
91
+ updatedConfigObject = configObject;
92
+ } else {
93
+ const result = await req.config.database.update('_GlobalConfig', {
94
+ objectId: '1'
95
+ }, update, {}, true);
96
+ updatedConfigObject = getConfigFromParams(result.params);
97
+ }
98
+ await triggers.maybeRunGlobalConfigTrigger(triggers.Types.afterSave, req.auth, updatedConfigObject, originalConfigObject, req.config, req.context);
99
+ return {
100
+ response: {
101
+ result: true
102
+ }
103
+ };
104
+ } catch (err) {
105
+ const error = triggers.resolveError(err, {
106
+ code: _node.default.Error.SCRIPT_FAILED,
107
+ message: 'Script failed. Unknown error.'
108
+ });
109
+ throw error;
110
+ }
47
111
  }
48
-
49
112
  mountRoutes() {
50
113
  this.route('GET', '/config', req => {
51
114
  return this.getGlobalConfig(req);
@@ -55,8 +118,6 @@ class GlobalConfigRouter extends _PromiseRouter2.default {
55
118
  });
56
119
  }
57
120
  }
58
-
59
- exports.GlobalConfigRouter = GlobalConfigRouter; // global_config.js
60
-
61
- exports.default = GlobalConfigRouter;
62
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dsb2JhbENvbmZpZ1JvdXRlci5qcyJdLCJuYW1lcyI6WyJtaWRkbGV3YXJlIiwiR2xvYmFsQ29uZmlnUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsImdldEdsb2JhbENvbmZpZyIsInJlcSIsImNvbmZpZyIsImRhdGFiYXNlIiwiZmluZCIsIm9iamVjdElkIiwibGltaXQiLCJ0aGVuIiwicmVzdWx0cyIsImxlbmd0aCIsInJlc3BvbnNlIiwicGFyYW1zIiwiZ2xvYmFsQ29uZmlnIiwidXBkYXRlR2xvYmFsQ29uZmlnIiwiYXV0aCIsImlzUmVhZE9ubHkiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImJvZHkiLCJ1cGRhdGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwidXBzZXJ0IiwicmVzdWx0IiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztJQUFZQSxVOzs7Ozs7QUFFTCxNQUFNQyxrQkFBTixTQUFpQ0MsdUJBQWpDLENBQStDO0FBQ3BEQyxrQkFBZ0JDLEdBQWhCLEVBQXFCO0FBQ25CLFdBQU9BLElBQUlDLE1BQUosQ0FBV0MsUUFBWCxDQUFvQkMsSUFBcEIsQ0FBeUIsZUFBekIsRUFBMEMsRUFBRUMsVUFBVSxHQUFaLEVBQTFDLEVBQTZELEVBQUVDLE9BQU8sQ0FBVCxFQUE3RCxFQUEyRUMsSUFBM0UsQ0FBaUZDLE9BQUQsSUFBYTtBQUNsRyxVQUFJQSxRQUFRQyxNQUFSLElBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCO0FBQ0EsZUFBTyxFQUFFQyxVQUFVLEVBQUVDLFFBQVEsRUFBVixFQUFaLEVBQVA7QUFDRDtBQUNELFlBQU1DLGVBQWVKLFFBQVEsQ0FBUixDQUFyQjtBQUNBLGFBQU8sRUFBRUUsVUFBVSxFQUFFQyxRQUFRQyxhQUFhRCxNQUF2QixFQUFaLEVBQVA7QUFDRCxLQVBNLENBQVA7QUFRRDs7QUFFREUscUJBQW1CWixHQUFuQixFQUF3QjtBQUN0QixRQUFJQSxJQUFJYSxJQUFKLENBQVNDLFVBQWIsRUFBeUI7QUFDdkIsWUFBTSxJQUFJQyxlQUFNQyxLQUFWLENBQWdCRCxlQUFNQyxLQUFOLENBQVlDLG1CQUE1QixFQUFpRCwwREFBakQsQ0FBTjtBQUNEO0FBQ0QsVUFBTVAsU0FBU1YsSUFBSWtCLElBQUosQ0FBU1IsTUFBeEI7QUFDQTtBQUNBLFVBQU1TLFNBQVNDLE9BQU9DLElBQVAsQ0FBWVgsTUFBWixFQUFvQlksTUFBcEIsQ0FBMkIsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEtBQWM7QUFDdERELFVBQUssVUFBU0MsR0FBSSxFQUFsQixJQUF1QmQsT0FBT2MsR0FBUCxDQUF2QjtBQUNBLGFBQU9ELEdBQVA7QUFDRCxLQUhjLEVBR1osRUFIWSxDQUFmO0FBSUEsV0FBT3ZCLElBQUlDLE1BQUosQ0FBV0MsUUFBWCxDQUFvQmlCLE1BQXBCLENBQTJCLGVBQTNCLEVBQTRDLEVBQUNmLFVBQVUsR0FBWCxFQUE1QyxFQUE2RGUsTUFBN0QsRUFBcUUsRUFBQ00sUUFBUSxJQUFULEVBQXJFLEVBQXFGbkIsSUFBckYsQ0FBMEYsT0FBTyxFQUFFRyxVQUFVLEVBQUVpQixRQUFRLElBQVYsRUFBWixFQUFQLENBQTFGLENBQVA7QUFDRDs7QUFFREMsZ0JBQWM7QUFDWixTQUFLQyxLQUFMLENBQVcsS0FBWCxFQUFrQixTQUFsQixFQUE2QjVCLE9BQU87QUFBRSxhQUFPLEtBQUtELGVBQUwsQ0FBcUJDLEdBQXJCLENBQVA7QUFBa0MsS0FBeEU7QUFDQSxTQUFLNEIsS0FBTCxDQUFXLEtBQVgsRUFBa0IsU0FBbEIsRUFBNkJoQyxXQUFXaUMsNkJBQXhDLEVBQXVFN0IsT0FBTztBQUFFLGFBQU8sS0FBS1ksa0JBQUwsQ0FBd0JaLEdBQXhCLENBQVA7QUFBcUMsS0FBckg7QUFDRDtBQTVCbUQ7O1FBQXpDSCxrQixHQUFBQSxrQixFQUxiOztrQkFvQ2VBLGtCIiwiZmlsZSI6Ikdsb2JhbENvbmZpZ1JvdXRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGdsb2JhbF9jb25maWcuanNcbmltcG9ydCBQYXJzZSAgICAgICAgICAgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUHJvbWlzZVJvdXRlciAgIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tIFwiLi4vbWlkZGxld2FyZXNcIjtcblxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBnZXRHbG9iYWxDb25maWcocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuZmluZCgnX0dsb2JhbENvbmZpZycsIHsgb2JqZWN0SWQ6IFwiMVwiIH0sIHsgbGltaXQ6IDEgfSkudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uZmlnIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybiBlbXB0eSBjb25maWcuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczoge30gfSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gcmVzdWx0c1swXTtcbiAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczogZ2xvYmFsQ29uZmlnLnBhcmFtcyB9IH07XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVHbG9iYWxDb25maWcocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCAncmVhZC1vbmx5IG1hc3RlcktleSBpc25cXCd0IGFsbG93ZWQgdG8gdXBkYXRlIHRoZSBjb25maWcuJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHJlcS5ib2R5LnBhcmFtcztcbiAgICAvLyBUcmFuc2Zvcm0gaW4gZG90IG5vdGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrc1xuICAgIGNvbnN0IHVwZGF0ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2BwYXJhbXMuJHtrZXl9YF0gPSBwYXJhbXNba2V5XTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX0dsb2JhbENvbmZpZycsIHtvYmplY3RJZDogXCIxXCJ9LCB1cGRhdGUsIHt1cHNlcnQ6IHRydWV9KS50aGVuKCgpID0+ICh7IHJlc3BvbnNlOiB7IHJlc3VsdDogdHJ1ZSB9IH0pKTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY29uZmlnJywgcmVxID0+IHsgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKHJlcSkgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9jb25maWcnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4geyByZXR1cm4gdGhpcy51cGRhdGVHbG9iYWxDb25maWcocmVxKSB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHbG9iYWxDb25maWdSb3V0ZXI7XG4iXX0=
121
+ exports.GlobalConfigRouter = GlobalConfigRouter;
122
+ var _default = exports.default = GlobalConfigRouter;
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Byb21pc2VSb3V0ZXIiLCJtaWRkbGV3YXJlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJ0cmlnZ2VycyIsIl9FcnJvciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldENvbmZpZ0Zyb21QYXJhbXMiLCJwYXJhbXMiLCJjb25maWciLCJQYXJzZSIsIkNvbmZpZyIsImF0dHIiLCJhdHRyaWJ1dGVzIiwiX2RlY29kZSIsInVuZGVmaW5lZCIsIkdsb2JhbENvbmZpZ1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJnZXRHbG9iYWxDb25maWciLCJyZXEiLCJkYXRhYmFzZSIsImZpbmQiLCJvYmplY3RJZCIsImxpbWl0IiwidGhlbiIsInJlc3VsdHMiLCJsZW5ndGgiLCJyZXNwb25zZSIsImdsb2JhbENvbmZpZyIsImF1dGgiLCJpc01hc3RlciIsIm1hc3RlcktleU9ubHkiLCJwYXJhbSIsInVwZGF0ZUdsb2JhbENvbmZpZyIsImlzUmVhZE9ubHkiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImJvZHkiLCJ1cGRhdGUiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwiY2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiaGFzQmVmb3JlU2F2ZUhvb2siLCJ0cmlnZ2VyRXhpc3RzIiwiVHlwZXMiLCJiZWZvcmVTYXZlIiwiYXBwbGljYXRpb25JZCIsImhhc0FmdGVyU2F2ZUhvb2siLCJhZnRlclNhdmUiLCJvcmlnaW5hbENvbmZpZ09iamVjdCIsInVwZGF0ZWRDb25maWdPYmplY3QiLCJjb25maWdPYmplY3QiLCJpc05ldyIsIm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlciIsImNvbnRleHQiLCJ1cHNlcnQiLCJyZXN1bHQiLCJlcnIiLCJlcnJvciIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwibWVzc2FnZSIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dsb2JhbENvbmZpZ1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnbG9iYWxfY29uZmlnLmpzXG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0ICogYXMgdHJpZ2dlcnMgZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmNvbnN0IGdldENvbmZpZ0Zyb21QYXJhbXMgPSBwYXJhbXMgPT4ge1xuICBjb25zdCBjb25maWcgPSBuZXcgUGFyc2UuQ29uZmlnKCk7XG4gIGZvciAoY29uc3QgYXR0ciBpbiBwYXJhbXMpIHtcbiAgICBjb25maWcuYXR0cmlidXRlc1thdHRyXSA9IFBhcnNlLl9kZWNvZGUodW5kZWZpbmVkLCBwYXJhbXNbYXR0cl0pO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsQ29uZmlnUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIGdldEdsb2JhbENvbmZpZyhyZXEpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgLmZpbmQoJ19HbG9iYWxDb25maWcnLCB7IG9iamVjdElkOiAnMScgfSwgeyBsaW1pdDogMSB9KVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uZmlnIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybiBlbXB0eSBjb25maWcuXG4gICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHsgcGFyYW1zOiB7fSB9IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gcmVzdWx0c1swXTtcbiAgICAgICAgaWYgKCFyZXEuYXV0aC5pc01hc3RlciAmJiBnbG9iYWxDb25maWcubWFzdGVyS2V5T25seSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBnbG9iYWxDb25maWcucGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHlbcGFyYW1dKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBnbG9iYWxDb25maWcucGFyYW1zW3BhcmFtXTtcbiAgICAgICAgICAgICAgZGVsZXRlIGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5W3BhcmFtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcGFyYW1zOiBnbG9iYWxDb25maWcucGFyYW1zLFxuICAgICAgICAgICAgbWFzdGVyS2V5T25seTogZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlR2xvYmFsQ29uZmlnKHJlcSkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gdXBkYXRlIHRoZSBjb25maWcuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHJlcS5ib2R5LnBhcmFtcyB8fCB7fTtcbiAgICBjb25zdCBtYXN0ZXJLZXlPbmx5ID0gcmVxLmJvZHk/Lm1hc3RlcktleU9ubHkgfHwge307XG4gICAgLy8gVHJhbnNmb3JtIGluIGRvdCBub3RhdGlvbiB0byBtYWtlIHN1cmUgaXQgd29ya3NcbiAgICBjb25zdCB1cGRhdGUgPSBPYmplY3Qua2V5cyhwYXJhbXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGFjY1tgcGFyYW1zLiR7a2V5fWBdID0gcGFyYW1zW2tleV07XG4gICAgICBhY2NbYG1hc3RlcktleU9ubHkuJHtrZXl9YF0gPSBtYXN0ZXJLZXlPbmx5W2tleV0gfHwgZmFsc2U7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0cmlnZ2Vycy5nZXRDbGFzc05hbWUoUGFyc2UuQ29uZmlnKTtcbiAgICBjb25zdCBoYXNCZWZvcmVTYXZlSG9vayA9IHRyaWdnZXJzLnRyaWdnZXJFeGlzdHMoY2xhc3NOYW1lLCB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLCByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGNvbnN0IGhhc0FmdGVyU2F2ZUhvb2sgPSB0cmlnZ2Vycy50cmlnZ2VyRXhpc3RzKGNsYXNzTmFtZSwgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGxldCBvcmlnaW5hbENvbmZpZ09iamVjdDtcbiAgICBsZXQgdXBkYXRlZENvbmZpZ09iamVjdDtcbiAgICBjb25zdCBjb25maWdPYmplY3QgPSBuZXcgUGFyc2UuQ29uZmlnKCk7XG4gICAgY29uZmlnT2JqZWN0LmF0dHJpYnV0ZXMgPSBwYXJhbXM7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHsgbGltaXQ6IDEgfSk7XG4gICAgY29uc3QgaXNOZXcgPSByZXN1bHRzLmxlbmd0aCAhPT0gMTtcbiAgICBpZiAoIWlzTmV3ICYmIChoYXNCZWZvcmVTYXZlSG9vayB8fCBoYXNBZnRlclNhdmVIb29rKSkge1xuICAgICAgb3JpZ2luYWxDb25maWdPYmplY3QgPSBnZXRDb25maWdGcm9tUGFyYW1zKHJlc3VsdHNbMF0ucGFyYW1zKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLCByZXEuYXV0aCwgY29uZmlnT2JqZWN0LCBvcmlnaW5hbENvbmZpZ09iamVjdCwgcmVxLmNvbmZpZywgcmVxLmNvbnRleHQpO1xuICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHVwZGF0ZSwgeyB1cHNlcnQ6IHRydWUgfSwgdHJ1ZSlcbiAgICAgICAgdXBkYXRlZENvbmZpZ09iamVjdCA9IGNvbmZpZ09iamVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHVwZGF0ZSwge30sIHRydWUpO1xuICAgICAgICB1cGRhdGVkQ29uZmlnT2JqZWN0ID0gZ2V0Q29uZmlnRnJvbVBhcmFtcyhyZXN1bHQucGFyYW1zKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIHJlcS5hdXRoLCB1cGRhdGVkQ29uZmlnT2JqZWN0LCBvcmlnaW5hbENvbmZpZ09iamVjdCwgcmVxLmNvbmZpZywgcmVxLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHsgcmVzdWx0OiB0cnVlIH0gfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZXJyLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdTY3JpcHQgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY29uZmlnJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdsb2JhbENvbmZpZyhyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BVVCcsICcvY29uZmlnJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdsb2JhbENvbmZpZyhyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdsb2JhbENvbmZpZ1JvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBRCx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQWdELFNBQUFHLHdCQUFBRyxDQUFBLEVBQUFD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RTtRQUFJLENBQUMsRUFBRWlCLE1BQU0sRUFBRTtVQUFFb0IsTUFBTSxFQUFFO1FBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNwR0wsbUJBQW1CLEdBQUdDLFlBQVk7TUFDcEMsQ0FBQyxNQUFNO1FBQ0wsTUFBTUssTUFBTSxHQUFHLE1BQU16QyxHQUFHLENBQUNWLE1BQU0sQ0FBQ1csUUFBUSxDQUFDbUIsTUFBTSxDQUFDLGVBQWUsRUFBRTtVQUFFakIsUUFBUSxFQUFFO1FBQUksQ0FBQyxFQUFFaUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNyR2UsbUJBQW1CLEdBQUcvQyxtQkFBbUIsQ0FBQ3FELE1BQU0sQ0FBQ3BELE1BQU0sQ0FBQztNQUMxRDtNQUNBLE1BQU10QixRQUFRLENBQUN1RSwyQkFBMkIsQ0FBQ3ZFLFFBQVEsQ0FBQzhELEtBQUssQ0FBQ0ksU0FBUyxFQUFFakMsR0FBRyxDQUFDVSxJQUFJLEVBQUV5QixtQkFBbUIsRUFBRUQsb0JBQW9CLEVBQUVsQyxHQUFHLENBQUNWLE1BQU0sRUFBRVUsR0FBRyxDQUFDdUMsT0FBTyxDQUFDO01BQ2xKLE9BQU87UUFBRS9CLFFBQVEsRUFBRTtVQUFFaUMsTUFBTSxFQUFFO1FBQUs7TUFBRSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7TUFDWixNQUFNQyxLQUFLLEdBQUc1RSxRQUFRLENBQUM2RSxZQUFZLENBQUNGLEdBQUcsRUFBRTtRQUN2Q0csSUFBSSxFQUFFdEQsYUFBSyxDQUFDMEIsS0FBSyxDQUFDNkIsYUFBYTtRQUMvQkMsT0FBTyxFQUFFO01BQ1gsQ0FBQyxDQUFDO01BQ0YsTUFBTUosS0FBSztJQUNiO0VBQ0Y7RUFFQUssV0FBV0EsQ0FBQSxFQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRWpELEdBQUcsSUFBSTtNQUNsQyxPQUFPLElBQUksQ0FBQ0QsZUFBZSxDQUFDQyxHQUFHLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDaUQsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUVwRixVQUFVLENBQUNxRiw2QkFBNkIsRUFBRWxELEdBQUcsSUFBSTtNQUM1RSxPQUFPLElBQUksQ0FBQ2Msa0JBQWtCLENBQUNkLEdBQUcsQ0FBQztJQUNyQyxDQUFDLENBQUM7RUFDSjtBQUNGO0FBQUNtRCxPQUFBLENBQUF0RCxrQkFBQSxHQUFBQSxrQkFBQTtBQUFBLElBQUF1RCxRQUFBLEdBQUFELE9BQUEsQ0FBQXhFLE9BQUEsR0FFY2tCLGtCQUFrQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.GraphQLRouter = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
9
+ var middleware = _interopRequireWildcard(require("../middlewares"));
10
+ var _Error = require("../Error");
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const GraphQLConfigPath = '/graphql-config';
14
+ class GraphQLRouter extends _PromiseRouter.default {
15
+ async getGraphQLConfig(req) {
16
+ const result = await req.config.parseGraphQLController.getGraphQLConfig();
17
+ return {
18
+ response: result
19
+ };
20
+ }
21
+ async updateGraphQLConfig(req) {
22
+ if (req.auth.isReadOnly) {
23
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the GraphQL config.", req.config);
24
+ }
25
+ const data = await req.config.parseGraphQLController.updateGraphQLConfig(req.body?.params || {});
26
+ return {
27
+ response: data
28
+ };
29
+ }
30
+ mountRoutes() {
31
+ this.route('GET', GraphQLConfigPath, middleware.promiseEnforceMasterKeyAccess, req => {
32
+ return this.getGraphQLConfig(req);
33
+ });
34
+ this.route('PUT', GraphQLConfigPath, middleware.promiseEnforceMasterKeyAccess, req => {
35
+ return this.updateGraphQLConfig(req);
36
+ });
37
+ }
38
+ }
39
+ exports.GraphQLRouter = GraphQLRouter;
40
+ var _default = exports.default = GraphQLRouter;
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Byb21pc2VSb3V0ZXIiLCJtaWRkbGV3YXJlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJHcmFwaFFMQ29uZmlnUGF0aCIsIkdyYXBoUUxSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiZ2V0R3JhcGhRTENvbmZpZyIsInJlcSIsInJlc3VsdCIsImNvbmZpZyIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJyZXNwb25zZSIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJhdXRoIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEVycm9yIiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJkYXRhIiwiYm9keSIsInBhcmFtcyIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dyYXBoUUxSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG5jb25zdCBHcmFwaFFMQ29uZmlnUGF0aCA9ICcvZ3JhcGhxbC1jb25maWcnO1xuXG5leHBvcnQgY2xhc3MgR3JhcGhRTFJvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBhc3luYyBnZXRHcmFwaFFMQ29uZmlnKHJlcSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlci5nZXRHcmFwaFFMQ29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiByZXN1bHQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUdyYXBoUUxDb25maWcocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY29uZmlnLlwiLFxuICAgICAgICByZXEuY29uZmlnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcocmVxLmJvZHk/LnBhcmFtcyB8fCB7fSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmFwaFFMUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFBZ0QsU0FBQUcsd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLENBQUFFLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQVAsdUJBQUFNLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsR0FBQUwsQ0FBQSxLQUFBVSxPQUFBLEVBQUFWLENBQUE7QUFFaEQsTUFBTW1CLGlCQUFpQixHQUFHLGlCQUFpQjtBQUVwQyxNQUFNQyxhQUFhLFNBQVNDLHNCQUFhLENBQUM7RUFDL0MsTUFBTUMsZ0JBQWdCQSxDQUFDQyxHQUFHLEVBQUU7SUFDMUIsTUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsTUFBTSxDQUFDQyxzQkFBc0IsQ0FBQ0osZ0JBQWdCLENBQUMsQ0FBQztJQUN6RSxPQUFPO01BQ0xLLFFBQVEsRUFBRUg7SUFDWixDQUFDO0VBQ0g7RUFFQSxNQUFNSSxtQkFBbUJBLENBQUNMLEdBQUcsRUFBRTtJQUM3QixJQUFJQSxHQUFHLENBQUNNLElBQUksQ0FBQ0MsVUFBVSxFQUFFO01BQ3ZCLE1BQU0sSUFBQUMsMkJBQW9CLEVBQ3hCQyxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLEVBQy9CLGlFQUFpRSxFQUNqRVgsR0FBRyxDQUFDRSxNQUNOLENBQUM7SUFDSDtJQUNBLE1BQU1VLElBQUksR0FBRyxNQUFNWixHQUFHLENBQUNFLE1BQU0sQ0FBQ0Msc0JBQXNCLENBQUNFLG1CQUFtQixDQUFDTCxHQUFHLENBQUNhLElBQUksRUFBRUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE9BQU87TUFDTFYsUUFBUSxFQUFFUTtJQUNaLENBQUM7RUFDSDtFQUVBRyxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssQ0FBQyxLQUFLLEVBQUVwQixpQkFBaUIsRUFBRXRCLFVBQVUsQ0FBQzJDLDZCQUE2QixFQUFFakIsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0MsR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ2dCLEtBQUssQ0FBQyxLQUFLLEVBQUVwQixpQkFBaUIsRUFBRXRCLFVBQVUsQ0FBQzJDLDZCQUE2QixFQUFFakIsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDSyxtQkFBbUIsQ0FBQ0wsR0FBRyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztFQUNKO0FBQ0Y7QUFBQ2tCLE9BQUEsQ0FBQXJCLGFBQUEsR0FBQUEsYUFBQTtBQUFBLElBQUFzQixRQUFBLEdBQUFELE9BQUEsQ0FBQS9CLE9BQUEsR0FFY1UsYUFBYSIsImlnbm9yZUxpc3QiOltdfQ==