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,25 +1,29 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.ParseServerRESTController = ParseServerRESTController;
7
+ exports.default = void 0;
8
+ var _RESTController = _interopRequireDefault(require("parse/lib/node/RESTController"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
6
10
  const Config = require('./Config');
7
11
  const Auth = require('./Auth');
8
- const RESTController = require('parse/lib/node/RESTController');
9
- const URL = require('url');
10
12
  const Parse = require('parse/node');
11
-
12
13
  function getSessionToken(options) {
13
14
  if (options && typeof options.sessionToken === 'string') {
14
- return Parse.Promise.as(options.sessionToken);
15
+ return Promise.resolve(options.sessionToken);
15
16
  }
16
- return Parse.Promise.as(null);
17
+ return Promise.resolve(null);
17
18
  }
18
-
19
19
  function getAuth(options = {}, config) {
20
20
  const installationId = options.installationId || 'cloud';
21
21
  if (options.useMasterKey) {
22
- return Parse.Promise.as(new Auth.Auth({ config, isMaster: true, installationId }));
22
+ return Promise.resolve(new Auth.Auth({
23
+ config,
24
+ isMaster: true,
25
+ installationId
26
+ }));
23
27
  }
24
28
  return getSessionToken(options).then(sessionToken => {
25
29
  if (sessionToken) {
@@ -30,43 +34,88 @@ function getAuth(options = {}, config) {
30
34
  installationId
31
35
  });
32
36
  } else {
33
- return Parse.Promise.as(new Auth.Auth({ config, installationId }));
37
+ return Promise.resolve(new Auth.Auth({
38
+ config,
39
+ installationId
40
+ }));
34
41
  }
35
42
  });
36
43
  }
37
-
38
44
  function ParseServerRESTController(applicationId, router) {
39
- function handleRequest(method, path, data = {}, options = {}) {
45
+ function handleRequest(method, path, data = {}, options = {}, config) {
40
46
  // Store the arguments, for later use if internal fails
41
47
  const args = arguments;
42
-
43
- const config = Config.get(applicationId);
44
- const serverURL = URL.parse(config.serverURL);
45
- if (path.indexOf(serverURL.path) === 0) {
46
- path = path.slice(serverURL.path.length, path.length);
48
+ if (!config) {
49
+ config = Config.get(applicationId);
47
50
  }
48
-
49
- if (path[0] !== "/") {
50
- path = "/" + path;
51
+ const serverURL = new URL(config.serverURL);
52
+ if (path.indexOf(serverURL.pathname) === 0) {
53
+ path = path.slice(serverURL.pathname.length, path.length);
54
+ }
55
+ if (path[0] !== '/') {
56
+ path = '/' + path;
51
57
  }
52
-
53
58
  if (path === '/batch') {
54
- const promises = data.requests.map(request => {
55
- return handleRequest(request.method, request.path, request.body, options).then(response => {
56
- return Parse.Promise.as({ success: response });
57
- }, error => {
58
- return Parse.Promise.as({ error: { code: error.code, error: error.message } });
59
+ const batch = transactionRetries => {
60
+ let initialPromise = Promise.resolve();
61
+ if (data.transaction === true) {
62
+ initialPromise = config.database.createTransactionalSession();
63
+ }
64
+ return initialPromise.then(() => {
65
+ const promises = data.requests.map(request => {
66
+ return handleRequest(request.method, request.path, request.body, options, config).then(response => {
67
+ if (options.returnStatus) {
68
+ const status = response._status;
69
+ const headers = response._headers;
70
+ delete response._status;
71
+ delete response._headers;
72
+ return {
73
+ success: response,
74
+ _status: status,
75
+ _headers: headers
76
+ };
77
+ }
78
+ return {
79
+ success: response
80
+ };
81
+ }, error => {
82
+ return {
83
+ error: {
84
+ code: error.code,
85
+ error: error.message
86
+ }
87
+ };
88
+ });
89
+ });
90
+ return Promise.all(promises).then(result => {
91
+ if (data.transaction === true) {
92
+ if (result.find(resultItem => typeof resultItem.error === 'object')) {
93
+ return config.database.abortTransactionalSession().then(() => {
94
+ return Promise.reject(result);
95
+ });
96
+ } else {
97
+ return config.database.commitTransactionalSession().then(() => {
98
+ return result;
99
+ });
100
+ }
101
+ } else {
102
+ return result;
103
+ }
104
+ }).catch(error => {
105
+ if (error && error.find(errorItem => typeof errorItem.error === 'object' && errorItem.error.code === 251) && transactionRetries > 0) {
106
+ return batch(transactionRetries - 1);
107
+ }
108
+ throw error;
109
+ });
59
110
  });
60
- });
61
- return Parse.Promise.all(promises);
111
+ };
112
+ return batch(5);
62
113
  }
63
-
64
114
  let query;
65
115
  if (method === 'GET') {
66
116
  query = data;
67
117
  }
68
-
69
- return new Parse.Promise((resolve, reject) => {
118
+ return new Promise((resolve, reject) => {
70
119
  getAuth(options, config).then(auth => {
71
120
  const request = {
72
121
  body: data,
@@ -74,17 +123,32 @@ function ParseServerRESTController(applicationId, router) {
74
123
  auth,
75
124
  info: {
76
125
  applicationId: applicationId,
77
- sessionToken: options.sessionToken
126
+ sessionToken: options.sessionToken,
127
+ installationId: options.installationId,
128
+ context: options.context || {}
78
129
  },
79
130
  query
80
131
  };
81
132
  return Promise.resolve().then(() => {
82
133
  return router.tryRouteRequest(method, path, request);
83
- }).then(response => {
84
- resolve(response.response, response.status, response);
134
+ }).then(resp => {
135
+ const {
136
+ response,
137
+ status,
138
+ headers = {}
139
+ } = resp;
140
+ if (options.returnStatus) {
141
+ resolve({
142
+ ...response,
143
+ _status: status,
144
+ _headers: headers
145
+ });
146
+ } else {
147
+ resolve(response);
148
+ }
85
149
  }, err => {
86
150
  if (err instanceof Parse.Error && err.code == Parse.Error.INVALID_JSON && err.message == `cannot route ${method} ${path}`) {
87
- RESTController.request.apply(null, args).then(resolve, reject);
151
+ _RESTController.default.request.apply(null, args).then(resolve, reject);
88
152
  } else {
89
153
  reject(err);
90
154
  }
@@ -92,13 +156,11 @@ function ParseServerRESTController(applicationId, router) {
92
156
  }, reject);
93
157
  });
94
158
  }
95
-
96
159
  return {
97
160
  request: handleRequest,
98
- ajax: RESTController.ajax
161
+ ajax: _RESTController.default.ajax,
162
+ handleError: _RESTController.default.handleError
99
163
  };
100
164
  }
101
-
102
- exports.default = ParseServerRESTController;
103
- exports.ParseServerRESTController = ParseServerRESTController;
104
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QYXJzZVNlcnZlclJFU1RDb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbmZpZyIsInJlcXVpcmUiLCJBdXRoIiwiUkVTVENvbnRyb2xsZXIiLCJVUkwiLCJQYXJzZSIsImdldFNlc3Npb25Ub2tlbiIsIm9wdGlvbnMiLCJzZXNzaW9uVG9rZW4iLCJQcm9taXNlIiwiYXMiLCJnZXRBdXRoIiwiY29uZmlnIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VNYXN0ZXJLZXkiLCJpc01hc3RlciIsInRoZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlciIsImFwcGxpY2F0aW9uSWQiLCJyb3V0ZXIiLCJoYW5kbGVSZXF1ZXN0IiwibWV0aG9kIiwicGF0aCIsImRhdGEiLCJhcmdzIiwiYXJndW1lbnRzIiwiZ2V0Iiwic2VydmVyVVJMIiwicGFyc2UiLCJpbmRleE9mIiwic2xpY2UiLCJsZW5ndGgiLCJwcm9taXNlcyIsInJlcXVlc3RzIiwibWFwIiwicmVxdWVzdCIsImJvZHkiLCJyZXNwb25zZSIsInN1Y2Nlc3MiLCJlcnJvciIsImNvZGUiLCJtZXNzYWdlIiwiYWxsIiwicXVlcnkiLCJyZXNvbHZlIiwicmVqZWN0IiwiYXV0aCIsImluZm8iLCJ0cnlSb3V0ZVJlcXVlc3QiLCJzdGF0dXMiLCJlcnIiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsImFwcGx5IiwiYWpheCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFNQSxTQUFTQyxRQUFRLFVBQVIsQ0FBZjtBQUNBLE1BQU1DLE9BQU9ELFFBQVEsUUFBUixDQUFiO0FBQ0EsTUFBTUUsaUJBQWlCRixRQUFRLCtCQUFSLENBQXZCO0FBQ0EsTUFBTUcsTUFBTUgsUUFBUSxLQUFSLENBQVo7QUFDQSxNQUFNSSxRQUFRSixRQUFRLFlBQVIsQ0FBZDs7QUFFQSxTQUFTSyxlQUFULENBQXlCQyxPQUF6QixFQUFrQztBQUNoQyxNQUFJQSxXQUFXLE9BQU9BLFFBQVFD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eUIsR0FBQUEseUIiLCJmaWxlIjoiUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENvbmZpZyA9IHJlcXVpcmUoJy4vQ29uZmlnJyk7XG5jb25zdCBBdXRoID0gcmVxdWlyZSgnLi9BdXRoJyk7XG5jb25zdCBSRVNUQ29udHJvbGxlciA9IHJlcXVpcmUoJ3BhcnNlL2xpYi9ub2RlL1JFU1RDb250cm9sbGVyJyk7XG5jb25zdCBVUkwgPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuXG5mdW5jdGlvbiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFBhcnNlLlByb21pc2UuYXMob3B0aW9ucy5zZXNzaW9uVG9rZW4pO1xuICB9XG4gIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKG51bGwpO1xufVxuXG5mdW5jdGlvbiBnZXRBdXRoKG9wdGlvbnMgPSB7fSwgY29uZmlnKSB7XG4gIGNvbnN0IGluc3RhbGxhdGlvbklkID0gb3B0aW9ucy5pbnN0YWxsYXRpb25JZCB8fCAnY2xvdWQnO1xuICBpZiAob3B0aW9ucy51c2VNYXN0ZXJLZXkpIHtcbiAgICByZXR1cm4gUGFyc2UuUHJvbWlzZS5hcyhuZXcgQXV0aC5BdXRoKHtjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpbnN0YWxsYXRpb25JZCB9KSk7XG4gIH1cbiAgcmV0dXJuIGdldFNlc3Npb25Ub2tlbihvcHRpb25zKS50aGVuKChzZXNzaW9uVG9rZW4pID0+IHtcbiAgICBpZiAoc2Vzc2lvblRva2VuKSB7XG4gICAgICBvcHRpb25zLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcbiAgICAgIHJldHVybiBBdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc2Vzc2lvblRva2VuLFxuICAgICAgICBpbnN0YWxsYXRpb25JZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKG5ldyBBdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkIH0pKTtcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIoYXBwbGljYXRpb25JZCwgcm91dGVyKSB7XG4gIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QobWV0aG9kLCBwYXRoLCBkYXRhID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFN0b3JlIHRoZSBhcmd1bWVudHMsIGZvciBsYXRlciB1c2UgaWYgaW50ZXJuYWwgZmFpbHNcbiAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzO1xuXG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBzZXJ2ZXJVUkwgPSBVUkwucGFyc2UoY29uZmlnLnNlcnZlclVSTCk7XG4gICAgaWYgKHBhdGguaW5kZXhPZihzZXJ2ZXJVUkwucGF0aCkgPT09IDApIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHNlcnZlclVSTC5wYXRoLmxlbmd0aCwgcGF0aC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChwYXRoWzBdICE9PSBcIi9cIikge1xuICAgICAgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICB9XG5cbiAgICBpZiAocGF0aCA9PT0gJy9iYXRjaCcpIHtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gZGF0YS5yZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgcmVxdWVzdC5ib2R5LCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKHtzdWNjZXNzOiByZXNwb25zZX0pO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gUGFyc2UuUHJvbWlzZS5hcyh7ZXJyb3I6IHtjb2RlOiBlcnJvci5jb2RlLCBlcnJvcjogZXJyb3IubWVzc2FnZX19KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgbGV0IHF1ZXJ5O1xuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICBxdWVyeSA9IGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJzZS5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGdldEF1dGgob3B0aW9ucywgY29uZmlnKS50aGVuKChhdXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbklkOiBhcHBsaWNhdGlvbklkLFxuICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBvcHRpb25zLnNlc3Npb25Ub2tlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgcXVlcnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3V0ZXIudHJ5Um91dGVSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgcmVxdWVzdCk7XG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5yZXNwb25zZSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IgJiZcbiAgICAgICAgICAgICAgZXJyLmNvZGUgPT0gUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OICYmXG4gICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IGBjYW5ub3Qgcm91dGUgJHttZXRob2R9ICR7cGF0aH1gKSB7XG4gICAgICAgICAgICBSRVNUQ29udHJvbGxlci5yZXF1ZXN0LmFwcGx5KG51bGwsIGFyZ3MpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gIHtcbiAgICByZXF1ZXN0OiBoYW5kbGVSZXF1ZXN0LFxuICAgIGFqYXg6IFJFU1RDb250cm9sbGVyLmFqYXhcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlcjtcbmV4cG9ydCB7IFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIgfTtcbiJdfQ==
165
+ var _default = exports.default = ParseServerRESTController;
166
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUkVTVENvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkNvbmZpZyIsIkF1dGgiLCJQYXJzZSIsImdldFNlc3Npb25Ub2tlbiIsIm9wdGlvbnMiLCJzZXNzaW9uVG9rZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldEF1dGgiLCJjb25maWciLCJpbnN0YWxsYXRpb25JZCIsInVzZU1hc3RlcktleSIsImlzTWFzdGVyIiwidGhlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJQYXJzZVNlcnZlclJFU1RDb250cm9sbGVyIiwiYXBwbGljYXRpb25JZCIsInJvdXRlciIsImhhbmRsZVJlcXVlc3QiLCJtZXRob2QiLCJwYXRoIiwiZGF0YSIsImFyZ3MiLCJhcmd1bWVudHMiLCJnZXQiLCJzZXJ2ZXJVUkwiLCJVUkwiLCJpbmRleE9mIiwicGF0aG5hbWUiLCJzbGljZSIsImxlbmd0aCIsImJhdGNoIiwidHJhbnNhY3Rpb25SZXRyaWVzIiwiaW5pdGlhbFByb21pc2UiLCJ0cmFuc2FjdGlvbiIsImRhdGFiYXNlIiwiY3JlYXRlVHJhbnNhY3Rpb25hbFNlc3Npb24iLCJwcm9taXNlcyIsInJlcXVlc3RzIiwibWFwIiwicmVxdWVzdCIsImJvZHkiLCJyZXNwb25zZSIsInJldHVyblN0YXR1cyIsInN0YXR1cyIsIl9zdGF0dXMiLCJoZWFkZXJzIiwiX2hlYWRlcnMiLCJzdWNjZXNzIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImFsbCIsInJlc3VsdCIsImZpbmQiLCJyZXN1bHRJdGVtIiwiYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbiIsInJlamVjdCIsImNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uIiwiY2F0Y2giLCJlcnJvckl0ZW0iLCJxdWVyeSIsImF1dGgiLCJpbmZvIiwiY29udGV4dCIsInRyeVJvdXRlUmVxdWVzdCIsInJlc3AiLCJlcnIiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsIlJFU1RDb250cm9sbGVyIiwiYXBwbHkiLCJhamF4IiwiaGFuZGxlRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDb25maWcgPSByZXF1aXJlKCcuL0NvbmZpZycpO1xuY29uc3QgQXV0aCA9IHJlcXVpcmUoJy4vQXV0aCcpO1xuaW1wb3J0IFJFU1RDb250cm9sbGVyIGZyb20gJ3BhcnNlL2xpYi9ub2RlL1JFU1RDb250cm9sbGVyJztcbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuXG5mdW5jdGlvbiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvcHRpb25zLnNlc3Npb25Ub2tlbik7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXV0aChvcHRpb25zID0ge30sIGNvbmZpZykge1xuICBjb25zdCBpbnN0YWxsYXRpb25JZCA9IG9wdGlvbnMuaW5zdGFsbGF0aW9uSWQgfHwgJ2Nsb3VkJztcbiAgaWYgKG9wdGlvbnMudXNlTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQXV0aC5BdXRoKHsgY29uZmlnLCBpc01hc3RlcjogdHJ1ZSwgaW5zdGFsbGF0aW9uSWQgfSkpO1xuICB9XG4gIHJldHVybiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykudGhlbihzZXNzaW9uVG9rZW4gPT4ge1xuICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcbiAgICAgIG9wdGlvbnMuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuICAgICAgcmV0dXJuIEF1dGguZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBzZXNzaW9uVG9rZW4sXG4gICAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQgfSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIoYXBwbGljYXRpb25JZCwgcm91dGVyKSB7XG4gIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QobWV0aG9kLCBwYXRoLCBkYXRhID0ge30sIG9wdGlvbnMgPSB7fSwgY29uZmlnKSB7XG4gICAgLy8gU3RvcmUgdGhlIGFyZ3VtZW50cywgZm9yIGxhdGVyIHVzZSBpZiBpbnRlcm5hbCBmYWlsc1xuICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmVyVVJMID0gbmV3IFVSTChjb25maWcuc2VydmVyVVJMKTtcbiAgICBpZiAocGF0aC5pbmRleE9mKHNlcnZlclVSTC5wYXRobmFtZSkgPT09IDApIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHNlcnZlclVSTC5wYXRobmFtZS5sZW5ndGgsIHBhdGgubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAocGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICBpZiAocGF0aCA9PT0gJy9iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gdHJhbnNhY3Rpb25SZXRyaWVzID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChkYXRhLnRyYW5zYWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgaW5pdGlhbFByb21pc2UgPSBjb25maWcuZGF0YWJhc2UuY3JlYXRlVHJhbnNhY3Rpb25hbFNlc3Npb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhLnJlcXVlc3RzLm1hcChyZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVSZXF1ZXN0KHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnBhdGgsIHJlcXVlc3QuYm9keSwgb3B0aW9ucywgY29uZmlnKS50aGVuKFxuICAgICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5fc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLl9oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3BvbnNlLl9zdGF0dXM7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgcmVzcG9uc2UuX2hlYWRlcnM7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiByZXNwb25zZSwgX3N0YXR1czogc3RhdHVzLCBfaGVhZGVyczogaGVhZGVycyB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiByZXNwb25zZSB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yOiB7IGNvZGU6IGVycm9yLmNvZGUsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGF0YS50cmFuc2FjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZmluZChyZXN1bHRJdGVtID0+IHR5cGVvZiByZXN1bHRJdGVtLmVycm9yID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmRhdGFiYXNlLmNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnJvciAmJlxuICAgICAgICAgICAgICAgIGVycm9yLmZpbmQoXG4gICAgICAgICAgICAgICAgICBlcnJvckl0ZW0gPT4gdHlwZW9mIGVycm9ySXRlbS5lcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3JJdGVtLmVycm9yLmNvZGUgPT09IDI1MVxuICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblJldHJpZXMgPiAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXRjaCh0cmFuc2FjdGlvblJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gYmF0Y2goNSk7XG4gICAgfVxuXG4gICAgbGV0IHF1ZXJ5O1xuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICBxdWVyeSA9IGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGdldEF1dGgob3B0aW9ucywgY29uZmlnKS50aGVuKGF1dGggPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgaW5mbzoge1xuICAgICAgICAgICAgYXBwbGljYXRpb25JZDogYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogb3B0aW9ucy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICBpbnN0YWxsYXRpb25JZDogb3B0aW9ucy5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCB8fCB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcm91dGVyLnRyeVJvdXRlUmVxdWVzdChtZXRob2QsIHBhdGgsIHJlcXVlc3QpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICByZXNwID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyByZXNwb25zZSwgc3RhdHVzLCBoZWFkZXJzID0ge30gfSA9IHJlc3A7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnJldHVyblN0YXR1cykge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyAuLi5yZXNwb25zZSwgX3N0YXR1czogc3RhdHVzLCBfaGVhZGVyczogaGVhZGVycyB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvciAmJlxuICAgICAgICAgICAgICAgIGVyci5jb2RlID09IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiAmJlxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IGBjYW5ub3Qgcm91dGUgJHttZXRob2R9ICR7cGF0aH1gXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIFJFU1RDb250cm9sbGVyLnJlcXVlc3QuYXBwbHkobnVsbCwgYXJncykudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlcXVlc3Q6IGhhbmRsZVJlcXVlc3QsXG4gICAgYWpheDogUkVTVENvbnRyb2xsZXIuYWpheCxcbiAgICBoYW5kbGVFcnJvcjogUkVTVENvbnRyb2xsZXIuaGFuZGxlRXJyb3IsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlU2VydmVyUkVT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
@@ -1,25 +1,14 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var _node = require('parse/node');
8
-
9
- var _node2 = _interopRequireDefault(_node);
10
-
11
- var _express = require('express');
12
-
13
- var _express2 = _interopRequireDefault(_express);
14
-
15
- var _logger = require('./logger');
16
-
17
- var _logger2 = _interopRequireDefault(_logger);
18
-
19
- var _util = require('util');
20
-
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
-
6
+ exports.default = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var _express = _interopRequireDefault(require("express"));
9
+ var _logger = _interopRequireDefault(require("./logger"));
10
+ var _util = require("util");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
12
  // A router that is based on promises rather than req/res/next.
24
13
  // This is intended to replace the use of express.Router to handle
25
14
  // subsections of the API surface.
@@ -27,8 +16,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
27
16
  // themselves use our routing information, without disturbing express
28
17
  // components that external developers may be modifying.
29
18
 
30
- const Layer = require('express/lib/router/layer');
31
-
19
+ const Layer = require('router/lib/layer');
32
20
  function validateParameter(key, value) {
33
21
  if (key == 'className') {
34
22
  if (value.match(/_?[A-Za-z][A-Za-z_0-9]*/)) {
@@ -42,7 +30,6 @@ function validateParameter(key, value) {
42
30
  return value;
43
31
  }
44
32
  }
45
-
46
33
  class PromiseRouter {
47
34
  // Each entry should be an object with:
48
35
  // path: the path to route, in express format
@@ -69,7 +56,6 @@ class PromiseRouter {
69
56
  this.routes.push(route);
70
57
  }
71
58
  }
72
-
73
59
  route(method, path, ...handlers) {
74
60
  switch (method) {
75
61
  case 'POST':
@@ -80,9 +66,7 @@ class PromiseRouter {
80
66
  default:
81
67
  throw 'cannot route method: ' + method;
82
68
  }
83
-
84
69
  let handler = handlers[0];
85
-
86
70
  if (handlers.length > 1) {
87
71
  handler = function (req) {
88
72
  return handlers.reduce((promise, handler) => {
@@ -92,7 +76,6 @@ class PromiseRouter {
92
76
  }, Promise.resolve());
93
77
  };
94
78
  }
95
-
96
79
  this.routes.push({
97
80
  path: path,
98
81
  method: method,
@@ -117,7 +100,10 @@ class PromiseRouter {
117
100
  Object.keys(params).forEach(key => {
118
101
  params[key] = validateParameter(key, params[key]);
119
102
  });
120
- return { params: params, handler: route.handler };
103
+ return {
104
+ params: params,
105
+ handler: route.handler
106
+ };
121
107
  }
122
108
  }
123
109
  }
@@ -131,15 +117,13 @@ class PromiseRouter {
131
117
  });
132
118
  return expressApp;
133
119
  }
134
-
135
120
  expressRouter() {
136
- return this.mountOnto(_express2.default.Router());
121
+ return this.mountOnto(_express.default.Router());
137
122
  }
138
-
139
123
  tryRouteRequest(method, path, request) {
140
124
  var match = this.match(method, path);
141
125
  if (!match) {
142
- throw new _node2.default.Error(_node2.default.Error.INVALID_JSON, 'cannot route ' + method + ' ' + path);
126
+ throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'cannot route ' + method + ' ' + path);
143
127
  }
144
128
  request.params = match.params;
145
129
  return new Promise((resolve, reject) => {
@@ -148,11 +132,11 @@ class PromiseRouter {
148
132
  }
149
133
  }
150
134
 
151
- exports.default = PromiseRouter; // A helper function to make an express handler out of a a promise
135
+ // A helper function to make an express handler out of a a promise
152
136
  // handler.
153
137
  // Express handlers should never throw; if a promise handler throws we
154
138
  // just treat it like it resolved to an error.
155
-
139
+ exports.default = PromiseRouter;
156
140
  function makeExpressHandler(appId, promiseHandler) {
157
141
  return function (req, res, next) {
158
142
  try {
@@ -160,7 +144,7 @@ function makeExpressHandler(appId, promiseHandler) {
160
144
  const body = Object.assign({}, req.body);
161
145
  const method = req.method;
162
146
  const headers = req.headers;
163
- _logger2.default.logRequest({
147
+ _logger.default.logRequest({
164
148
  method,
165
149
  url,
166
150
  headers,
@@ -168,20 +152,25 @@ function makeExpressHandler(appId, promiseHandler) {
168
152
  });
169
153
  promiseHandler(req).then(result => {
170
154
  if (!result.response && !result.location && !result.text) {
171
- _logger2.default.error('the handler did not include a "response" or a "location" field');
155
+ _logger.default.error('the handler did not include a "response" or a "location" field');
172
156
  throw 'control should not get here';
173
157
  }
174
-
175
- _logger2.default.logResponse({ method, url, result });
176
-
158
+ _logger.default.logResponse({
159
+ method,
160
+ url,
161
+ result
162
+ });
177
163
  var status = result.status || 200;
178
164
  res.status(status);
179
-
165
+ if (result.headers) {
166
+ Object.keys(result.headers).forEach(header => {
167
+ res.set(header, result.headers[header]);
168
+ });
169
+ }
180
170
  if (result.text) {
181
171
  res.send(result.text);
182
172
  return;
183
173
  }
184
-
185
174
  if (result.location) {
186
175
  res.set('Location', result.location);
187
176
  // Override the default expressjs response
@@ -191,29 +180,29 @@ function makeExpressHandler(appId, promiseHandler) {
191
180
  return;
192
181
  }
193
182
  }
194
- if (result.headers) {
195
- Object.keys(result.headers).forEach(header => {
196
- res.set(header, result.headers[header]);
197
- });
198
- }
199
183
  res.json(result.response);
200
- }, e => {
201
- _logger2.default.error(`Error generating response. ${(0, _util.inspect)(e)}`, { error: e });
184
+ }, error => {
185
+ next(error);
186
+ }).catch(e => {
187
+ _logger.default.error(`Error generating response. ${(0, _util.inspect)(e)}`, {
188
+ error: e
189
+ });
202
190
  next(e);
203
191
  });
204
192
  } catch (e) {
205
- _logger2.default.error(`Error handling request: ${(0, _util.inspect)(e)}`, { error: e });
193
+ _logger.default.error(`Error handling request: ${(0, _util.inspect)(e)}`, {
194
+ error: e
195
+ });
206
196
  next(e);
207
197
  }
208
198
  };
209
199
  }
210
-
211
200
  function maskSensitiveUrl(req) {
212
201
  let maskUrl = req.originalUrl.toString();
213
202
  const shouldMaskUrl = req.method === 'GET' && req.originalUrl.includes('/login') && !req.originalUrl.includes('classes');
214
203
  if (shouldMaskUrl) {
215
- maskUrl = _logger2.default.maskSensitiveUrl(maskUrl);
204
+ maskUrl = _logger.default.maskSensitiveUrl(maskUrl);
216
205
  }
217
206
  return maskUrl;
218
207
  }
219
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Qcm9taXNlUm91dGVyLmpzIl0sIm5hbWVzIjpbIkxheWVyIiwicmVxdWlyZSIsInZhbGlkYXRlUGFyYW1ldGVyIiwia2V5IiwidmFsdWUiLCJtYXRjaCIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInJvdXRlcyIsImFwcElkIiwibW91bnRSb3V0ZXMiLCJtZXJnZSIsInJvdXRlciIsInJvdXRlIiwicHVzaCIsIm1ldGhvZCIsInBhdGgiLCJoYW5kbGVycyIsImhhbmRsZXIiLCJsZW5ndGgiLCJyZXEiLCJyZWR1Y2UiLCJwcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwibGF5ZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsIm1vdW50T250byIsImV4cHJlc3NBcHAiLCJ0b0xvd2VyQ2FzZSIsIm1ha2VFeHByZXNzSGFuZGxlciIsImNhbGwiLCJleHByZXNzUm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsInRyeVJvdXRlUmVxdWVzdCIsInJlcXVlc3QiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwicmVqZWN0IiwicHJvbWlzZUhhbmRsZXIiLCJyZXMiLCJuZXh0IiwidXJsIiwibWFza1NlbnNpdGl2ZVVybCIsImJvZHkiLCJhc3NpZ24iLCJoZWFkZXJzIiwibG9nIiwibG9nUmVxdWVzdCIsInJlc3VsdCIsInJlc3BvbnNlIiwibG9jYXRpb24iLCJ0ZXh0IiwiZXJyb3IiLCJsb2dSZXNwb25zZSIsInN0YXR1cyIsInNlbmQiLCJzZXQiLCJoZWFkZXIiLCJqc29uIiwiZSIsIm1hc2tVcmwiLCJvcmlnaW5hbFVybCIsInRvU3RyaW5nIiwic2hvdWxkTWFza1VybCIsImluY2x1ZGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQSxNQUFNQSxRQUFRQyxRQUFRLDBCQUFSLENB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YmFzZWQgb24gcHJvbWlzZXMgcmF0aGVyIHRoYW4gcmVxL3Jlcy9uZXh0LlxuLy8gVGhpcyBpcyBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSB1c2Ugb2YgZXhwcmVzcy5Sb3V0ZXIgdG8gaGFuZGxlXG4vLyBzdWJzZWN0aW9ucyBvZiB0aGUgQVBJIHN1cmZhY2UuXG4vLyBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gaGF2ZSBtZXRob2RzIGxpa2UgJ2JhdGNoJyB0aGF0XG4vLyB0aGVtc2VsdmVzIHVzZSBvdXIgcm91dGluZyBpbmZvcm1hdGlvbiwgd2l0aG91dCBkaXN0dXJiaW5nIGV4cHJlc3Ncbi8vIGNvbXBvbmVudHMgdGhhdCBleHRlcm5hbCBkZXZlbG9wZXJzIG1heSBiZSBtb2RpZnlpbmcuXG5cbmltcG9ydCBQYXJzZSAgICAgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgZXhwcmVzcyAgIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGxvZyAgICAgICBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge2luc3BlY3R9IGZyb20gJ3V0aWwnO1xuY29uc3QgTGF5ZXIgPSByZXF1aXJlKCdleHByZXNzL2xpYi9yb3V0ZXIvbGF5ZXInKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdjbGFzc05hbWUnKSB7XG4gICAgaWYgKHZhbHVlLm1hdGNoKC9fP1tBLVphLXpdW0EtWmEtel8wLTldKi8pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleSA9PSAnb2JqZWN0SWQnKSB7XG4gICAgaWYgKHZhbHVlLm1hdGNoKC9bQS1aYS16MC05XSsvKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlUm91dGVyIHtcbiAgLy8gRWFjaCBlbnRyeSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGg6XG4gIC8vIHBhdGg6IHRoZSBwYXRoIHRvIHJvdXRlLCBpbiBleHByZXNzIGZvcm1hdFxuICAvLyBtZXRob2Q6IHRoZSBIVFRQIG1ldGhvZCB0aGF0IHRoaXMgcm91dGUgaGFuZGxlcy5cbiAgLy8gICBNdXN0IGJlIG9uZSBvZjogUE9TVCwgR0VULCBQVVQsIERFTEVURVxuICAvLyBoYW5kbGVyOiBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgcmVxdWVzdCwgYW5kIHJldHVybnMgYSBwcm9taXNlLlxuICAvLyAgIFN1Y2Nlc3NmdWwgaGFuZGxlcnMgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0IHdpdGggZmllbGRzOlxuICAvLyAgICAgc3RhdHVzOiBvcHRpb25hbC4gdGhlIGh0dHAgc3RhdHVzIGNvZGUuIGRlZmF1bHRzIHRvIDIwMFxuICAvLyAgICAgcmVzcG9uc2U6IGEganNvbiBvYmplY3Qgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgcmVzcG9uc2VcbiAgLy8gICAgIGxvY2F0aW9uOiBvcHRpb25hbC4gYSBsb2NhdGlvbiBoZWFkZXJcbiAgY29uc3RydWN0b3Iocm91dGVzID0gW10sIGFwcElkKSB7XG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5hcHBJZCA9IGFwcElkO1xuICAgIHRoaXMubW91bnRSb3V0ZXMoKTtcbiAgfVxuXG4gIC8vIExlYXZlIHRoZSBvcHBvcnR1bml0eSB0b1xuICAvLyBzdWJjbGFzc2VzIHRvIG1vdW50IHRoZWlyIHJvdXRlcyBieSBvdmVycmlkaW5nXG4gIG1vdW50Um91dGVzKCkge31cblxuICAvLyBNZXJnZSB0aGUgcm91dGVzIGludG8gdGhpcyBvbmVcbiAgbWVyZ2Uocm91dGVyKSB7XG4gICAgZm9yICh2YXIgcm91dGUgb2Ygcm91dGVyLnJvdXRlcykge1xuICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgfVxuICB9XG5cbiAgcm91dGUobWV0aG9kLCBwYXRoLCAuLi5oYW5kbGVycykge1xuICAgIHN3aXRjaChtZXRob2QpIHtcbiAgICBjYXNlICdQT1NUJzpcbiAgICBjYXNlICdHRVQnOlxuICAgIGNhc2UgJ1BVVCc6XG4gICAgY2FzZSAnREVMRVRFJzpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyAnY2Fubm90IHJvdXRlIG1ldGhvZDogJyArIG1ldGhvZDtcbiAgICB9XG5cbiAgICBsZXQgaGFuZGxlciA9IGhhbmRsZXJzWzBdO1xuXG4gICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihyZXEpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXJzLnJlZHVjZSgocHJvbWlzZSwgaGFuZGxlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIocmVxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgIGxheWVyOiBuZXcgTGF5ZXIocGF0aCwgbnVsbCwgaGFuZGxlcilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGg6XG4gIC8vICAgaGFuZGxlcjogdGhlIGhhbmRsZXIgdGhhdCBzaG91bGQgZGVhbCB3aXRoIHRoaXMgcmVxdWVzdFxuICAvLyAgIHBhcmFtczogYW55IDotcGFyYW1zIHRoYXQgZ290IHBhcnNlZCBmcm9tIHRoZSBwYXRoXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICBtYXRjaChtZXRob2QsIHBhdGgpIHtcbiAgICBmb3IgKHZhciByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLm1ldGhvZCAhPSBtZXRob2QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllciA9IHJvdXRlLmxheWVyIHx8IG5ldyBMYXllcihyb3V0ZS5wYXRoLCBudWxsLCByb3V0ZS5oYW5kbGVyKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gbGF5ZXIubWF0Y2gocGF0aCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbGF5ZXIucGFyYW1zO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsaWRhdGVQYXJhbWV0ZXIoa2V5LCBwYXJhbXNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge3BhcmFtczogcGFyYW1zLCBoYW5kbGVyOiByb3V0ZS5oYW5kbGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3VudCB0aGUgcm91dGVzIG9uIHRoaXMgcm91dGVyIG9udG8gYW4gZXhwcmVzcyBhcHAgKG9yIGV4cHJlc3Mgcm91dGVyKVxuICBtb3VudE9udG8oZXhwcmVzc0FwcCkge1xuICAgIHRoaXMucm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBtZXRob2QgPSByb3V0ZS5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBtYWtlRXhwcmVzc0hhbmRsZXIodGhpcy5hcHBJZCwgcm91dGUuaGFuZGxlcik7XG4gICAgICBleHByZXNzQXBwW21ldGhvZF0uY2FsbChleHByZXNzQXBwLCByb3V0ZS5wYXRoLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXhwcmVzc0FwcDtcbiAgfVxuXG4gIGV4cHJlc3NSb3V0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubW91bnRPbnRvKGV4cHJlc3MuUm91dGVyKCkpO1xuICB9XG5cbiAgdHJ5Um91dGVSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgcmVxdWVzdCkge1xuICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2gobWV0aG9kLCBwYXRoKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfSlNPTixcbiAgICAgICAgJ2Nhbm5vdCByb3V0ZSAnICsgbWV0aG9kICsgJyAnICsgcGF0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QucGFyYW1zID0gbWF0Y2gucGFyYW1zO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXRjaC5oYW5kbGVyKHJlcXVlc3QpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBBIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGFuIGV4cHJlc3MgaGFuZGxlciBvdXQgb2YgYSBhIHByb21pc2Vcbi8vIGhhbmRsZXIuXG4vLyBFeHByZXNzIGhhbmRsZXJzIHNob3VsZCBuZXZlciB0aHJvdzsgaWYgYSBwcm9taXNlIGhhbmRsZXIgdGhyb3dzIHdlXG4vLyBqdXN0IHRyZWF0IGl0IGxpa2UgaXQgcmVzb2x2ZWQgdG8gYW4gZXJyb3IuXG5mdW5jdGlvbiBtYWtlRXhwcmVzc0hhbmRsZXIoYXBwSWQsIHByb21pc2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXNrU2Vuc2l0aXZlVXJsKHJlcSk7XG4gICAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxLmJvZHkpO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycztcbiAgICAgIGxvZy5sb2dSZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHlcbiAgICAgIH0pO1xuICAgICAgcHJvbWlzZUhhbmRsZXIocmVxKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKCFyZXN1bHQucmVzcG9uc2UgJiYgIXJlc3VsdC5sb2NhdGlvbiAmJiAhcmVzdWx0LnRleHQpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ3RoZSBoYW5kbGVyIGRpZCBub3QgaW5jbHVkZSBhIFwicmVzcG9uc2VcIiBvciBhIFwibG9jYXRpb25cIiBmaWVsZCcpO1xuICAgICAgICAgIHRocm93ICdjb250cm9sIHNob3VsZCBub3QgZ2V0IGhlcmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nLmxvZ1Jlc3BvbnNlKHsgbWV0aG9kLCB1cmwsIHJlc3VsdCB9KTtcblxuICAgICAgICB2YXIgc3RhdHVzID0gcmVzdWx0LnN0YXR1cyB8fCAyMDA7XG4gICAgICAgIHJlcy5zdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAocmVzdWx0LnRleHQpIHtcbiAgICAgICAgICByZXMuc2VuZChyZXN1bHQudGV4dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5sb2NhdGlvbikge1xuICAgICAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBleHByZXNzanMgcmVzcG9uc2VcbiAgICAgICAgICAvLyBhcyBpdCBkb3VibGUgZW5jb2RlcyAlZW5jb2RlZCBjaGFycyBpbiBVUkxcbiAgICAgICAgICBpZiAoIXJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICAgICAgcmVzLnNlbmQoJ0ZvdW5kLiBSZWRpcmVjdGluZyB0byAnICsgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgcmVzLnNldChoZWFkZXIsIHJlc3VsdC5oZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmVzLmpzb24ocmVzdWx0LnJlc3BvbnNlKTtcbiAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgRXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZS4gJHtpbnNwZWN0KGUpfWAsIHtlcnJvcjogZX0pO1xuICAgICAgICBuZXh0KGUpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBoYW5kbGluZyByZXF1ZXN0OiAke2luc3BlY3QoZSl9YCwge2Vycm9yOiBlfSk7XG4gICAgICBuZXh0KGUpO1xuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIG1hc2tTZW5zaXRpdmVVcmwocmVxKSB7XG4gIGxldCBtYXNrVXJsID0gcmVxLm9yaWdpbmFsVXJsLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHNob3VsZE1hc2tVcmwgPSByZXEubWV0aG9kID09PSAnR0VUJyAmJiByZXEub3JpZ2luYWxVcmwuaW5jbHVkZXMoJy9sb2dpbicpXG4gICAgICAgICAgICAgICAgICAgICAgJiYgIXJlcS5vcmlnaW5hbFVybC5pbmNsdWRlcygnY2xhc3NlcycpO1xuICBpZiAoc2hvdWxkTWFza1VybCkge1xuICAgIG1hc2tVcmwgPSBsb2cubWFza1NlbnNpdGl2ZVVybChtYXNrVXJsKTtcbiAgfVxuICByZXR1cm4gbWFza1VybDtcbn1cbiJdfQ==
208
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2V4cHJlc3MiLCJfbG9nZ2VyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJMYXllciIsInZhbGlkYXRlUGFyYW1ldGVyIiwia2V5IiwidmFsdWUiLCJtYXRjaCIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInJvdXRlcyIsImFwcElkIiwibW91bnRSb3V0ZXMiLCJtZXJnZSIsInJvdXRlciIsInJvdXRlIiwicHVzaCIsIm1ldGhvZCIsInBhdGgiLCJoYW5kbGVycyIsImhhbmRsZXIiLCJsZW5ndGgiLCJyZXEiLCJyZWR1Y2UiLCJwcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwibGF5ZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsIm1vdW50T250byIsImV4cHJlc3NBcHAiLCJ0b0xvd2VyQ2FzZSIsIm1ha2VFeHByZXNzSGFuZGxlciIsImNhbGwiLCJleHByZXNzUm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsInRyeVJvdXRlUmVxdWVzdCIsInJlcXVlc3QiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwicmVqZWN0IiwiZXhwb3J0cyIsInByb21pc2VIYW5kbGVyIiwicmVzIiwibmV4dCIsInVybCIsIm1hc2tTZW5zaXRpdmVVcmwiLCJib2R5IiwiYXNzaWduIiwiaGVhZGVycyIsImxvZyIsImxvZ1JlcXVlc3QiLCJyZXN1bHQiLCJyZXNwb25zZSIsImxvY2F0aW9uIiwidGV4dCIsImVycm9yIiwibG9nUmVzcG9uc2UiLCJzdGF0dXMiLCJoZWFkZXIiLCJzZXQiLCJzZW5kIiwianNvbiIsImNhdGNoIiwiaW5zcGVjdCIsIm1hc2tVcmwiLCJvcmlnaW5hbFVybCIsInRvU3RyaW5nIiwic2hvdWxkTWFza1VybCIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Byb21pc2VSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQSByb3V0ZXIgdGhhdCBpcyBiYXNlZCBvbiBwcm9taXNlcyByYXRoZXIgdGhhbiByZXEvcmVzL25leHQuXG4vLyBUaGlzIGlzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIHVzZSBvZiBleHByZXNzLlJvdXRlciB0byBoYW5kbGVcbi8vIHN1YnNlY3Rpb25zIG9mIHRoZSBBUEkgc3VyZmFjZS5cbi8vIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBoYXZlIG1ldGhvZHMgbGlrZSAnYmF0Y2gnIHRoYXRcbi8vIHRoZW1zZWx2ZXMgdXNlIG91ciByb3V0aW5nIGluZm9ybWF0aW9uLCB3aXRob3V0IGRpc3R1cmJpbmcgZXhwcmVzc1xuLy8gY29tcG9uZW50cyB0aGF0IGV4dGVybmFsIGRldmVsb3BlcnMgbWF5IGJlIG1vZGlmeWluZy5cblxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJztcbmNvbnN0IExheWVyID0gcmVxdWlyZSgncm91dGVyL2xpYi9sYXllcicpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcihrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ2NsYXNzTmFtZScpIHtcbiAgICBpZiAodmFsdWUubWF0Y2goL18/W0EtWmEtel1bQS1aYS16XzAtOV0qLykpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoa2V5ID09ICdvYmplY3RJZCcpIHtcbiAgICBpZiAodmFsdWUubWF0Y2goL1tBLVphLXowLTldKy8pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlUm91dGVyIHtcbiAgLy8gRWFjaCBlbnRyeSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGg6XG4gIC8vIHBhdGg6IHRoZSBwYXRoIHRvIHJvdXRlLCBpbiBleHByZXNzIGZvcm1hdFxuICAvLyBtZXRob2Q6IHRoZSBIVFRQIG1ldGhvZCB0aGF0IHRoaXMgcm91dGUgaGFuZGxlcy5cbiAgLy8gICBNdXN0IGJlIG9uZSBvZjogUE9TVCwgR0VULCBQVVQsIERFTEVURVxuICAvLyBoYW5kbGVyOiBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgcmVxdWVzdCwgYW5kIHJldHVybnMgYSBwcm9taXNlLlxuICAvLyAgIFN1Y2Nlc3NmdWwgaGFuZGxlcnMgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0IHdpdGggZmllbGRzOlxuICAvLyAgICAgc3RhdHVzOiBvcHRpb25hbC4gdGhlIGh0dHAgc3RhdHVzIGNvZGUuIGRlZmF1bHRzIHRvIDIwMFxuICAvLyAgICAgcmVzcG9uc2U6IGEganNvbiBvYmplY3Qgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgcmVzcG9uc2VcbiAgLy8gICAgIGxvY2F0aW9uOiBvcHRpb25hbC4gYSBsb2NhdGlvbiBoZWFkZXJcbiAgY29uc3RydWN0b3Iocm91dGVzID0gW10sIGFwcElkKSB7XG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5hcHBJZCA9IGFwcElkO1xuICAgIHRoaXMubW91bnRSb3V0ZXMoKTtcbiAgfVxuXG4gIC8vIExlYXZlIHRoZSBvcHBvcnR1bml0eSB0b1xuICAvLyBzdWJjbGFzc2VzIHRvIG1vdW50IHRoZWlyIHJvdXRlcyBieSBvdmVycmlkaW5nXG4gIG1vdW50Um91dGVzKCkge31cblxuICAvLyBNZXJnZSB0aGUgcm91dGVzIGludG8gdGhpcyBvbmVcbiAgbWVyZ2Uocm91dGVyKSB7XG4gICAgZm9yICh2YXIgcm91dGUgb2Ygcm91dGVyLnJvdXRlcykge1xuICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgfVxuICB9XG5cbiAgcm91dGUobWV0aG9kLCBwYXRoLCAuLi5oYW5kbGVycykge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQT1NUJzpcbiAgICAgIGNhc2UgJ0dFVCc6XG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyAnY2Fubm90IHJvdXRlIG1ldGhvZDogJyArIG1ldGhvZDtcbiAgICB9XG5cbiAgICBsZXQgaGFuZGxlciA9IGhhbmRsZXJzWzBdO1xuXG4gICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVycy5yZWR1Y2UoKHByb21pc2UsIGhhbmRsZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyKHJlcSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiBwYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgbGF5ZXI6IG5ldyBMYXllcihwYXRoLCBudWxsLCBoYW5kbGVyKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGg6XG4gIC8vICAgaGFuZGxlcjogdGhlIGhhbmRsZXIgdGhhdCBzaG91bGQgZGVhbCB3aXRoIHRoaXMgcmVxdWVzdFxuICAvLyAgIHBhcmFtczogYW55IDotcGFyYW1zIHRoYXQgZ290IHBhcnNlZCBmcm9tIHRoZSBwYXRoXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICBtYXRjaChtZXRob2QsIHBhdGgpIHtcbiAgICBmb3IgKHZhciByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLm1ldGhvZCAhPSBtZXRob2QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllciA9IHJvdXRlLmxheWVyIHx8IG5ldyBMYXllcihyb3V0ZS5wYXRoLCBudWxsLCByb3V0ZS5oYW5kbGVyKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gbGF5ZXIubWF0Y2gocGF0aCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbGF5ZXIucGFyYW1zO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IHZhbGlkYXRlUGFyYW1ldGVyKGtleSwgcGFyYW1zW2tleV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMsIGhhbmRsZXI6IHJvdXRlLmhhbmRsZXIgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3VudCB0aGUgcm91dGVzIG9uIHRoaXMgcm91dGVyIG9udG8gYW4gZXhwcmVzcyBhcHAgKG9yIGV4cHJlc3Mgcm91dGVyKVxuICBtb3VudE9udG8oZXhwcmVzc0FwcCkge1xuICAgIHRoaXMucm91dGVzLmZvckVhY2gocm91dGUgPT4ge1xuICAgICAgY29uc3QgbWV0aG9kID0gcm91dGUubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gbWFrZUV4cHJlc3NIYW5kbGVyKHRoaXMuYXBwSWQsIHJvdXRlLmhhbmRsZXIpO1xuICAgICAgZXhwcmVzc0FwcFttZXRob2RdLmNhbGwoZXhwcmVzc0FwcCwgcm91dGUucGF0aCwgaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cHJlc3NBcHA7XG4gIH1cblxuICBleHByZXNzUm91dGVyKCkge1xuICAgIHJldHVybiB0aGlzLm1vdW50T250byhleHByZXNzLlJvdXRlcigpKTtcbiAgfVxuXG4gIHRyeVJvdXRlUmVxdWVzdChtZXRob2QsIHBhdGgsIHJlcXVlc3QpIHtcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoKG1ldGhvZCwgcGF0aCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ2Nhbm5vdCByb3V0ZSAnICsgbWV0aG9kICsgJyAnICsgcGF0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QucGFyYW1zID0gbWF0Y2gucGFyYW1zO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXRjaC5oYW5kbGVyKHJlcXVlc3QpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBBIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGFuIGV4cHJlc3MgaGFuZGxlciBvdXQgb2YgYSBhIHByb21pc2Vcbi8vIGhhbmRsZXIuXG4vLyBFeHByZXNzIGhhbmRsZXJzIHNob3VsZCBuZXZlciB0aHJvdzsgaWYgYSBwcm9taXNlIGhhbmRsZXIgdGhyb3dzIHdlXG4vLyBqdXN0IHRyZWF0IGl0IGxpa2UgaXQgcmVzb2x2ZWQgdG8gYW4gZXJyb3IuXG5mdW5jdGlvbiBtYWtlRXhwcmVzc0hhbmRsZXIoYXBwSWQsIHByb21pc2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbWFza1NlbnNpdGl2ZVVybChyZXEpO1xuICAgICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5KTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgICBjb25zdCBoZWFkZXJzID0gcmVxLmhlYWRlcnM7XG4gICAgICBsb2cubG9nUmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICBwcm9taXNlSGFuZGxlcihyZXEpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXNwb25zZSAmJiAhcmVzdWx0LmxvY2F0aW9uICYmICFyZXN1bHQudGV4dCkge1xuICAgICAgICAgICAgICBsb2cuZXJyb3IoJ3RoZSBoYW5kbGVyIGRpZCBub3QgaW5jbHVkZSBhIFwicmVzcG9uc2VcIiBvciBhIFwibG9jYXRpb25cIiBmaWVsZCcpO1xuICAgICAgICAgICAgICB0aHJvdyAnY29udHJvbCBzaG91bGQgbm90IGdldCBoZXJlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9nLmxvZ1Jlc3BvbnNlKHsgbWV0aG9kLCB1cmwsIHJlc3VsdCB9KTtcblxuICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlc3VsdC5zdGF0dXMgfHwgMjAwO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgICAgICByZXMuc2V0KGhlYWRlciwgcmVzdWx0LmhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQpIHtcbiAgICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LnRleHQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCByZXN1bHQubG9jYXRpb24pO1xuICAgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBleHByZXNzanMgcmVzcG9uc2VcbiAgICAgICAgICAgICAgLy8gYXMgaXQgZG91YmxlIGVuY29kZXMgJWVuY29kZWQgY2hhcnMgaW4gVVJMXG4gICAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmVzLnNlbmQoJ0ZvdW5kLiBSZWRpcmVjdGluZyB0byAnICsgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdC5yZXNwb25zZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihgRXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZS4gJHtpbnNwZWN0KGUpfWAsIHsgZXJyb3I6IGUgfSk7XG4gICAgICAgICAgbmV4dChlKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBoYW5kbGluZyByZXF1ZXN0OiAke2luc3BlY3QoZSl9YCwgeyBlcnJvcjogZSB9KTtcbiAgICAgIG5leHQoZSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXNrU2Vuc2l0aXZlVXJsKHJlcSkge1xuICBsZXQgbWFza1VybCA9IHJlcS5vcmlnaW5hbFVybC50b1N0cmluZygpO1xuICBjb25zdCBzaG91bGRNYXNrVXJsID1cbiAgICByZXEubWV0aG9kID09PSAnR0VUJyAmJlxuICAgIHJlcS5vcmlnaW5hbFVybC5pbmNsdWRlcygnL2xvZ2luJykgJiZcbiAgICAhcmVxLm9yaWdpbmFsVXJsLmluY2x1ZGVzKCdjbGFzc2VzJyk7XG4gIGlmIChzaG91bGRNYXNrVXJsKSB7XG4gICAgbWFza1VybCA9IGxvZy5tYXNr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QUVBLElBQUlILE1BQU0sQ0FBQ0UsUUFBUSxFQUFFO1VBQ25CWCxHQUFHLENBQUNpQixHQUFHLENBQUMsVUFBVSxFQUFFUixNQUFNLENBQUNFLFFBQVEsQ0FBQztVQUNwQztVQUNBO1VBQ0EsSUFBSSxDQUFDRixNQUFNLENBQUNDLFFBQVEsRUFBRTtZQUNwQlYsR0FBRyxDQUFDa0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHVCxNQUFNLENBQUNFLFFBQVEsQ0FBQztZQUNwRDtVQUNGO1FBQ0Y7UUFDQVgsR0FBRyxDQUFDbUIsSUFBSSxDQUFDVixNQUFNLENBQUNDLFFBQVEsQ0FBQztNQUMzQixDQUFDLEVBQ0RHLEtBQUssSUFBSTtRQUNQWixJQUFJLENBQUNZLEtBQUssQ0FBQztNQUNiLENBQ0YsQ0FBQyxDQUNBTyxLQUFLLENBQUNyRSxDQUFDLElBQUk7UUFDVndELGVBQUcsQ0FBQ00sS0FBSyxDQUFDLDhCQUE4QixJQUFBUSxhQUFPLEVBQUN0RSxDQUFDLENBQUMsRUFBRSxFQUFFO1VBQUU4RCxLQUFLLEVBQUU5RDtRQUFFLENBQUMsQ0FBQztRQUNuRWtELElBQUksQ0FBQ2xELENBQUMsQ0FBQztNQUNULENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEVBQUU7TUFDVndELGVBQUcsQ0FBQ00sS0FBSyxDQUFDLDJCQUEyQixJQUFBUSxhQUFPLEVBQUN0RSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQUU4RCxLQUFLLEVBQUU5RDtNQUFFLENBQUMsQ0FBQztNQUNoRWtELElBQUksQ0FBQ2xELENBQUMsQ0FBQztJQUNUO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU29ELGdCQUFnQkEsQ0FBQzlCLEdBQUcsRUFBRTtFQUM3QixJQUFJaUQsT0FBTyxHQUFHakQsR0FBRyxDQUFDa0QsV0FBVyxDQUFDQyxRQUFRLENBQUMsQ0FBQztFQUN4QyxNQUFNQyxhQUFhLEdBQ2pCcEQsR0FBRyxDQUFDTCxNQUFNLEtBQUssS0FBSyxJQUNwQkssR0FBRyxDQUFDa0QsV0FBVyxDQUFDRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQ2xDLENBQUNyRCxHQUFHLENBQUNrRCxXQUFXLENBQUNHLFFBQVEsQ0FBQyxTQUFTLENBQUM7RUFDdEMsSUFBSUQsYUFBYSxFQUFFO0lBQ2pCSCxPQUFPLEdBQUdmLGVBQUcsQ0FBQ0osZ0JBQWdCLENBQUNtQixPQUFPLENBQUM7RUFDekM7RUFDQSxPQUFPQSxPQUFPO0FBQ2hCIiwiaWdub3JlTGlzdCI6W119
@@ -1,29 +1,17 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PushQueue = undefined;
7
-
8
- var _ParseMessageQueue = require('../ParseMessageQueue');
9
-
10
- var _rest = require('../rest');
11
-
12
- var _rest2 = _interopRequireDefault(_rest);
13
-
14
- var _utils = require('./utils');
15
-
16
- var _node = require('parse/node');
17
-
18
- var _node2 = _interopRequireDefault(_node);
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
6
+ exports.PushQueue = void 0;
7
+ var _ParseMessageQueue = require("../ParseMessageQueue");
8
+ var _rest = _interopRequireDefault(require("../rest"));
9
+ var _utils = require("./utils");
10
+ var _node = _interopRequireDefault(require("parse/node"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
12
  const PUSH_CHANNEL = 'parse-server-push';
23
13
  const DEFAULT_BATCH_SIZE = 100;
24
-
25
14
  class PushQueue {
26
-
27
15
  // config object of the publisher, right now it only contains the redisURL,
28
16
  // but we may extend it later.
29
17
  constructor(config = {}) {
@@ -31,36 +19,42 @@ class PushQueue {
31
19
  this.batchSize = config.batchSize || DEFAULT_BATCH_SIZE;
32
20
  this.parsePublisher = _ParseMessageQueue.ParseMessageQueue.createPublisher(config);
33
21
  }
34
-
35
22
  static defaultPushChannel() {
36
- return `${_node2.default.applicationId}-${PUSH_CHANNEL}`;
23
+ return `${_node.default.applicationId}-${PUSH_CHANNEL}`;
37
24
  }
38
-
39
25
  enqueue(body, where, config, auth, pushStatus) {
40
26
  const limit = this.batchSize;
41
-
42
27
  where = (0, _utils.applyDeviceTokenExists)(where);
43
28
 
44
29
  // Order by objectId so no impact on the DB
45
30
  const order = 'objectId';
46
31
  return Promise.resolve().then(() => {
47
- return _rest2.default.find(config, auth, '_Installation', where, { limit: 0, count: true });
48
- }).then(({ results, count }) => {
32
+ return _rest.default.find(config, auth, '_Installation', where, {
33
+ limit: 0,
34
+ count: true
35
+ });
36
+ }).then(({
37
+ results,
38
+ count
39
+ }) => {
49
40
  if (!results || count == 0) {
50
41
  return pushStatus.complete();
51
42
  }
52
43
  pushStatus.setRunning(Math.ceil(count / limit));
53
44
  let skip = 0;
54
45
  while (skip < count) {
55
- const query = { where,
46
+ const query = {
47
+ where,
56
48
  limit,
57
49
  skip,
58
- order };
59
-
50
+ order
51
+ };
60
52
  const pushWorkItem = {
61
53
  body,
62
54
  query,
63
- pushStatus: { objectId: pushStatus.objectId },
55
+ pushStatus: {
56
+ objectId: pushStatus.objectId
57
+ },
64
58
  applicationId: config.applicationId
65
59
  };
66
60
  this.parsePublisher.publish(this.channel, JSON.stringify(pushWorkItem));
@@ -70,4 +64,4 @@ class PushQueue {
70
64
  }
71
65
  }
72
66
  exports.PushQueue = PushQueue;
73
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QdXNoL1B1c2hRdWV1ZS5qcyJdLCJuYW1lcyI6WyJQVVNIX0NIQU5ORUwiLCJERUZBVUxUX0JBVENIX1NJWkUiLCJQdXNoUXVldWUiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImNoYW5uZWwiLCJkZWZhdWx0UHVzaENoYW5uZWwiLCJiYXRjaFNpemUiLCJwYXJzZVB1Ymxpc2hlciIsIlBhcnNlTWVzc2FnZVF1ZXVlIiwiY3JlYXRlUHVibGlzaGVyIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwiZW5xdWV1ZSIsImJvZHkiLCJ3aGVyZSIsImF1dGgiLCJwdXNoU3RhdHVzIiwibGltaXQiLCJvcmRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInJlc3QiLCJmaW5kIiwiY291bnQiLCJyZXN1bHRzIiwiY29tcGxldGUiLCJzZXRSdW5uaW5nIiwiTWF0aCIsImNlaWwiLCJza2lwIiwicXVlcnkiLCJwdXNoV29ya0l0ZW0iLCJvYmplY3RJZCIsInB1Ymxpc2giLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsZUFBZSxtQkFBckI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBM0I7O0FBRU8sTUFBTUMsU0FBTixDQUFnQjs7QUFLckI7QUFDQTtBQUNBQyxjQUFZQyxTQUFjLEVBQTFCLEVBQThCO0FBQzVCLFNBQUtDLE9BQUwsR0FBZUQsT0FBT0MsT0FBUCxJQUFrQkgsVUFBVUksa0JBQVYsRUFBakM7QUFDQSxTQUFLQyxTQUFMLEdBQWlCSCxPQUFPRyxTQUFQLElBQW9CTixrQkFBckM7QUFDQSxTQUFLTyxjQUFMLEdBQXNCQyxxQ0FBa0JDLGVBQWxCLENBQWtDTixNQUFsQyxDQUF0QjtBQUNEOztBQUVELFNBQU9FLGtCQUFQLEdBQTRCO0FBQzFCLFdBQVEsR0FBRUssZUFBTUMsYUFBYyxJQUFHWixZQUFhLEVBQTlDO0FBQ0Q7O0FBRURhLFVBQVFDLElBQVIsRUFBY0MsS0FBZCxFQUFxQlgsTUFBckIsRUFBNkJZLElBQTdCLEVBQW1DQyxVQUFuQyxFQUErQztBQUM3QyxVQUFNQyxRQUFRLEtBQUtYLFNBQW5COztBQUVBUSxZQUFRLG1DQUF1QkEsS0FBdkIsQ0FBUjs7QUFFQTtBQUNBLFVBQU1JLFFBQVEsVUFBZDtBQUNBLFdBQU9DLFFBQVFDLE9BQVIsR0FBa0JDLElBQWxCLENBQXVCLE1BQU07QUFDbEMsYUFBT0MsZUFBS0MsSUFBTCxDQUFVcEIsTUFBVixFQUNMWSxJQURLLEVBRUwsZUFGSyxFQUdMRCxLQUhLLEVBSUwsRUFBQ0csT0FBTyxDQUFSLEVBQVdPLE9BQU8sSUFBbEIsRUFKSyxDQUFQO0FBS0QsS0FOTSxFQU1KSCxJQU5JLENBTUMsQ0FBQyxFQUFDSSxPQUFELEVBQVVELEtBQVYsRUFBRCxLQUFzQjtBQUM1QixVQUFJLENBQUNDLE9BQUQsSUFBWUQsU0FBUyxDQUF6QixFQUE0QjtBQUMxQixlQUFPUixXQUFXVSxRQUFYLEVBQVA7QUFDRDtBQUNEVixpQkFBV1csVUFBWCxDQUFzQkMsS0FBS0MsSUFBTCxDQUFVTCxRQUFRUCxLQUFsQixDQUF0QjtBQUNBLFVBQUlhLE9BQU8sQ0FBWDtBQUNBLGFBQU9BLE9BQU9OLEtBQWQsRUFBcUI7QUFDbkIsY0FBTU8sUUFBUSxFQUFFakIsS0FBRjtBQUNaRyxlQURZO0FBRVphLGNBRlk7QUFHWlosZUFIWSxFQUFkOztBQUtBLGNBQU1jLGVBQWU7QUFDbkJuQixjQURtQjtBQUVuQmtCLGVBRm1CO0FBR25CZixzQkFBWSxFQUFFaUIsVUFBVWpCLFdBQVdpQixRQUF2QixFQUhPO0FBSW5CdEIseUJBQWVSLE9BQU9RO0FBSkgsU0FBckI7QUFNQSxhQUFLSixjQUFMLENBQW9CMkIsT0FBcEIsQ0FBNEIsS0FBSzlCLE9BQWpDLEVBQTBDK0IsS0FBS0MsU0FBTCxDQUFlSixZQUFmLENBQTFDO0FBQ0FGLGdCQUFRYixLQUFSO0FBQ0Q7QUFDRixLQTNCTSxDQUFQO0FBNEJEO0FBcERvQjtRQUFWaEIsUyxHQUFBQSxTIiwiZmlsZSI6IlB1c2hRdWV1ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnNlTWVzc2FnZVF1ZXVlIH0gICAgICBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgcmVzdCAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgeyBhcHBseURldmljZVRva2VuRXhpc3RzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5cbmNvbnN0IFBVU0hfQ0hBTk5FTCA9ICdwYXJzZS1zZXJ2ZXItcHVzaCc7XG5jb25zdCBERUZBVUxUX0JBVENIX1NJWkUgPSAxMDA7XG5cbmV4cG9ydCBjbGFzcyBQdXNoUXVldWUge1xuICBwYXJzZVB1Ymxpc2hlcjogT2JqZWN0O1xuICBjaGFubmVsOiBTdHJpbmc7XG4gIGJhdGNoU2l6ZTogTnVtYmVyO1xuXG4gIC8vIGNvbmZpZyBvYmplY3Qgb2YgdGhlIHB1Ymxpc2hlciwgcmlnaHQgbm93IGl0IG9ubHkgY29udGFpbnMgdGhlIHJlZGlzVVJMLFxuICAvLyBidXQgd2UgbWF5IGV4dGVuZCBpdCBsYXRlci5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBhbnkgPSB7fSkge1xuICAgIHRoaXMuY2hhbm5lbCA9IGNvbmZpZy5jaGFubmVsIHx8IFB1c2hRdWV1ZS5kZWZhdWx0UHVzaENoYW5uZWwoKTtcbiAgICB0aGlzLmJhdGNoU2l6ZSA9IGNvbmZpZy5iYXRjaFNpemUgfHwgREVGQVVMVF9CQVRDSF9TSVpFO1xuICAgIHRoaXMucGFyc2VQdWJsaXNoZXIgPSBQYXJzZU1lc3NhZ2VRdWV1ZS5jcmVhdGVQdWJsaXNoZXIoY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHVzaENoYW5uZWwoKSB7XG4gICAgcmV0dXJuIGAke1BhcnNlLmFwcGxpY2F0aW9uSWR9LSR7UFVTSF9DSEFOTkVMfWA7XG4gIH1cblxuICBlbnF1ZXVlKGJvZHksIHdoZXJlLCBjb25maWcsIGF1dGgsIHB1c2hTdGF0dXMpIHtcbiAgICBjb25zdCBsaW1pdCA9IHRoaXMuYmF0Y2hTaXplO1xuXG4gICAgd2hlcmUgPSBhcHBseURldmljZVRva2VuRXhpc3RzKHdoZXJlKTtcblxuICAgIC8vIE9yZGVyIGJ5IG9iamVjdElkIHNvIG5vIGltcGFjdCBvbiB0aGUgREJcbiAgICBjb25zdCBvcmRlciA9ICdvYmplY3RJZCc7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgICdfSW5zdGFsbGF0aW9uJyxcbiAgICAgICAgd2hlcmUsXG4gICAgICAgIHtsaW1pdDogMCwgY291bnQ6IHRydWV9KTtcbiAgICB9KS50aGVuKCh7cmVzdWx0cywgY291bnR9KSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgY291bnQgPT0gMCkge1xuICAgICAgICByZXR1cm4gcHVzaFN0YXR1cy5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICAgcHVzaFN0YXR1cy5zZXRSdW5uaW5nKE1hdGguY2VpbChjb3VudCAvIGxpbWl0KSk7XG4gICAgICBsZXQgc2tpcCA9IDA7XG4gICAgICB3aGlsZSAoc2tpcCA8IGNvdW50KSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0geyB3aGVyZSxcbiAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICBza2lwLFxuICAgICAgICAgIG9yZGVyIH07XG5cbiAgICAgICAgY29uc3QgcHVzaFdvcmtJdGVtID0ge1xuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgcHVzaFN0YXR1czogeyBvYmplY3RJZDogcHVzaFN0YXR1cy5vYmplY3RJZCB9LFxuICAgICAgICAgIGFwcGxpY2F0aW9uSWQ6IGNvbmZpZy5hcHBsaWNhdGlvbklkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZVB1Ymxpc2hlci5wdWJsaXNoKHRoaXMuY2hhbm5lbCwgSlNPTi5zdHJpbmdpZnkocHVzaFdvcmtJdGVtKSk7XG4gICAgICAgIHNraXAgKz0gbGltaXQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUGFyc2VNZXNzYWdlUXVldWUiLCJyZXF1aXJlIiwiX3Jlc3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3V0aWxzIiwiX25vZGUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQVVNIX0NIQU5ORUwiLCJERUZBVUxUX0JBVENIX1NJWkUiLCJQdXNoUXVldWUiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImNoYW5uZWwiLCJkZWZhdWx0UHVzaENoYW5uZWwiLCJiYXRjaFNpemUiLCJwYXJzZVB1Ymxpc2hlciIsIlBhcnNlTWVzc2FnZVF1ZXVlIiwiY3JlYXRlUHVibGlzaGVyIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwiZW5xdWV1ZSIsImJvZHkiLCJ3aGVyZSIsImF1dGgiLCJwdXNoU3RhdHVzIiwibGltaXQiLCJhcHBseURldmljZVRva2VuRXhpc3RzIiwib3JkZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJyZXN0IiwiZmluZCIsImNvdW50IiwicmVzdWx0cyIsImNvbXBsZXRlIiwic2V0UnVubmluZyIsIk1hdGgiLCJjZWlsIiwic2tpcCIsInF1ZXJ5IiwicHVzaFdvcmtJdGVtIiwib2JqZWN0SWQiLCJwdWJsaXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC9QdXNoUXVldWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCB7IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcblxuY29uc3QgUFVTSF9DSEFOTkVMID0gJ3BhcnNlLXNlcnZlci1wdXNoJztcbmNvbnN0IERFRkFVTFRfQkFUQ0hfU0laRSA9IDEwMDtcblxuZXhwb3J0IGNsYXNzIFB1c2hRdWV1ZSB7XG4gIHBhcnNlUHVibGlzaGVyOiBPYmplY3Q7XG4gIGNoYW5uZWw6IFN0cmluZztcbiAgYmF0Y2hTaXplOiBOdW1iZXI7XG5cbiAgLy8gY29uZmlnIG9iamVjdCBvZiB0aGUgcHVibGlzaGVyLCByaWdodCBub3cgaXQgb25seSBjb250YWlucyB0aGUgcmVkaXNVUkwsXG4gIC8vIGJ1dCB3ZSBtYXkgZXh0ZW5kIGl0IGxhdGVyLlxuICBjb25zdHJ1Y3Rvcihjb25maWc6IGFueSA9IHt9KSB7XG4gICAgdGhpcy5jaGFubmVsID0gY29uZmlnLmNoYW5uZWwgfHwgUHVzaFF1ZXVlLmRlZmF1bHRQdXNoQ2hhbm5lbCgpO1xuICAgIHRoaXMuYmF0Y2hTaXplID0gY29uZmlnLmJhdGNoU2l6ZSB8fCBERUZBVUxUX0JBVENIX1NJWkU7XG4gICAgdGhpcy5wYXJzZVB1Ymxpc2hlciA9IFBhcnNlTWVzc2FnZVF1ZXVlLmNyZWF0ZVB1Ymxpc2hlcihjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQdXNoQ2hhbm5lbCgpIHtcbiAgICByZXR1cm4gYCR7UGFyc2UuYXBwbGljYXRpb25JZH0tJHtQVVNIX0NIQU5ORUx9YDtcbiAgfVxuXG4gIGVucXVldWUoYm9keSwgd2hlcmUsIGNvbmZpZywgYXV0aCwgcHVzaFN0YXR1cykge1xuICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5iYXRjaFNpemU7XG5cbiAgICB3aGVyZSA9IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMod2hlcmUpO1xuXG4gICAgLy8gT3JkZXIgYnkgb2JqZWN0SWQgc28gbm8gaW1wYWN0IG9uIHRoZSBEQlxuICAgIGNvbnN0IG9yZGVyID0gJ29iamVjdElkJztcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHtcbiAgICAgICAgICBsaW1pdDogMCxcbiAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHsgcmVzdWx0cywgY291bnQgfSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdHMgfHwgY291bnQgPT0gMCkge1xuICAgICAgICAgIHJldHVybiBwdXNoU3RhdHVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFN0YXR1cy5zZXRSdW5uaW5nKE1hdGguY2VpbChjb3VudCAvIGxpbWl0KSk7XG4gICAgICAgIGxldCBza2lwID0gMDtcbiAgICAgICAgd2hpbGUgKHNraXAgPCBjb3VudCkge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIHNraXAsXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgcHVzaFdvcmtJdGVtID0ge1xuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgcHVzaFN0YXR1czogeyBvYmplY3RJZDogcHVzaFN0YXR1cy5vYmplY3RJZCB9LFxuICAgICAgICAgICAgYXBwbGljYXRpb25JZDogY29uZmlnLmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnBhcnNlUHVibGlzaGVyLnB1Ymxpc2godGhpcy5jaGFubmVsLCBKU09OLnN0cmluZ2lmeShwdXNoV29ya0l0ZW0pKTtcbiAgICAgICAgICBza2lwICs9IGxpbWl0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQStCLFNBQUFFLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRS9CLE1BQU1HLFlBQVksR0FBRyxtQkFBbUI7QUFDeEMsTUFBTUMsa0JBQWtCLEdBQUcsR0FBRztBQUV2QixNQUFNQyxTQUFTLENBQUM7RUFLckI7RUFDQTtFQUNBQyxXQUFXQSxDQUFDQyxNQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDQyxPQUFPLEdBQUdELE1BQU0sQ0FBQ0MsT0FBTyxJQUFJSCxTQUFTLENBQUNJLGtCQUFrQixDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDQyxTQUFTLEdBQUdILE1BQU0sQ0FBQ0csU0FBUyxJQUFJTixrQkFBa0I7SUFDdkQsSUFBSSxDQUFDTyxjQUFjLEdBQUdDLG9DQUFpQixDQUFDQyxlQUFlLENBQUNOLE1BQU0sQ0FBQztFQUNqRTtFQUVBLE9BQU9FLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQzFCLE9BQU8sR0FBR0ssYUFBSyxDQUFDQyxhQUFhLElBQUlaLFlBQVksRUFBRTtFQUNqRDtFQUVBYSxPQUFPQSxDQUFDQyxJQUFJLEVBQUVDLEtBQUssRUFBRVgsTUFBTSxFQUFFWSxJQUFJLEVBQUVDLFVBQVUsRUFBRTtJQUM3QyxNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDWCxTQUFTO0lBRTVCUSxLQUFLLEdBQUcsSUFBQUksNkJBQXNCLEVBQUNKLEtBQUssQ0FBQzs7SUFFckM7SUFDQSxNQUFNSyxLQUFLLEdBQUcsVUFBVTtJQUN4QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQ3JCQyxJQUFJLENBQUMsTUFBTTtNQUNWLE9BQU9DLGFBQUksQ0FBQ0MsSUFBSSxDQUFDckIsTUFBTSxFQUFFWSxJQUFJLEVBQUUsZUFBZSxFQUFFRCxLQUFLLEVBQUU7UUFDckRHLEtBQUssRUFBRSxDQUFDO1FBQ1JRLEtBQUssRUFBRTtNQUNULENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNESCxJQUFJLENBQUMsQ0FBQztNQUFFSSxPQUFPO01BQUVEO0lBQU0sQ0FBQyxLQUFLO01BQzVCLElBQUksQ0FBQ0MsT0FBTyxJQUFJRCxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQzFCLE9BQU9ULFVBQVUsQ0FBQ1csUUFBUSxDQUFDLENBQUM7TUFDOUI7TUFDQVgsVUFBVSxDQUFDWSxVQUFVLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDTCxLQUFLLEdBQUdSLEtBQUssQ0FBQyxDQUFDO01BQy9DLElBQUljLElBQUksR0FBRyxDQUFDO01BQ1osT0FBT0EsSUFBSSxHQUFHTixLQUFLLEVBQUU7UUFDbkIsTUFBTU8sS0FBSyxHQUFHO1VBQ1psQixLQUFLO1VBQ0xHLEtBQUs7VUFDTGMsSUFBSTtVQUNKWjtRQUNGLENBQUM7UUFFRCxNQUFNYyxZQUFZLEdBQUc7VUFDbkJwQixJQUFJO1VBQ0ptQixLQUFLO1VBQ0xoQixVQUFVLEVBQUU7WUFBRWtCLFFBQVEsRUFBRWxCLFVBQVUsQ0FBQ2tCO1VBQVMsQ0FBQztVQUM3Q3ZCLGFBQWEsRUFBRVIsTUFBTSxDQUFDUTtRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDSixjQUFjLENBQUM0QixPQUFPLENBQUMsSUFBSSxDQUFDL0IsT0FBTyxFQUFFZ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNKLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFRixJQUFJLElBQUlkLEtBQUs7TUFDZjtJQUNGLENBQUMsQ0FBQztFQUNOO0FBQ0Y7QUFBQ3FCLE9BQUEsQ0FBQXJDLFNBQUEsR0FBQUEsU0FBQSIsImlnbm9yZUxpc3QiOltdfQ==