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,67 +4,49 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.AggregateRouter = void 0;
7
-
8
7
  var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
9
-
10
8
  var _rest = _interopRequireDefault(require("../rest"));
11
-
12
9
  var middleware = _interopRequireWildcard(require("../middlewares"));
13
-
14
10
  var _node = _interopRequireDefault(require("parse/node"));
15
-
16
11
  var _UsersRouter = _interopRequireDefault(require("./UsersRouter"));
17
-
18
- var _Deprecator = _interopRequireDefault(require("../Deprecator/Deprecator"));
19
-
20
12
  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); }
21
-
22
13
  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; }
23
-
24
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
15
  class AggregateRouter extends _ClassesRouter.default {
27
16
  handleFind(req) {
28
17
  const body = Object.assign(req.body, _ClassesRouter.default.JSONFromQuery(req.query));
29
18
  const options = {};
30
-
31
19
  if (body.distinct) {
32
20
  options.distinct = String(body.distinct);
33
21
  }
34
-
35
22
  if (body.hint) {
36
23
  options.hint = body.hint;
37
24
  delete body.hint;
38
25
  }
39
-
40
26
  if (body.explain) {
41
27
  options.explain = body.explain;
42
28
  delete body.explain;
43
29
  }
44
-
45
30
  if (body.readPreference) {
46
31
  options.readPreference = body.readPreference;
47
32
  delete body.readPreference;
48
33
  }
49
-
50
34
  options.pipeline = AggregateRouter.getPipeline(body);
51
-
52
35
  if (typeof body.where === 'string') {
53
36
  body.where = JSON.parse(body.where);
54
37
  }
55
-
56
38
  return _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context).then(response => {
57
39
  for (const result of response.results) {
58
40
  if (typeof result === 'object') {
59
41
  _UsersRouter.default.removeHiddenProperties(result);
60
42
  }
61
43
  }
62
-
63
44
  return {
64
45
  response
65
46
  };
66
47
  });
67
48
  }
49
+
68
50
  /* Builds a pipeline from the body. Originally the body could be passed as a single object,
69
51
  * and now we support many options
70
52
  *
@@ -90,11 +72,8 @@ class AggregateRouter extends _ClassesRouter.default {
90
72
  * }
91
73
  *
92
74
  */
93
-
94
-
95
75
  static getPipeline(body) {
96
76
  let pipeline = body.pipeline || body;
97
-
98
77
  if (!Array.isArray(pipeline)) {
99
78
  pipeline = Object.keys(pipeline).map(key => {
100
79
  return {
@@ -102,57 +81,41 @@ class AggregateRouter extends _ClassesRouter.default {
102
81
  };
103
82
  });
104
83
  }
105
-
106
84
  return pipeline.map(stage => {
107
85
  const keys = Object.keys(stage);
108
-
109
- if (keys.length != 1) {
110
- throw new Error(`Pipeline stages should only have one key found ${keys.join(', ')}`);
86
+ if (keys.length !== 1) {
87
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Pipeline stages should only have one key but found ${keys.join(', ')}.`);
111
88
  }
112
-
113
89
  return AggregateRouter.transformStage(keys[0], stage);
114
90
  });
115
91
  }
116
-
117
92
  static transformStage(stageName, stage) {
118
- if (stageName === 'group') {
93
+ const skipKeys = ['distinct', 'where'];
94
+ if (skipKeys.includes(stageName)) {
95
+ return;
96
+ }
97
+ if (stageName[0] !== '$') {
98
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid aggregate stage '${stageName}'.`);
99
+ }
100
+ if (stageName === '$group') {
119
101
  if (Object.prototype.hasOwnProperty.call(stage[stageName], 'objectId')) {
120
- _Deprecator.default.logRuntimeDeprecation({
121
- usage: 'The use of objectId in aggregation stage $group',
122
- solution: 'Use _id instead.'
123
- });
124
-
125
- stage[stageName]._id = stage[stageName].objectId;
126
- delete stage[stageName].objectId;
102
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Cannot use 'objectId' in aggregation stage $group.`);
127
103
  }
128
-
129
104
  if (!Object.prototype.hasOwnProperty.call(stage[stageName], '_id')) {
130
105
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid parameter for query: group. Missing key _id`);
131
106
  }
132
107
  }
133
-
134
- if (stageName[0] !== '$') {
135
- _Deprecator.default.logRuntimeDeprecation({
136
- usage: "Using aggregation stages without a leading '$'",
137
- solution: `Try $${stageName} instead.`
138
- });
139
- }
140
-
141
- const key = stageName[0] === '$' ? stageName : `$${stageName}`;
142
108
  return {
143
- [key]: stage[stageName]
109
+ [stageName]: stage[stageName]
144
110
  };
145
111
  }
146
-
147
112
  mountRoutes() {
148
113
  this.route('GET', '/aggregate/:className', middleware.promiseEnforceMasterKeyAccess, req => {
149
114
  return this.handleFind(req);
150
115
  });
151
116
  }
152
-
153
117
  }
154
-
155
118
  exports.AggregateRouter = AggregateRouter;
156
119
  var _default = AggregateRouter;
157
120
  exports.default = _default;
158
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0FnZ3JlZ2F0ZVJvdXRlci5qcyJdLCJuYW1lcyI6WyJBZ2dyZWdhdGVSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiaGFuZGxlRmluZCIsInJlcSIsImJvZHkiLCJPYmplY3QiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwiZGlzdGluY3QiLCJTdHJpbmciLCJoaW50IiwiZXhwbGFpbiIsInJlYWRQcmVmZXJlbmNlIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwicmVzdCIsImZpbmQiLCJjb25maWciLCJhdXRoIiwiY2xhc3NOYW1lIiwiaW5mbyIsImNsaWVudFNESyIsImNvbnRleHQiLCJ0aGVuIiwicmVzcG9uc2UiLCJyZXN1bHQiLCJyZXN1bHRzIiwiVXNlcnNSb3V0ZXIiLCJyZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzIiwiQXJyYXkiLCJpc0FycmF5Iiwia2V5cyIsIm1hcCIsImtleSIsInN0YWdlIiwibGVuZ3RoIiwiRXJyb3IiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJEZXByZWNhdG9yIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwidXNhZ2UiLCJzb2x1dGlvbiIsIl9pZCIsIm9iamVjdElkIiwiUGFyc2UiLCJJTlZBTElEX1FVRVJZIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsIm1pZGRsZXdhcmUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVPLE1BQU1BLGVBQU4sU0FBOEJDLHNCQUE5QixDQUE0QztBQUNqREMsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQU07QUFDZCxVQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFB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QUcsUUFBT1AsU0FBVTtBQUZHLE9BQWpDO0FBSUQ7O0FBQ0QsVUFBTU4sR0FBRyxHQUFHTSxTQUFTLENBQUMsQ0FBRCxDQUFULEtBQWlCLEdBQWpCLEdBQXVCQSxTQUF2QixHQUFvQyxJQUFHQSxTQUFVLEVBQTdEO0FBQ0EsV0FBTztBQUFFLE9BQUNOLEdBQUQsR0FBT0MsS0FBSyxDQUFDSyxTQUFEO0FBQWQsS0FBUDtBQUNEOztBQUVEWSxFQUFBQSxXQUFXLEdBQUc7QUFDWixTQUFLQyxLQUFMLENBQVcsS0FBWCxFQUFrQix1QkFBbEIsRUFBMkNDLFVBQVUsQ0FBQ0MsNkJBQXRELEVBQXFGeEQsR0FBRyxJQUFJO0FBQzFGLGFBQU8sS0FBS0QsVUFBTCxDQUFnQkMsR0FBaEIsQ0FBUDtBQUNELEtBRkQ7QUFHRDs7QUFySGdEOzs7ZUF3SHBDSCxlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsYXNzZXNSb3V0ZXIgZnJvbSAnLi9DbGFzc2VzUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgVXNlcnNSb3V0ZXIgZnJvbSAnLi9Vc2Vyc1JvdXRlcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuLi9EZXByZWNhdG9yL0RlcHJlY2F0b3InO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHksIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuZGlzdGluY3QpIHtcbiAgICAgIG9wdGlvbnMuZGlzdGluY3QgPSBTdHJpbmcoYm9keS5kaXN0aW5jdCk7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQpIHtcbiAgICAgIG9wdGlvbnMuaGludCA9IGJvZHkuaGludDtcbiAgICAgIGRlbGV0ZSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICAgIGRlbGV0ZSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICAgIGRlbGV0ZSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBvcHRpb25zLnBpcGVsaW5lID0gQWdncmVnYXRlUm91dGVyLmdldFBpcGVsaW5lKGJvZHkpO1xuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB0aGlzLmNsYXNzTmFtZShyZXEpLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgVXNlcnNSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXNwb25zZSB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBCdWlsZHMgYSBwaXBlbGluZSBmcm9tIHRoZSBib2R5LiBPcmlnaW5hbGx5IHRoZSBib2R5IGNvdWxkIGJlIHBhc3NlZCBhcyBhIHNpbmdsZSBvYmplY3QsXG4gICAqIGFuZCBub3cgd2Ugc3VwcG9ydCBtYW55IG9wdGlvbnNcbiAgICpcbiAgICogQXJyYXlcbiAgICpcbiAgICogYm9keTogW3tcbiAgICogICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiB9XVxuICAgKlxuICAgKiBPYmplY3RcbiAgICpcbiAgICogYm9keToge1xuICAgKiAgIGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqIH1cbiAgICpcbiAgICpcbiAgICogUGlwZWxpbmUgT3BlcmF0b3Igd2l0aCBhbiBBcnJheSBvciBhbiBPYmplY3RcbiAgICpcbiAgICogYm9keToge1xuICAgKiAgIHBpcGVsaW5lOiB7XG4gICAqICAgICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGdldFBpcGVsaW5lKGJvZHkpIHtcbiAgICBsZXQgcGlwZWxpbmUgPSBib2R5LnBpcGVsaW5lIHx8IGJvZHk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpcGVsaW5lKSkge1xuICAgICAgcGlwZWxpbmUgPSBPYmplY3Qua2V5cyhwaXBlbGluZSkubWFwKGtleSA9PiB7XG4gICAgICAgIHJldHVybiB7IFtrZXldOiBwaXBlbGluZVtrZXldIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGlwZWxpbmUubWFwKHN0YWdlID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdGFnZSk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggIT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpcGVsaW5lIHN0YWdlcyBzaG91bGQgb25seSBoYXZlIG9uZSBrZXkgZm91bmQgJHtrZXlzLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQWdncmVnYXRlUm91dGVyLnRyYW5zZm9ybVN0YWdlKGtleXNbMF0sIHN0YWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1TdGFnZShzdGFnZU5hbWUsIHN0YWdlKSB7XG4gICAgaWYgKHN0YWdlTmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnb2JqZWN0SWQnKSkge1xuICAgICAgICBEZXByZWNhdG9yLmxvZ1J1bnRpbWVEZXByZWNhdGlvbih7XG4gICAgICAgICAgdXNhZ2U6ICdUaGUgdXNlIG9mIG9iamVjdElkIGluIGFnZ3JlZ2F0aW9uIHN0YWdlICRncm91cCcsXG4gICAgICAgICAgc29sdXRpb246ICdVc2UgX2lkIGluc3RlYWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlW3N0YWdlTmFtZV0uX2lkID0gc3RhZ2Vbc3RhZ2VOYW1lXS5vYmplY3RJZDtcbiAgICAgICAgZGVsZXRlIHN0YWdlW3N0YWdlTmFtZV0ub2JqZWN0SWQ7XG4gICAgICB9XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGFnZVtzdGFnZU5hbWVdLCAnX2lkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYEludmFsaWQgcGFyYW1ldGVyIGZvciBxdWVyeTogZ3JvdXAuIE1pc3Npbmcga2V5IF9pZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhZ2VOYW1lWzBdICE9PSAnJCcpIHtcbiAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHtcbiAgICAgICAgdXNhZ2U6IFwiVXNpbmcgYWdncmVnYXRpb24gc3RhZ2VzIHdpdGhvdXQgYSBsZWFkaW5nICckJ1wiLFxuICAgICAgICBzb2x1dGlvbjogYFRyeSAkJHtzdGFnZU5hbWV9IGluc3RlYWQuYCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBzdGFnZU5hbWVbMF0gPT09ICckJyA/IHN0YWdlTmFtZSA6IGAkJHtzdGFnZU5hbWV9YDtcbiAgICByZXR1cm4geyBba2V5XTogc3RhZ2Vbc3RhZ2VOYW1lXSB9O1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9hZ2dyZWdhdGUvOmNsYXNzTmFtZScsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWdncmVnYXRlUm91dGVyO1xuIl19
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2dyZWdhdGVSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiaGFuZGxlRmluZCIsInJlcSIsImJvZHkiLCJPYmplY3QiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwiZGlzdGluY3QiLCJTdHJpbmciLCJoaW50IiwiZXhwbGFpbiIsInJlYWRQcmVmZXJlbmNlIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwicmVzdCIsImZpbmQiLCJjb25maWciLCJhdXRoIiwiY2xhc3NOYW1lIiwiaW5mbyIsImNsaWVudFNESyIsImNvbnRleHQiLCJ0aGVuIiwicmVzcG9uc2UiLCJyZXN1bHQiLCJyZXN1bHRzIiwiVXNlcnNSb3V0ZXIiLCJyZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzIiwiQXJyYXkiLCJpc0FycmF5Iiwia2V5cyIsIm1hcCIsImtleSIsInN0YWdlIiwibGVuZ3RoIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfUVVFUlkiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJza2lwS2V5cyIsImluY2x1ZGVzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsIm1pZGRsZXdhcmUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0FnZ3JlZ2F0ZVJvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBVc2Vyc1JvdXRlciBmcm9tICcuL1VzZXJzUm91dGVyJztcblxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZVJvdXRlciBleHRlbmRzIENsYXNzZXNSb3V0ZXIge1xuICBoYW5kbGVGaW5kKHJlcSkge1xuICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHJlcS5ib2R5LCBDbGFzc2VzUm91dGVyLkpTT05Gcm9tUXVlcnkocmVxLnF1ZXJ5KSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LmRpc3RpbmN0KSB7XG4gICAgICBvcHRpb25zLmRpc3RpbmN0ID0gU3RyaW5nKGJvZHkuZGlzdGluY3QpO1xuICAgIH1cbiAgICBpZiAoYm9keS5oaW50KSB7XG4gICAgICBvcHRpb25zLmhpbnQgPSBib2R5LmhpbnQ7XG4gICAgICBkZWxldGUgYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgICBkZWxldGUgYm9keS5leHBsYWluO1xuICAgIH1cbiAgICBpZiAoYm9keS5yZWFkUHJlZmVyZW5jZSkge1xuICAgICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IGJvZHkucmVhZFByZWZlcmVuY2U7XG4gICAgICBkZWxldGUgYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgb3B0aW9ucy5waXBlbGluZSA9IEFnZ3JlZ2F0ZVJvdXRlci5nZXRQaXBlbGluZShib2R5KTtcbiAgICBpZiAodHlwZW9mIGJvZHkud2hlcmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBib2R5LndoZXJlID0gSlNPTi5wYXJzZShib2R5LndoZXJlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2UgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogQnVpbGRzIGEgcGlwZWxpbmUgZnJvbSB0aGUgYm9keS4gT3JpZ2luYWxseSB0aGUgYm9keSBjb3VsZCBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgb2JqZWN0LFxuICAgKiBhbmQgbm93IHdlIHN1cHBvcnQgbWFueSBvcHRpb25zXG4gICAqXG4gICAqIEFycmF5XG4gICAqXG4gICAqIGJvZHk6IFt7XG4gICAqICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogfV1cbiAgICpcbiAgICogT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiB9XG4gICAqXG4gICAqXG4gICAqIFBpcGVsaW5lIE9wZXJhdG9yIHdpdGggYW4gQXJyYXkgb3IgYW4gT2JqZWN0XG4gICAqXG4gICAqIGJvZHk6IHtcbiAgICogICBwaXBlbGluZToge1xuICAgKiAgICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICovXG4gIHN0YXRpYyBnZXRQaXBlbGluZShib2R5KSB7XG4gICAgbGV0IHBpcGVsaW5lID0gYm9keS5waXBlbGluZSB8fCBib2R5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaXBlbGluZSkpIHtcbiAgICAgIHBpcGVsaW5lID0gT2JqZWN0LmtleXMocGlwZWxpbmUpLm1hcChrZXkgPT4ge1xuICAgICAgICByZXR1cm4geyBba2V5XTogcGlwZWxpbmVba2V5XSB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpcGVsaW5lLm1hcChzdGFnZSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhZ2UpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBQaXBlbGluZSBzdGFnZXMgc2hvdWxkIG9ubHkgaGF2ZSBvbmUga2V5IGJ1dCBmb3VuZCAke2tleXMuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEFnZ3JlZ2F0ZVJvdXRlci50cmFuc2Zvcm1TdGFnZShrZXlzWzBdLCBzdGFnZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtU3RhZ2Uoc3RhZ2VOYW1lLCBzdGFnZSkge1xuICAgIGNvbnN0IHNraXBLZXlzID0gWydkaXN0aW5jdCcsICd3aGVyZSddO1xuICAgIGlmIChza2lwS2V5cy5pbmNsdWRlcyhzdGFnZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGFnZU5hbWVbMF0gIT09ICckJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGBJbnZhbGlkIGFnZ3JlZ2F0ZSBzdGFnZSAnJHtzdGFnZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgaWYgKHN0YWdlTmFtZSA9PT0gJyRncm91cCcpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ29iamVjdElkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYENhbm5vdCB1c2UgJ29iamVjdElkJyBpbiBhZ2dyZWdhdGlvbiBzdGFnZSAkZ3JvdXAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ19pZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciBmb3IgcXVlcnk6IGdyb3VwLiBNaXNzaW5nIGtleSBfaWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IFtzdGFnZU5hbWVdOiBzdGFnZVtzdGFnZU5hbWVdIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2FnZ3JlZ2F0ZS86Y2xhc3NOYW1lJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBZ2dyZWdhdGVSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBd0M7QUFBQTtBQUFBO0FBRWpDLE1BQU1BLGVBQWUsU0FBU0Msc0JBQWEsQ0FBQztFQUNqREMsVUFBVSxDQUFDQyxHQUFHLEVBQUU7SUFDZCxNQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSCxHQUFHLENBQUNDLElBQUksRUFBRUgsc0JBQWEsQ0FBQ00sYUFBYSxDQUFDSixHQUFHLENBQUNLLEtBQUssQ0FBQyxDQUFDO0lBQzVFLE1BQU1DLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDbEIsSUFBSUwsSUFB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
@@ -4,29 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AnalyticsRouter = void 0;
7
-
8
7
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  // AnalyticsRouter.js
10
+
13
11
  function appOpened(req) {
14
12
  const analyticsController = req.config.analyticsController;
15
13
  return analyticsController.appOpened(req);
16
14
  }
17
-
18
15
  function trackEvent(req) {
19
16
  const analyticsController = req.config.analyticsController;
20
17
  return analyticsController.trackEvent(req);
21
18
  }
22
-
23
19
  class AnalyticsRouter extends _PromiseRouter.default {
24
20
  mountRoutes() {
25
21
  this.route('POST', '/events/AppOpened', appOpened);
26
22
  this.route('POST', '/events/:eventName', trackEvent);
27
23
  }
28
-
29
24
  }
30
-
31
25
  exports.AnalyticsRouter = AnalyticsRouter;
32
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0FuYWx5dGljc1JvdXRlci5qcyJdLCJuYW1lcyI6WyJhcHBPcGVuZWQiLCJyZXEiLCJhbmFseXRpY3NDb250cm9sbGVyIiwiY29uZmlnIiwidHJhY2tFdmVudCIsIkFuYWx5dGljc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudFJvdXRlcyIsInJvdXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7QUFEQTtBQUdBLFNBQVNBLFNBQVQsQ0FBbUJDLEdBQW5CLEVBQXdCO0FBQ3RCLFFBQU1DLG1CQUFtQixHQUFHRCxHQUFHLENBQUNFLE1BQUosQ0FBV0QsbUJBQXZDO0FBQ0EsU0FBT0EsbUJBQW1CLENBQUNGLFNBQXBCLENBQThCQyxHQUE5QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0csVUFBVCxDQUFvQkgsR0FBcEIsRUFBeUI7QUFDdkIsUUFBTUMsbUJBQW1CLEdBQUdELEdBQUcsQ0FBQ0UsTUFBSixDQUFXRCxtQkFBdkM7QUFDQSxTQUFPQSxtQkFBbUIsQ0FBQ0UsVUFBcEIsQ0FBK0JILEdBQS9CLENBQVA7QUFDRDs7QUFFTSxNQUFNSSxlQUFOLFNBQThCQyxzQkFBOUIsQ0FBNEM7QUFDakRDLEVBQUFBLFdBQVcsR0FBRztBQUNaLFNBQUtDLEtBQUwsQ0FBVyxNQUFYLEVBQW1CLG1CQUFuQixFQUF3Q1IsU0FBeEM7QUFDQSxTQUFLUSxLQUFMLENBQVcsTUFBWCxFQUFtQixvQkFBbkIsRUFBeUNKLFVBQXpDO0FBQ0Q7O0FBSmdEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5hbHl0aWNzUm91dGVyLmpzXG5pbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcblxuZnVuY3Rpb24gYXBwT3BlbmVkKHJlcSkge1xuICBjb25zdCBhbmFseXRpY3NDb250cm9sbGVyID0gcmVxLmNvbmZpZy5hbmFseXRpY3NDb250cm9sbGVyO1xuICByZXR1cm4gYW5hbHl0aWNzQ29udHJvbGxlci5hcHBPcGVuZWQocmVxKTtcbn1cblxuZnVuY3Rpb24gdHJhY2tFdmVudChyZXEpIHtcbiAgY29uc3QgYW5hbHl0aWNzQ29udHJvbGxlciA9IHJlcS5jb25maWcuYW5hbHl0aWNzQ29udHJvbGxlcjtcbiAgcmV0dXJuIGFuYWx5dGljc0NvbnRyb2xsZXIudHJhY2tFdmVudChyZXEpO1xufVxuXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2V2ZW50cy9BcHBPcGVuZWQnLCBhcHBPcGVuZWQpO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2V2ZW50cy86ZXZlbnROYW1lJywgdHJhY2tFdmVudCk7XG4gIH1cbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBPcGVuZWQiLCJyZXEiLCJhbmFseXRpY3NDb250cm9sbGVyIiwiY29uZmlnIiwidHJhY2tFdmVudCIsIkFuYWx5dGljc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudFJvdXRlcyIsInJvdXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQW5hbHl0aWNzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEFuYWx5dGljc1JvdXRlci5qc1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5cbmZ1bmN0aW9uIGFwcE9wZW5lZChyZXEpIHtcbiAgY29uc3QgYW5hbHl0aWNzQ29udHJvbGxlciA9IHJlcS5jb25maWcuYW5hbHl0aWNzQ29udHJvbGxlcjtcbiAgcmV0dXJuIGFuYWx5dGljc0NvbnRyb2xsZXIuYXBwT3BlbmVkKHJlcSk7XG59XG5cbmZ1bmN0aW9uIHRyYWNrRXZlbnQocmVxKSB7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRyb2xsZXIgPSByZXEuY29uZmlnLmFuYWx5dGljc0NvbnRyb2xsZXI7XG4gIHJldHVybiBhbmFseXRpY3NDb250cm9sbGVyLnRyYWNrRXZlbnQocmVxKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFuYWx5dGljc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9ldmVudHMvQXBwT3BlbmVkJywgYXBwT3BlbmVkKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9ldmVudHMvOmV2ZW50TmFtZScsIHRyYWNrRXZlbnQpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBO0FBQTZDO0FBRDdDOztBQUdBLFNBQVNBLFNBQVMsQ0FBQ0MsR0FBRyxFQUFFO0VBQ3RCLE1BQU1DLG1CQUFtQixHQUFHRCxHQUFHLENBQUNFLE1BQU0sQ0FBQ0QsbUJBQW1CO0VBQzFELE9BQU9BLG1CQUFtQixDQUFDRixTQUFTLENBQUNDLEdBQUcsQ0FBQztBQUMzQztBQUVBLFNBQVNHLFVBQVUsQ0FBQ0gsR0FBRyxFQUFFO0VBQ3ZCLE1BQU1DLG1CQUFtQixHQUFHRCxHQUFHLENBQUNFLE1BQU0sQ0FBQ0QsbUJBQW1CO0VBQzFELE9BQU9BLG1CQUFtQixDQUFDRSxVQUFVLENBQUNILEdBQUcsQ0FBQztBQUM1QztBQUVPLE1BQU1JLGVBQWUsU0FBU0Msc0JBQWEsQ0FBQztFQUNqREMsV0FBVyxHQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFUixTQUFTLENBQUM7SUFDbEQsSUFBSSxDQUFDUSxLQUFLLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFSixVQUFVLENBQUM7RUFDdEQ7QUFDRjtBQUFDIn0=
@@ -4,29 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.AudiencesRouter = void 0;
7
-
8
7
  var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
9
-
10
8
  var _rest = _interopRequireDefault(require("../rest"));
11
-
12
9
  var middleware = _interopRequireWildcard(require("../middlewares"));
13
-
14
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
-
16
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  class AudiencesRouter extends _ClassesRouter.default {
21
14
  className() {
22
15
  return '_Audience';
23
16
  }
24
-
25
17
  handleFind(req) {
26
18
  const body = Object.assign(req.body, _ClassesRouter.default.JSONFromQuery(req.query));
27
-
28
19
  const options = _ClassesRouter.default.optionsFromBody(body, req.config.defaultLimit);
29
-
30
20
  return _rest.default.find(req.config, req.auth, '_Audience', body.where, options, req.info.clientSDK, req.info.context).then(response => {
31
21
  response.results.forEach(item => {
32
22
  item.query = JSON.parse(item.query);
@@ -36,14 +26,12 @@ class AudiencesRouter extends _ClassesRouter.default {
36
26
  };
37
27
  });
38
28
  }
39
-
40
29
  handleGet(req) {
41
30
  return super.handleGet(req).then(data => {
42
31
  data.response.query = JSON.parse(data.response.query);
43
32
  return data;
44
33
  });
45
34
  }
46
-
47
35
  mountRoutes() {
48
36
  this.route('GET', '/push_audiences', middleware.promiseEnforceMasterKeyAccess, req => {
49
37
  return this.handleFind(req);
@@ -61,10 +49,8 @@ class AudiencesRouter extends _ClassesRouter.default {
61
49
  return this.handleDelete(req);
62
50
  });
63
51
  }
64
-
65
52
  }
66
-
67
53
  exports.AudiencesRouter = AudiencesRouter;
68
54
  var _default = AudiencesRouter;
69
55
  exports.default = _default;
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0F1ZGllbmNlc1JvdXRlci5qcyJdLCJuYW1lcyI6WyJBdWRpZW5jZXNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwiaGFuZGxlRmluZCIsInJlcSIsImJvZHkiLCJPYmplY3QiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwib3B0aW9uc0Zyb21Cb2R5IiwiY29uZmlnIiwiZGVmYXVsdExpbWl0IiwicmVzdCIsImZpbmQiLCJhdXRoIiwid2hlcmUiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsInJlc3VsdHMiLCJmb3JFYWNoIiwiaXRlbSIsIkpTT04iLCJwYXJzZSIsImhhbmRsZUdldCIsImRhdGEiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwibWlkZGxld2FyZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiaGFuZGxlQ3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwiaGFuZGxlRGVsZXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRU8sTUFBTUEsZUFBTixTQUE4QkMsc0JBQTlCLENBQTRDO0FBQ2pEQyxFQUFBQSxTQUFTLEdBQUc7QUFDVixXQUFPLFdBQVA7QUFDRDs7QUFFREMsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQU07QUFDZCxVQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxHQUFHLENBQUNDLElBQWxCLEVBQXdCSix1QkFBY08sYUFBZCxDQUE0QkosR0FBRyxDQUFDSyxLQUFoQyxDQUF4QixDQUFiOztBQUNBLFVBQU1DLE9BQU8sR0FBR1QsdUJBQWNVLGVBQWQsQ0FBOEJOLElBQTlCLEVBQW9DRCxHQUFHLENBQUNRLE1BQUosQ0FBV0MsWUFBL0MsQ0FBaEI7O0FBRUEsV0FBT0MsY0FDSkMsSUFESSxDQUVIWCxHQUFHLENBQUNRLE1BRkQsRUFHSFIsR0FBRyxDQUFDWSxJQUhELEVBSUgsV0FKRyxFQUtIWCxJQUFJLENBQUNZLEtBTEYsRUFNSFAsT0FORyxFQU9ITixHQUFHLENBQUNjLElBQUosQ0FBU0MsU0FQTixFQVFIZixHQUFHLENBQUNjLElBQUosQ0FBU0UsT0FSTixFQVVKQyxJQVZJLENBVUNDLFFBQVEsSUFBSTtBQUNoQkEsTUFBQUEsUUFBUSxDQUFDQyxPQUFULENBQWlCQyxPQUFqQixDQUF5QkMsSUFBSSxJQUFJO0FBQy9CQSxRQUFBQSxJQUFJLENBQUNoQixLQUFMLEdBQWFpQixJQUFJLENBQUNDLEtBQUwsQ0FBV0YsSUFBSSxDQUFDaEIsS0FBaEIsQ0FBYjtBQUNELE9BRkQ7QUFJQSxhQUFPO0FBQUVhLFFBQUFBLFFBQVEsRUFBRUE7QUFBWixPQUFQO0FBQ0QsS0FoQkksQ0FBUDtBQWlCRDs7QUFFRE0sRUFBQUEsU0FBUyxDQUFDeEIsR0FBRCxFQUFNO0FBQ2IsV0FBTyxNQUFNd0IsU0FBTixDQUFnQnhCLEdBQWhCLEVBQXFCaUIsSUFBckIsQ0FBMEJRLElBQUksSUFBSTtBQUN2Q0EsTUFBQUEsSUFBSSxDQUFDUCxRQUFMLENBQWNiLEtBQWQsR0FBc0JpQixJQUFJLENBQUNDLEtBQUwsQ0FBV0UsSUFBSSxDQUFDUCxRQUFMLENBQWNiLEtBQXpCLENBQXRCO0FBRUEsYUFBT29CLElBQVA7QUFDRCxLQUpNLENBQVA7QUFLRDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1osU0FBS0MsS0FBTCxDQUFXLEtBQVgsRUFBa0IsaUJBQWxCLEVBQXFDQyxVQUFVLENBQUNDLDZCQUFoRCxFQUErRTdCLEdBQUcsSUFBSTtBQUNwRixhQUFPLEtBQUtELFVBQUwsQ0FBZ0JDLEdBQWhCLENBQVA7QUFDRCxLQUZEO0FBR0EsU0FBSzJCLEtBQUwsQ0FDRSxLQURGLEVBRUUsMkJBRkYsRUFHRUMsVUFBVSxDQUFDQyw2QkFIYixFQUlFN0IsR0FBRyxJQUFJO0FBQ0wsYUFBTyxLQUFLd0IsU0FBTCxDQUFleEIsR0FBZixDQUFQO0FBQ0QsS0FOSDtBQVFBLFNBQUsyQixLQUFMLENBQVcsTUFBWCxFQUFtQixpQkFBbkIsRUFBc0NDLFVBQVUsQ0FBQ0MsNkJBQWpELEVBQWdGN0IsR0FBRyxJQUFJO0FBQ3JGLGFBQU8sS0FBSzhCLFlBQUwsQ0FBa0I5QixHQUFsQixDQUFQO0FBQ0QsS0FGRDtBQUdBLFNBQUsyQixLQUFMLENBQ0UsS0FERixFQUVFLDJCQUZGLEVBR0VDLFVBQVUsQ0FBQ0MsNkJBSGIsRUFJRTdCLEdBQUcsSUFBSTtBQUNMLGFBQU8sS0FBSytCLFlBQUwsQ0FBa0IvQixHQUFsQixDQUFQO0FBQ0QsS0FOSDtBQVFBLFNBQUsyQixLQUFMLENBQ0UsUUFERixFQUVFLDJCQUZGLEVBR0VDLFVBQVUsQ0FBQ0MsNkJBSGIsRUFJRTdCLEdBQUcsSUFBSTtBQUNMLGFBQU8sS0FBS2dDLFlBQUwsQ0FBa0JoQyxHQUFsQixDQUFQO0FBQ0QsS0FOSDtBQVFEOztBQW5FZ0Q7OztlQXNFcENKLGUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuZXhwb3J0IGNsYXNzIEF1ZGllbmNlc1JvdXRlciBleHRlbmRzIENsYXNzZXNSb3V0ZXIge1xuICBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdfQXVkaWVuY2UnO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG5cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICAnX0F1ZGllbmNlJyxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHJlc3BvbnNlLnJlc3VsdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBpdGVtLnF1ZXJ5ID0gSlNPTi5wYXJzZShpdGVtLnF1ZXJ5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUdldChyZXEpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFuZGxlR2V0KHJlcSkudGhlbihkYXRhID0+IHtcbiAgICAgIGRhdGEucmVzcG9uc2UucXVlcnkgPSBKU09OLnBhcnNlKGRhdGEucmVzcG9uc2UucXVlcnkpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvcHVzaF9hdWRpZW5jZXMnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgICcvcHVzaF9hdWRpZW5jZXMvOm9iamVjdElkJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQocmVxKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3B1c2hfYXVkaWVuY2VzJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUFVUJyxcbiAgICAgICcvcHVzaF9hdWRpZW5jZXMvOm9iamVjdElkJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnREVMRVRFJyxcbiAgICAgICcvcHVzaF9hdWRpZW5jZXMvOm9iamVjdElkJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICByZXEgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUocmVxKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF1ZGllbmNlc1JvdXRlcjtcbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdWRpZW5jZXNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwiaGFuZGxlRmluZCIsInJlcSIsImJvZHkiLCJPYmplY3QiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwib3B0aW9uc0Zyb21Cb2R5IiwiY29uZmlnIiwiZGVmYXVsdExpbWl0IiwicmVzdCIsImZpbmQiLCJhdXRoIiwid2hlcmUiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsInJlc3VsdHMiLCJmb3JFYWNoIiwiaXRlbSIsIkpTT04iLCJwYXJzZSIsImhhbmRsZUdldCIsImRhdGEiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwibWlkZGxld2FyZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiaGFuZGxlQ3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwiaGFuZGxlRGVsZXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQXVkaWVuY2VzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDbGFzc2VzUm91dGVyIGZyb20gJy4vQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuXG5leHBvcnQgY2xhc3MgQXVkaWVuY2VzUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19BdWRpZW5jZSc7XG4gIH1cblxuICBoYW5kbGVGaW5kKHJlcSkge1xuICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHJlcS5ib2R5LCBDbGFzc2VzUm91dGVyLkpTT05Gcm9tUXVlcnkocmVxLnF1ZXJ5KSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IENsYXNzZXNSb3V0ZXIub3B0aW9uc0Zyb21Cb2R5KGJvZHksIHJlcS5jb25maWcuZGVmYXVsdExpbWl0KTtcblxuICAgIHJldHVybiByZXN0XG4gICAgICAuZmluZChcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICdfQXVkaWVuY2UnLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVzcG9uc2UucmVzdWx0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGl0ZW0ucXVlcnkgPSBKU09OLnBhcnNlKGl0ZW0ucXVlcnkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlR2V0KHJlcSkge1xuICAgIHJldHVybiBzdXBlci5oYW5kbGVHZXQocmVxKS50aGVuKGRhdGEgPT4ge1xuICAgICAgZGF0YS5yZXNwb25zZS5xdWVyeSA9IEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZS5xdWVyeSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9wdXNoX2F1ZGllbmNlcycsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgJy9wdXNoX2F1ZGllbmNlcy86b2JqZWN0SWQnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUdldChyZXEpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvcHVzaF9hdWRpZW5jZXMnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9wdXNoX2F1ZGllbmNlcy86b2JqZWN0SWQnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShyZXEpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdERUxFVEUnLFxuICAgICAgJy9wdXNoX2F1ZGllbmNlcy86b2JqZWN0SWQnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHJlcSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXVkaWVuY2VzUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBNkM7QUFBQTtBQUFBO0FBRXRDLE1BQU1BLGVBQWUsU0FBU0Msc0JBQWEsQ0FBQztFQUNqREMsU0FBUyxHQUFHO0lBQ1YsT0FBTyxXQUFXO0VBQ3BCO0VBRUFDLFVBQVUsQ0FBQ0MsR0FBRyxFQUFFO0lBQ2QsTUFBTUMsSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0gsR0FBRyxDQUFDQyxJQUFJLEVBQUVKLHNCQUFhLENBQUNPLGFBQWEsQ0FBQ0osR0FBRyxDQUFDSyxLQUFLLENBQUMsQ0FBQztJQUM1RSxNQUFNQyxPQUFPLEdBQUdULHNCQUFhLENBQUNVLGVBQWUsQ0FBQ04sSUFBSSxFQUFFRCxHQUFHLENBQUNRLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDO0lBRTVFLE9BQU9DLGFBQUksQ0FDUkMsSUFBSSxDQUNIWCxHQUFHLENBQUNRLE1BQU0sRUFDVlIsR0FBRyxDQUFDWSxJQUFJLEVBQ1IsV0FBVyxFQUNYWCxJQUFJLENBQUNZLEtBQUssRUFDVlAsT0FBTyxFQUNQTixHQUFHLENBQUNjLElBQUksQ0FBQ0MsU0FBUyxFQUNsQmYsR0FBRyxDQUFDYyxJQUFJLENBQUNFLE9BQU8sQ0FDakIsQ0FDQUMsSUFBSSxDQUFDQyxRQUFRLElBQUk7TUFDaEJBLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUNDLElBQUksSUFBSTtRQUMvQkEsSUFBSSxDQUFDaEIsS0FBSyxHQUFHaUIsSUFBSSxDQUFDQyxLQUFLLENBQUNGLElBQUksQ0FBQ2hCLEtBQUssQ0FBQztNQUNyQyxDQUFDLENBQUM7TUFFRixPQUFPO1FBQUVhLFFBQVEsRUFBRUE7TUFBUyxDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNOO0VBRUFNLFNBQVMsQ0FBQ3hCLEdBQUcsRUFBRTtJQUNiLE9BQU8sS0FBSyxDQUFDd0IsU0FBUyxDQUFDeEIsR0FBRyxDQUFDLENBQUNpQixJQUFJLENBQUNRLElBQUksSUFBSTtNQUN2Q0EsSUFBSSxDQUFDUCxRQUFRLENBQUNiLEtBQUssR0FBR2lCLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxJQUFJLENBQUNQLFFBQVEsQ0FBQ2IsS0FBSyxDQUFDO01BRXJELE9BQU9vQixJQUFJO0lBQ2IsQ0FBQyxDQUFDO0VBQ0o7RUFFQUMsV0FBVyxHQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFQyxVQUFVLENBQUNDLDZCQUE2QixFQUFFN0IsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDRCxVQUFVLENBQUNDLEdBQUcsQ0FBQztJQUM3QixDQUFDLENBQUM7SUFDRixJQUFJLENBQUMyQixLQUFLLENBQ1IsS0FBSyxFQUNMLDJCQUEyQixFQUMzQkMsVUFBVSxDQUFDQyw2QkFBNkIsRUFDeEM3QixHQUFHLElBQUk7TUFDTCxPQUFPLElBQUksQ0FBQ3dCLFNBQVMsQ0FBQ3hCLEdBQUcsQ0FBQztJQUM1QixDQUFDLENBQ0Y7SUFDRCxJQUFJLENBQUMyQixLQUFLLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFQyxVQUFVLENBQUNDLDZCQUE2QixFQUFFN0IsR0FBRyxJQUFJO01BQ3JGLE9BQU8sSUFBSSxDQUFDOEIsWUFBWSxDQUFDOUIsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQzJCLEtBQUssQ0FDUixLQUFLLEVBQ0wsMkJBQTJCLEVBQzNCQyxVQUFVLENBQUNDLDZCQUE2QixFQUN4QzdCLEdBQUcsSUFBSTtNQUNMLE9BQU8sSUFBSSxDQUFDK0IsWUFBWSxDQUFDL0IsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FDRjtJQUNELElBQUksQ0FBQzJCLEtBQUssQ0FDUixRQUFRLEVBQ1IsMkJBQTJCLEVBQzNCQyxVQUFVLENBQUNDLDZCQUE2QixFQUN4QzdCLEdBQUcsSUFBSTtNQUNMLE9BQU8sSUFBSSxDQUFDZ0MsWUFBWSxDQUFDaEMsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FDRjtFQUNIO0FBQ0Y7QUFBQztBQUFBLGVBRWNKLGVBQWU7QUFBQSJ9
@@ -4,117 +4,90 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.ClassesRouter = void 0;
7
-
8
7
  var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
9
-
10
8
  var _rest = _interopRequireDefault(require("../rest"));
11
-
12
9
  var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
10
  var _node = _interopRequireDefault(require("parse/node"));
15
-
16
11
  var _middlewares = require("../middlewares");
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  const ALLOWED_GET_QUERY_KEYS = ['keys', 'include', 'excludeKeys', 'readPreference', 'includeReadPreference', 'subqueryReadPreference'];
21
-
22
14
  class ClassesRouter extends _PromiseRouter.default {
23
15
  className(req) {
24
16
  return req.params.className;
25
17
  }
26
-
27
18
  handleFind(req) {
28
19
  const body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query));
29
20
  const options = ClassesRouter.optionsFromBody(body, req.config.defaultLimit);
30
-
31
21
  if (req.config.maxLimit && body.limit > req.config.maxLimit) {
32
22
  // Silently replace the limit on the query with the max configured
33
23
  options.limit = Number(req.config.maxLimit);
34
24
  }
35
-
36
25
  if (body.redirectClassNameForKey) {
37
26
  options.redirectClassNameForKey = String(body.redirectClassNameForKey);
38
27
  }
39
-
40
28
  if (typeof body.where === 'string') {
41
29
  body.where = JSON.parse(body.where);
42
30
  }
43
-
44
31
  return _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context).then(response => {
45
32
  return {
46
33
  response: response
47
34
  };
48
35
  });
49
- } // Returns a promise for a {response} object.
50
-
36
+ }
51
37
 
38
+ // Returns a promise for a {response} object.
52
39
  handleGet(req) {
53
40
  const body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query));
54
41
  const options = {};
55
-
56
42
  for (const key of Object.keys(body)) {
57
43
  if (ALLOWED_GET_QUERY_KEYS.indexOf(key) === -1) {
58
44
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Improper encode of parameter');
59
45
  }
60
46
  }
61
-
62
47
  if (body.keys != null) {
63
48
  options.keys = String(body.keys);
64
49
  }
65
-
66
50
  if (body.include != null) {
67
51
  options.include = String(body.include);
68
52
  }
69
-
70
53
  if (body.excludeKeys != null) {
71
54
  options.excludeKeys = String(body.excludeKeys);
72
55
  }
73
-
74
56
  if (typeof body.readPreference === 'string') {
75
57
  options.readPreference = body.readPreference;
76
58
  }
77
-
78
59
  if (typeof body.includeReadPreference === 'string') {
79
60
  options.includeReadPreference = body.includeReadPreference;
80
61
  }
81
-
82
62
  if (typeof body.subqueryReadPreference === 'string') {
83
63
  options.subqueryReadPreference = body.subqueryReadPreference;
84
64
  }
85
-
86
65
  return _rest.default.get(req.config, req.auth, this.className(req), req.params.objectId, options, req.info.clientSDK, req.info.context).then(response => {
87
66
  if (!response.results || response.results.length == 0) {
88
67
  throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'Object not found.');
89
68
  }
90
-
91
69
  if (this.className(req) === '_User') {
92
70
  delete response.results[0].sessionToken;
93
71
  const user = response.results[0];
94
-
95
72
  if (req.auth.user && user.objectId == req.auth.user.id) {
96
73
  // Force the session token
97
74
  response.results[0].sessionToken = req.info.sessionToken;
98
75
  }
99
76
  }
100
-
101
77
  return {
102
78
  response: response.results[0]
103
79
  };
104
80
  });
105
81
  }
106
-
107
82
  handleCreate(req) {
108
83
  return _rest.default.create(req.config, req.auth, this.className(req), req.body, req.info.clientSDK, req.info.context);
109
84
  }
110
-
111
85
  handleUpdate(req) {
112
86
  const where = {
113
87
  objectId: req.params.objectId
114
88
  };
115
89
  return _rest.default.update(req.config, req.auth, this.className(req), where, req.body, req.info.clientSDK, req.info.context);
116
90
  }
117
-
118
91
  handleDelete(req) {
119
92
  return _rest.default.del(req.config, req.auth, this.className(req), req.params.objectId, req.info.context).then(() => {
120
93
  return {
@@ -122,10 +95,8 @@ class ClassesRouter extends _PromiseRouter.default {
122
95
  };
123
96
  });
124
97
  }
125
-
126
98
  static JSONFromQuery(query) {
127
99
  const json = {};
128
-
129
100
  for (const [key, value] of _lodash.default.entries(query)) {
130
101
  try {
131
102
  json[key] = JSON.parse(value);
@@ -133,78 +104,59 @@ class ClassesRouter extends _PromiseRouter.default {
133
104
  json[key] = value;
134
105
  }
135
106
  }
136
-
137
107
  return json;
138
108
  }
139
-
140
109
  static optionsFromBody(body, defaultLimit) {
141
110
  const allowConstraints = ['skip', 'limit', 'order', 'count', 'keys', 'excludeKeys', 'include', 'includeAll', 'redirectClassNameForKey', 'where', 'readPreference', 'includeReadPreference', 'subqueryReadPreference', 'hint', 'explain'];
142
-
143
111
  for (const key of Object.keys(body)) {
144
112
  if (allowConstraints.indexOf(key) === -1) {
145
113
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid parameter for query: ${key}`);
146
114
  }
147
115
  }
148
-
149
116
  const options = {};
150
-
151
117
  if (body.skip) {
152
118
  options.skip = Number(body.skip);
153
119
  }
154
-
155
120
  if (body.limit || body.limit === 0) {
156
121
  options.limit = Number(body.limit);
157
122
  } else {
158
123
  options.limit = Number(defaultLimit);
159
124
  }
160
-
161
125
  if (body.order) {
162
126
  options.order = String(body.order);
163
127
  }
164
-
165
128
  if (body.count) {
166
129
  options.count = true;
167
130
  }
168
-
169
131
  if (body.keys != null) {
170
132
  options.keys = String(body.keys);
171
133
  }
172
-
173
134
  if (body.excludeKeys != null) {
174
135
  options.excludeKeys = String(body.excludeKeys);
175
136
  }
176
-
177
137
  if (body.include != null) {
178
138
  options.include = String(body.include);
179
139
  }
180
-
181
140
  if (body.includeAll) {
182
141
  options.includeAll = true;
183
142
  }
184
-
185
143
  if (typeof body.readPreference === 'string') {
186
144
  options.readPreference = body.readPreference;
187
145
  }
188
-
189
146
  if (typeof body.includeReadPreference === 'string') {
190
147
  options.includeReadPreference = body.includeReadPreference;
191
148
  }
192
-
193
149
  if (typeof body.subqueryReadPreference === 'string') {
194
150
  options.subqueryReadPreference = body.subqueryReadPreference;
195
151
  }
196
-
197
152
  if (body.hint && (typeof body.hint === 'string' || typeof body.hint === 'object')) {
198
153
  options.hint = body.hint;
199
154
  }
200
-
201
155
  if (body.explain) {
202
156
  options.explain = body.explain;
203
157
  }
204
-
205
158
  return options;
206
159
  }
207
-
208
160
  mountRoutes() {
209
161
  this.route('GET', '/classes/:className', req => {
210
162
  return this.handleFind(req);
@@ -222,10 +174,8 @@ class ClassesRouter extends _PromiseRouter.default {
222
174
  return this.handleDelete(req);
223
175
  });
224
176
  }
225
-
226
177
  }
227
-
228
178
  exports.ClassesRouter = ClassesRouter;
229
179
  var _default = ClassesRouter;
230
180
  exports.default = _default;
231
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0NsYXNzZXNSb3V0ZXIuanMiXSwibmFtZXMiOlsiQUxMT1dFRF9HRVRfUVVFUllfS0VZUyIsIkNsYXNzZXNSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiY2xhc3NOYW1lIiwicmVxIiwicGFyYW1zIiwiaGFuZGxlRmluZCIsImJvZHkiLCJPYmplY3QiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwib3B0aW9uc0Zyb21Cb2R5IiwiY29uZmlnIiwiZGVmYXVsdExpbWl0IiwibWF4TGltaXQiLCJsaW1pdCIsIk51bWJlciIsInJlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5IiwiU3RyaW5nIiwid2hlcmUiLCJKU09OIiwicGFyc2UiLCJyZXN0IiwiZmluZCIsImF1dGgiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsImhhbmRsZUdldCIsImtleSIsImtleXMiLCJpbmRleE9mIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfUVVFUlkiLCJpbmNsdWRlIiwiZXhjbHVkZUtleXMiLCJyZWFkUHJlZmVyZW5jZSIsImluY2x1ZGVSZWFkUHJlZmVyZW5jZSIsInN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UiLCJnZXQiLCJvYmplY3RJZCIsInJlc3VsdHMiLCJsZW5ndGgiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwic2Vzc2lvblRva2VuIiwidXNlciIsImlkIiwiaGFuZGxlQ3JlYXRlIiwiY3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwidXBkYXRlIiwiaGFuZGxlRGVsZXRlIiwiZGVsIiwianNvbiIsInZhbHVlIiwiXyIsImVudHJpZXMiLCJlIiwiYWxsb3dDb25zdHJhaW50cyIsInNraXAiLCJvcmRlciIsImNvdW50IiwiaW5jbHVkZUFsbCIsImhpbnQiLCJleHBsYWluIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSJdLCJtYXBwaW5ncyI6Ijs7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bkUsR0FBRyxJQUFJO0FBQzNELGFBQU8sS0FBS29ELFlBQUwsQ0FBa0JwRCxHQUFsQixDQUFQO0FBQ0QsS0FGRDtBQUdEOztBQTdOOEM7OztlQWdPbENILGEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuY29uc3QgQUxMT1dFRF9HRVRfUVVFUllfS0VZUyA9IFtcbiAgJ2tleXMnLFxuICAnaW5jbHVkZScsXG4gICdleGNsdWRlS2V5cycsXG4gICdyZWFkUHJlZmVyZW5jZScsXG4gICdpbmNsdWRlUmVhZFByZWZlcmVuY2UnLFxuICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ2xhc3Nlc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjbGFzc05hbWUocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG4gICAgaWYgKHJlcS5jb25maWcubWF4TGltaXQgJiYgYm9keS5saW1pdCA+IHJlcS5jb25maWcubWF4TGltaXQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgb3B0aW9ucy5saW1pdCA9IE51bWJlcihyZXEuY29uZmlnLm1heExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkpIHtcbiAgICAgIG9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgPSBTdHJpbmcoYm9keS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB0aGlzLmNsYXNzTmFtZShyZXEpLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuICBoYW5kbGVHZXQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHksIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhib2R5KSkge1xuICAgICAgaWYgKEFMTE9XRURfR0VUX1FVRVJZX0tFWVMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ltcHJvcGVyIGVuY29kZSBvZiBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYm9keS5rZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IFN0cmluZyhib2R5LmtleXMpO1xuICAgIH1cbiAgICBpZiAoYm9keS5pbmNsdWRlICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFN0cmluZyhib2R5LmluY2x1ZGUpO1xuICAgIH1cbiAgICBpZiAoYm9keS5leGNsdWRlS2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmV4Y2x1ZGVLZXlzID0gU3RyaW5nKGJvZHkuZXhjbHVkZUtleXMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN0XG4gICAgICAuZ2V0KFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgcmVxLnBhcmFtcy5vYmplY3RJZCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lKHJlcSkgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBkZWxldGUgcmVzcG9uc2UucmVzdWx0c1swXS5zZXNzaW9uVG9rZW47XG5cbiAgICAgICAgICBjb25zdCB1c2VyID0gcmVzcG9uc2UucmVzdWx0c1swXTtcblxuICAgICAgICAgIGlmIChyZXEuYXV0aC51c2VyICYmIHVzZXIub2JqZWN0SWQgPT0gcmVxLmF1dGgudXNlci5pZCkge1xuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHNlc3Npb24gdG9rZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdHNbMF0uc2Vzc2lvblRva2VuID0gcmVxLmluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UucmVzdWx0c1swXSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBoYW5kbGVDcmVhdGUocmVxKSB7XG4gICAgcmV0dXJuIHJlc3QuY3JlYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHJlcS5ib2R5LFxuICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVVcGRhdGUocmVxKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7IG9iamVjdElkOiByZXEucGFyYW1zLm9iamVjdElkIH07XG4gICAgcmV0dXJuIHJlc3QudXBkYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHdoZXJlLFxuICAgICAgcmVxLmJvZHksXG4gICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZShyZXEpIHtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmRlbChyZXEuY29uZmlnLCByZXEuYXV0aCwgdGhpcy5jbGFzc05hbWUocmVxKSwgcmVxLnBhcmFtcy5vYmplY3RJZCwgcmVxLmluZm8uY29udGV4dClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBKU09ORnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gICAgY29uc3QganNvbiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8uZW50cmllcyhxdWVyeSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGpzb25ba2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgb3B0aW9uc0Zyb21Cb2R5KGJvZHksIGRlZmF1bHRMaW1pdCkge1xuICAgIGNvbnN0IGFsbG93Q29uc3RyYWludHMgPSBbXG4gICAgICAnc2tpcCcsXG4gICAgICAnbGltaXQnLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdjb3VudCcsXG4gICAgICAna2V5cycsXG4gICAgICAnZXhjbHVkZUtleXMnLFxuICAgICAgJ2luY2x1ZGUnLFxuICAgICAgJ2luY2x1ZGVBbGwnLFxuICAgICAgJ3JlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5JyxcbiAgICAgICd3aGVyZScsXG4gICAgICAncmVhZFByZWZlcmVuY2UnLFxuICAgICAgJ2luY2x1ZGVSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnaGludCcsXG4gICAgICAnZXhwbGFpbicsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJvZHkpKSB7XG4gICAgICBpZiAoYWxsb3dDb25zdHJhaW50cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIHF1ZXJ5OiAke2tleX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LnNraXApIHtcbiAgICAgIG9wdGlvbnMuc2tpcCA9IE51bWJlcihib2R5LnNraXApO1xuICAgIH1cbiAgICBpZiAoYm9keS5saW1pdCB8fCBib2R5LmxpbWl0ID09PSAwKSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGJvZHkubGltaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGRlZmF1bHRMaW1pdCk7XG4gICAgfVxuICAgIGlmIChib2R5Lm9yZGVyKSB7XG4gICAgICBvcHRpb25zLm9yZGVyID0gU3RyaW5nKGJvZHkub3JkZXIpO1xuICAgIH1cbiAgICBpZiAoYm9keS5jb3VudCkge1xuICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChib2R5LmtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5rZXlzID0gU3RyaW5nKGJvZHkua2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmV4Y2x1ZGVLZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZXhjbHVkZUtleXMgPSBTdHJpbmcoYm9keS5leGNsdWRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGUgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU3RyaW5nKGJvZHkuaW5jbHVkZSk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQgJiYgKHR5cGVvZiBib2R5LmhpbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBib2R5LmhpbnQgPT09ICdvYmplY3QnKSkge1xuICAgICAgb3B0aW9ucy5oaW50ID0gYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZS86b2JqZWN0SWQnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdERUxFVEUnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZS86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xhc3Nlc1JvdXRlcjtcbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBTExPV0VEX0dFVF9RVUVSWV9LRVlTIiwiQ2xhc3Nlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjbGFzc05hbWUiLCJyZXEiLCJwYXJhbXMiLCJoYW5kbGVGaW5kIiwiYm9keSIsIk9iamVjdCIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJvcHRpb25zRnJvbUJvZHkiLCJjb25maWciLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImxpbWl0IiwiTnVtYmVyIiwicmVkaXJlY3RDbGFzc05hbWVGb3JLZXkiLCJTdHJpbmciLCJ3aGVyZSIsIkpTT04iLCJwYXJzZSIsInJlc3QiLCJmaW5kIiwiYXV0aCIsImluZm8iLCJjbGllbnRTREsiLCJjb250ZXh0IiwidGhlbiIsInJlc3BvbnNlIiwiaGFuZGxlR2V0Iiwia2V5Iiwia2V5cyIsImluZGV4T2YiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9RVUVSWSIsImluY2x1ZGUiLCJleGNsdWRlS2V5cyIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImdldCIsIm9iamVjdElkIiwicmVzdWx0cyIsImxlbmd0aCIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzZXNzaW9uVG9rZW4iLCJ1c2VyIiwiaWQiLCJoYW5kbGVDcmVhdGUiLCJjcmVhdGUiLCJoYW5kbGVVcGRhdGUiLCJ1cGRhdGUiLCJoYW5kbGVEZWxldGUiLCJkZWwiLCJqc29uIiwidmFsdWUiLCJfIiwiZW50cmllcyIsImUiLCJhbGxvd0NvbnN0cmFpbnRzIiwic2tpcCIsIm9yZGVyIiwiY291bnQiLCJpbmNsdWRlQWxsIiwiaGludCIsImV4cGxhaW4iLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQ2xhc3Nlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcblxuY29uc3QgQUxMT1dFRF9HRVRfUVVFUllfS0VZUyA9IFtcbiAgJ2tleXMnLFxuICAnaW5jbHVkZScsXG4gICdleGNsdWRlS2V5cycsXG4gICdyZWFkUHJlZmVyZW5jZScsXG4gICdpbmNsdWRlUmVhZFByZWZlcmVuY2UnLFxuICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ2xhc3Nlc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjbGFzc05hbWUocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG4gICAgaWYgKHJlcS5jb25maWcubWF4TGltaXQgJiYgYm9keS5saW1pdCA+IHJlcS5jb25maWcubWF4TGltaXQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgb3B0aW9ucy5saW1pdCA9IE51bWJlcihyZXEuY29uZmlnLm1heExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkpIHtcbiAgICAgIG9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgPSBTdHJpbmcoYm9keS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmZpbmQoXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB0aGlzLmNsYXNzTmFtZShyZXEpLFxuICAgICAgICBib2R5LndoZXJlLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuICBoYW5kbGVHZXQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHksIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhib2R5KSkge1xuICAgICAgaWYgKEFMTE9XRURfR0VUX1FVRVJZX0tFWVMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ltcHJvcGVyIGVuY29kZSBvZiBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYm9keS5rZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IFN0cmluZyhib2R5LmtleXMpO1xuICAgIH1cbiAgICBpZiAoYm9keS5pbmNsdWRlICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFN0cmluZyhib2R5LmluY2x1ZGUpO1xuICAgIH1cbiAgICBpZiAoYm9keS5leGNsdWRlS2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmV4Y2x1ZGVLZXlzID0gU3RyaW5nKGJvZHkuZXhjbHVkZUtleXMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gYm9keS5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN0XG4gICAgICAuZ2V0KFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgcmVxLnBhcmFtcy5vYmplY3RJZCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lKHJlcSkgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBkZWxldGUgcmVzcG9uc2UucmVzdWx0c1swXS5zZXNzaW9uVG9rZW47XG5cbiAgICAgICAgICBjb25zdCB1c2VyID0gcmVzcG9uc2UucmVzdWx0c1swXTtcblxuICAgICAgICAgIGlmIChyZXEuYXV0aC51c2VyICYmIHVzZXIub2JqZWN0SWQgPT0gcmVxLmF1dGgudXNlci5pZCkge1xuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHNlc3Npb24gdG9rZW5cbiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdHNbMF0uc2Vzc2lvblRva2VuID0gcmVxLmluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UucmVzdWx0c1swXSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBoYW5kbGVDcmVhdGUocmVxKSB7XG4gICAgcmV0dXJuIHJlc3QuY3JlYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHJlcS5ib2R5LFxuICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVVcGRhdGUocmVxKSB7XG4gICAgY29uc3Qgd2hlcmUgPSB7IG9iamVjdElkOiByZXEucGFyYW1zLm9iamVjdElkIH07XG4gICAgcmV0dXJuIHJlc3QudXBkYXRlKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5hdXRoLFxuICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgIHdoZXJlLFxuICAgICAgcmVxLmJvZHksXG4gICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZShyZXEpIHtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmRlbChyZXEuY29uZmlnLCByZXEuYXV0aCwgdGhpcy5jbGFzc05hbWUocmVxKSwgcmVxLnBhcmFtcy5vYmplY3RJZCwgcmVxLmluZm8uY29udGV4dClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBKU09ORnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gICAgY29uc3QganNvbiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8uZW50cmllcyhxdWVyeSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGpzb25ba2V5XSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgb3B0aW9uc0Zyb21Cb2R5KGJvZHksIGRlZmF1bHRMaW1pdCkge1xuICAgIGNvbnN0IGFsbG93Q29uc3RyYWludHMgPSBbXG4gICAgICAnc2tpcCcsXG4gICAgICAnbGltaXQnLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdjb3VudCcsXG4gICAgICAna2V5cycsXG4gICAgICAnZXhjbHVkZUtleXMnLFxuICAgICAgJ2luY2x1ZGUnLFxuICAgICAgJ2luY2x1ZGVBbGwnLFxuICAgICAgJ3JlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5JyxcbiAgICAgICd3aGVyZScsXG4gICAgICAncmVhZFByZWZlcmVuY2UnLFxuICAgICAgJ2luY2x1ZGVSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnaGludCcsXG4gICAgICAnZXhwbGFpbicsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJvZHkpKSB7XG4gICAgICBpZiAoYWxsb3dDb25zdHJhaW50cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIHF1ZXJ5OiAke2tleX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LnNraXApIHtcbiAgICAgIG9wdGlvbnMuc2tpcCA9IE51bWJlcihib2R5LnNraXApO1xuICAgIH1cbiAgICBpZiAoYm9keS5saW1pdCB8fCBib2R5LmxpbWl0ID09PSAwKSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGJvZHkubGltaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGRlZmF1bHRMaW1pdCk7XG4gICAgfVxuICAgIGlmIChib2R5Lm9yZGVyKSB7XG4gICAgICBvcHRpb25zLm9yZGVyID0gU3RyaW5nKGJvZHkub3JkZXIpO1xuICAgIH1cbiAgICBpZiAoYm9keS5jb3VudCkge1xuICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChib2R5LmtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5rZXlzID0gU3RyaW5nKGJvZHkua2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmV4Y2x1ZGVLZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZXhjbHVkZUtleXMgPSBTdHJpbmcoYm9keS5leGNsdWRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGUgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU3RyaW5nKGJvZHkuaW5jbHVkZSk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQgJiYgKHR5cGVvZiBib2R5LmhpbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBib2R5LmhpbnQgPT09ICdvYmplY3QnKSkge1xuICAgICAgb3B0aW9ucy5oaW50ID0gYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRmluZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZS86b2JqZWN0SWQnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdERUxFVEUnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZS86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xhc3Nlc1JvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUEwRDtBQUUxRCxNQUFNQSxzQkFBc0IsR0FBRyxDQUM3QixNQUFNLEVBQ04sU0FBUyxFQUNULGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixDQUN6QjtBQUVNLE1BQU1DLGFBQWEsU0FBU0Msc0JBQWEsQ0FBQztFQUMvQ0MsU0FBUyxDQUFDQyxHQUFHLEVBQUU7SUFDYixPQUFPQSxHQUFHLENBQUNDLE1BQU0sQ0FBQ0YsU0FBUztFQUM3QjtFQUVBRyxVQUFVLENBQUNGLEdBQUcsRUFBRTtJQUNkLE1BQU1HLElBQUksR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUNMLEdBQUcsQ0FBQ0csSUFBSSxFQUFFTixhQUFhLENBQUNTLGFBQWEsQ0FBQ04sR0FBRyxDQUFDTyxLQUFLLENBQUMsQ0FBQztJQUM1RSxNQUFNQyxPQUFPLEdBQUdYLGFBQWEsQ0FBQ1ksZUFBZSxDQUFDTixJQUFJLEVBQUVILEdBQUcsQ0FBQ1UsTUFB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