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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +45 -17
  2. package/lib/AccountLockout.js +11 -26
  3. package/lib/Adapters/AdapterLoader.js +8 -14
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  5. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  6. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  7. package/lib/Adapters/Auth/apple.js +6 -22
  8. package/lib/Adapters/Auth/facebook.js +7 -37
  9. package/lib/Adapters/Auth/gcenter.js +8 -37
  10. package/lib/Adapters/Auth/github.js +7 -10
  11. package/lib/Adapters/Auth/google.js +11 -34
  12. package/lib/Adapters/Auth/gpgames.js +5 -8
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  14. package/lib/Adapters/Auth/index.js +20 -65
  15. package/lib/Adapters/Auth/instagram.js +5 -9
  16. package/lib/Adapters/Auth/janraincapture.js +8 -12
  17. package/lib/Adapters/Auth/janrainengage.js +7 -11
  18. package/lib/Adapters/Auth/keycloak.js +5 -19
  19. package/lib/Adapters/Auth/ldap.js +1 -15
  20. package/lib/Adapters/Auth/line.js +7 -10
  21. package/lib/Adapters/Auth/linkedin.js +7 -12
  22. package/lib/Adapters/Auth/meetup.js +7 -10
  23. package/lib/Adapters/Auth/microsoft.js +7 -10
  24. package/lib/Adapters/Auth/oauth2.js +6 -18
  25. package/lib/Adapters/Auth/phantauth.js +8 -10
  26. package/lib/Adapters/Auth/qq.js +7 -13
  27. package/lib/Adapters/Auth/spotify.js +7 -14
  28. package/lib/Adapters/Auth/twitter.js +5 -15
  29. package/lib/Adapters/Auth/vkontakte.js +9 -15
  30. package/lib/Adapters/Auth/wechat.js +7 -10
  31. package/lib/Adapters/Auth/weibo.js +7 -11
  32. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  33. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  34. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  35. package/lib/Adapters/Cache/LRUCache.js +1 -11
  36. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  37. package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
  38. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  39. package/lib/Adapters/Email/MailAdapter.js +2 -7
  40. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  41. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  42. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  43. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  44. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  45. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  46. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  47. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  48. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  49. package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
  50. package/lib/Adapters/Push/PushAdapter.js +2 -8
  51. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  52. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  53. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  54. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  55. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  56. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  57. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  58. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  59. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  62. package/lib/Auth.js +54 -121
  63. package/lib/ClientSDK.js +3 -11
  64. package/lib/Config.js +69 -113
  65. package/lib/Controllers/AdaptableController.js +6 -18
  66. package/lib/Controllers/AnalyticsController.js +1 -9
  67. package/lib/Controllers/CacheController.js +3 -23
  68. package/lib/Controllers/DatabaseController.js +147 -345
  69. package/lib/Controllers/FilesController.js +5 -34
  70. package/lib/Controllers/HooksController.js +1 -51
  71. package/lib/Controllers/LiveQueryController.js +4 -23
  72. package/lib/Controllers/LoggerController.js +15 -54
  73. package/lib/Controllers/ParseGraphQLController.js +49 -104
  74. package/lib/Controllers/PushController.js +20 -59
  75. package/lib/Controllers/SchemaController.js +154 -344
  76. package/lib/Controllers/UserController.js +11 -72
  77. package/lib/Controllers/index.js +19 -68
  78. package/lib/Controllers/types.js +1 -1
  79. package/lib/Deprecator/Deprecations.js +1 -8
  80. package/lib/Deprecator/Deprecator.js +9 -18
  81. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  82. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  83. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  84. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  85. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  86. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  87. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  88. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  89. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  90. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  91. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  92. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  93. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  94. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  95. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  96. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  97. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  98. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  99. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  100. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  101. package/lib/GraphQL/transformers/className.js +1 -4
  102. package/lib/GraphQL/transformers/constraintType.js +1 -20
  103. package/lib/GraphQL/transformers/inputType.js +1 -20
  104. package/lib/GraphQL/transformers/mutation.js +6 -51
  105. package/lib/GraphQL/transformers/outputType.js +1 -20
  106. package/lib/GraphQL/transformers/query.js +6 -42
  107. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  108. package/lib/KeyPromiseQueue.js +1 -12
  109. package/lib/LiveQuery/Client.js +1 -25
  110. package/lib/LiveQuery/Id.js +1 -7
  111. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  112. package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
  113. package/lib/LiveQuery/ParsePubSub.js +1 -12
  114. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  115. package/lib/LiveQuery/QueryTools.js +14 -116
  116. package/lib/LiveQuery/RequestSchema.js +1 -1
  117. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  118. package/lib/LiveQuery/Subscription.js +4 -18
  119. package/lib/LiveQuery/equalObjects.js +2 -14
  120. package/lib/Options/Definitions.js +79 -10
  121. package/lib/Options/docs.js +23 -3
  122. package/lib/Options/index.js +4 -12
  123. package/lib/Options/parsers.js +1 -18
  124. package/lib/Page.js +1 -9
  125. package/lib/ParseMessageQueue.js +1 -10
  126. package/lib/ParseServer.js +144 -182
  127. package/lib/ParseServerRESTController.js +6 -33
  128. package/lib/PromiseRouter.js +16 -50
  129. package/lib/Push/PushQueue.js +3 -15
  130. package/lib/Push/PushWorker.js +7 -32
  131. package/lib/Push/utils.js +9 -38
  132. package/lib/RestQuery.js +105 -242
  133. package/lib/RestWrite.js +212 -377
  134. package/lib/Routers/AggregateRouter.js +14 -51
  135. package/lib/Routers/AnalyticsRouter.js +2 -8
  136. package/lib/Routers/AudiencesRouter.js +1 -15
  137. package/lib/Routers/ClassesRouter.js +3 -53
  138. package/lib/Routers/CloudCodeRouter.js +1 -19
  139. package/lib/Routers/FeaturesRouter.js +1 -10
  140. package/lib/Routers/FilesRouter.js +29 -76
  141. package/lib/Routers/FunctionsRouter.js +5 -28
  142. package/lib/Routers/GlobalConfigRouter.js +4 -18
  143. package/lib/Routers/GraphQLRouter.js +1 -14
  144. package/lib/Routers/HooksRouter.js +1 -29
  145. package/lib/Routers/IAPValidationRouter.js +6 -29
  146. package/lib/Routers/InstallationsRouter.js +2 -12
  147. package/lib/Routers/LogsRouter.js +4 -16
  148. package/lib/Routers/PagesRouter.js +69 -129
  149. package/lib/Routers/PublicAPIRouter.js +3 -62
  150. package/lib/Routers/PurgeRouter.js +1 -15
  151. package/lib/Routers/PushRouter.js +2 -18
  152. package/lib/Routers/RolesRouter.js +1 -7
  153. package/lib/Routers/SchemasRouter.js +4 -34
  154. package/lib/Routers/SecurityRouter.js +1 -12
  155. package/lib/Routers/SessionsRouter.js +3 -19
  156. package/lib/Routers/UsersRouter.js +58 -155
  157. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  158. package/lib/SchemaMigrations/Migrations.js +2 -8
  159. package/lib/Security/Check.js +8 -16
  160. package/lib/Security/CheckGroup.js +4 -11
  161. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  162. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  163. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  164. package/lib/Security/CheckRunner.js +22 -41
  165. package/lib/StatusHandler.js +12 -69
  166. package/lib/TestUtils.js +1 -6
  167. package/lib/Utils.js +27 -66
  168. package/lib/batch.js +17 -28
  169. package/lib/cache.js +1 -3
  170. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  171. package/lib/cli/definitions/parse-server.js +1 -3
  172. package/lib/cli/parse-live-query-server.js +1 -6
  173. package/lib/cli/parse-server.js +11 -21
  174. package/lib/cli/utils/commander.js +13 -51
  175. package/lib/cli/utils/runner.js +1 -14
  176. package/lib/cloud-code/Parse.Cloud.js +71 -92
  177. package/lib/cryptoUtils.js +11 -19
  178. package/lib/defaults.js +2 -14
  179. package/lib/deprecated.js +1 -2
  180. package/lib/index.js +16 -34
  181. package/lib/logger.js +6 -13
  182. package/lib/middlewares.js +147 -151
  183. package/lib/password.js +6 -10
  184. package/lib/request.js +173 -2
  185. package/lib/requiredParameter.js +1 -3
  186. package/lib/rest.js +19 -41
  187. package/lib/triggers.js +54 -252
  188. package/lib/vendor/mongodbUrl.js +125 -305
  189. package/package.json +22 -19
  190. package/lib/cloud-code/HTTPResponse.js +0 -73
  191. package/lib/cloud-code/httpRequest.js +0 -192
@@ -4,35 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.PushWorker = void 0;
7
-
8
7
  var _deepcopy = _interopRequireDefault(require("deepcopy"));
9
-
10
8
  var _AdaptableController = _interopRequireDefault(require("../Controllers/AdaptableController"));
11
-
12
9
  var _Auth = require("../Auth");
13
-
14
10
  var _Config = _interopRequireDefault(require("../Config"));
15
-
16
11
  var _PushAdapter = require("../Adapters/Push/PushAdapter");
17
-
18
12
  var _rest = _interopRequireDefault(require("../rest"));
19
-
20
13
  var _StatusHandler = require("../StatusHandler");
21
-
22
14
  var utils = _interopRequireWildcard(require("./utils"));
23
-
24
15
  var _ParseMessageQueue = require("../ParseMessageQueue");
25
-
26
16
  var _PushQueue = require("./PushQueue");
27
-
28
17
  var _logger = _interopRequireDefault(require("../logger"));
29
-
30
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
-
32
19
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
-
34
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
-
36
21
  // -disable-next
37
22
  function groupByBadge(installations) {
38
23
  return installations.reduce((map, installation) => {
@@ -42,15 +27,12 @@ function groupByBadge(installations) {
42
27
  return map;
43
28
  }, {});
44
29
  }
45
-
46
30
  class PushWorker {
47
31
  constructor(pushAdapter, subscriberConfig = {}) {
48
32
  _AdaptableController.default.validateAdapter(pushAdapter, this, _PushAdapter.PushAdapter);
49
-
50
33
  this.adapter = pushAdapter;
51
34
  this.channel = subscriberConfig.channel || _PushQueue.PushQueue.defaultPushChannel();
52
35
  this.subscriber = _ParseMessageQueue.ParseMessageQueue.createSubscriber(subscriberConfig);
53
-
54
36
  if (this.subscriber) {
55
37
  const subscriber = this.subscriber;
56
38
  subscriber.subscribe(this.channel);
@@ -60,7 +42,6 @@ class PushWorker {
60
42
  });
61
43
  }
62
44
  }
63
-
64
45
  run({
65
46
  body,
66
47
  query,
@@ -69,7 +50,6 @@ class PushWorker {
69
50
  UTCOffset
70
51
  }) {
71
52
  const config = _Config.default.get(applicationId);
72
-
73
53
  const auth = (0, _Auth.master)(config);
74
54
  const where = utils.applyDeviceTokenExists(query.where);
75
55
  delete query.where;
@@ -80,19 +60,17 @@ class PushWorker {
80
60
  if (results.length == 0) {
81
61
  return;
82
62
  }
83
-
84
63
  return this.sendToAdapter(body, results, pushStatus, config, UTCOffset);
85
64
  });
86
65
  }
87
-
88
66
  sendToAdapter(body, installations, pushStatus, config, UTCOffset) {
89
67
  // Check if we have locales in the push body
90
68
  const locales = utils.getLocalesFromPush(body);
91
-
92
69
  if (locales.length > 0) {
93
70
  // Get all tranformed bodies for each locale
94
- const bodiesPerLocales = utils.bodiesPerLocales(body, locales); // Group installations on the specified locales (en, fr, default etc...)
71
+ const bodiesPerLocales = utils.bodiesPerLocales(body, locales);
95
72
 
73
+ // Group installations on the specified locales (en, fr, default etc...)
96
74
  const grouppedInstallations = utils.groupByLocaleIdentifier(installations, locales);
97
75
  const promises = Object.keys(grouppedInstallations).map(locale => {
98
76
  const installations = grouppedInstallations[locale];
@@ -101,18 +79,17 @@ class PushWorker {
101
79
  });
102
80
  return Promise.all(promises);
103
81
  }
104
-
105
82
  if (!utils.isPushIncrementing(body)) {
106
83
  _logger.default.verbose(`Sending push to ${installations.length}`);
107
-
108
84
  return this.adapter.send(body, installations, pushStatus.objectId).then(results => {
109
85
  return pushStatus.trackSent(results, UTCOffset).then(() => results);
110
86
  });
111
- } // Collect the badges to reduce the # of calls
112
-
87
+ }
113
88
 
114
- const badgeInstallationsMap = groupByBadge(installations); // Map the on the badges count and return the send result
89
+ // Collect the badges to reduce the # of calls
90
+ const badgeInstallationsMap = groupByBadge(installations);
115
91
 
92
+ // Map the on the badges count and return the send result
116
93
  const promises = Object.keys(badgeInstallationsMap).map(badge => {
117
94
  const payload = (0, _deepcopy.default)(body);
118
95
  payload.data.badge = parseInt(badge);
@@ -121,10 +98,8 @@ class PushWorker {
121
98
  });
122
99
  return Promise.all(promises);
123
100
  }
124
-
125
101
  }
126
-
127
102
  exports.PushWorker = PushWorker;
128
103
  var _default = PushWorker;
129
104
  exports.default = _default;
130
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QdXNoL1B1c2hXb3JrZXIuanMiXSwibmFtZXMiOlsiZ3JvdXBCeUJhZGdlIiwiaW5zdGFsbGF0aW9ucyIsInJlZHVjZSIsIm1hcCIsImluc3RhbGxhdGlvbiIsImJhZGdlIiwicHVzaCIsIlB1c2hXb3JrZXIiLCJjb25zdHJ1Y3RvciIsInB1c2hBZGFwdGVyIiwic3Vic2NyaWJlckNvbmZpZyIsIkFkYXB0YWJsZUNvbnRyb2xsZXIiLCJ2YWxpZGF0ZUFkYXB0ZXIiLCJQdXNoQWRhcHRlciIsImFkYXB0ZXIiLCJjaGFubmVsIiwiUHVzaFF1ZXVlIiwiZGVmYXVsdFB1c2hDaGFubmVsIiwic3Vic2NyaWJlciIsIlBhcnNlTWVzc2FnZVF1ZXVlIiwiY3JlYXRlU3Vic2NyaWJlciIsInN1YnNjcmliZSIsIm9uIiwibWVzc2FnZVN0ciIsIndvcmtJdGVtIiwiSlNPTiIsInBhcnNlIiwicnVuIiwiYm9keSIsInF1ZXJ5IiwicHVzaFN0YXR1cyIsImFwcGxpY2F0aW9uSWQiLCJVVENPZmZzZXQiLCJjb25maWciLCJDb25maWciLCJnZXQiLCJhdXRoIiwid2hlcmUiLCJ1dGlscyIsImFwcGx5RGV2aWNlVG9rZW5FeGlzdHMiLCJvYmplY3RJZCIsInJlc3QiLCJmaW5kIiwidGhlbiIsInJlc3VsdHMiLCJsZW5ndGgiLCJzZW5kVG9BZGFwdGVyIiwibG9jYWxlcyIsImdldExvY2FsZXNGcm9tUHVzaCIsImJvZGllc1BlckxvY2FsZXMiLCJncm91cHBlZEluc3RhbGxhdGlvbnMiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsInByb21pc2VzIiwiT2JqZWN0Iiwia2V5cyIsImxvY2FsZSIsIlByb21pc2UiLCJhbGwiLCJpc1B1c2hJbmNyZW1lbnRpbmciLCJsb2dnZXIiLCJ2ZXJib3NlIiwic2VuZCIsInRyYWNrU2VudCIsImJhZGdlSW5zdGFsbGF0aW9uc01hcCIsInBheWxvYWQiLCJkYXRhIiwicGFyc2VJbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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O0FBR0QsS0F0QlcsQ0F3Qlo7OztBQUNBLFVBQU1tQixxQkFBcUIsR0FBRy9ELFlBQVksQ0FBQ0MsYUFBRCxDQUExQyxDQXpCWSxDQTJCWjs7QUFDQSxVQUFNbUQsUUFBUSxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWVMscUJBQVosRUFBbUM1RCxHQUFuQyxDQUF1Q0UsS0FBSyxJQUFJO0FBQy9ELFlBQU0yRCxPQUFPLEdBQUcsdUJBQVNwQyxJQUFULENBQWhCO0FBQ0FvQyxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FBYTVELEtBQWIsR0FBcUI2RCxRQUFRLENBQUM3RCxLQUFELENBQTdCO0FBQ0EsWUFBTUosYUFBYSxHQUFHOEQscUJBQXFCLENBQUMxRCxLQUFELENBQTNDO0FBQ0EsYUFBTyxLQUFLeUMsYUFBTCxDQUFtQmtCLE9BQW5CLEVBQTRCL0QsYUFBNUIsRUFBMkM2QixVQUEzQyxFQUF1REcsTUFBdkQsRUFBK0RELFNBQS9ELENBQVA7QUFDRCxLQUxnQixDQUFqQjtBQU1BLFdBQU93QixPQUFPLENBQUNDLEdBQVIsQ0FBWUwsUUFBWixDQUFQO0FBQ0Q7O0FBNUVxQjs7O2VBK0VUN0MsVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IG1hc3RlciB9IGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgUHVzaEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdXNoL1B1c2hBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgcHVzaFN0YXR1c0hhbmRsZXIgfSBmcm9tICcuLi9TdGF0dXNIYW5kbGVyJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyBQdXNoUXVldWUgfSBmcm9tICcuL1B1c2hRdWV1ZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZSgobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICBjb25zdCBiYWRnZSA9IGluc3RhbGxhdGlvbi5iYWRnZSArICcnO1xuICAgIG1hcFtiYWRnZV0gPSBtYXBbYmFkZ2VdIHx8IFtdO1xuICAgIG1hcFtiYWRnZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hXb3JrZXIge1xuICBzdWJzY3JpYmVyOiA/YW55O1xuICBhZGFwdGVyOiBhbnk7XG4gIGNoYW5uZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdXNoQWRhcHRlcjogUHVzaEFkYXB0ZXIsIHN1YnNjcmliZXJDb25maWc6IGFueSA9IHt9KSB7XG4gICAgQWRhcHRhYmxlQ29udHJvbGxlci52YWxpZGF0ZUFkYXB0ZXIocHVzaEFkYXB0ZXIsIHRoaXMsIFB1c2hBZGFwdGVyKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwdXNoQWRhcHRlcjtcblxuICAgIHRoaXMuY2hhbm5lbCA9IHN1YnNjcmliZXJDb25maWcuY2hhbm5lbCB8fCBQdXNoUXVldWUuZGVmYXVsdFB1c2hDaGFubmVsKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gUGFyc2VNZXNzYWdlUXVldWUuY3JlYXRlU3Vic2NyaWJlcihzdWJzY3JpYmVyQ29uZmlnKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgc3Vic2NyaWJlci5zdWJzY3JpYmUodGhpcy5jaGFubmVsKTtcbiAgICAgIHN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgICBjb25zdCB3b3JrSXRlbSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICAgIHRoaXMucnVuKHdvcmtJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bih7IGJvZHksIHF1ZXJ5LCBwdXNoU3RhdHVzLCBhcHBsaWNhdGlvbklkLCBVVENPZmZzZXQgfTogYW55KTogUHJvbWlzZTwqPiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBhdXRoID0gbWFzdGVyKGNvbmZpZyk7XG4gICAgY29uc3Qgd2hlcmUgPSB1dGlscy5hcHBseURldmljZVRva2VuRXhpc3RzKHF1ZXJ5LndoZXJlKTtcbiAgICBkZWxldGUgcXVlcnkud2hlcmU7XG4gICAgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgcHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHF1ZXJ5KS50aGVuKCh7IHJlc3VsdHMgfSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCByZXN1bHRzLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kVG9BZGFwdGVyKFxuICAgIGJvZHk6IGFueSxcbiAgICBpbnN0YWxsYXRpb25zOiBhbnlbXSxcbiAgICBwdXNoU3RhdHVzOiBhbnksXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgVVRDT2Zmc2V0OiA/YW55XG4gICk6IFByb21pc2U8Kj4ge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbG9jYWxlcyBpbiB0aGUgcHVzaCBib2R5XG4gICAgY29uc3QgbG9jYWxlcyA9IHV0aWxzLmdldExvY2FsZXNGcm9tUHVzaChib2R5KTtcbiAgICBpZiAobG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICAgICAgY29uc3QgYm9kaWVzUGVyTG9jYWxlcyA9IHV0aWxzLmJvZGllc1BlckxvY2FsZXMoYm9keSwgbG9jYWxlcyk7XG5cbiAgICAgIC8vIEdyb3VwIGluc3RhbGxhdGlvbnMgb24gdGhlIHNwZWNpZmllZCBsb2NhbGVzIChlbiwgZnIsIGRlZmF1bHQgZXRjLi4uKVxuICAgICAgY29uc3QgZ3JvdXBwZWRJbnN0YWxsYXRpb25zID0gdXRpbHMuZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGdyb3VwcGVkSW5zdGFsbGF0aW9ucykubWFwKGxvY2FsZSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBncm91cHBlZEluc3RhbGxhdGlvbnNbbG9jYWxlXTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJvZGllc1BlckxvY2FsZXNbbG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBTZW5kaW5nIHB1c2ggdG8gJHtpbnN0YWxsYXRpb25zLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2VuZChib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLm9iamVjdElkKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICByZXR1cm4gcHVzaFN0YXR1cy50cmFja1NlbnQocmVzdWx0cywgVVRDT2Zmc2V0KS50aGVuKCgpID0+IHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCB0aGUgYmFkZ2VzIHRvIHJlZHVjZSB0aGUgIyBvZiBjYWxsc1xuICAgIGNvbnN0IGJhZGdlSW5zdGFsbGF0aW9uc01hcCA9IGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKTtcblxuICAgIC8vIE1hcCB0aGUgb24gdGhlIGJhZGdlcyBjb3VudCBhbmQgcmV0dXJuIHRoZSBzZW5kIHJlc3VsdFxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYmFkZ2VJbnN0YWxsYXRpb25zTWFwKS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGRlZXBjb3B5KGJvZHkpO1xuICAgICAgcGF5bG9hZC5kYXRhLmJhZGdlID0gcGFyc2VJbnQoYmFkZ2UpO1xuICAgICAgY29uc3QgaW5zdGFsbGF0aW9ucyA9IGJhZGdlSW5zdGFsbGF0aW9uc01hcFtiYWRnZV07XG4gICAgICByZXR1cm4gdGhpcy5zZW5kVG9BZGFwdGVyKHBheWxvYWQsIGluc3RhbGxhdGlvbnMsIHB1c2hTdGF0dXMsIGNvbmZpZywgVVRDT2Zmc2V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hXb3JrZXI7XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJncm91cEJ5QmFkZ2UiLCJpbnN0YWxsYXRpb25zIiwicmVkdWNlIiwibWFwIiwiaW5zdGFsbGF0aW9uIiwiYmFkZ2UiLCJwdXNoIiwiUHVzaFdvcmtlciIsImNvbnN0cnVjdG9yIiwicHVzaEFkYXB0ZXIiLCJzdWJzY3JpYmVyQ29uZmlnIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsInZhbGlkYXRlQWRhcHRlciIsIlB1c2hBZGFwdGVyIiwiYWRhcHRlciIsImNoYW5uZWwiLCJQdXNoUXVldWUiLCJkZWZhdWx0UHVzaENoYW5uZWwiLCJzdWJzY3JpYmVyIiwiUGFyc2VNZXNzYWdlUXVldWUiLCJjcmVhdGVTdWJzY3JpYmVyIiwic3Vic2NyaWJlIiwib24iLCJtZXNzYWdlU3RyIiwid29ya0l0ZW0iLCJKU09OIiwicGFyc2UiLCJydW4iLCJib2R5IiwicXVlcnkiLCJwdXNoU3RhdHVzIiwiYXBwbGljYXRpb25JZCIsIlVUQ09mZnNldCIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsImF1dGgiLCJtYXN0ZXIiLCJ3aGVyZSIsInV0aWxzIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwib2JqZWN0SWQiLCJyZXN0IiwiZmluZCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwic2VuZFRvQWRhcHRlciIsImxvY2FsZXMiLCJnZXRMb2NhbGVzRnJvbVB1c2giLCJib2RpZXNQZXJMb2NhbGVzIiwiZ3JvdXBwZWRJbnN0YWxsYXRpb25zIiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJwcm9taXNlcyIsIk9iamVjdCIsImtleXMiLCJsb2NhbGUiLCJQcm9taXNlIiwiYWxsIiwiaXNQdXNoSW5jcmVtZW50aW5nIiwibG9nZ2VyIiwidmVyYm9zZSIsInNlbmQiLCJ0cmFja1NlbnQiLCJiYWRnZUluc3RhbGxhdGlvbnNNYXAiLCJwYXlsb2FkIiwiZGVlcGNvcHkiLCJkYXRhIiwicGFyc2VJbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC9QdXNoV29ya2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IG1hc3RlciB9IGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgUHVzaEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdXNoL1B1c2hBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgcHVzaFN0YXR1c0hhbmRsZXIgfSBmcm9tICcuLi9TdGF0dXNIYW5kbGVyJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyBQdXNoUXVldWUgfSBmcm9tICcuL1B1c2hRdWV1ZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZSgobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICBjb25zdCBiYWRnZSA9IGluc3RhbGxhdGlvbi5iYWRnZSArICcnO1xuICAgIG1hcFtiYWRnZV0gPSBtYXBbYmFkZ2VdIHx8IFtdO1xuICAgIG1hcFtiYWRnZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hXb3JrZXIge1xuICBzdWJzY3JpYmVyOiA/YW55O1xuICBhZGFwdGVyOiBhbnk7XG4gIGNoYW5uZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdXNoQWRhcHRlcjogUHVzaEFkYXB0ZXIsIHN1YnNjcmliZXJDb25maWc6IGFueSA9IHt9KSB7XG4gICAgQWRhcHRhYmxlQ29udHJvbGxlci52YWxpZGF0ZUFkYXB0ZXIocHVzaEFkYXB0ZXIsIHRoaXMsIFB1c2hBZGFwdGVyKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwdXNoQWRhcHRlcjtcblxuICAgIHRoaXMuY2hhbm5lbCA9IHN1YnNjcmliZXJDb25maWcuY2hhbm5lbCB8fCBQdXNoUXVldWUuZGVmYXVsdFB1c2hDaGFubmVsKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gUGFyc2VNZXNzYWdlUXVldWUuY3JlYXRlU3Vic2NyaWJlcihzdWJzY3JpYmVyQ29uZmlnKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgc3Vic2NyaWJlci5zdWJzY3JpYmUodGhpcy5jaGFubmVsKTtcbiAgICAgIHN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgICBjb25zdCB3b3JrSXRlbSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICAgIHRoaXMucnVuKHdvcmtJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bih7IGJvZHksIHF1ZXJ5LCBwdXNoU3RhdHVzLCBhcHBsaWNhdGlvbklkLCBVVENPZmZzZXQgfTogYW55KTogUHJvbWlzZTwqPiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBhdXRoID0gbWFzdGVyKGNvbmZpZyk7XG4gICAgY29uc3Qgd2hlcmUgPSB1dGlscy5hcHBseURldmljZVRva2VuRXhpc3RzKHF1ZXJ5LndoZXJlKTtcbiAgICBkZWxldGUgcXVlcnkud2hlcmU7XG4gICAgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgcHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHF1ZXJ5KS50aGVuKCh7IHJlc3VsdHMgfSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCByZXN1bHRzLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kVG9BZGFwdGVyKFxuICAgIGJvZHk6IGFueSxcbiAgICBpbnN0YWxsYXRpb25zOiBhbnlbXSxcbiAgICBwdXNoU3RhdHVzOiBhbnksXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgVVRDT2Zmc2V0OiA/YW55XG4gICk6IFByb21pc2U8Kj4ge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbG9jYWxlcyBpbiB0aGUgcHVzaCBib2R5XG4gICAgY29uc3QgbG9jYWxlcyA9IHV0aWxzLmdldExvY2FsZXNGcm9tUHVzaChib2R5KTtcbiAgICBpZiAobG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICAgICAgY29uc3QgYm9kaWVzUGVyTG9jYWxlcyA9IHV0aWxzLmJvZGllc1BlckxvY2FsZXMoYm9keSwgbG9jYWxlcyk7XG5cbiAgICAgIC8vIEdyb3VwIGluc3RhbGxhdGlvbnMgb24gdGhlIHNwZWNpZmllZCBsb2NhbGVzIChlbiwgZnIsIGRlZmF1bHQgZXRjLi4uKVxuICAgICAgY29uc3QgZ3JvdXBwZWRJbnN0YWxsYXRpb25zID0gdXRpbHMuZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGdyb3VwcGVkSW5zdGFsbGF0aW9ucykubWFwKGxvY2FsZSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBncm91cHBlZEluc3RhbGxhdGlvbnNbbG9jYWxlXTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJvZGllc1BlckxvY2FsZXNbbG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBTZW5kaW5nIHB1c2ggdG8gJHtpbnN0YWxsYXRpb25zLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2VuZChib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLm9iamVjdElkKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICByZXR1cm4gcHVzaFN0YXR1cy50cmFja1NlbnQocmVzdWx0cywgVVRDT2Zmc2V0KS50aGVuKCgpID0+IHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCB0aGUgYmFkZ2VzIHRvIHJlZHVjZSB0aGUgIyBvZiBjYWxsc1xuICAgIGNvbnN0IGJhZGdlSW5zdGFsbGF0aW9uc01hcCA9IGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKTtcblxuICAgIC8vIE1hcCB0aGUgb24gdGhlIGJhZGdlcyBjb3VudCBhbmQgcmV0dXJuIHRoZSBzZW5kIHJlc3VsdFxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYmFkZ2VJbnN0YWxsYXRpb25zTWFwKS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGRlZXBjb3B5KGJvZHkpO1xuICAgICAgcGF5bG9hZC5kYXRhLmJhZGdlID0gcGFyc2VJbnQoYmFkZ2UpO1xuICAgICAgY29uc3QgaW5zdGFsbGF0aW9ucyA9IGJhZGdlSW5zdGFsbGF0aW9uc01hcFtiYWRnZV07XG4gICAgICByZXR1cm4gdGhpcy5zZW5kVG9BZGFwdGVyKHBheWxvYWQsIGluc3RhbGxhdGlvbnMsIHB1c2hTdGF0dXMsIGNvbmZpZywgVVRDT2Zmc2V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hXb3JrZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBK0I7QUFBQTtBQUFBO0FBWC9CO0FBYUEsU0FBU0EsWUFBWSxDQUFDQyxhQUFhLEVBQUU7RUFDbkMsT0FBT0EsYUFBYSxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsR0FBRyxFQUFFQyxZQUFZLEtBQUs7SUFDakQsTUFBTUMsS0FBSyxHQUFHRCxZQUFZLENBQUNDLEtBQUssR0FBRyxFQUFFO0lBQ3JDRixHQUFHLENBQUNFLEtBQUssQ0FBQyxHQUFHRixHQUFHLENBQUNFLEtBQUssQ0FBQyxJQUFJLEVBQUU7SUFDN0JGLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDLENBQUNDLElBQUksQ0FBQ0YsWUFBWSxDQUFDO0lBQzdCLE9BQU9ELEdBQUc7RUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUjtBQUVPLE1BQU1JLFVBQVUsQ0FBQztFQUt0QkMsV0FBVyxDQUFDQyxXQUF3QixFQUFFQyxnQkFBcUIsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNoRUMsNEJBQW1CLENBQUNDLGVBQWUsQ0FBQ0gsV0FBVyxFQUFFLElBQUksRUFBRUksd0JBQVcsQ0FBQztJQUNuRSxJQUFJLENBQUNDLE9BQU8sR0FBR0wsV0FBVztJQUUxQixJQUFJLENBQUNNLE9BQU8sR0FBR0wsZ0JBQWdCLENBQUNLLE9BQU8sSUFBSUMsb0JBQVMsQ0FBQ0Msa0JBQWtCLEVB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
package/lib/Push/utils.js CHANGED
@@ -3,44 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isPushIncrementing = isPushIncrementing;
7
- exports.getLocalesFromPush = getLocalesFromPush;
8
- exports.transformPushBodyForLocale = transformPushBodyForLocale;
9
- exports.stripLocalesFromBody = stripLocalesFromBody;
6
+ exports.applyDeviceTokenExists = applyDeviceTokenExists;
10
7
  exports.bodiesPerLocales = bodiesPerLocales;
8
+ exports.getLocalesFromPush = getLocalesFromPush;
11
9
  exports.groupByLocaleIdentifier = groupByLocaleIdentifier;
10
+ exports.isPushIncrementing = isPushIncrementing;
11
+ exports.stripLocalesFromBody = stripLocalesFromBody;
12
+ exports.transformPushBodyForLocale = transformPushBodyForLocale;
12
13
  exports.validatePushType = validatePushType;
13
- exports.applyDeviceTokenExists = applyDeviceTokenExists;
14
-
15
14
  var _node = _interopRequireDefault(require("parse/node"));
16
-
17
15
  var _deepcopy = _interopRequireDefault(require("deepcopy"));
18
-
19
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
17
  function isPushIncrementing(body) {
22
18
  if (!body.data || !body.data.badge) {
23
19
  return false;
24
20
  }
25
-
26
21
  const badge = body.data.badge;
27
-
28
22
  if (typeof badge == 'string' && badge.toLowerCase() == 'increment') {
29
23
  return true;
30
24
  }
31
-
32
25
  return typeof badge == 'object' && typeof badge.__op == 'string' && badge.__op.toLowerCase() == 'increment' && Number(badge.amount);
33
26
  }
34
-
35
27
  const localizableKeys = ['alert', 'title'];
36
-
37
28
  function getLocalesFromPush(body) {
38
29
  const data = body.data;
39
-
40
30
  if (!data) {
41
31
  return [];
42
32
  }
43
-
44
33
  return [...new Set(Object.keys(data).reduce((memo, key) => {
45
34
  localizableKeys.forEach(localizableKey => {
46
35
  if (key.indexOf(`${localizableKey}-`) == 0) {
@@ -50,30 +39,24 @@ function getLocalesFromPush(body) {
50
39
  return memo;
51
40
  }, []))];
52
41
  }
53
-
54
42
  function transformPushBodyForLocale(body, locale) {
55
43
  const data = body.data;
56
-
57
44
  if (!data) {
58
45
  return body;
59
46
  }
60
-
61
47
  body = (0, _deepcopy.default)(body);
62
48
  localizableKeys.forEach(key => {
63
49
  const localeValue = body.data[`${key}-${locale}`];
64
-
65
50
  if (localeValue) {
66
51
  body.data[key] = localeValue;
67
52
  }
68
53
  });
69
54
  return stripLocalesFromBody(body);
70
55
  }
71
-
72
56
  function stripLocalesFromBody(body) {
73
57
  if (!body.data) {
74
58
  return body;
75
59
  }
76
-
77
60
  Object.keys(body.data).forEach(key => {
78
61
  localizableKeys.forEach(localizableKey => {
79
62
  if (key.indexOf(`${localizableKey}-`) == 0) {
@@ -83,18 +66,16 @@ function stripLocalesFromBody(body) {
83
66
  });
84
67
  return body;
85
68
  }
86
-
87
69
  function bodiesPerLocales(body, locales = []) {
88
70
  // Get all tranformed bodies for each locale
89
71
  const result = locales.reduce((memo, locale) => {
90
72
  memo[locale] = transformPushBodyForLocale(body, locale);
91
73
  return memo;
92
- }, {}); // Set the default locale, with the stripped body
93
-
74
+ }, {});
75
+ // Set the default locale, with the stripped body
94
76
  result.default = stripLocalesFromBody(body);
95
77
  return result;
96
78
  }
97
-
98
79
  function groupByLocaleIdentifier(installations, locales = []) {
99
80
  return installations.reduce((map, installation) => {
100
81
  let added = false;
@@ -102,58 +83,48 @@ function groupByLocaleIdentifier(installations, locales = []) {
102
83
  if (added) {
103
84
  return;
104
85
  }
105
-
106
86
  if (installation.localeIdentifier && installation.localeIdentifier.indexOf(locale) === 0) {
107
87
  added = true;
108
88
  map[locale] = map[locale] || [];
109
89
  map[locale].push(installation);
110
90
  }
111
91
  });
112
-
113
92
  if (!added) {
114
93
  map.default.push(installation);
115
94
  }
116
-
117
95
  return map;
118
96
  }, {
119
97
  default: []
120
98
  });
121
99
  }
100
+
122
101
  /**
123
102
  * Check whether the deviceType parameter in qury condition is valid or not.
124
103
  * @param {Object} where A query condition
125
104
  * @param {Array} validPushTypes An array of valid push types(string)
126
105
  */
127
-
128
-
129
106
  function validatePushType(where = {}, validPushTypes = []) {
130
107
  var deviceTypeField = where.deviceType || {};
131
108
  var deviceTypes = [];
132
-
133
109
  if (typeof deviceTypeField === 'string') {
134
110
  deviceTypes.push(deviceTypeField);
135
111
  } else if (Array.isArray(deviceTypeField['$in'])) {
136
112
  deviceTypes.concat(deviceTypeField['$in']);
137
113
  }
138
-
139
114
  for (var i = 0; i < deviceTypes.length; i++) {
140
115
  var deviceType = deviceTypes[i];
141
-
142
116
  if (validPushTypes.indexOf(deviceType) < 0) {
143
117
  throw new _node.default.Error(_node.default.Error.PUSH_MISCONFIGURED, deviceType + ' is not supported push type.');
144
118
  }
145
119
  }
146
120
  }
147
-
148
121
  function applyDeviceTokenExists(where) {
149
122
  where = (0, _deepcopy.default)(where);
150
-
151
123
  if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
152
124
  where['deviceToken'] = {
153
125
  $exists: true
154
126
  };
155
127
  }
156
-
157
128
  return where;
158
129
  }
159
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QdXNoL3V0aWxzLmpzIl0sIm5hbWVzIjpbImlzUHVzaEluY3JlbWVudGluZyIsImJvZHkiLCJkYXRhIiwiYmFkZ2UiLCJ0b0xvd2VyQ2FzZSIsIl9fb3AiLCJOdW1iZXIiLCJhbW91bnQiLCJsb2NhbGl6YWJsZUtleXMiLCJnZXRMb2NhbGVzRnJvbVB1c2giLCJTZXQiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwibWVtbyIsImtleSIsImZvckVhY2giLCJsb2NhbGl6YWJsZUtleSIsImluZGV4T2YiLCJwdXNoIiwic2xpY2UiLCJsZW5ndGgiLCJ0cmFuc2Zvcm1QdXNoQm9keUZvckxvY2FsZSIsImxvY2FsZSIsImxvY2FsZVZhbHVlIiwic3RyaXBMb2NhbGVzRnJvbUJvZHkiLCJib2RpZXNQZXJMb2NhbGVzIiwibG9jYWxlcyIsInJlc3VsdCIsImRlZmF1bHQiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsImluc3RhbGxhdGlvbnMiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJhZGRlZCIsImxvY2FsZUlkZW50aWZpZXIiLCJ2YWxpZGF0ZVB1c2hUeXBlIiwid2hlcmUiLCJ2YWxpZFB1c2hUeXBlcyIsImRldmljZVR5cGVGaWVsZCIsImRldmljZVR5cGUiLCJkZXZpY2VUeXBlcyIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImkiLCJQYXJzZSIsIkVycm9yIiwiUFVTSF9NSVNDT05GSUdVUkVEIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIiRleGlzdHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFFTyxTQUFTQSxrQkFBVCxDQUE0QkMsSUFBNUIsRUFBa0M7QUFDdkMsTUFBSSxDQUFDQSxJQUFJLENBQUNDLElBQU4sSUFBYyxDQUFDRCxJQUFJLENBQUNDLElBQUwsQ0FBVUMsS0FBN0IsRUFBb0M7QUFDbEMsV0FBTyxLQUFQO0FB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LENBQUwsR0FBdUI7QUFBRWdCLE1BQUFBLE9BQU8sRUFBRTtBQUFYLEtBQXZCO0FBQ0Q7O0FBQ0QsU0FBT2hCLEtBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkge1xuICBpZiAoIWJvZHkuZGF0YSB8fCAhYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYmFkZ2UgPSBib2R5LmRhdGEuYmFkZ2U7XG4gIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgYmFkZ2UgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgYmFkZ2UuX19vcCA9PSAnc3RyaW5nJyAmJlxuICAgIGJhZGdlLl9fb3AudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50JyAmJlxuICAgIE51bWJlcihiYWRnZS5hbW91bnQpXG4gICk7XG59XG5cbmNvbnN0IGxvY2FsaXphYmxlS2V5cyA9IFsnYWxlcnQnLCAndGl0bGUnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZXNGcm9tUHVzaChib2R5KSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgICAgICBsb2NhbGl6YWJsZUtleXMuZm9yRWFjaChsb2NhbGl6YWJsZUtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgICAgICBtZW1vLnB1c2goa2V5LnNsaWNlKGxvY2FsaXphYmxlS2V5Lmxlbmd0aCArIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH0sIFtdKVxuICAgICksXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1QdXNoQm9keUZvckxvY2FsZShib2R5LCBsb2NhbGUpIHtcbiAgY29uc3QgZGF0YSA9IGJvZHkuZGF0YTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgYm9keSA9IGRlZXBjb3B5KGJvZHkpO1xuICBsb2NhbGl6YWJsZUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IGxvY2FsZVZhbHVlID0gYm9keS5kYXRhW2Ake2tleX0tJHtsb2NhbGV9YF07XG4gICAgaWYgKGxvY2FsZVZhbHVlKSB7XG4gICAgICBib2R5LmRhdGFba2V5XSA9IGxvY2FsZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpIHtcbiAgaWYgKCFib2R5LmRhdGEpIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuICBPYmplY3Qua2V5cyhib2R5LmRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICBsb2NhbGl6YWJsZUtleXMuZm9yRWFjaChsb2NhbGl6YWJsZUtleSA9PiB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoYCR7bG9jYWxpemFibGVLZXl9LWApID09IDApIHtcbiAgICAgICAgZGVsZXRlIGJvZHkuZGF0YVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib2RpZXNQZXJMb2NhbGVzKGJvZHksIGxvY2FsZXMgPSBbXSkge1xuICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICBjb25zdCByZXN1bHQgPSBsb2NhbGVzLnJlZHVjZSgobWVtbywgbG9jYWxlKSA9PiB7XG4gICAgbWVtb1tsb2NhbGVdID0gdHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUoYm9keSwgbG9jYWxlKTtcbiAgICByZXR1cm4gbWVtbztcbiAgfSwge30pO1xuICAvLyBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlLCB3aXRoIHRoZSBzdHJpcHBlZCBib2R5XG4gIHJlc3VsdC5kZWZhdWx0ID0gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5TG9jYWxlSWRlbnRpZmllcihpbnN0YWxsYXRpb25zLCBsb2NhbGVzID0gW10pIHtcbiAgcmV0dXJuIGluc3RhbGxhdGlvbnMucmVkdWNlKFxuICAgIChtYXAsIGluc3RhbGxhdGlvbikgPT4ge1xuICAgICAgbGV0IGFkZGVkID0gZmFsc2U7XG4gICAgICBsb2NhbGVzLmZvckVhY2gobG9jYWxlID0+IHtcbiAgICAgICAgaWYgKGFkZGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YWxsYXRpb24ubG9jYWxlSWRlbnRpZmllciAmJiBpbnN0YWxsYXRpb24ubG9jYWxlSWRlbnRpZmllci5pbmRleE9mKGxvY2FsZSkgPT09IDApIHtcbiAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgbWFwW2xvY2FsZV0gPSBtYXBbbG9jYWxlXSB8fCBbXTtcbiAgICAgICAgICBtYXBbbG9jYWxlXS5wdXNoKGluc3RhbGxhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFhZGRlZCkge1xuICAgICAgICBtYXAuZGVmYXVsdC5wdXNoKGluc3RhbGxhdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sXG4gICAgeyBkZWZhdWx0OiBbXSB9XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlVHlwZSBwYXJhbWV0ZXIgaW4gcXVyeSBjb25kaXRpb24gaXMgdmFsaWQgb3Igbm90LlxuICogQHBhcmFtIHtPYmplY3R9IHdoZXJlIEEgcXVlcnkgY29uZGl0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSB2YWxpZFB1c2hUeXBlcyBBbiBhcnJheSBvZiB2YWxpZCBwdXNoIHR5cGVzKHN0cmluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHVzaFR5cGUod2hlcmUgPSB7fSwgdmFsaWRQdXNoVHlwZXMgPSBbXSkge1xuICB2YXIgZGV2aWNlVHlwZUZpZWxkID0gd2hlcmUuZGV2aWNlVHlwZSB8fCB7fTtcbiAgdmFyIGRldmljZVR5cGVzID0gW107XG4gIGlmICh0eXBlb2YgZGV2aWNlVHlwZUZpZWxkID09PSAnc3RyaW5nJykge1xuICAgIGRldmljZVR5cGVzLnB1c2goZGV2aWNlVHlwZUZpZWxkKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRldmljZVR5cGVGaWVsZFsnJGluJ10pKSB7XG4gICAgZGV2aWNlVHlwZXMuY29uY2F0KGRldmljZVR5cGVGaWVsZFsnJGluJ10pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGV2aWNlVHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGV2aWNlVHlwZSA9IGRldmljZVR5cGVzW2ldO1xuICAgIGlmICh2YWxpZFB1c2hUeXBlcy5pbmRleE9mKGRldmljZVR5cGUpIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgIGRldmljZVR5cGUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgcHVzaCB0eXBlLidcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURldmljZVRva2VuRXhpc3RzKHdoZXJlKSB7XG4gIHdoZXJlID0gZGVlcGNvcHkod2hlcmUpO1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aGVyZSwgJ2RldmljZVRva2VuJykpIHtcbiAgICB3aGVyZVsnZGV2aWNlVG9rZW4nXSA9IHsgJGV4aXN0czogdHJ1ZSB9O1xuICB9XG4gIHJldHVybiB3aGVyZTtcbn1cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1B1c2hJbmNyZW1lbnRpbmciLCJib2R5IiwiZGF0YSIsImJhZGdlIiwidG9Mb3dlckNhc2UiLCJfX29wIiwiTnVtYmVyIiwiYW1vdW50IiwibG9jYWxpemFibGVLZXlzIiwiZ2V0TG9jYWxlc0Zyb21QdXNoIiwiU2V0IiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsIm1lbW8iLCJrZXkiLCJmb3JFYWNoIiwibG9jYWxpemFibGVLZXkiLCJpbmRleE9mIiwicHVzaCIsInNsaWNlIiwibGVuZ3RoIiwidHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUiLCJsb2NhbGUiLCJkZWVwY29weSIsImxvY2FsZVZhbHVlIiwic3RyaXBMb2NhbGVzRnJvbUJvZHkiLCJib2RpZXNQZXJMb2NhbGVzIiwibG9jYWxlcyIsInJlc3VsdCIsImRlZmF1bHQiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsImluc3RhbGxhdGlvbnMiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJhZGRlZCIsImxvY2FsZUlkZW50aWZpZXIiLCJ2YWxpZGF0ZVB1c2hUeXBlIiwid2hlcmUiLCJ2YWxpZFB1c2hUeXBlcyIsImRldmljZVR5cGVGaWVsZCIsImRldmljZVR5cGUiLCJkZXZpY2VUeXBlcyIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImkiLCJQYXJzZSIsIkVycm9yIiwiUFVTSF9NSVNDT05GSUdVUkVEIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIiRleGlzdHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgZGVlcGNvcHkgZnJvbSAnZGVlcGNvcHknO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQdXNoSW5jcmVtZW50aW5nKGJvZHkpIHtcbiAgaWYgKCFib2R5LmRhdGEgfHwgIWJvZHkuZGF0YS5iYWRnZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGJhZGdlID0gYm9keS5kYXRhLmJhZGdlO1xuICBpZiAodHlwZW9mIGJhZGdlID09ICdzdHJpbmcnICYmIGJhZGdlLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIGJhZGdlLl9fb3AgPT0gJ3N0cmluZycgJiZcbiAgICBiYWRnZS5fX29wLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcgJiZcbiAgICBOdW1iZXIoYmFkZ2UuYW1vdW50KVxuICApO1xufVxuXG5jb25zdCBsb2NhbGl6YWJsZUtleXMgPSBbJ2FsZXJ0JywgJ3RpdGxlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVzRnJvbVB1c2goYm9keSkge1xuICBjb25zdCBkYXRhID0gYm9keS5kYXRhO1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KFxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICAgICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihgJHtsb2NhbGl6YWJsZUtleX0tYCkgPT0gMCkge1xuICAgICAgICAgICAgbWVtby5wdXNoKGtleS5zbGljZShsb2NhbGl6YWJsZUtleS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICB9LCBbXSlcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUoYm9keSwgbG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG4gIGJvZHkgPSBkZWVwY29weShib2R5KTtcbiAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgT2JqZWN0LmtleXMoYm9keS5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBib2R5LmRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9kaWVzUGVyTG9jYWxlcyhib2R5LCBsb2NhbGVzID0gW10pIHtcbiAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgY29uc3QgcmVzdWx0ID0gbG9jYWxlcy5yZWR1Y2UoKG1lbW8sIGxvY2FsZSkgPT4ge1xuICAgIG1lbW9bbG9jYWxlXSA9IHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSwgd2l0aCB0aGUgc3RyaXBwZWQgYm9keVxuICByZXN1bHQuZGVmYXVsdCA9IHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyA9IFtdKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZShcbiAgICAobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIgJiYgaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIuaW5kZXhPZihsb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgICAgbWFwW2xvY2FsZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbWFwLmRlZmF1bHQucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIHsgZGVmYXVsdDogW10gfVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBkZXZpY2VUeXBlICsgJyBpcyBub3Qgc3VwcG9ydGVkIHB1c2ggdHlwZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IGRlZXBjb3B5KHdoZXJlKTtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2hlcmUsICdkZXZpY2VUb2tlbicpKSB7XG4gICAgd2hlcmVbJ2RldmljZVRva2VuJ10gPSB7ICRleGlzdHM6IHRydWUgfTtcbiAgfVxuICByZXR1cm4gd2hlcmU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQWdDO0FBRXpCLFNBQVNBLGtCQUFrQixDQUFD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