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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +45 -17
  2. package/lib/AccountLockout.js +11 -26
  3. package/lib/Adapters/AdapterLoader.js +8 -14
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  5. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  6. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  7. package/lib/Adapters/Auth/apple.js +6 -22
  8. package/lib/Adapters/Auth/facebook.js +7 -37
  9. package/lib/Adapters/Auth/gcenter.js +8 -37
  10. package/lib/Adapters/Auth/github.js +7 -10
  11. package/lib/Adapters/Auth/google.js +11 -34
  12. package/lib/Adapters/Auth/gpgames.js +5 -8
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  14. package/lib/Adapters/Auth/index.js +20 -65
  15. package/lib/Adapters/Auth/instagram.js +5 -9
  16. package/lib/Adapters/Auth/janraincapture.js +8 -12
  17. package/lib/Adapters/Auth/janrainengage.js +7 -11
  18. package/lib/Adapters/Auth/keycloak.js +5 -19
  19. package/lib/Adapters/Auth/ldap.js +1 -15
  20. package/lib/Adapters/Auth/line.js +7 -10
  21. package/lib/Adapters/Auth/linkedin.js +7 -12
  22. package/lib/Adapters/Auth/meetup.js +7 -10
  23. package/lib/Adapters/Auth/microsoft.js +7 -10
  24. package/lib/Adapters/Auth/oauth2.js +6 -18
  25. package/lib/Adapters/Auth/phantauth.js +8 -10
  26. package/lib/Adapters/Auth/qq.js +7 -13
  27. package/lib/Adapters/Auth/spotify.js +7 -14
  28. package/lib/Adapters/Auth/twitter.js +5 -15
  29. package/lib/Adapters/Auth/vkontakte.js +9 -15
  30. package/lib/Adapters/Auth/wechat.js +7 -10
  31. package/lib/Adapters/Auth/weibo.js +7 -11
  32. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  33. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  34. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  35. package/lib/Adapters/Cache/LRUCache.js +1 -11
  36. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  37. package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
  38. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  39. package/lib/Adapters/Email/MailAdapter.js +2 -7
  40. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  41. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  42. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  43. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  44. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  45. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  46. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  47. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  48. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  49. package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
  50. package/lib/Adapters/Push/PushAdapter.js +2 -8
  51. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  52. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  53. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  54. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  55. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  56. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  57. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  58. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  59. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  62. package/lib/Auth.js +54 -121
  63. package/lib/ClientSDK.js +3 -11
  64. package/lib/Config.js +69 -113
  65. package/lib/Controllers/AdaptableController.js +6 -18
  66. package/lib/Controllers/AnalyticsController.js +1 -9
  67. package/lib/Controllers/CacheController.js +3 -23
  68. package/lib/Controllers/DatabaseController.js +147 -345
  69. package/lib/Controllers/FilesController.js +5 -34
  70. package/lib/Controllers/HooksController.js +1 -51
  71. package/lib/Controllers/LiveQueryController.js +4 -23
  72. package/lib/Controllers/LoggerController.js +15 -54
  73. package/lib/Controllers/ParseGraphQLController.js +49 -104
  74. package/lib/Controllers/PushController.js +20 -59
  75. package/lib/Controllers/SchemaController.js +154 -344
  76. package/lib/Controllers/UserController.js +11 -72
  77. package/lib/Controllers/index.js +19 -68
  78. package/lib/Controllers/types.js +1 -1
  79. package/lib/Deprecator/Deprecations.js +1 -8
  80. package/lib/Deprecator/Deprecator.js +9 -18
  81. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  82. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  83. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  84. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  85. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  86. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  87. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  88. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  89. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  90. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  91. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  92. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  93. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  94. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  95. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  96. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  97. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  98. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  99. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  100. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  101. package/lib/GraphQL/transformers/className.js +1 -4
  102. package/lib/GraphQL/transformers/constraintType.js +1 -20
  103. package/lib/GraphQL/transformers/inputType.js +1 -20
  104. package/lib/GraphQL/transformers/mutation.js +6 -51
  105. package/lib/GraphQL/transformers/outputType.js +1 -20
  106. package/lib/GraphQL/transformers/query.js +6 -42
  107. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  108. package/lib/KeyPromiseQueue.js +1 -12
  109. package/lib/LiveQuery/Client.js +1 -25
  110. package/lib/LiveQuery/Id.js +1 -7
  111. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  112. package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
  113. package/lib/LiveQuery/ParsePubSub.js +1 -12
  114. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  115. package/lib/LiveQuery/QueryTools.js +14 -116
  116. package/lib/LiveQuery/RequestSchema.js +1 -1
  117. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  118. package/lib/LiveQuery/Subscription.js +4 -18
  119. package/lib/LiveQuery/equalObjects.js +2 -14
  120. package/lib/Options/Definitions.js +79 -10
  121. package/lib/Options/docs.js +23 -3
  122. package/lib/Options/index.js +4 -12
  123. package/lib/Options/parsers.js +1 -18
  124. package/lib/Page.js +1 -9
  125. package/lib/ParseMessageQueue.js +1 -10
  126. package/lib/ParseServer.js +144 -182
  127. package/lib/ParseServerRESTController.js +6 -33
  128. package/lib/PromiseRouter.js +16 -50
  129. package/lib/Push/PushQueue.js +3 -15
  130. package/lib/Push/PushWorker.js +7 -32
  131. package/lib/Push/utils.js +9 -38
  132. package/lib/RestQuery.js +105 -242
  133. package/lib/RestWrite.js +212 -377
  134. package/lib/Routers/AggregateRouter.js +14 -51
  135. package/lib/Routers/AnalyticsRouter.js +2 -8
  136. package/lib/Routers/AudiencesRouter.js +1 -15
  137. package/lib/Routers/ClassesRouter.js +3 -53
  138. package/lib/Routers/CloudCodeRouter.js +1 -19
  139. package/lib/Routers/FeaturesRouter.js +1 -10
  140. package/lib/Routers/FilesRouter.js +29 -76
  141. package/lib/Routers/FunctionsRouter.js +5 -28
  142. package/lib/Routers/GlobalConfigRouter.js +4 -18
  143. package/lib/Routers/GraphQLRouter.js +1 -14
  144. package/lib/Routers/HooksRouter.js +1 -29
  145. package/lib/Routers/IAPValidationRouter.js +6 -29
  146. package/lib/Routers/InstallationsRouter.js +2 -12
  147. package/lib/Routers/LogsRouter.js +4 -16
  148. package/lib/Routers/PagesRouter.js +69 -129
  149. package/lib/Routers/PublicAPIRouter.js +3 -62
  150. package/lib/Routers/PurgeRouter.js +1 -15
  151. package/lib/Routers/PushRouter.js +2 -18
  152. package/lib/Routers/RolesRouter.js +1 -7
  153. package/lib/Routers/SchemasRouter.js +4 -34
  154. package/lib/Routers/SecurityRouter.js +1 -12
  155. package/lib/Routers/SessionsRouter.js +3 -19
  156. package/lib/Routers/UsersRouter.js +58 -155
  157. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  158. package/lib/SchemaMigrations/Migrations.js +2 -8
  159. package/lib/Security/Check.js +8 -16
  160. package/lib/Security/CheckGroup.js +4 -11
  161. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  162. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  163. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  164. package/lib/Security/CheckRunner.js +22 -41
  165. package/lib/StatusHandler.js +12 -69
  166. package/lib/TestUtils.js +1 -6
  167. package/lib/Utils.js +27 -66
  168. package/lib/batch.js +17 -28
  169. package/lib/cache.js +1 -3
  170. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  171. package/lib/cli/definitions/parse-server.js +1 -3
  172. package/lib/cli/parse-live-query-server.js +1 -6
  173. package/lib/cli/parse-server.js +11 -21
  174. package/lib/cli/utils/commander.js +13 -51
  175. package/lib/cli/utils/runner.js +1 -14
  176. package/lib/cloud-code/Parse.Cloud.js +71 -92
  177. package/lib/cryptoUtils.js +11 -19
  178. package/lib/defaults.js +2 -14
  179. package/lib/deprecated.js +1 -2
  180. package/lib/index.js +16 -34
  181. package/lib/logger.js +6 -13
  182. package/lib/middlewares.js +147 -151
  183. package/lib/password.js +6 -10
  184. package/lib/request.js +173 -2
  185. package/lib/requiredParameter.js +1 -3
  186. package/lib/rest.js +19 -41
  187. package/lib/triggers.js +54 -252
  188. package/lib/vendor/mongodbUrl.js +125 -305
  189. package/package.json +22 -19
  190. package/lib/cloud-code/HTTPResponse.js +0 -73
  191. package/lib/cloud-code/httpRequest.js +0 -192
@@ -6,30 +6,21 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.flatten = flatten;
7
7
  exports.jobStatusHandler = jobStatusHandler;
8
8
  exports.pushStatusHandler = pushStatusHandler;
9
-
10
9
  var _cryptoUtils = require("./cryptoUtils");
11
-
12
10
  var _KeyPromiseQueue = require("./KeyPromiseQueue");
13
-
14
11
  var _logger = require("./logger");
15
-
16
12
  var _rest = _interopRequireDefault(require("./rest"));
17
-
18
13
  var _Auth = _interopRequireDefault(require("./Auth"));
19
-
20
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
23
-
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
-
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
-
15
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
18
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
19
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
28
20
  const PUSH_STATUS_COLLECTION = '_PushStatus';
29
21
  const JOB_STATUS_COLLECTION = '_JobStatus';
30
22
  const pushPromiseQueue = new _KeyPromiseQueue.KeyPromiseQueue();
31
23
  const jobPromiseQueue = new _KeyPromiseQueue.KeyPromiseQueue();
32
-
33
24
  const incrementOp = function (object = {}, key, amount = 1) {
34
25
  if (!object[key]) {
35
26
  object[key] = {
@@ -39,13 +30,10 @@ const incrementOp = function (object = {}, key, amount = 1) {
39
30
  } else {
40
31
  object[key].amount += amount;
41
32
  }
42
-
43
33
  return object[key];
44
34
  };
45
-
46
35
  function flatten(array) {
47
36
  var flattened = [];
48
-
49
37
  for (var i = 0; i < array.length; i++) {
50
38
  if (Array.isArray(array[i])) {
51
39
  flattened = flattened.concat(flatten(array[i]));
@@ -53,30 +41,24 @@ function flatten(array) {
53
41
  flattened.push(array[i]);
54
42
  }
55
43
  }
56
-
57
44
  return flattened;
58
45
  }
59
-
60
46
  function statusHandler(className, database) {
61
47
  function create(object) {
62
48
  return database.create(className, object).then(() => {
63
49
  return Promise.resolve(object);
64
50
  });
65
51
  }
66
-
67
52
  function update(where, object) {
68
53
  return jobPromiseQueue.enqueue(where.objectId, () => database.update(className, where, object));
69
54
  }
70
-
71
55
  return Object.freeze({
72
56
  create,
73
57
  update
74
58
  });
75
59
  }
76
-
77
60
  function restStatusHandler(className, config) {
78
61
  const auth = _Auth.default.master(config);
79
-
80
62
  function create(object) {
81
63
  return _rest.default.create(config, auth, className, object).then(({
82
64
  response
@@ -84,7 +66,6 @@ function restStatusHandler(className, config) {
84
66
  return _objectSpread(_objectSpread({}, object), response);
85
67
  });
86
68
  }
87
-
88
69
  function update(where, object) {
89
70
  return pushPromiseQueue.enqueue(where.objectId, () => _rest.default.update(config, auth, className, {
90
71
  objectId: where.objectId
@@ -94,19 +75,16 @@ function restStatusHandler(className, config) {
94
75
  return _objectSpread(_objectSpread({}, object), response);
95
76
  }));
96
77
  }
97
-
98
78
  return Object.freeze({
99
79
  create,
100
80
  update
101
81
  });
102
82
  }
103
-
104
83
  function jobStatusHandler(config) {
105
84
  let jobStatus;
106
85
  const objectId = (0, _cryptoUtils.newObjectId)(config.objectIdSize);
107
86
  const database = config.database;
108
87
  const handler = statusHandler(JOB_STATUS_COLLECTION, database);
109
-
110
88
  const setRunning = function (jobName, params) {
111
89
  const now = new Date();
112
90
  jobStatus = {
@@ -121,47 +99,38 @@ function jobStatusHandler(config) {
121
99
  };
122
100
  return handler.create(jobStatus);
123
101
  };
124
-
125
102
  const setMessage = function (message) {
126
103
  if (!message || typeof message !== 'string') {
127
104
  return Promise.resolve();
128
105
  }
129
-
130
106
  return handler.update({
131
107
  objectId
132
108
  }, {
133
109
  message
134
110
  });
135
111
  };
136
-
137
112
  const setSucceeded = function (message) {
138
113
  return setFinalStatus('succeeded', message);
139
114
  };
140
-
141
115
  const setFailed = function (message) {
142
116
  return setFinalStatus('failed', message);
143
117
  };
144
-
145
118
  const setFinalStatus = function (status, message = undefined) {
146
119
  const finishedAt = new Date();
147
120
  const update = {
148
121
  status,
149
122
  finishedAt
150
123
  };
151
-
152
124
  if (message && typeof message === 'string') {
153
125
  update.message = message;
154
126
  }
155
-
156
127
  if (message instanceof Error && typeof message.message === 'string') {
157
128
  update.message = message.message;
158
129
  }
159
-
160
130
  return handler.update({
161
131
  objectId
162
132
  }, update);
163
133
  };
164
-
165
134
  return Object.freeze({
166
135
  setRunning,
167
136
  setSucceeded,
@@ -169,35 +138,29 @@ function jobStatusHandler(config) {
169
138
  setFailed
170
139
  });
171
140
  }
172
-
173
141
  function pushStatusHandler(config, existingObjectId) {
174
142
  let pushStatus;
175
143
  const database = config.database;
176
144
  const handler = restStatusHandler(PUSH_STATUS_COLLECTION, config);
177
145
  let objectId = existingObjectId;
178
-
179
146
  const setInitial = function (body = {}, where, options = {
180
147
  source: 'rest'
181
148
  }) {
182
149
  const now = new Date();
183
150
  let pushTime = now.toISOString();
184
151
  let status = 'pending';
185
-
186
152
  if (Object.prototype.hasOwnProperty.call(body, 'push_time')) {
187
153
  if (config.hasPushScheduledSupport) {
188
154
  pushTime = body.push_time;
189
155
  status = 'scheduled';
190
156
  } else {
191
157
  _logger.logger.warn('Trying to schedule a push while server is not configured.');
192
-
193
158
  _logger.logger.warn('Push will be sent immediately');
194
159
  }
195
160
  }
196
-
197
161
  const data = body.data || {};
198
162
  const payloadString = JSON.stringify(data);
199
163
  let pushHash;
200
-
201
164
  if (typeof data.alert === 'string') {
202
165
  pushHash = (0, _cryptoUtils.md5Hash)(data.alert);
203
166
  } else if (typeof data.alert === 'object') {
@@ -205,7 +168,6 @@ function pushStatusHandler(config, existingObjectId) {
205
168
  } else {
206
169
  pushHash = 'd41d8cd98f00b204e9800998ecf8427e';
207
170
  }
208
-
209
171
  const object = {
210
172
  pushTime,
211
173
  query: JSON.stringify(where),
@@ -228,10 +190,8 @@ function pushStatusHandler(config, existingObjectId) {
228
190
  return Promise.resolve(pushStatus);
229
191
  });
230
192
  };
231
-
232
193
  const setRunning = function (batches) {
233
194
  _logger.logger.verbose(`_PushStatus ${objectId}: sending push to installations with %d batches`, batches);
234
-
235
195
  return handler.update({
236
196
  status: 'pending',
237
197
  objectId: objectId
@@ -240,14 +200,12 @@ function pushStatusHandler(config, existingObjectId) {
240
200
  count: batches
241
201
  });
242
202
  };
243
-
244
203
  const trackSent = function (results, UTCOffset, cleanupInstallations = process.env.PARSE_SERVER_CLEANUP_INVALID_INSTALLATIONS) {
245
204
  const update = {
246
205
  numSent: 0,
247
206
  numFailed: 0
248
207
  };
249
208
  const devicesToRemove = [];
250
-
251
209
  if (Array.isArray(results)) {
252
210
  results = flatten(results);
253
211
  results.reduce((memo, result) => {
@@ -255,46 +213,37 @@ function pushStatusHandler(config, existingObjectId) {
255
213
  if (!result || !result.device || !result.device.deviceType) {
256
214
  return memo;
257
215
  }
258
-
259
216
  const deviceType = result.device.deviceType;
260
217
  const key = result.transmitted ? `sentPerType.${deviceType}` : `failedPerType.${deviceType}`;
261
218
  memo[key] = incrementOp(memo, key);
262
-
263
219
  if (typeof UTCOffset !== 'undefined') {
264
220
  const offsetKey = result.transmitted ? `sentPerUTCOffset.${UTCOffset}` : `failedPerUTCOffset.${UTCOffset}`;
265
221
  memo[offsetKey] = incrementOp(memo, offsetKey);
266
222
  }
267
-
268
223
  if (result.transmitted) {
269
224
  memo.numSent++;
270
225
  } else {
271
226
  if (result && result.response && result.response.error && result.device && result.device.deviceToken) {
272
227
  const token = result.device.deviceToken;
273
- const error = result.response.error; // GCM errors
274
-
228
+ const error = result.response.error;
229
+ // GCM errors
275
230
  if (error === 'NotRegistered' || error === 'InvalidRegistration') {
276
231
  devicesToRemove.push(token);
277
- } // APNS errors
278
-
279
-
232
+ }
233
+ // APNS errors
280
234
  if (error === 'Unregistered' || error === 'BadDeviceToken') {
281
235
  devicesToRemove.push(token);
282
236
  }
283
237
  }
284
-
285
238
  memo.numFailed++;
286
239
  }
287
-
288
240
  return memo;
289
241
  }, update);
290
242
  }
291
-
292
243
  _logger.logger.verbose(`_PushStatus ${objectId}: sent push! %d success, %d failures`, update.numSent, update.numFailed);
293
-
294
244
  _logger.logger.verbose(`_PushStatus ${objectId}: needs cleanup`, {
295
245
  devicesToRemove
296
246
  });
297
-
298
247
  ['numSent', 'numFailed'].forEach(key => {
299
248
  if (update[key] > 0) {
300
249
  update[key] = {
@@ -305,10 +254,8 @@ function pushStatusHandler(config, existingObjectId) {
305
254
  delete update[key];
306
255
  }
307
256
  });
308
-
309
257
  if (devicesToRemove.length > 0 && cleanupInstallations) {
310
258
  _logger.logger.info(`Removing device tokens on ${devicesToRemove.length} _Installations`);
311
-
312
259
  database.update('_Installation', {
313
260
  deviceToken: {
314
261
  $in: devicesToRemove
@@ -322,7 +269,6 @@ function pushStatusHandler(config, existingObjectId) {
322
269
  many: true
323
270
  });
324
271
  }
325
-
326
272
  incrementOp(update, 'count', -1);
327
273
  update.status = 'running';
328
274
  return handler.update({
@@ -333,7 +279,6 @@ function pushStatusHandler(config, existingObjectId) {
333
279
  }
334
280
  });
335
281
  };
336
-
337
282
  const complete = function () {
338
283
  return handler.update({
339
284
  objectId
@@ -344,14 +289,12 @@ function pushStatusHandler(config, existingObjectId) {
344
289
  }
345
290
  });
346
291
  };
347
-
348
292
  const fail = function (err) {
349
293
  if (typeof err === 'string') {
350
294
  err = {
351
295
  message: err
352
296
  };
353
297
  }
354
-
355
298
  const update = {
356
299
  errorMessage: err,
357
300
  status: 'failed'
@@ -360,18 +303,18 @@ function pushStatusHandler(config, existingObjectId) {
360
303
  objectId
361
304
  }, update);
362
305
  };
363
-
364
306
  const rval = {
365
307
  setInitial,
366
308
  setRunning,
367
309
  trackSent,
368
310
  complete,
369
311
  fail
370
- }; // define objectId to be dynamic
312
+ };
371
313
 
314
+ // define objectId to be dynamic
372
315
  Object.defineProperty(rval, 'objectId', {
373
316
  get: () => objectId
374
317
  });
375
318
  return Object.freeze(rval);
376
319
  }
377
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TdGF0dXNIYW5kbGVyLmpzIl0sIm5hbWVzIjpbIlBVU0hfU1RBVFVTX0NPTExFQ1RJT04iLCJKT0JfU1RBVFVTX0NPTExFQ1RJT04iLCJwdXNoUHJvbWlzZVF1ZXVlIiwiS2V5UHJvbWlzZVF1ZXVlIiwiam9iUHJvbWlzZVF1ZXVlIiwiaW5jcmVtZW50T3AiLCJvYmplY3QiLCJrZXkiLCJhbW91bnQiLCJfX29wIiwiZmxhdHRlbiIsImFycmF5IiwiZmxhdHRlbmVkIiwiaSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsInB1c2giLCJzdGF0dXNIYW5kbGVyIiwiY2xhc3NOYW1lIiwiZGF0YWJhc2UiLCJjcmVhdGUiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1cGRhdGUiLCJ3aGVyZSIsImVucXVldWUiLCJvYmplY3RJZCIsIk9iamVjdCIsImZyZWV6ZSIsInJlc3RTdGF0dXNIYW5kbGVyIiwiY29uZmlnIiwiYXV0aCIsIkF1dGgiLCJtYXN0ZXIiLCJyZXN0IiwicmVzcG9uc2UiLCJqb2JTdGF0dXNIYW5kbGVyIiwiam9iU3RhdHVzIiwib2JqZWN0SWRTaXplIiwiaGFuZGxlciIsInNldFJ1bm5pbmciLCJqb2JOYW1lIiwicGFyYW1zIiwibm93IiwiRGF0ZSIsInN0YXR1cyIsInNvdXJjZSIsImNyZWF0ZWRBdCIsIkFDTCIsInNldE1lc3NhZ2UiLCJtZXNzYWdlIiwic2V0U3VjY2VlZGVkIiwic2V0RmluYWxTdGF0dXMiLCJzZXRGYWlsZWQiLCJ1bmRlZmluZWQiLCJmaW5pc2hlZEF0IiwiRXJyb3IiLCJwdXNoU3RhdHVzSGFuZGxlciIsImV4aXN0aW5nT2JqZWN0SWQiLCJwdXNoU3RhdHVzIiwic2V0SW5pdGlhbCIsImJvZHkiLCJvcHRpb25zIiwicHVzaFRpbWUiLCJ0b0lTT1N0cmluZyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0IiwicHVzaF90aW1lIiwibG9nZ2VyIiwid2FybiIsImRhdGEiLCJwYXlsb2FkU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInB1c2hIYXNoIiwiYWxlcnQiLCJxdWVyeSIsInBheWxvYWQiLCJ0aXRsZSIsImV4cGlyeSIsImV4cGlyYXRpb25fdGltZSIsImV4cGlyYXRpb25faW50ZXJ2YWwiLCJudW1TZW50IiwicmVzdWx0IiwiYmF0Y2hlcyIsInZlcmJvc2UiLCJjb3VudCIsInRyYWNrU2VudCIsInJlc3VsdHMiLCJVVENPZmZzZXQiLCJjbGVhbnVwSW5zdGFsbGF0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJQQVJTRV9TRVJWRVJfQ0xFQU5VUF9JTlZBTElEX0lOU1RBTExBVElPTlMiLCJudW1GYWlsZWQiLCJkZXZpY2VzVG9SZW1vdmUiLCJyZWR1Y2UiLCJtZW1vIiwiZGV2aWNlIiwiZGV2aWNlVHlwZSIsInRyYW5zbWl0dGVkIiwib2Zmc2V0S2V5IiwiZXJyb3IiLCJkZXZpY2VUb2tlbiIsInRva2VuIiwiZm9yRWFjaCIsImluZm8iLCIkaW4iLCJhY2wiLCJtYW55IiwicmVzIiwiY29tcGxldGUiLCJmYWlsIiwiZXJyIiwiZXJyb3JNZXNzYWdlIiwicnZhbCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLE1BQU1BLHNCQUFzQixHQUFHLGFBQS9CO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsWUFBOUI7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJQyxnQ0FBSixFQUF6QjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxJQUFJRCxnQ0FBSixFQUF4Qjs7QUFFQSxNQUFNRSxXQUFXLEdBQUcsVUFBVUMsTUFBTSxHQUFHLEVBQW5CLEVBQXVCQyxHQUF2QixFQUE0QkMsTUFBTSxHQUFHLENBQXJDLEVBQXdDO0FBQzFELE1BQUksQ0FBQ0YsTUFBTSxDQUFDQyxHQUFELENBQVgsRUFBa0I7QUFDaEJELElBQUFBLE1B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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWQ1SGFzaCwgbmV3T2JqZWN0SWQgfSBmcm9tICcuL2NyeXB0b1V0aWxzJztcbmltcG9ydCB7IEtleVByb21pc2VRdWV1ZSB9IGZyb20gJy4vS2V5UHJvbWlzZVF1ZXVlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXN0IGZyb20gJy4vcmVzdCc7XG5pbXBvcnQgQXV0aCBmcm9tICcuL0F1dGgnO1xuXG5jb25zdCBQVVNIX1NUQVRVU19DT0xMRUNUSU9OID0gJ19QdXNoU3RhdHVzJztcbmNvbnN0IEpPQl9TVEFUVVNfQ09MTEVDVElPTiA9ICdfSm9iU3RhdHVzJztcblxuY29uc3QgcHVzaFByb21pc2VRdWV1ZSA9IG5ldyBLZXlQcm9taXNlUXVldWUoKTtcbmNvbnN0IGpvYlByb21pc2VRdWV1ZSA9IG5ldyBLZXlQcm9taXNlUXVldWUoKTtcblxuY29uc3QgaW5jcmVtZW50T3AgPSBmdW5jdGlvbiAob2JqZWN0ID0ge30sIGtleSwgYW1vdW50ID0gMSkge1xuICBpZiAoIW9iamVjdFtrZXldKSB7XG4gICAgb2JqZWN0W2tleV0gPSB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IGFtb3VudCB9O1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldLmFtb3VudCArPSBhbW91bnQ7XG4gIH1cbiAgcmV0dXJuIG9iamVjdFtrZXldO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGZsYXR0ZW5lZCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICBmbGF0dGVuZWQgPSBmbGF0dGVuZWQuY29uY2F0KGZsYXR0ZW4oYXJyYXlbaV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhdHRlbmVkLnB1c2goYXJyYXlbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmxhdHRlbmVkO1xufVxuXG5mdW5jdGlvbiBzdGF0dXNIYW5kbGVyKGNsYXNzTmFtZSwgZGF0YWJhc2UpIHtcbiAgZnVuY3Rpb24gY3JlYXRlKG9iamVjdCkge1xuICAgIHJldHVybiBkYXRhYmFzZS5jcmVhdGUoY2xhc3NOYW1lLCBvYmplY3QpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvYmplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKHdoZXJlLCBvYmplY3QpIHtcbiAgICByZXR1cm4gam9iUHJvbWlzZVF1ZXVlLmVucXVldWUod2hlcmUub2JqZWN0SWQsICgpID0+IGRhdGFiYXNlLnVwZGF0ZShjbGFzc05hbWUsIHdoZXJlLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBjcmVhdGUsXG4gICAgdXBkYXRlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzdFN0YXR1c0hhbmRsZXIoY2xhc3NOYW1lLCBjb25maWcpIHtcbiAgY29uc3QgYXV0aCA9IEF1dGgubWFzdGVyKGNvbmZpZyk7XG4gIGZ1bmN0aW9uIGNyZWF0ZShvYmplY3QpIHtcbiAgICByZXR1cm4gcmVzdC5jcmVhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdCkudGhlbigoeyByZXNwb25zZSB9KSA9PiB7XG4gICAgICByZXR1cm4geyAuLi5vYmplY3QsIC4uLnJlc3BvbnNlIH07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUod2hlcmUsIG9iamVjdCkge1xuICAgIHJldHVybiBwdXNoUHJvbWlzZVF1ZXVlLmVucXVldWUod2hlcmUub2JqZWN0SWQsICgpID0+XG4gICAgICByZXN0XG4gICAgICAgIC51cGRhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHsgb2JqZWN0SWQ6IHdoZXJlLm9iamVjdElkIH0sIG9iamVjdClcbiAgICAgICAgLnRoZW4oKHsgcmVzcG9uc2UgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLm9iamVjdCwgLi4ucmVzcG9uc2UgfTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIGNyZWF0ZSxcbiAgICB1cGRhdGUsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9iU3RhdHVzSGFuZGxlcihjb25maWcpIHtcbiAgbGV0IGpvYlN0YXR1cztcbiAgY29uc3Qgb2JqZWN0SWQgPSBuZXdPYmplY3RJZChjb25maWcub2JqZWN0SWRTaXplKTtcbiAgY29uc3QgZGF0YWJhc2UgPSBjb25maWcuZGF0YWJhc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSBzdGF0dXNIYW5kbGVyKEpPQl9TVEFUVVNfQ09MTEVDVElPTiwgZGF0YWJhc2UpO1xuICBjb25zdCBzZXRSdW5uaW5nID0gZnVuY3Rpb24gKGpvYk5hbWUsIHBhcmFtcykge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgam9iU3RhdHVzID0ge1xuICAgICAgb2JqZWN0SWQsXG4gICAgICBqb2JOYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICBzb3VyY2U6ICdhcGknLFxuICAgICAgY3JlYXRlZEF0OiBub3csXG4gICAgICAvLyBsb2NrZG93biFcbiAgICAgIEFDTDoge30sXG4gICAgfTtcblxuICAgIHJldHVybiBoYW5kbGVyLmNyZWF0ZShqb2JTdGF0dXMpO1xuICB9O1xuXG4gIGNvbnN0IHNldE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZXIudXBkYXRlKHsgb2JqZWN0SWQgfSwgeyBtZXNzYWdlIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNldFN1Y2NlZWRlZCA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHNldEZpbmFsU3RhdHVzKCdzdWNjZWVkZWQnLCBtZXNzYWdlKTtcbiAgfTtcblxuICBjb25zdCBzZXRGYWlsZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHJldHVybiBzZXRGaW5hbFN0YXR1cygnZmFpbGVkJywgbWVzc2FnZSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0RmluYWxTdGF0dXMgPSBmdW5jdGlvbiAoc3RhdHVzLCBtZXNzYWdlID0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdXBkYXRlID0geyBzdGF0dXMsIGZpbmlzaGVkQXQgfTtcbiAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVwZGF0ZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlb2YgbWVzc2FnZS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgdXBkYXRlLm1lc3NhZ2UgPSBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyLnVwZGF0ZSh7IG9iamVjdElkIH0sIHVwZGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIHNldFJ1bm5pbmcsXG4gICAgc2V0U3VjY2VlZGVkLFxuICAgIHNldE1lc3NhZ2UsXG4gICAgc2V0RmFpbGVkLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgZXhpc3RpbmdPYmplY3RJZCkge1xuICBsZXQgcHVzaFN0YXR1cztcbiAgY29uc3QgZGF0YWJhc2UgPSBjb25maWcuZGF0YWJhc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSByZXN0U3RhdHVzSGFuZGxlcihQVVNIX1NUQVRVU19DT0xMRUNUSU9OLCBjb25maWcpO1xuICBsZXQgb2JqZWN0SWQgPSBleGlzdGluZ09iamVjdElkO1xuICBjb25zdCBzZXRJbml0aWFsID0gZnVuY3Rpb24gKGJvZHkgPSB7fSwgd2hlcmUsIG9wdGlvbnMgPSB7IHNvdXJjZTogJ3Jlc3QnIH0pIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGxldCBwdXNoVGltZSA9IG5vdy50b0lTT1N0cmluZygpO1xuICAgIGxldCBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJykpIHtcbiAgICAgIGlmIChjb25maWcuaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQpIHtcbiAgICAgICAgcHVzaFRpbWUgPSBib2R5LnB1c2hfdGltZTtcbiAgICAgICAgc3RhdHVzID0gJ3NjaGVkdWxlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignVHJ5aW5nIHRvIHNjaGVkdWxlIGEgcHVzaCB3aGlsZSBzZXJ2ZXIgaXMgbm90IGNvbmZpZ3VyZWQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdQdXNoIHdpbGwgYmUgc2VudCBpbW1lZGlhdGVseScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGEgfHwge307XG4gICAgY29uc3QgcGF5bG9hZFN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIGxldCBwdXNoSGFzaDtcbiAgICBpZiAodHlwZW9mIGRhdGEuYWxlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwdXNoSGFzaCA9IG1kNUhhc2goZGF0YS5hbGVydCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS5hbGVydCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHB1c2hIYXNoID0gbWQ1SGFzaChKU09OLnN0cmluZ2lmeShkYXRhLmFsZXJ0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hIYXNoID0gJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlJztcbiAgICB9XG4gICAgY29uc3Qgb2JqZWN0ID0ge1xuICAgICAgcHVzaFRpbWUsXG4gICAgICBxdWVyeTogSlNPTi5zdHJpbmdpZnkod2hlcmUpLFxuICAgICAgcGF5bG9hZDogcGF5bG9hZFN0cmluZyxcbiAgICAgIHNvdXJjZTogb3B0aW9ucy5zb3VyY2UsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGV4cGlyeTogYm9keS5leHBpcmF0aW9uX3RpbWUsXG4gICAgICBleHBpcmF0aW9uX2ludGVydmFsOiBib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwsXG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIG51bVNlbnQ6IDAsXG4gICAgICBwdXNoSGFzaCxcbiAgICAgIC8vIGxvY2tkb3duIVxuICAgICAgQUNMOiB7fSxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVyLmNyZWF0ZShvYmplY3QpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIG9iamVjdElkID0gcmVzdWx0Lm9iamVjdElkO1xuICAgICAgcHVzaFN0YXR1cyA9IHtcbiAgICAgICAgb2JqZWN0SWQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwdXNoU3RhdHVzKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBzZXRSdW5uaW5nID0gZnVuY3Rpb24gKGJhdGNoZXMpIHtcbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBfUHVzaFN0YXR1cyAke29iamVjdElkfTogc2VuZGluZyBwdXNoIHRvIGluc3RhbGxhdGlvbnMgd2l0aCAlZCBiYXRjaGVzYCxcbiAgICAgIGJhdGNoZXNcbiAgICApO1xuICAgIHJldHVybiBoYW5kbGVyLnVwZGF0ZShcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiAncGVuZGluZycsXG4gICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgICBjb3VudDogYmF0Y2hlcyxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHRyYWNrU2VudCA9IGZ1bmN0aW9uIChcbiAgICByZXN1bHRzLFxuICAgIFVUQ09mZnNldCxcbiAgICBjbGVhbnVwSW5zdGFsbGF0aW9ucyA9IHByb2Nlc3MuZW52LlBBUlNFX1NFUlZFUl9DTEVBTlVQX0lOVkFMSURfSU5TVEFMTEFUSU9OU1xuICApIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBudW1TZW50OiAwLFxuICAgICAgbnVtRmFpbGVkOiAwLFxuICAgIH07XG4gICAgY29uc3QgZGV2aWNlc1RvUmVtb3ZlID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICAgIHJlc3VsdHMgPSBmbGF0dGVuKHJlc3VsdHMpO1xuICAgICAgcmVzdWx0cy5yZWR1Y2UoKG1lbW8sIHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBDYW5ub3QgaGFuZGxlIHRoYXRcbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5kZXZpY2UgfHwgIXJlc3VsdC5kZXZpY2UuZGV2aWNlVHlwZSkge1xuICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRldmljZVR5cGUgPSByZXN1bHQuZGV2aWNlLmRldmljZVR5cGU7XG4gICAgICAgIGNvbnN0IGtleSA9IHJlc3VsdC50cmFuc21pdHRlZFxuICAgICAgICAgID8gYHNlbnRQZXJUeXBlLiR7ZGV2aWNlVHlwZX1gXG4gICAgICAgICAgOiBgZmFpbGVkUGVyVHlwZS4ke2RldmljZVR5cGV9YDtcbiAgICAgICAgbWVtb1trZXldID0gaW5jcmVtZW50T3AobWVtbywga2V5KTtcbiAgICAgICAgaWYgKHR5cGVvZiBVVENPZmZzZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0S2V5ID0gcmVzdWx0LnRyYW5zbWl0dGVkXG4gICAgICAgICAgICA/IGBzZW50UGVyVVRDT2Zmc2V0LiR7VVRDT2Zmc2V0fWBcbiAgICAgICAgICAgIDogYGZhaWxlZFBlclVUQ09mZnNldC4ke1VUQ09mZnNldH1gO1xuICAgICAgICAgIG1lbW9bb2Zmc2V0S2V5XSA9IGluY3JlbWVudE9wKG1lbW8sIG9mZnNldEtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC50cmFuc21pdHRlZCkge1xuICAgICAgICAgIG1lbW8ubnVtU2VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3VsdCAmJlxuICAgICAgICAgICAgcmVzdWx0LnJlc3BvbnNlICYmXG4gICAgICAgICAgICByZXN1bHQucmVzcG9uc2UuZXJyb3IgJiZcbiAgICAgICAgICAgIHJlc3VsdC5kZXZpY2UgJiZcbiAgICAgICAgICAgIHJlc3VsdC5kZXZpY2UuZGV2aWNlVG9rZW5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVzdWx0LmRldmljZS5kZXZpY2VUb2tlbjtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LnJlc3BvbnNlLmVycm9yO1xuICAgICAgICAgICAgLy8gR0NNIGVycm9yc1xuICAgICAgICAgICAgaWYgKGVycm9yID09PSAnTm90UmVnaXN0ZXJlZCcgfHwgZXJyb3IgPT09ICdJbnZhbGlkUmVnaXN0cmF0aW9uJykge1xuICAgICAgICAgICAgICBkZXZpY2VzVG9SZW1vdmUucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBUE5TIGVycm9yc1xuICAgICAgICAgICAgaWYgKGVycm9yID09PSAnVW5yZWdpc3RlcmVkJyB8fCBlcnJvciA9PT0gJ0JhZERldmljZVRva2VuJykge1xuICAgICAgICAgICAgICBkZXZpY2VzVG9SZW1vdmUucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbW8ubnVtRmFpbGVkKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICB9LCB1cGRhdGUpO1xuICAgIH1cblxuICAgIGxvZ2dlci52ZXJib3NlKFxuICAgICAgYF9QdXNoU3RhdHVzICR7b2JqZWN0SWR9OiBzZW50IHB1c2ghICVkIHN1Y2Nlc3MsICVkIGZhaWx1cmVzYCxcbiAgICAgIHVwZGF0ZS5udW1TZW50LFxuICAgICAgdXBkYXRlLm51bUZhaWxlZFxuICAgICk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYF9QdXNoU3RhdHVzICR7b2JqZWN0SWR9OiBuZWVkcyBjbGVhbnVwYCwge1xuICAgICAgZGV2aWNlc1RvUmVtb3ZlLFxuICAgIH0pO1xuICAgIFsnbnVtU2VudCcsICdudW1GYWlsZWQnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAodXBkYXRlW2tleV0gPiAwKSB7XG4gICAgICAgIHVwZGF0ZVtrZXldID0ge1xuICAgICAgICAgIF9fb3A6ICdJbmNyZW1lbnQnLFxuICAgICAgICAgIGFtb3VudDogdXBkYXRlW2tleV0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGV2aWNlc1RvUmVtb3ZlLmxlbmd0aCA+IDAgJiYgY2xlYW51cEluc3RhbGxhdGlvbnMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBSZW1vdmluZyBkZXZpY2UgdG9rZW5zIG9uICR7ZGV2aWNlc1RvUmVtb3ZlLmxlbmd0aH0gX0luc3RhbGxhdGlvbnNgKTtcbiAgICAgIGRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICAgJ19JbnN0YWxsYXRpb24nLFxuICAgICAgICB7IGRldmljZVRva2VuOiB7ICRpbjogZGV2aWNlc1RvUmVtb3ZlIH0gfSxcbiAgICAgICAgeyBkZXZpY2VUb2tlbjogeyBfX29wOiAnRGVsZXRlJyB9IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY2w6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYW55OiB0cnVlLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBpbmNyZW1lbnRPcCh1cGRhdGUsICdjb3VudCcsIC0xKTtcbiAgICB1cGRhdGUuc3RhdHVzID0gJ3J1bm5pbmcnO1xuXG4gICAgcmV0dXJuIGhhbmRsZXIudXBkYXRlKHsgb2JqZWN0SWQgfSwgdXBkYXRlKS50aGVuKHJlcyA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5jb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBoYW5kbGVyLnVwZGF0ZShcbiAgICAgIHsgb2JqZWN0SWQgfSxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICAgICAgY291bnQ6IHsgX19vcDogJ0RlbGV0ZScgfSxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGZhaWwgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnIgPSB7IG1lc3NhZ2U6IGVyciB9O1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBlcnJvck1lc3NhZ2U6IGVycixcbiAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlci51cGRhdGUoeyBvYmplY3RJZCB9LCB1cGRhdGUpO1xuICB9O1xuXG4gIGNvbnN0IHJ2YWwgPSB7XG4gICAgc2V0SW5pdGlhbCxcbiAgICBzZXRSdW5uaW5nLFxuICAgIHRyYWNrU2VudCxcbiAgICBjb21wbGV0ZSxcbiAgICBmYWlsLFxuICB9O1xuXG4gIC8vIGRlZmluZSBvYmplY3RJZCB0byBiZSBkeW5hbWljXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShydmFsLCAnb2JqZWN0SWQnLCB7XG4gICAgZ2V0OiAoKSA9PiBvYmplY3RJZCxcbiAgfSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocnZhbCk7XG59XG4iXX0=
320
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQVVNIX1NUQVRVU19DT0xMRUNUSU9OIiwiSk9CX1NUQVRVU19DT0xMRUNUSU9OIiwicHVzaFByb21pc2VRdWV1ZSIsIktleVByb21pc2VRdWV1ZSIsImpvYlByb21pc2VRdWV1ZSIsImluY3JlbWVudE9wIiwib2JqZWN0Iiwia2V5IiwiYW1vdW50IiwiX19vcCIsImZsYXR0ZW4iLCJhcnJheSIsImZsYXR0ZW5lZCIsImkiLCJsZW5ndGgiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJwdXNoIiwic3RhdHVzSGFuZGxlciIsImNsYXNzTmFtZSIsImRhdGFiYXNlIiwiY3JlYXRlIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwidXBkYXRlIiwid2hlcmUiLCJlbnF1ZXVlIiwib2JqZWN0SWQiLCJPYmplY3QiLCJmcmVlemUiLCJyZXN0U3RhdHVzSGFuZGxlciIsImNvbmZpZyIsImF1dGgiLCJBdXRoIiwibWFzdGVyIiwicmVzdCIsInJlc3BvbnNlIiwiam9iU3RhdHVzSGFuZGxlciIsImpvYlN0YXR1cyIsIm5ld09iamVjdElkIiwib2JqZWN0SWRTaXplIiwiaGFuZGxlciIsInNldFJ1bm5pbmciLCJqb2JOYW1lIiwicGFyYW1zIiwibm93IiwiRGF0ZSIsInN0YXR1cyIsInNvdXJjZSIsImNyZWF0ZWRBdCIsIkFDTCIsInNldE1lc3NhZ2UiLCJtZXNzYWdlIiwic2V0U3VjY2VlZGVkIiwic2V0RmluYWxTdGF0dXMiLCJzZXRGYWlsZWQiLCJ1bmRlZmluZWQiLCJmaW5pc2hlZEF0IiwiRXJyb3IiLCJwdXNoU3RhdHVzSGFuZGxlciIsImV4aXN0aW5nT2JqZWN0SWQiLCJwdXNoU3RhdHVzIiwic2V0SW5pdGlhbCIsImJvZHkiLCJvcHRpb25zIiwicHVzaFRpbWUiLCJ0b0lTT1N0cmluZyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0IiwicHVzaF90aW1lIiwibG9nZ2VyIiwid2FybiIsImRhdGEiLCJwYXlsb2FkU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInB1c2hIYXNoIiwiYWxlcnQiLCJtZDVIYXNoIiwicXVlcnkiLCJwYXlsb2FkIiwidGl0bGUiLCJleHBpcnkiLCJleHBpcmF0aW9uX3RpbWUiLCJleHBpcmF0aW9uX2ludGVydmFsIiwibnVtU2VudCIsInJlc3VsdCIsImJhdGNoZXMiLCJ2ZXJib3NlIiwiY291bnQiLCJ0cmFja1NlbnQiLCJyZXN1bHRzIiwiVVRDT2Zmc2V0IiwiY2xlYW51cEluc3RhbGxhdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiUEFSU0VfU0VSVkVSX0NMRUFOVVBfSU5WQUxJRF9JTlNUQUxMQVRJT05TIiwibnVtRmFpbGVkIiwiZGV2aWNlc1RvUmVtb3ZlIiwicmVkdWNlIiwibWVtbyIsImRldmljZSIsImRldmljZVR5cGUiLCJ0cmFuc21pdHRlZCIsIm9mZnNldEtleSIsImVycm9yIiwiZGV2aWNlVG9rZW4iLCJ0b2tlbiIsImZvckVhY2giLCJpbmZvIiwiJGluIiwiYWNsIiwibWFueSIsInJlcyIsImNvbXBsZXRlIiwiZmFpbCIsImVyciIsImVycm9yTWVzc2FnZSIsInJ2YWwiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9TdGF0dXNIYW5kbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1kNUhhc2gsIG5ld09iamVjdElkIH0gZnJvbSAnLi9jcnlwdG9VdGlscyc7XG5pbXBvcnQgeyBLZXlQcm9taXNlUXVldWUgfSBmcm9tICcuL0tleVByb21pc2VRdWV1ZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IEF1dGggZnJvbSAnLi9BdXRoJztcblxuY29uc3QgUFVTSF9TVEFUVVNfQ09MTEVDVElPTiA9ICdfUHVzaFN0YXR1cyc7XG5jb25zdCBKT0JfU1RBVFVTX0NPTExFQ1RJT04gPSAnX0pvYlN0YXR1cyc7XG5cbmNvbnN0IHB1c2hQcm9taXNlUXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG5jb25zdCBqb2JQcm9taXNlUXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG5cbmNvbnN0IGluY3JlbWVudE9wID0gZnVuY3Rpb24gKG9iamVjdCA9IHt9LCBrZXksIGFtb3VudCA9IDEpIHtcbiAgaWYgKCFvYmplY3Rba2V5XSkge1xuICAgIG9iamVjdFtrZXldID0geyBfX29wOiAnSW5jcmVtZW50JywgYW1vdW50OiBhbW91bnQgfTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XS5hbW91bnQgKz0gYW1vdW50O1xuICB9XG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBmbGF0dGVuZWQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5W2ldKSkge1xuICAgICAgZmxhdHRlbmVkID0gZmxhdHRlbmVkLmNvbmNhdChmbGF0dGVuKGFycmF5W2ldKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXR0ZW5lZC5wdXNoKGFycmF5W2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZsYXR0ZW5lZDtcbn1cblxuZnVuY3Rpb24gc3RhdHVzSGFuZGxlcihjbGFzc05hbWUsIGRhdGFiYXNlKSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShvYmplY3QpIHtcbiAgICByZXR1cm4gZGF0YWJhc2UuY3JlYXRlKGNsYXNzTmFtZSwgb2JqZWN0KS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob2JqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh3aGVyZSwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGpvYlByb21pc2VRdWV1ZS5lbnF1ZXVlKHdoZXJlLm9iamVjdElkLCAoKSA9PiBkYXRhYmFzZS51cGRhdGUoY2xhc3NOYW1lLCB3aGVyZSwgb2JqZWN0KSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgY3JlYXRlLFxuICAgIHVwZGF0ZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlc3RTdGF0dXNIYW5kbGVyKGNsYXNzTmFtZSwgY29uZmlnKSB7XG4gIGNvbnN0IGF1dGggPSBBdXRoLm1hc3Rlcihjb25maWcpO1xuICBmdW5jdGlvbiBjcmVhdGUob2JqZWN0KSB7XG4gICAgcmV0dXJuIHJlc3QuY3JlYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCBvYmplY3QpLnRoZW4oKHsgcmVzcG9uc2UgfSkgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4ub2JqZWN0LCAuLi5yZXNwb25zZSB9O1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKHdoZXJlLCBvYmplY3QpIHtcbiAgICByZXR1cm4gcHVzaFByb21pc2VRdWV1ZS5lbnF1ZXVlKHdoZXJlLm9iamVjdElkLCAoKSA9PlxuICAgICAgcmVzdFxuICAgICAgICAudXBkYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCB7IG9iamVjdElkOiB3aGVyZS5vYmplY3RJZCB9LCBvYmplY3QpXG4gICAgICAgIC50aGVuKCh7IHJlc3BvbnNlIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4geyAuLi5vYmplY3QsIC4uLnJlc3BvbnNlIH07XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBjcmVhdGUsXG4gICAgdXBkYXRlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvYlN0YXR1c0hhbmRsZXIoY29uZmlnKSB7XG4gIGxldCBqb2JTdGF0dXM7XG4gIGNvbnN0IG9iamVjdElkID0gbmV3T2JqZWN0SWQoY29uZmlnLm9iamVjdElkU2l6ZSk7XG4gIGNvbnN0IGRhdGFiYXNlID0gY29uZmlnLmRhdGFiYXNlO1xuICBjb25zdCBoYW5kbGVyID0gc3RhdHVzSGFuZGxlcihKT0JfU1RBVFVTX0NPTExFQ1RJT04sIGRhdGFiYXNlKTtcbiAgY29uc3Qgc2V0UnVubmluZyA9IGZ1bmN0aW9uIChqb2JOYW1lLCBwYXJhbXMpIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGpvYlN0YXR1cyA9IHtcbiAgICAgIG9iamVjdElkLFxuICAgICAgam9iTmFtZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHN0YXR1czogJ3J1bm5pbmcnLFxuICAgICAgc291cmNlOiAnYXBpJyxcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgLy8gbG9ja2Rvd24hXG4gICAgICBBQ0w6IHt9LFxuICAgIH07XG5cbiAgICByZXR1cm4gaGFuZGxlci5jcmVhdGUoam9iU3RhdHVzKTtcbiAgfTtcblxuICBjb25zdCBzZXRNZXNzYWdlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyLnVwZGF0ZSh7IG9iamVjdElkIH0sIHsgbWVzc2FnZSB9KTtcbiAgfTtcblxuICBjb25zdCBzZXRTdWNjZWVkZWQgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgIHJldHVybiBzZXRGaW5hbFN0YXR1cygnc3VjY2VlZGVkJywgbWVzc2FnZSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0RmFpbGVkID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gc2V0RmluYWxTdGF0dXMoJ2ZhaWxlZCcsIG1lc3NhZ2UpO1xuICB9O1xuXG4gIGNvbnN0IHNldEZpbmFsU3RhdHVzID0gZnVuY3Rpb24gKHN0YXR1cywgbWVzc2FnZSA9IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZpbmlzaGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHVwZGF0ZSA9IHsgc3RhdHVzLCBmaW5pc2hlZEF0IH07XG4gICAgaWYgKG1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1cGRhdGUubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZW9mIG1lc3NhZ2UubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHVwZGF0ZS5tZXNzYWdlID0gbWVzc2FnZS5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlci51cGRhdGUoeyBvYmplY3RJZCB9LCB1cGRhdGUpO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBzZXRSdW5uaW5nLFxuICAgIHNldFN1Y2NlZWRlZCxcbiAgICBzZXRNZXNzYWdlLFxuICAgIHNldEZhaWxlZCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoU3RhdHVzSGFuZGxlcihjb25maWcsIGV4aXN0aW5nT2JqZWN0SWQpIHtcbiAgbGV0IHB1c2hTdGF0dXM7XG4gIGNvbnN0IGRhdGFiYXNlID0gY29uZmlnLmRhdGFiYXNlO1xuICBjb25zdCBoYW5kbGVyID0gcmVzdFN0YXR1c0hhbmRsZXIoUFVTSF9TVEFUVVNfQ09MTEVDVElPTiwgY29uZmlnKTtcbiAgbGV0IG9iamVjdElkID0gZXhpc3RpbmdPYmplY3RJZDtcbiAgY29uc3Qgc2V0SW5pdGlhbCA9IGZ1bmN0aW9uIChib2R5ID0ge30sIHdoZXJlLCBvcHRpb25zID0geyBzb3VyY2U6ICdyZXN0JyB9KSB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBsZXQgcHVzaFRpbWUgPSBub3cudG9JU09TdHJpbmcoKTtcbiAgICBsZXQgc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpKSB7XG4gICAgICBpZiAoY29uZmlnLmhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0KSB7XG4gICAgICAgIHB1c2hUaW1lID0gYm9keS5wdXNoX3RpbWU7XG4gICAgICAgIHN0YXR1cyA9ICdzY2hlZHVsZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1RyeWluZyB0byBzY2hlZHVsZSBhIHB1c2ggd2hpbGUgc2VydmVyIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICAgICAgICBsb2dnZXIud2FybignUHVzaCB3aWxsIGJlIHNlbnQgaW1tZWRpYXRlbHknKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYm9keS5kYXRhIHx8IHt9O1xuICAgIGNvbnN0IHBheWxvYWRTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBsZXQgcHVzaEhhc2g7XG4gICAgaWYgKHR5cGVvZiBkYXRhLmFsZXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgcHVzaEhhc2ggPSBtZDVIYXNoKGRhdGEuYWxlcnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuYWxlcnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBwdXNoSGFzaCA9IG1kNUhhc2goSlNPTi5zdHJpbmdpZnkoZGF0YS5hbGVydCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwdXNoSGFzaCA9ICdkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSc7XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdCA9IHtcbiAgICAgIHB1c2hUaW1lLFxuICAgICAgcXVlcnk6IEpTT04uc3RyaW5naWZ5KHdoZXJlKSxcbiAgICAgIHBheWxvYWQ6IHBheWxvYWRTdHJpbmcsXG4gICAgICBzb3VyY2U6IG9wdGlvbnMuc291cmNlLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUsXG4gICAgICBleHBpcnk6IGJvZHkuZXhwaXJhdGlvbl90aW1lLFxuICAgICAgZXhwaXJhdGlvbl9pbnRlcnZhbDogYm9keS5leHBpcmF0aW9uX2ludGVydmFsLFxuICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICBudW1TZW50OiAwLFxuICAgICAgcHVzaEhhc2gsXG4gICAgICAvLyBsb2NrZG93biFcbiAgICAgIEFDTDoge30sXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlci5jcmVhdGUob2JqZWN0KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBvYmplY3RJZCA9IHJlc3VsdC5vYmplY3RJZDtcbiAgICAgIHB1c2hTdGF0dXMgPSB7XG4gICAgICAgIG9iamVjdElkLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocHVzaFN0YXR1cyk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0UnVubmluZyA9IGZ1bmN0aW9uIChiYXRjaGVzKSB7XG4gICAgbG9nZ2VyLnZlcmJvc2UoXG4gICAgICBgX1B1c2hTdGF0dXMgJHtvYmplY3RJZH06IHNlbmRpbmcgcHVzaCB0byBpbnN0YWxsYXRpb25zIHdpdGggJWQgYmF0Y2hlc2AsXG4gICAgICBiYXRjaGVzXG4gICAgKTtcbiAgICByZXR1cm4gaGFuZGxlci51cGRhdGUoXG4gICAgICB7XG4gICAgICAgIHN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgY291bnQ6IGJhdGNoZXMsXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCB0cmFja1NlbnQgPSBmdW5jdGlvbiAoXG4gICAgcmVzdWx0cyxcbiAgICBVVENPZmZzZXQsXG4gICAgY2xlYW51cEluc3RhbGxhdGlvbnMgPSBwcm9jZXNzLmVudi5QQVJTRV9TRVJWRVJfQ0xFQU5VUF9JTlZBTElEX0lOU1RBTExBVElPTlNcbiAgKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgbnVtU2VudDogMCxcbiAgICAgIG51bUZhaWxlZDogMCxcbiAgICB9O1xuICAgIGNvbnN0IGRldmljZXNUb1JlbW92ZSA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICByZXN1bHRzID0gZmxhdHRlbihyZXN1bHRzKTtcbiAgICAgIHJlc3VsdHMucmVkdWNlKChtZW1vLCByZXN1bHQpID0+IHtcbiAgICAgICAgLy8gQ2Fubm90IGhhbmRsZSB0aGF0XG4gICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGV2aWNlIHx8ICFyZXN1bHQuZGV2aWNlLmRldmljZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXZpY2VUeXBlID0gcmVzdWx0LmRldmljZS5kZXZpY2VUeXBlO1xuICAgICAgICBjb25zdCBrZXkgPSByZXN1bHQudHJhbnNtaXR0ZWRcbiAgICAgICAgICA/IGBzZW50UGVyVHlwZS4ke2RldmljZVR5cGV9YFxuICAgICAgICAgIDogYGZhaWxlZFBlclR5cGUuJHtkZXZpY2VUeXBlfWA7XG4gICAgICAgIG1lbW9ba2V5XSA9IGluY3JlbWVudE9wKG1lbW8sIGtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgVVRDT2Zmc2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGNvbnN0IG9mZnNldEtleSA9IHJlc3VsdC50cmFuc21pdHRlZFxuICAgICAgICAgICAgPyBgc2VudFBlclVUQ09mZnNldC4ke1VUQ09mZnNldH1gXG4gICAgICAgICAgICA6IGBmYWlsZWRQZXJVVENPZmZzZXQuJHtVVENPZmZzZXR9YDtcbiAgICAgICAgICBtZW1vW29mZnNldEtleV0gPSBpbmNyZW1lbnRPcChtZW1vLCBvZmZzZXRLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudHJhbnNtaXR0ZWQpIHtcbiAgICAgICAgICBtZW1vLm51bVNlbnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXN1bHQgJiZcbiAgICAgICAgICAgIHJlc3VsdC5yZXNwb25zZSAmJlxuICAgICAgICAgICAgcmVzdWx0LnJlc3BvbnNlLmVycm9yICYmXG4gICAgICAgICAgICByZXN1bHQuZGV2aWNlICYmXG4gICAgICAgICAgICByZXN1bHQuZGV2aWNlLmRldmljZVRva2VuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHJlc3VsdC5kZXZpY2UuZGV2aWNlVG9rZW47XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5yZXNwb25zZS5lcnJvcjtcbiAgICAgICAgICAgIC8vIEdDTSBlcnJvcnNcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gJ05vdFJlZ2lzdGVyZWQnIHx8IGVycm9yID09PSAnSW52YWxpZFJlZ2lzdHJhdGlvbicpIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1RvUmVtb3ZlLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQVBOUyBlcnJvcnNcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gJ1VucmVnaXN0ZXJlZCcgfHwgZXJyb3IgPT09ICdCYWREZXZpY2VUb2tlbicpIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1RvUmVtb3ZlLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZW1vLm51bUZhaWxlZCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgfSwgdXBkYXRlKTtcbiAgICB9XG5cbiAgICBsb2dnZXIudmVyYm9zZShcbiAgICAgIGBfUHVzaFN0YXR1cyAke29iamVjdElkfTogc2VudCBwdXNoISAlZCBzdWNjZXNzLCAlZCBmYWlsdXJlc2AsXG4gICAgICB1cGRhdGUubnVtU2VudCxcbiAgICAgIHVwZGF0ZS5udW1GYWlsZWRcbiAgICApO1xuICAgIGxvZ2dlci52ZXJib3NlKGBfUHVzaFN0YXR1cyAke29iamVjdElkfTogbmVlZHMgY2xlYW51cGAsIHtcbiAgICAgIGRldmljZXNUb1JlbW92ZSxcbiAgICB9KTtcbiAgICBbJ251bVNlbnQnLCAnbnVtRmFpbGVkJ10uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZVtrZXldID4gMCkge1xuICAgICAgICB1cGRhdGVba2V5XSA9IHtcbiAgICAgICAgICBfX29wOiAnSW5jcmVtZW50JyxcbiAgICAgICAgICBhbW91bnQ6IHVwZGF0ZVtrZXldLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRldmljZXNUb1JlbW92ZS5sZW5ndGggPiAwICYmIGNsZWFudXBJbnN0YWxsYXRpb25zKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVtb3ZpbmcgZGV2aWNlIHRva2VucyBvbiAke2RldmljZXNUb1JlbW92ZS5sZW5ndGh9IF9JbnN0YWxsYXRpb25zYCk7XG4gICAgICBkYXRhYmFzZS51cGRhdGUoXG4gICAgICAgICdfSW5zdGFsbGF0aW9uJyxcbiAgICAgICAgeyBkZXZpY2VUb2tlbjogeyAkaW46IGRldmljZXNUb1JlbW92ZSB9IH0sXG4gICAgICAgIHsgZGV2aWNlVG9rZW46IHsgX19vcDogJ0RlbGV0ZScgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWNsOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWFueTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgaW5jcmVtZW50T3AodXBkYXRlLCAnY291bnQnLCAtMSk7XG4gICAgdXBkYXRlLnN0YXR1cyA9ICdydW5uaW5nJztcblxuICAgIHJldHVybiBoYW5kbGVyLnVwZGF0ZSh7IG9iamVjdElkIH0sIHVwZGF0ZSkudGhlbihyZXMgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMuY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFuZGxlci51cGRhdGUoXG4gICAgICB7IG9iamVjdElkIH0sXG4gICAgICB7XG4gICAgICAgIHN0YXR1czogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIGNvdW50OiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBmYWlsID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyID0geyBtZXNzYWdlOiBlcnIgfTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZXJyb3JNZXNzYWdlOiBlcnIsXG4gICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZXIudXBkYXRlKHsgb2JqZWN0SWQgfSwgdXBkYXRlKTtcbiAgfTtcblxuICBjb25zdCBydmFsID0ge1xuICAgIHNldEluaXRpYWwsXG4gICAgc2V0UnVubmluZyxcbiAgICB0cmFja1NlbnQsXG4gICAgY29tcGxldGUsXG4gICAgZmFpbCxcbiAgfTtcblxuICAvLyBkZWZpbmUgb2JqZWN0SWQgdG8gYmUgZHluYW1pY1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocnZhbCwgJ29iamVjdElkJywge1xuICAgIGdldDogKCkgPT4gb2JqZWN0SWQsXG4gIH0pO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJ2YWwpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRTFCLE1BQU1BLHNCQUFzQixHQUFHLGFBQWE7QUFDNUMsTUFBTUMscUJBQXFCLEdBQUcsWUFBWTtBQUUxQyxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJQyxnQ0FBZSxFQUFFO0FBQzlDLE1BQU1DLGVBQWUsR0FBRyxJQUFJRCxnQ0FBZSxFQUFFO0FBRTdDLE1BQU1FLFdBQVcsR0FBRyxVQUFVQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLEdBQUcsRUFBRUMsTUFBTSxHQUFHLENBQUMsRUFBRTtF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
package/lib/TestUtils.js CHANGED
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.destroyAllDataPermanently = destroyAllDataPermanently;
7
-
8
7
  var _cache = _interopRequireDefault(require("./cache"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  /**
13
10
  * Destroys all data in the database
14
11
  * @param {boolean} fast set to true if it's ok to just drop objects and not indexes.
@@ -17,10 +14,8 @@ function destroyAllDataPermanently(fast) {
17
14
  if (!process.env.TESTING) {
18
15
  throw 'Only supported in test environment';
19
16
  }
20
-
21
17
  return Promise.all(Object.keys(_cache.default.cache).map(appId => {
22
18
  const app = _cache.default.get(appId);
23
-
24
19
  if (app.databaseController) {
25
20
  return app.databaseController.deleteEverything(fast);
26
21
  } else {
@@ -28,4 +23,4 @@ function destroyAllDataPermanently(fast) {
28
23
  }
29
24
  }));
30
25
  }
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9UZXN0VXRpbHMuanMiXSwibmFtZXMiOlsiZGVzdHJveUFsbERhdGFQZXJtYW5lbnRseSIsImZhc3QiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsIlByb21pc2UiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwiQXBwQ2FjaGUiLCJjYWNoZSIsIm1hcCIsImFwcElkIiwiYXBwIiwiZ2V0IiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZGVsZXRlRXZlcnl0aGluZyIsInJlc29sdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EseUJBQVQsQ0FBbUNDLElBQW5DLEVBQXlDO0FBQzlDLE1BQUksQ0FBQ0MsT0FBTyxDQUFDQyxHQUFSLENBQVlDLE9BQWpCLEVBQTBCO0FBQ3hCLFVBQU0sb0NBQU47QUFDRDs7QUFDRCxTQUFPQyxPQUFPLENBQUNDLEdBQVIsQ0FDTEMsTUFBTSxDQUFDQyxJQUFQLENBQVlDLGVBQVNDLEtBQXJCLEVBQTRCQyxHQUE1QixDQUFnQ0MsS0FBSyxJQUFJO0FBQ3ZDLFVBQU1DLEdBQUcsR0FBR0osZUFBU0ssR0FBVCxDQUFhRixLQUFiLENBQVo7O0FBQ0EsUUFBSUMsR0FBRyxDQUFDRSxrQkFBUixFQUE0QjtBQUMxQixhQUFPRixHQUFHLENBQUNFLGtCQUFKLENBQXVCQyxnQkFBdkIsQ0FBd0NmLElBQXhDLENBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPSSxPQUFPLENBQUNZLE9BQVIsRUFBUDtBQUNEO0FBQ0YsR0FQRCxDQURLLENBQVA7QUFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcblxuLyoqXG4gKiBEZXN0cm95cyBhbGwgZGF0YSBpbiB0aGUgZGF0YWJhc2VcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmFzdCBzZXQgdG8gdHJ1ZSBpZiBpdCdzIG9rIHRvIGp1c3QgZHJvcCBvYmplY3RzIGFuZCBub3QgaW5kZXhlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lBbGxEYXRhUGVybWFuZW50bHkoZmFzdCkge1xuICBpZiAoIXByb2Nlc3MuZW52LlRFU1RJTkcpIHtcbiAgICB0aHJvdyAnT25seSBzdXBwb3J0ZWQgaW4gdGVzdCBlbnZpcm9ubWVudCc7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgIE9iamVjdC5rZXlzKEFwcENhY2hlLmNhY2hlKS5tYXAoYXBwSWQgPT4ge1xuICAgICAgY29uc3QgYXBwID0gQXBwQ2FjaGUuZ2V0KGFwcElkKTtcbiAgICAgIGlmIChhcHAuZGF0YWJhc2VDb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiBhcHAuZGF0YWJhc2VDb250cm9sbGVyLmRlbGV0ZUV2ZXJ5dGhpbmcoZmFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXN0cm95QWxsRGF0YVBlcm1hbmVudGx5IiwiZmFzdCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwiUHJvbWlzZSIsImFsbCIsIk9iamVjdCIsImtleXMiLCJBcHBDYWNoZSIsImNhY2hlIiwibWFwIiwiYXBwSWQiLCJhcHAiLCJnZXQiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJkZWxldGVFdmVyeXRoaW5nIiwicmVzb2x2ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9UZXN0VXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuXG4vKipcbiAqIERlc3Ryb3lzIGFsbCBkYXRhIGluIHRoZSBkYXRhYmFzZVxuICogQHBhcmFtIHtib29sZWFufSBmYXN0IHNldCB0byB0cnVlIGlmIGl0J3Mgb2sgdG8ganVzdCBkcm9wIG9iamVjdHMgYW5kIG5vdCBpbmRleGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUFsbERhdGFQZXJtYW5lbnRseShmYXN0KSB7XG4gIGlmICghcHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgIHRocm93ICdPbmx5IHN1cHBvcnRlZCBpbiB0ZXN0IGVudmlyb25tZW50JztcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgT2JqZWN0LmtleXMoQXBwQ2FjaGUuY2FjaGUpLm1hcChhcHBJZCA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBBcHBDYWNoZS5nZXQoYXBwSWQpO1xuICAgICAgaWYgKGFwcC5kYXRhYmFzZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5kYXRhYmFzZUNvbnRyb2xsZXIuZGVsZXRlRXZlcnl0aGluZyhmYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUErQjtBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLHlCQUF5QixDQUFDQyxJQUFJLEVBQUU7RUFDOUMsSUFBSSxDQUFDQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFO0lBQ3hCLE1BQU0sb0NBQW9DO0VBQzVDO0VBQ0EsT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQ2hCQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsY0FBUSxDQUFDQyxLQUFLLENBQUMsQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLElBQUk7SUFDdkMsTUFBTUMsR0FBRyxHQUFHSixjQUFRLENBQUNLLEdBQUcsQ0FBQ0YsS0FBSyxDQUFDO0lBQy9CLElBQUlDLEdBQUcsQ0FBQ0Usa0JBQWtCLEVBQUU7TUFDMUIsT0FBT0YsR0FBRyxDQUFDRSxrQkFBa0IsQ0FBQ0MsZ0JBQWdCLENBQUNmLElBQUksQ0FBQztJQUN0RCxDQUFDLE1BQU07TUFDTCxPQUFPSSxPQUFPLENBQUNZLE9BQU8sRUFBRTtJQUMxQjtFQUNGLENBQUMsQ0FBQyxDQUNIO0FBQ0gifQ==