@beiguancyc/parse-server 9.9.0-ruixiang.1

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 (251) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +10 -0
  3. package/README.md +1311 -0
  4. package/bin/parse-live-query-server +3 -0
  5. package/bin/parse-server +3 -0
  6. package/lib/AccountLockout.js +149 -0
  7. package/lib/Adapters/AdapterLoader.js +60 -0
  8. package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
  9. package/lib/Adapters/Auth/AuthAdapter.js +132 -0
  10. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
  11. package/lib/Adapters/Auth/OAuth1Client.js +204 -0
  12. package/lib/Adapters/Auth/apple.js +125 -0
  13. package/lib/Adapters/Auth/facebook.js +187 -0
  14. package/lib/Adapters/Auth/gcenter.js +217 -0
  15. package/lib/Adapters/Auth/github.js +125 -0
  16. package/lib/Adapters/Auth/google.js +122 -0
  17. package/lib/Adapters/Auth/gpgames.js +125 -0
  18. package/lib/Adapters/Auth/httpsRequest.js +41 -0
  19. package/lib/Adapters/Auth/index.js +248 -0
  20. package/lib/Adapters/Auth/instagram.js +118 -0
  21. package/lib/Adapters/Auth/janraincapture.js +85 -0
  22. package/lib/Adapters/Auth/janrainengage.js +57 -0
  23. package/lib/Adapters/Auth/keycloak.js +168 -0
  24. package/lib/Adapters/Auth/ldap.js +193 -0
  25. package/lib/Adapters/Auth/line.js +125 -0
  26. package/lib/Adapters/Auth/linkedin.js +117 -0
  27. package/lib/Adapters/Auth/meetup.js +44 -0
  28. package/lib/Adapters/Auth/mfa.js +334 -0
  29. package/lib/Adapters/Auth/microsoft.js +111 -0
  30. package/lib/Adapters/Auth/oauth2.js +115 -0
  31. package/lib/Adapters/Auth/phantauth.js +53 -0
  32. package/lib/Adapters/Auth/qq.js +113 -0
  33. package/lib/Adapters/Auth/spotify.js +115 -0
  34. package/lib/Adapters/Auth/twitter.js +197 -0
  35. package/lib/Adapters/Auth/utils.js +28 -0
  36. package/lib/Adapters/Auth/vkontakte.js +55 -0
  37. package/lib/Adapters/Auth/wechat.js +110 -0
  38. package/lib/Adapters/Auth/weibo.js +141 -0
  39. package/lib/Adapters/Cache/CacheAdapter.js +40 -0
  40. package/lib/Adapters/Cache/InMemoryCache.js +61 -0
  41. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
  42. package/lib/Adapters/Cache/LRUCache.js +35 -0
  43. package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
  44. package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
  45. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  46. package/lib/Adapters/Email/MailAdapter.js +32 -0
  47. package/lib/Adapters/Files/FilesAdapter.js +129 -0
  48. package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
  49. package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
  50. package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
  51. package/lib/Adapters/Logger/WinstonLogger.js +107 -0
  52. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
  53. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
  54. package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
  55. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  56. package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
  57. package/lib/Adapters/Push/PushAdapter.js +40 -0
  58. package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
  59. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
  60. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
  61. package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
  62. package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
  63. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
  64. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
  65. package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
  66. package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
  67. package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
  68. package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
  69. package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
  70. package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
  71. package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
  72. package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
  73. package/lib/Adapters/Storage/StorageAdapter.js +2 -0
  74. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  75. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  76. package/lib/Auth.js +687 -0
  77. package/lib/AuthDataLock.js +53 -0
  78. package/lib/ClientSDK.js +39 -0
  79. package/lib/Config.js +879 -0
  80. package/lib/Controllers/AdaptableController.js +72 -0
  81. package/lib/Controllers/AnalyticsController.js +43 -0
  82. package/lib/Controllers/CacheController.js +71 -0
  83. package/lib/Controllers/DatabaseController.js +1685 -0
  84. package/lib/Controllers/FilesController.js +122 -0
  85. package/lib/Controllers/HooksController.js +254 -0
  86. package/lib/Controllers/LiveQueryController.js +72 -0
  87. package/lib/Controllers/LoggerController.js +222 -0
  88. package/lib/Controllers/ParseGraphQLController.js +294 -0
  89. package/lib/Controllers/PushController.js +224 -0
  90. package/lib/Controllers/SchemaController.js +1563 -0
  91. package/lib/Controllers/UserController.js +364 -0
  92. package/lib/Controllers/index.js +251 -0
  93. package/lib/Controllers/types.js +2 -0
  94. package/lib/Deprecator/Deprecations.js +100 -0
  95. package/lib/Deprecator/Deprecator.js +140 -0
  96. package/lib/Error.js +50 -0
  97. package/lib/FileUrlValidator.js +69 -0
  98. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  99. package/lib/GraphQL/ParseGraphQLServer.js +241 -0
  100. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  101. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  102. package/lib/GraphQL/helpers/queryComplexity.js +138 -0
  103. package/lib/GraphQL/loaders/configMutations.js +87 -0
  104. package/lib/GraphQL/loaders/configQueries.js +79 -0
  105. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  106. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  107. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1099 -0
  108. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  109. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  110. package/lib/GraphQL/loaders/functionsMutations.js +77 -0
  111. package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
  112. package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
  113. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  114. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  115. package/lib/GraphQL/loaders/schemaMutations.js +161 -0
  116. package/lib/GraphQL/loaders/schemaQueries.js +80 -0
  117. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  118. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  119. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  120. package/lib/GraphQL/parseGraphQLUtils.js +71 -0
  121. package/lib/GraphQL/transformers/className.js +14 -0
  122. package/lib/GraphQL/transformers/constraintType.js +53 -0
  123. package/lib/GraphQL/transformers/inputType.js +51 -0
  124. package/lib/GraphQL/transformers/mutation.js +280 -0
  125. package/lib/GraphQL/transformers/outputType.js +51 -0
  126. package/lib/GraphQL/transformers/query.js +237 -0
  127. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  128. package/lib/InstallationDedup.js +178 -0
  129. package/lib/KeyPromiseQueue.js +48 -0
  130. package/lib/LiveQuery/Client.js +90 -0
  131. package/lib/LiveQuery/Id.js +20 -0
  132. package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
  133. package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
  134. package/lib/LiveQuery/ParsePubSub.js +37 -0
  135. package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
  136. package/lib/LiveQuery/QueryTools.js +443 -0
  137. package/lib/LiveQuery/RequestSchema.js +161 -0
  138. package/lib/LiveQuery/SessionTokenCache.js +51 -0
  139. package/lib/LiveQuery/Subscription.js +47 -0
  140. package/lib/LiveQuery/equalObjects.js +50 -0
  141. package/lib/Options/Definitions.js +1599 -0
  142. package/lib/Options/docs.js +389 -0
  143. package/lib/Options/index.js +12 -0
  144. package/lib/Options/parsers.js +89 -0
  145. package/lib/Page.js +44 -0
  146. package/lib/ParseMessageQueue.js +24 -0
  147. package/lib/ParseServer.js +632 -0
  148. package/lib/ParseServerRESTController.js +173 -0
  149. package/lib/PromiseRouter.js +208 -0
  150. package/lib/Push/PushQueue.js +67 -0
  151. package/lib/Push/PushWorker.js +101 -0
  152. package/lib/Push/utils.js +129 -0
  153. package/lib/RestQuery.js +1208 -0
  154. package/lib/RestWrite.js +1671 -0
  155. package/lib/Routers/AggregateRouter.js +150 -0
  156. package/lib/Routers/AnalyticsRouter.js +26 -0
  157. package/lib/Routers/AudiencesRouter.js +54 -0
  158. package/lib/Routers/ClassesRouter.js +191 -0
  159. package/lib/Routers/CloudCodeRouter.js +87 -0
  160. package/lib/Routers/FeaturesRouter.js +72 -0
  161. package/lib/Routers/FilesRouter.js +772 -0
  162. package/lib/Routers/FunctionsRouter.js +341 -0
  163. package/lib/Routers/GlobalConfigRouter.js +123 -0
  164. package/lib/Routers/GraphQLRouter.js +41 -0
  165. package/lib/Routers/HooksRouter.js +121 -0
  166. package/lib/Routers/IAPValidationRouter.js +113 -0
  167. package/lib/Routers/InstallationsRouter.js +46 -0
  168. package/lib/Routers/LogsRouter.js +57 -0
  169. package/lib/Routers/PagesRouter.js +676 -0
  170. package/lib/Routers/PurgeRouter.js +45 -0
  171. package/lib/Routers/PushRouter.js +75 -0
  172. package/lib/Routers/RolesRouter.js +33 -0
  173. package/lib/Routers/SchemasRouter.js +118 -0
  174. package/lib/Routers/SecurityRouter.js +34 -0
  175. package/lib/Routers/SessionsRouter.js +126 -0
  176. package/lib/Routers/UsersRouter.js +733 -0
  177. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  178. package/lib/SchemaMigrations/Migrations.js +30 -0
  179. package/lib/Security/Check.js +109 -0
  180. package/lib/Security/CheckGroup.js +44 -0
  181. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  182. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +160 -0
  183. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  184. package/lib/Security/CheckRunner.js +213 -0
  185. package/lib/SharedRest.js +34 -0
  186. package/lib/StatusHandler.js +329 -0
  187. package/lib/TestUtils.js +87 -0
  188. package/lib/Utils.js +577 -0
  189. package/lib/batch.js +185 -0
  190. package/lib/cache.js +12 -0
  191. package/lib/cli/definitions/parse-live-query-server.js +9 -0
  192. package/lib/cli/definitions/parse-server.js +9 -0
  193. package/lib/cli/parse-live-query-server.js +14 -0
  194. package/lib/cli/parse-server.js +101 -0
  195. package/lib/cli/utils/commander.js +132 -0
  196. package/lib/cli/utils/runner.js +53 -0
  197. package/lib/cloud-code/Parse.Cloud.js +797 -0
  198. package/lib/cloud-code/Parse.Server.js +21 -0
  199. package/lib/cryptoUtils.js +54 -0
  200. package/lib/defaults.js +58 -0
  201. package/lib/deprecated.js +12 -0
  202. package/lib/index.js +89 -0
  203. package/lib/logger.js +40 -0
  204. package/lib/middlewares.js +810 -0
  205. package/lib/password.js +40 -0
  206. package/lib/request.js +175 -0
  207. package/lib/requiredParameter.js +11 -0
  208. package/lib/rest.js +264 -0
  209. package/lib/triggers.js +949 -0
  210. package/lib/vendor/README.md +8 -0
  211. package/lib/vendor/mongodbUrl.js +1012 -0
  212. package/package.json +172 -0
  213. package/postinstall.js +38 -0
  214. package/public/custom_json.html +17 -0
  215. package/public/custom_json.json +23 -0
  216. package/public/custom_page.html +15 -0
  217. package/public/de/email_verification_link_expired.html +24 -0
  218. package/public/de/email_verification_link_invalid.html +21 -0
  219. package/public/de/email_verification_send_fail.html +21 -0
  220. package/public/de/email_verification_send_success.html +19 -0
  221. package/public/de/email_verification_success.html +18 -0
  222. package/public/de/password_reset.html +65 -0
  223. package/public/de/password_reset_link_invalid.html +19 -0
  224. package/public/de/password_reset_success.html +18 -0
  225. package/public/de-AT/email_verification_link_expired.html +24 -0
  226. package/public/de-AT/email_verification_link_invalid.html +21 -0
  227. package/public/de-AT/email_verification_send_fail.html +21 -0
  228. package/public/de-AT/email_verification_send_success.html +19 -0
  229. package/public/de-AT/email_verification_success.html +18 -0
  230. package/public/de-AT/password_reset.html +65 -0
  231. package/public/de-AT/password_reset_link_invalid.html +19 -0
  232. package/public/de-AT/password_reset_success.html +18 -0
  233. package/public/email_verification_link_expired.html +24 -0
  234. package/public/email_verification_link_invalid.html +21 -0
  235. package/public/email_verification_send_fail.html +21 -0
  236. package/public/email_verification_send_success.html +19 -0
  237. package/public/email_verification_success.html +18 -0
  238. package/public/password_reset.html +65 -0
  239. package/public/password_reset_link_invalid.html +19 -0
  240. package/public/password_reset_success.html +18 -0
  241. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  242. package/types/@types/deepcopy/index.d.ts +5 -0
  243. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  244. package/types/Options/index.d.ts +320 -0
  245. package/types/ParseServer.d.ts +65 -0
  246. package/types/eslint.config.mjs +30 -0
  247. package/types/index.d.ts +21 -0
  248. package/types/logger.d.ts +2 -0
  249. package/types/tests.ts +44 -0
  250. package/types/tsconfig.json +24 -0
  251. package/views/choose_password +215 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AggregateRouter = void 0;
7
+ var _node = _interopRequireDefault(require("parse/node"));
8
+ var middleware = _interopRequireWildcard(require("../middlewares"));
9
+ var _rest = _interopRequireDefault(require("../rest"));
10
+ var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
11
+ var _UsersRouter = _interopRequireDefault(require("./UsersRouter"));
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ class AggregateRouter extends _ClassesRouter.default {
15
+ async handleFind(req) {
16
+ const body = Object.assign(req.body || {}, _ClassesRouter.default.JSONFromQuery(req.query));
17
+ const options = {};
18
+ if (body.distinct) {
19
+ options.distinct = String(body.distinct);
20
+ }
21
+ if (body.hint) {
22
+ options.hint = body.hint;
23
+ delete body.hint;
24
+ }
25
+ if (body.explain) {
26
+ options.explain = body.explain;
27
+ delete body.explain;
28
+ }
29
+ if (body.comment) {
30
+ options.comment = body.comment;
31
+ delete body.comment;
32
+ }
33
+ if (body.readPreference) {
34
+ options.readPreference = body.readPreference;
35
+ delete body.readPreference;
36
+ }
37
+ if (typeof body.rawValues === 'boolean') {
38
+ options.rawValues = body.rawValues;
39
+ delete body.rawValues;
40
+ }
41
+ if (typeof body.rawFieldNames === 'boolean') {
42
+ options.rawFieldNames = body.rawFieldNames;
43
+ delete body.rawFieldNames;
44
+ }
45
+ const queryOptions = req.config && req.config.query || {};
46
+ if (options.rawValues === undefined && typeof queryOptions.aggregationRawValues === 'boolean') {
47
+ options.rawValues = queryOptions.aggregationRawValues;
48
+ }
49
+ if (options.rawFieldNames === undefined && typeof queryOptions.aggregationRawFieldNames === 'boolean') {
50
+ options.rawFieldNames = queryOptions.aggregationRawFieldNames;
51
+ }
52
+ options.pipeline = AggregateRouter.getPipeline(body);
53
+ if (typeof body.where === 'string') {
54
+ try {
55
+ body.where = JSON.parse(body.where);
56
+ } catch {
57
+ throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'where parameter is not valid JSON');
58
+ }
59
+ }
60
+ try {
61
+ const response = await _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context);
62
+ if (!options.rawValues && !options.rawFieldNames) {
63
+ for (const result of response.results) {
64
+ if (typeof result === 'object') {
65
+ _UsersRouter.default.removeHiddenProperties(result);
66
+ }
67
+ }
68
+ }
69
+ return {
70
+ response
71
+ };
72
+ } catch (e) {
73
+ if (e instanceof _node.default.Error) {
74
+ throw e;
75
+ }
76
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, e.message);
77
+ }
78
+ }
79
+
80
+ /* Builds a pipeline from the body. Originally the body could be passed as a single object,
81
+ * and now we support many options.
82
+ *
83
+ * Array
84
+ *
85
+ * body: [{
86
+ * group: { objectId: '$name' },
87
+ * }]
88
+ *
89
+ * Object
90
+ *
91
+ * body: {
92
+ * group: { objectId: '$name' },
93
+ * }
94
+ *
95
+ *
96
+ * Pipeline Operator with an Array or an Object
97
+ *
98
+ * body: {
99
+ * pipeline: {
100
+ * $group: { objectId: '$name' },
101
+ * }
102
+ * }
103
+ *
104
+ */
105
+ static getPipeline(body) {
106
+ let pipeline = body.pipeline || body;
107
+ if (!Array.isArray(pipeline)) {
108
+ pipeline = Object.keys(pipeline).filter(key => pipeline[key] !== undefined).map(key => {
109
+ return {
110
+ [key]: pipeline[key]
111
+ };
112
+ });
113
+ }
114
+ return pipeline.map(stage => {
115
+ const keys = Object.keys(stage);
116
+ if (keys.length !== 1) {
117
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Pipeline stages should only have one key but found ${keys.join(', ')}.`);
118
+ }
119
+ return AggregateRouter.transformStage(keys[0], stage);
120
+ });
121
+ }
122
+ static transformStage(stageName, stage) {
123
+ const skipKeys = ['distinct', 'where'];
124
+ if (skipKeys.includes(stageName)) {
125
+ return;
126
+ }
127
+ if (stageName[0] !== '$') {
128
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid aggregate stage '${stageName}'.`);
129
+ }
130
+ if (stageName === '$group') {
131
+ if (Object.prototype.hasOwnProperty.call(stage[stageName], 'objectId')) {
132
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Cannot use 'objectId' in aggregation stage $group.`);
133
+ }
134
+ if (!Object.prototype.hasOwnProperty.call(stage[stageName], '_id')) {
135
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid parameter for query: group. Missing key _id`);
136
+ }
137
+ }
138
+ return {
139
+ [stageName]: stage[stageName]
140
+ };
141
+ }
142
+ mountRoutes() {
143
+ this.route('GET', '/aggregate/:className', middleware.promiseEnforceMasterKeyAccess, req => {
144
+ return this.handleFind(req);
145
+ });
146
+ }
147
+ }
148
+ exports.AggregateRouter = AggregateRouter;
149
+ var _default = exports.default = AggregateRouter;
150
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3Jlc3QiLCJfQ2xhc3Nlc1JvdXRlciIsIl9Vc2Vyc1JvdXRlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIkNsYXNzZXNSb3V0ZXIiLCJoYW5kbGVGaW5kIiwicmVxIiwiYm9keSIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJkaXN0aW5jdCIsIlN0cmluZyIsImhpbnQiLCJleHBsYWluIiwiY29tbWVudCIsInJlYWRQcmVmZXJlbmNlIiwicmF3VmFsdWVzIiwicmF3RmllbGROYW1lcyIsInF1ZXJ5T3B0aW9ucyIsImNvbmZpZyIsInVuZGVmaW5lZCIsImFnZ3JlZ2F0aW9uUmF3VmFsdWVzIiwiYWdncmVnYXRpb25SYXdGaWVsZE5hbWVzIiwicGlwZWxpbmUiLCJnZXRQaXBlbGluZSIsIndoZXJlIiwiSlNPTiIsInBhcnNlIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInJlc3BvbnNlIiwicmVzdCIsImZpbmQiLCJhdXRoIiwiY2xhc3NOYW1lIiwiaW5mbyIsImNsaWVudFNESyIsImNvbnRleHQiLCJyZXN1bHQiLCJyZXN1bHRzIiwiVXNlcnNSb3V0ZXIiLCJyZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzIiwiSU5WQUxJRF9RVUVSWSIsIm1lc3NhZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwibWFwIiwic3RhZ2UiLCJsZW5ndGgiLCJqb2luIiwidHJhbnNmb3JtU3RhZ2UiLCJzdGFnZU5hbWUiLCJza2lwS2V5cyIsImluY2x1ZGVzIiwicHJvdG90eXBlIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvQWdncmVnYXRlUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IFVzZXJzUm91dGVyIGZyb20gJy4vVXNlcnNSb3V0ZXInO1xuXG5leHBvcnQgY2xhc3MgQWdncmVnYXRlUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGFzeW5jIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgaWYgKGJvZHkuZGlzdGluY3QpIHtcbiAgICAgIG9wdGlvbnMuZGlzdGluY3QgPSBTdHJpbmcoYm9keS5kaXN0aW5jdCk7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQpIHtcbiAgICAgIG9wdGlvbnMuaGludCA9IGJvZHkuaGludDtcbiAgICAgIGRlbGV0ZSBib2R5LmhpbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LmV4cGxhaW4pIHtcbiAgICAgIG9wdGlvbnMuZXhwbGFpbiA9IGJvZHkuZXhwbGFpbjtcbiAgICAgIGRlbGV0ZSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICAgIGRlbGV0ZSBib2R5LmNvbW1lbnQ7XG4gICAgfVxuICAgIGlmIChib2R5LnJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gYm9keS5yZWFkUHJlZmVyZW5jZTtcbiAgICAgIGRlbGV0ZSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkucmF3VmFsdWVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG9wdGlvbnMucmF3VmFsdWVzID0gYm9keS5yYXdWYWx1ZXM7XG4gICAgICBkZWxldGUgYm9keS5yYXdWYWx1ZXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yYXdGaWVsZE5hbWVzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG9wdGlvbnMucmF3RmllbGROYW1lcyA9IGJvZHkucmF3RmllbGROYW1lcztcbiAgICAgIGRlbGV0ZSBib2R5LnJhd0ZpZWxkTmFtZXM7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IChyZXEuY29uZmlnICYmIHJlcS5jb25maWcucXVlcnkpIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLnJhd1ZhbHVlcyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdWYWx1ZXMgPT09ICdib29sZWFuJykge1xuICAgICAgb3B0aW9ucy5yYXdWYWx1ZXMgPSBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdWYWx1ZXM7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMucmF3RmllbGROYW1lcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2YgcXVlcnlPcHRpb25zLmFnZ3JlZ2F0aW9uUmF3RmllbGROYW1lcyA9PT0gJ2Jvb2xlYW4nXG4gICAgKSB7XG4gICAgICBvcHRpb25zLnJhd0ZpZWxkTmFtZXMgPSBxdWVyeU9wdGlvbnMuYWdncmVnYXRpb25SYXdGaWVsZE5hbWVzO1xuICAgIH1cbiAgICBvcHRpb25zLnBpcGVsaW5lID0gQWdncmVnYXRlUm91dGVyLmdldFBpcGVsaW5lKGJvZHkpO1xuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICd3aGVyZSBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApO1xuICAgICAgaWYgKCFvcHRpb25zLnJhd1ZhbHVlcyAmJiAhb3B0aW9ucy5yYXdGaWVsZE5hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHJlc3BvbnNlIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyogQnVpbGRzIGEgcGlwZWxpbmUgZnJvbSB0aGUgYm9keS4gT3JpZ2luYWxseSB0aGUgYm9keSBjb3VsZCBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgb2JqZWN0LFxuICAgKiBhbmQgbm93IHdlIHN1cHBvcnQgbWFueSBvcHRpb25zLlxuICAgKlxuICAgKiBBcnJheVxuICAgKlxuICAgKiBib2R5OiBbe1xuICAgKiAgIGdyb3VwOiB7IG9iamVjdElkOiAnJG5hbWUnIH0sXG4gICAqIH1dXG4gICAqXG4gICAqIE9iamVjdFxuICAgKlxuICAgKiBib2R5OiB7XG4gICAqICAgZ3JvdXA6IHsgb2JqZWN0SWQ6ICckbmFtZScgfSxcbiAgICogfVxuICAgKlxuICAgKlxuICAgKiBQaXBlbGluZSBPcGVyYXRvciB3aXRoIGFuIEFycmF5IG9yIGFuIE9iamVjdFxuICAgKlxuICAgKiBib2R5OiB7XG4gICAqICAgcGlwZWxpbmU6IHtcbiAgICogICAgICRncm91cDogeyBvYmplY3RJZDogJyRuYW1lJyB9LFxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGdldFBpcGVsaW5lKGJvZHkpIHtcbiAgICBsZXQgcGlwZWxpbmUgPSBib2R5LnBpcGVsaW5lIHx8IGJvZHk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpcGVsaW5lKSkge1xuICAgICAgcGlwZWxpbmUgPSBPYmplY3Qua2V5cyhwaXBlbGluZSlcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gcGlwZWxpbmVba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgW2tleV06IHBpcGVsaW5lW2tleV0gfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpcGVsaW5lLm1hcChzdGFnZSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RhZ2UpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBQaXBlbGluZSBzdGFnZXMgc2hvdWxkIG9ubHkgaGF2ZSBvbmUga2V5IGJ1dCBmb3VuZCAke2tleXMuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEFnZ3JlZ2F0ZVJvdXRlci50cmFuc2Zvcm1TdGFnZShrZXlzWzBdLCBzdGFnZSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtU3RhZ2Uoc3RhZ2VOYW1lLCBzdGFnZSkge1xuICAgIGNvbnN0IHNraXBLZXlzID0gWydkaXN0aW5jdCcsICd3aGVyZSddO1xuICAgIGlmIChza2lwS2V5cy5pbmNsdWRlcyhzdGFnZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGFnZU5hbWVbMF0gIT09ICckJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksIGBJbnZhbGlkIGFnZ3JlZ2F0ZSBzdGFnZSAnJHtzdGFnZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgaWYgKHN0YWdlTmFtZSA9PT0gJyRncm91cCcpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ29iamVjdElkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksXG4gICAgICAgICAgYENhbm5vdCB1c2UgJ29iamVjdElkJyBpbiBhZ2dyZWdhdGlvbiBzdGFnZSAkZ3JvdXAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhZ2Vbc3RhZ2VOYW1lXSwgJ19pZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLFxuICAgICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciBmb3IgcXVlcnk6IGdyb3VwLiBNaXNzaW5nIGtleSBfaWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IFtzdGFnZU5hbWVdOiBzdGFnZVtzdGFnZU5hbWVdIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2FnZ3JlZ2F0ZS86Y2xhc3NOYW1lJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBZ2dyZWdhdGVSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxTQUFBRSx3QkFBQUksQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQU4sdUJBQUEsWUFBQUEsQ0FBQUksQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxL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
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AnalyticsRouter = void 0;
7
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // AnalyticsRouter.js
10
+
11
+ function appOpened(req) {
12
+ const analyticsController = req.config.analyticsController;
13
+ return analyticsController.appOpened(req);
14
+ }
15
+ function trackEvent(req) {
16
+ const analyticsController = req.config.analyticsController;
17
+ return analyticsController.trackEvent(req);
18
+ }
19
+ class AnalyticsRouter extends _PromiseRouter.default {
20
+ mountRoutes() {
21
+ this.route('POST', '/events/AppOpened', appOpened);
22
+ this.route('POST', '/events/:eventName', trackEvent);
23
+ }
24
+ }
25
+ exports.AnalyticsRouter = AnalyticsRouter;
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiYXBwT3BlbmVkIiwicmVxIiwiYW5hbHl0aWNzQ29udHJvbGxlciIsImNvbmZpZyIsInRyYWNrRXZlbnQiLCJBbmFseXRpY3NSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9BbmFseXRpY3NSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5hbHl0aWNzUm91dGVyLmpzXG5pbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcblxuZnVuY3Rpb24gYXBwT3BlbmVkKHJlcSkge1xuICBjb25zdCBhbmFseXRpY3NDb250cm9sbGVyID0gcmVxLmNvbmZpZy5hbmFseXRpY3NDb250cm9sbGVyO1xuICByZXR1cm4gYW5hbHl0aWNzQ29udHJvbGxlci5hcHBPcGVuZWQocmVxKTtcbn1cblxuZnVuY3Rpb24gdHJhY2tFdmVudChyZXEpIHtcbiAgY29uc3QgYW5hbHl0aWNzQ29udHJvbGxlciA9IHJlcS5jb25maWcuYW5hbHl0aWNzQ29udHJvbGxlcjtcbiAgcmV0dXJuIGFuYWx5dGljc0NvbnRyb2xsZXIudHJhY2tFdmVudChyZXEpO1xufVxuXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2V2ZW50cy9BcHBPcGVuZWQnLCBhcHBPcGVuZWQpO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2V2ZW50cy86ZXZlbnROYW1lJywgdHJhY2tFdmVudCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTZDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRDdDOztBQUdBLFNBQVNHLFNBQVNBLENBQUNDLEdBQUcsRUFBRTtFQUN0QixNQUFNQyxtQkFBbUIsR0FBR0QsR0FBRyxDQUFDRSxNQUFNLENBQUNELG1CQUFtQjtFQUMxRCxPQUFPQSxtQkFBbUIsQ0FBQ0YsU0FBUyxDQUFDQyxHQUFHLENBQUM7QUFDM0M7QUFFQSxTQUFTRyxVQUFVQSxDQUFDSCxHQUFHLEVBQUU7RUFDdkIsTUFBTUMsbUJBQW1CLEdBQUdELEdBQUcsQ0FBQ0UsTUFBTSxDQUFDRCxtQkFBbUI7RUFDMUQsT0FBT0EsbUJBQW1CLENBQUNFLFVBQVUsQ0FBQ0gsR0FBRyxDQUFDO0FBQzVDO0FBRU8sTUFBTUksZUFBZSxTQUFTQyxzQkFBYSxDQUFDO0VBQ2pEQyxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUVSLFNBQVMsQ0FBQztJQUNsRCxJQUFJLENBQUNRLEtBQUssQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUVKLFVBQVUsQ0FBQztFQUN0RDtBQUNGO0FBQUNLLE9BQUEsQ0FBQUosZUFBQSxHQUFBQSxlQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AudiencesRouter = void 0;
7
+ var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
8
+ var _rest = _interopRequireDefault(require("../rest"));
9
+ var middleware = _interopRequireWildcard(require("../middlewares"));
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ class AudiencesRouter extends _ClassesRouter.default {
13
+ className() {
14
+ return '_Audience';
15
+ }
16
+ handleFind(req) {
17
+ const body = Object.assign(req.body || {}, _ClassesRouter.default.JSONFromQuery(req.query));
18
+ const options = _ClassesRouter.default.optionsFromBody(body, req.config.defaultLimit);
19
+ return _rest.default.find(req.config, req.auth, '_Audience', body.where, options, req.info.clientSDK, req.info.context).then(response => {
20
+ response.results.forEach(item => {
21
+ item.query = JSON.parse(item.query);
22
+ });
23
+ return {
24
+ response: response
25
+ };
26
+ });
27
+ }
28
+ handleGet(req) {
29
+ return super.handleGet(req).then(data => {
30
+ data.response.query = JSON.parse(data.response.query);
31
+ return data;
32
+ });
33
+ }
34
+ mountRoutes() {
35
+ this.route('GET', '/push_audiences', middleware.promiseEnforceMasterKeyAccess, req => {
36
+ return this.handleFind(req);
37
+ });
38
+ this.route('GET', '/push_audiences/:objectId', middleware.promiseEnforceMasterKeyAccess, req => {
39
+ return this.handleGet(req);
40
+ });
41
+ this.route('POST', '/push_audiences', middleware.promiseEnforceMasterKeyAccess, req => {
42
+ return this.handleCreate(req);
43
+ });
44
+ this.route('PUT', '/push_audiences/:objectId', middleware.promiseEnforceMasterKeyAccess, req => {
45
+ return this.handleUpdate(req);
46
+ });
47
+ this.route('DELETE', '/push_audiences/:objectId', middleware.promiseEnforceMasterKeyAccess, req => {
48
+ return this.handleDelete(req);
49
+ });
50
+ }
51
+ }
52
+ exports.AudiencesRouter = AudiencesRouter;
53
+ var _default = exports.default = AudiencesRouter;
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ2xhc3Nlc1JvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Jlc3QiLCJtaWRkbGV3YXJlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJBdWRpZW5jZXNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwiaGFuZGxlRmluZCIsInJlcSIsImJvZHkiLCJhc3NpZ24iLCJKU09ORnJvbVF1ZXJ5IiwicXVlcnkiLCJvcHRpb25zIiwib3B0aW9uc0Zyb21Cb2R5IiwiY29uZmlnIiwiZGVmYXVsdExpbWl0IiwicmVzdCIsImZpbmQiLCJhdXRoIiwid2hlcmUiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsInJlc3VsdHMiLCJmb3JFYWNoIiwiaXRlbSIsIkpTT04iLCJwYXJzZSIsImhhbmRsZUdldCIsImRhdGEiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVEZWxldGUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9BdWRpZW5jZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsYXNzZXNSb3V0ZXIgZnJvbSAnLi9DbGFzc2VzUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5cbmV4cG9ydCBjbGFzcyBBdWRpZW5jZXNSb3V0ZXIgZXh0ZW5kcyBDbGFzc2VzUm91dGVyIHtcbiAgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiAnX0F1ZGllbmNlJztcbiAgfVxuXG4gIGhhbmRsZUZpbmQocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24ocmVxLmJvZHkgfHwge30sIENsYXNzZXNSb3V0ZXIuSlNPTkZyb21RdWVyeShyZXEucXVlcnkpKTtcbiAgICBjb25zdCBvcHRpb25zID0gQ2xhc3Nlc1JvdXRlci5vcHRpb25zRnJvbUJvZHkoYm9keSwgcmVxLmNvbmZpZy5kZWZhdWx0TGltaXQpO1xuXG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgJ19BdWRpZW5jZScsXG4gICAgICAgIGJvZHkud2hlcmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXNwb25zZS5yZXN1bHRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaXRlbS5xdWVyeSA9IEpTT04ucGFyc2UoaXRlbS5xdWVyeSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBoYW5kbGVHZXQocmVxKSB7XG4gICAgcmV0dXJuIHN1cGVyLmhhbmRsZUdldChyZXEpLnRoZW4oZGF0YSA9PiB7XG4gICAgICBkYXRhLnJlc3BvbnNlLnF1ZXJ5ID0gSlNPTi5wYXJzZShkYXRhLnJlc3BvbnNlLnF1ZXJ5KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3B1c2hfYXVkaWVuY2VzJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL3B1c2hfYXVkaWVuY2VzLzpvYmplY3RJZCcsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9wdXNoX2F1ZGllbmNlcycsIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BVVCcsXG4gICAgICAnL3B1c2hfYXVkaWVuY2VzLzpvYmplY3RJZCcsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0RFTEVURScsXG4gICAgICAnL3B1c2hfYXVkaWVuY2VzLzpvYmplY3RJZCcsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgcmVxID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdWRpZW5jZXNSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUE2QyxTQUFBRyx3QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUgsdUJBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxnQkFBQVAsQ0FBQSxJQUFBRCxDQUFBLGdCQUFBQyxDQUFBLE9BQUFhLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxJQUFBRCxDQUFBLEdBQUFVLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFsQixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxDQUFBSyxHQUFBLElBQUFMLENBQUEsQ0FBQU0sR0FBQSxJQUFBUCxDQUFBLENBQUFFLENBQUEsRUFBQVAsQ0FBQSxFQUFBTSxDQUFBLElBQUFDLENBQUEsQ0FBQVAsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsV0FBQU8sQ0FBQSxLQUFBUixDQUFBLEVBQUFDLENBQUE7QUFBQSxTQUFBTix1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxHQUFBTCxDQUFBLEtBQUFVLE9BQUEsRUFBQVYsQ0FBQTtBQUV0QyxNQUFNbUIsZUFBZSxTQUFTQyxzQkFBYSxDQUFDO0VBQ2pEQyxTQUFTQSxDQUFBLEVBQUc7SUFDVixPQUFPLFdBQVc7RUFDcEI7RUFFQUMsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFO0lBQ2QsTUFBTUMsSUFBSSxHQUFHUixNQUFNLENBQUNTLE1BQU0sQ0FBQ0YsR0FBRyxDQUFDQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUVKLHNCQUFhLENBQUNNLGFBQWEsQ0FBQ0gsR0FBRyxDQUFDSSxLQUFLLENBQUMsQ0FBQztJQUNsRixNQUFNQyxPQUFPLEdBQUdSLHNCQUFhLENBQUNTLGVBQWUsQ0FBQ0wsSUFBSSxFQUFFRCxHQUFHLENBQUNPLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDO0lBRTVFLE9BQU9DLGFBQUksQ0FDUkMsSUFBSSxDQUNIVixHQUFHLENBQUNPLE1BQU0sRUFDVlAsR0FBRyxDQUFDVyxJQUFJLEVBQ1IsV0FBVyxFQUNYVixJQUFJLENBQUNXLEtBQUssRUFDVlAsT0FBTyxFQUNQTCxHQUFHLENBQUNhLElBQUksQ0FBQ0MsU0FBUyxFQUNsQmQsR0FBRyxDQUFDYSxJQUFJLENBQUNFLE9BQ1gsQ0FBQyxDQUNBQyxJQUFJLENBQUNDLFFBQVEsSUFBSTtNQUNoQkEsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQ0MsSUFBSSxJQUFJO1FBQy9CQSxJQUFJLENBQUNoQixLQUFLLEdBQUdpQixJQUFJLENBQUNDLEtBQUssQ0FBQ0YsSUFBSSxDQUFDaEIsS0FBSyxDQUFDO01BQ3JDLENBQUMsQ0FBQztNQUVGLE9BQU87UUFBRWEsUUFBUSxFQUFFQTtNQUFTLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0VBQ047RUFFQU0sU0FBU0EsQ0FBQ3ZCLEdBQUcsRUFBRTtJQUNiLE9BQU8sS0FBSyxDQUFDdUIsU0FBUyxDQUFDdkIsR0FBRyxDQUFDLENBQUNnQixJQUFJLENBQUNRLElBQUksSUFBSTtNQUN2Q0EsSUFBSSxDQUFDUCxRQUFRLENBQUNiLEtBQUssR0FBR2lCLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxJQUFJLENBQUNQLFFBQVEsQ0FBQ2IsS0FBSyxDQUFDO01BRXJELE9BQU9vQixJQUFJO0lBQ2IsQ0FBQyxDQUFDO0VBQ0o7RUFFQUMsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFbkQsVUFBVSxDQUFDb0QsNkJBQTZCLEVBQUUzQixHQUFHLElBQUk7TUFDcEYsT0FBTyxJQUFJLENBQUNELFVBQVUsQ0FBQ0MsR0FBRyxDQUFDO0lBQzdCLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQzBCLEtBQUssQ0FDUixLQUFLLEVBQ0wsMkJBQTJCLEVBQzNCbkQsVUFBVSxDQUFDb0QsNkJBQTZCLEVBQ3hDM0IsR0FBRyxJQUFJO01BQ0wsT0FBTyxJQUFJLENBQUN1QixTQUFTLENBQUN2QixHQUFHLENBQUM7SUFDNUIsQ0FDRixDQUFDO0lBQ0QsSUFBSSxDQUFDMEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRW5ELFVBQVUsQ0FBQ29ELDZCQUE2QixFQUFFM0IsR0FBRyxJQUFJO01BQ3JGLE9BQU8sSUFBSSxDQUFDNEIsWUFBWSxDQUFDNUIsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQzBCLEtBQUssQ0FDUixLQUFLLEVBQ0wsMkJBQTJCLEVBQzNCbkQsVUFBVSxDQUFDb0QsNkJBQTZCLEVBQ3hDM0IsR0FBRyxJQUFJO01BQ0wsT0FBTyxJQUFJLENBQUM2QixZQUFZLENBQUM3QixHQUFHLENBQUM7SUFDL0IsQ0FDRixDQUFDO0lBQ0QsSUFBSSxDQUFDMEIsS0FBSyxDQUNSLFFBQVEsRUFDUiwyQkFBMkIsRUFDM0JuRCxVQUFVLENBQUNvRCw2QkFBNkIsRUFDeEMzQixHQUFHLElBQUk7TUFDTCxPQUFPLElBQUksQ0FBQzhCLFlBQVksQ0FBQzlCLEdBQUcsQ0FBQztJQUMvQixDQUNGLENBQUM7RUFDSDtBQUNGO0FBQUMrQixPQUFBLENBQUFuQyxlQUFBLEdBQUFBLGVBQUE7QUFBQSxJQUFBb0MsUUFBQSxHQUFBRCxPQUFBLENBQUE1QyxPQUFBLEdBRWNTLGVBQWUiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.ClassesRouter = void 0;
7
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
8
+ var _rest = _interopRequireDefault(require("../rest"));
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _node = _interopRequireDefault(require("parse/node"));
11
+ var _middlewares = require("../middlewares");
12
+ var _Error = require("../Error");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ const ALLOWED_GET_QUERY_KEYS = ['keys', 'include', 'excludeKeys', 'readPreference', 'includeReadPreference', 'subqueryReadPreference'];
15
+ class ClassesRouter extends _PromiseRouter.default {
16
+ className(req) {
17
+ return req.params.className;
18
+ }
19
+ handleFind(req) {
20
+ const body = Object.assign(req.body || {}, ClassesRouter.JSONFromQuery(req.query));
21
+ const options = ClassesRouter.optionsFromBody(body, req.config.defaultLimit);
22
+ if (req.config.maxLimit && body.limit > req.config.maxLimit) {
23
+ // Silently replace the limit on the query with the max configured
24
+ options.limit = Number(req.config.maxLimit);
25
+ }
26
+ if (body.redirectClassNameForKey) {
27
+ options.redirectClassNameForKey = String(body.redirectClassNameForKey);
28
+ }
29
+ if (typeof body.where === 'string') {
30
+ try {
31
+ body.where = JSON.parse(body.where);
32
+ } catch {
33
+ throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'where parameter is not valid JSON');
34
+ }
35
+ }
36
+ return _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context).then(response => {
37
+ return {
38
+ response: response
39
+ };
40
+ });
41
+ }
42
+
43
+ // Returns a promise for a {response} object.
44
+ handleGet(req) {
45
+ const body = Object.assign(req.body || {}, ClassesRouter.JSONFromQuery(req.query));
46
+ const options = {};
47
+ for (const key of Object.keys(body)) {
48
+ if (ALLOWED_GET_QUERY_KEYS.indexOf(key) === -1) {
49
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Improper encode of parameter');
50
+ }
51
+ }
52
+ if (body.keys != null) {
53
+ options.keys = String(body.keys);
54
+ }
55
+ if (body.include != null) {
56
+ options.include = String(body.include);
57
+ }
58
+ if (body.excludeKeys != null) {
59
+ options.excludeKeys = String(body.excludeKeys);
60
+ }
61
+ if (typeof body.readPreference === 'string') {
62
+ options.readPreference = body.readPreference;
63
+ }
64
+ if (typeof body.includeReadPreference === 'string') {
65
+ options.includeReadPreference = body.includeReadPreference;
66
+ }
67
+ if (typeof body.subqueryReadPreference === 'string') {
68
+ options.subqueryReadPreference = body.subqueryReadPreference;
69
+ }
70
+ return _rest.default.get(req.config, req.auth, this.className(req), req.params.objectId, options, req.info.clientSDK, req.info.context).then(response => {
71
+ if (!response.results || response.results.length == 0) {
72
+ throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'Object not found.');
73
+ }
74
+ if (this.className(req) === '_User') {
75
+ delete response.results[0].sessionToken;
76
+ const user = response.results[0];
77
+ if (req.auth.user && user.objectId == req.auth.user.id) {
78
+ // Force the session token
79
+ response.results[0].sessionToken = req.info.sessionToken;
80
+ }
81
+ }
82
+ return {
83
+ response: response.results[0]
84
+ };
85
+ });
86
+ }
87
+ handleCreate(req) {
88
+ if (this.className(req) === '_User' && typeof req.body?.objectId === 'string' && req.body.objectId.startsWith('role:')) {
89
+ throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, 'Invalid object ID.', req.config);
90
+ }
91
+ return _rest.default.create(req.config, req.auth, this.className(req), req.body || {}, req.info.clientSDK, req.info.context);
92
+ }
93
+ handleUpdate(req) {
94
+ const where = {
95
+ objectId: req.params.objectId
96
+ };
97
+ return _rest.default.update(req.config, req.auth, this.className(req), where, req.body || {}, req.info.clientSDK, req.info.context);
98
+ }
99
+ handleDelete(req) {
100
+ return _rest.default.del(req.config, req.auth, this.className(req), req.params.objectId, req.info.context).then(() => {
101
+ return {
102
+ response: {}
103
+ };
104
+ });
105
+ }
106
+ static JSONFromQuery(query) {
107
+ const json = {};
108
+ for (const [key, value] of _lodash.default.entries(query)) {
109
+ try {
110
+ json[key] = JSON.parse(value);
111
+ } catch {
112
+ json[key] = value;
113
+ }
114
+ }
115
+ return json;
116
+ }
117
+ static optionsFromBody(body, defaultLimit) {
118
+ const allowConstraints = ['skip', 'limit', 'order', 'count', 'keys', 'excludeKeys', 'include', 'includeAll', 'redirectClassNameForKey', 'where', 'readPreference', 'includeReadPreference', 'subqueryReadPreference', 'hint', 'explain', 'comment'];
119
+ for (const key of Object.keys(body)) {
120
+ if (allowConstraints.indexOf(key) === -1) {
121
+ throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid parameter for query: ${key}`);
122
+ }
123
+ }
124
+ const options = {};
125
+ if (body.skip) {
126
+ options.skip = Number(body.skip);
127
+ }
128
+ if (body.limit || body.limit === 0) {
129
+ options.limit = Number(body.limit);
130
+ } else {
131
+ options.limit = Number(defaultLimit);
132
+ }
133
+ if (body.order) {
134
+ options.order = String(body.order);
135
+ }
136
+ if (body.count) {
137
+ options.count = true;
138
+ }
139
+ if (body.keys != null) {
140
+ options.keys = String(body.keys);
141
+ }
142
+ if (body.excludeKeys != null) {
143
+ options.excludeKeys = String(body.excludeKeys);
144
+ }
145
+ if (body.include != null) {
146
+ options.include = String(body.include);
147
+ }
148
+ if (body.includeAll) {
149
+ options.includeAll = true;
150
+ }
151
+ if (typeof body.readPreference === 'string') {
152
+ options.readPreference = body.readPreference;
153
+ }
154
+ if (typeof body.includeReadPreference === 'string') {
155
+ options.includeReadPreference = body.includeReadPreference;
156
+ }
157
+ if (typeof body.subqueryReadPreference === 'string') {
158
+ options.subqueryReadPreference = body.subqueryReadPreference;
159
+ }
160
+ if (body.hint && (typeof body.hint === 'string' || typeof body.hint === 'object')) {
161
+ options.hint = body.hint;
162
+ }
163
+ if (body.explain) {
164
+ options.explain = body.explain;
165
+ }
166
+ if (body.comment && typeof body.comment === 'string') {
167
+ options.comment = body.comment;
168
+ }
169
+ return options;
170
+ }
171
+ mountRoutes() {
172
+ this.route('GET', '/classes/:className', req => {
173
+ return this.handleFind(req);
174
+ });
175
+ this.route('GET', '/classes/:className/:objectId', req => {
176
+ return this.handleGet(req);
177
+ });
178
+ this.route('POST', '/classes/:className', _middlewares.promiseEnsureIdempotency, req => {
179
+ return this.handleCreate(req);
180
+ });
181
+ this.route('PUT', '/classes/:className/:objectId', _middlewares.promiseEnsureIdempotency, req => {
182
+ return this.handleUpdate(req);
183
+ });
184
+ this.route('DELETE', '/classes/:className/:objectId', req => {
185
+ return this.handleDelete(req);
186
+ });
187
+ }
188
+ }
189
+ exports.ClassesRouter = ClassesRouter;
190
+ var _default = exports.default = ClassesRouter;
191
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Jlc3QiLCJfbG9kYXNoIiwiX25vZGUiLCJfbWlkZGxld2FyZXMiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJBTExPV0VEX0dFVF9RVUVSWV9LRVlTIiwiQ2xhc3Nlc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJjbGFzc05hbWUiLCJyZXEiLCJwYXJhbXMiLCJoYW5kbGVGaW5kIiwiYm9keSIsIk9iamVjdCIsImFzc2lnbiIsIkpTT05Gcm9tUXVlcnkiLCJxdWVyeSIsIm9wdGlvbnMiLCJvcHRpb25zRnJvbUJvZHkiLCJjb25maWciLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImxpbWl0IiwiTnVtYmVyIiwicmVkaXJlY3RDbGFzc05hbWVGb3JLZXkiLCJTdHJpbmciLCJ3aGVyZSIsIkpTT04iLCJwYXJzZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX0pTT04iLCJyZXN0IiwiZmluZCIsImF1dGgiLCJpbmZvIiwiY2xpZW50U0RLIiwiY29udGV4dCIsInRoZW4iLCJyZXNwb25zZSIsImhhbmRsZUdldCIsImtleSIsImtleXMiLCJpbmRleE9mIiwiSU5WQUxJRF9RVUVSWSIsImluY2x1ZGUiLCJleGNsdWRlS2V5cyIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImdldCIsIm9iamVjdElkIiwicmVzdWx0cyIsImxlbmd0aCIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzZXNzaW9uVG9rZW4iLCJ1c2VyIiwiaWQiLCJoYW5kbGVDcmVhdGUiLCJzdGFydHNXaXRoIiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiY3JlYXRlIiwiaGFuZGxlVXBkYXRlIiwidXBkYXRlIiwiaGFuZGxlRGVsZXRlIiwiZGVsIiwianNvbiIsInZhbHVlIiwiXyIsImVudHJpZXMiLCJhbGxvd0NvbnN0cmFpbnRzIiwic2tpcCIsIm9yZGVyIiwiY291bnQiLCJpbmNsdWRlQWxsIiwiaGludCIsImV4cGxhaW4iLCJjb21tZW50IiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0NsYXNzZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kgfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuY29uc3QgQUxMT1dFRF9HRVRfUVVFUllfS0VZUyA9IFtcbiAgJ2tleXMnLFxuICAnaW5jbHVkZScsXG4gICdleGNsdWRlS2V5cycsXG4gICdyZWFkUHJlZmVyZW5jZScsXG4gICdpbmNsdWRlUmVhZFByZWZlcmVuY2UnLFxuICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ2xhc3Nlc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBjbGFzc05hbWUocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuICB9XG5cbiAgaGFuZGxlRmluZChyZXEpIHtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihyZXEuYm9keSB8fCB7fSwgQ2xhc3Nlc1JvdXRlci5KU09ORnJvbVF1ZXJ5KHJlcS5xdWVyeSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBDbGFzc2VzUm91dGVyLm9wdGlvbnNGcm9tQm9keShib2R5LCByZXEuY29uZmlnLmRlZmF1bHRMaW1pdCk7XG4gICAgaWYgKHJlcS5jb25maWcubWF4TGltaXQgJiYgYm9keS5saW1pdCA+IHJlcS5jb25maWcubWF4TGltaXQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgb3B0aW9ucy5saW1pdCA9IE51bWJlcihyZXEuY29uZmlnLm1heExpbWl0KTtcbiAgICB9XG4gICAgaWYgKGJvZHkucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkpIHtcbiAgICAgIG9wdGlvbnMucmVkaXJlY3RDbGFzc05hbWVGb3JLZXkgPSBTdHJpbmcoYm9keS5yZWRpcmVjdENsYXNzTmFtZUZvcktleSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS53aGVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkud2hlcmUgPSBKU09OLnBhcnNlKGJvZHkud2hlcmUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICd3aGVyZSBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdGhpcy5jbGFzc05hbWUocmVxKSxcbiAgICAgICAgYm9keS53aGVyZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSB7cmVzcG9uc2V9IG9iamVjdC5cbiAgaGFuZGxlR2V0KHJlcSkge1xuICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHJlcS5ib2R5IHx8IHt9LCBDbGFzc2VzUm91dGVyLkpTT05Gcm9tUXVlcnkocmVxLnF1ZXJ5KSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYm9keSkpIHtcbiAgICAgIGlmIChBTExPV0VEX0dFVF9RVUVSWV9LRVlTLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdJbXByb3BlciBlbmNvZGUgb2YgcGFyYW1ldGVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJvZHkua2V5cyAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmtleXMgPSBTdHJpbmcoYm9keS5rZXlzKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuaW5jbHVkZSAhPSBudWxsKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGUgPSBTdHJpbmcoYm9keS5pbmNsdWRlKTtcbiAgICB9XG4gICAgaWYgKGJvZHkuZXhjbHVkZUtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5leGNsdWRlS2V5cyA9IFN0cmluZyhib2R5LmV4Y2x1ZGVLZXlzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IGJvZHkucmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IGJvZHkuc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdFxuICAgICAgLmdldChcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICAgIHJlcS5wYXJhbXMub2JqZWN0SWQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3VsdHMgfHwgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT2JqZWN0IG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZShyZXEpID09PSAnX1VzZXInKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3BvbnNlLnJlc3VsdHNbMF0uc2Vzc2lvblRva2VuO1xuXG4gICAgICAgICAgY29uc3QgdXNlciA9IHJlc3BvbnNlLnJlc3VsdHNbMF07XG5cbiAgICAgICAgICBpZiAocmVxLmF1dGgudXNlciAmJiB1c2VyLm9iamVjdElkID09IHJlcS5hdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBzZXNzaW9uIHRva2VuXG4gICAgICAgICAgICByZXNwb25zZS5yZXN1bHRzWzBdLnNlc3Npb25Ub2tlbiA9IHJlcS5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlLnJlc3VsdHNbMF0gfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ3JlYXRlKHJlcSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSkgPT09ICdfVXNlcicgJiZcbiAgICAgIHR5cGVvZiByZXEuYm9keT8ub2JqZWN0SWQgPT09ICdzdHJpbmcnICYmXG4gICAgICByZXEuYm9keS5vYmplY3RJZC5zdGFydHNXaXRoKCdyb2xlOicpXG4gICAgKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCAnSW52YWxpZCBvYmplY3QgSUQuJywgcmVxLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN0LmNyZWF0ZShcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICByZXEuYm9keSB8fCB7fSxcbiAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICB9XG5cbiAgaGFuZGxlVXBkYXRlKHJlcSkge1xuICAgIGNvbnN0IHdoZXJlID0geyBvYmplY3RJZDogcmVxLnBhcmFtcy5vYmplY3RJZCB9O1xuICAgIHJldHVybiByZXN0LnVwZGF0ZShcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgIHRoaXMuY2xhc3NOYW1lKHJlcSksXG4gICAgICB3aGVyZSxcbiAgICAgIHJlcS5ib2R5IHx8IHt9LFxuICAgICAgcmVxLmluZm8uY2xpZW50U0RLLFxuICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVEZWxldGUocmVxKSB7XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5kZWwocmVxLmNvbmZpZywgcmVxLmF1dGgsIHRoaXMuY2xhc3NOYW1lKHJlcSksIHJlcS5wYXJhbXMub2JqZWN0SWQsIHJlcS5pbmZvLmNvbnRleHQpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7fSB9O1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgSlNPTkZyb21RdWVyeShxdWVyeSkge1xuICAgIGNvbnN0IGpzb24gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLmVudHJpZXMocXVlcnkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBqc29uW2tleV0gPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgb3B0aW9uc0Zyb21Cb2R5KGJvZHksIGRlZmF1bHRMaW1pdCkge1xuICAgIGNvbnN0IGFsbG93Q29uc3RyYWludHMgPSBbXG4gICAgICAnc2tpcCcsXG4gICAgICAnbGltaXQnLFxuICAgICAgJ29yZGVyJyxcbiAgICAgICdjb3VudCcsXG4gICAgICAna2V5cycsXG4gICAgICAnZXhjbHVkZUtleXMnLFxuICAgICAgJ2luY2x1ZGUnLFxuICAgICAgJ2luY2x1ZGVBbGwnLFxuICAgICAgJ3JlZGlyZWN0Q2xhc3NOYW1lRm9yS2V5JyxcbiAgICAgICd3aGVyZScsXG4gICAgICAncmVhZFByZWZlcmVuY2UnLFxuICAgICAgJ2luY2x1ZGVSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnc3VicXVlcnlSZWFkUHJlZmVyZW5jZScsXG4gICAgICAnaGludCcsXG4gICAgICAnZXhwbGFpbicsXG4gICAgICAnY29tbWVudCcsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJvZHkpKSB7XG4gICAgICBpZiAoYWxsb3dDb25zdHJhaW50cy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCBgSW52YWxpZCBwYXJhbWV0ZXIgZm9yIHF1ZXJ5OiAke2tleX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChib2R5LnNraXApIHtcbiAgICAgIG9wdGlvbnMuc2tpcCA9IE51bWJlcihib2R5LnNraXApO1xuICAgIH1cbiAgICBpZiAoYm9keS5saW1pdCB8fCBib2R5LmxpbWl0ID09PSAwKSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGJvZHkubGltaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gTnVtYmVyKGRlZmF1bHRMaW1pdCk7XG4gICAgfVxuICAgIGlmIChib2R5Lm9yZGVyKSB7XG4gICAgICBvcHRpb25zLm9yZGVyID0gU3RyaW5nKGJvZHkub3JkZXIpO1xuICAgIH1cbiAgICBpZiAoYm9keS5jb3VudCkge1xuICAgICAgb3B0aW9ucy5jb3VudCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChib2R5LmtleXMgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5rZXlzID0gU3RyaW5nKGJvZHkua2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmV4Y2x1ZGVLZXlzICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZXhjbHVkZUtleXMgPSBTdHJpbmcoYm9keS5leGNsdWRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGUgIT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU3RyaW5nKGJvZHkuaW5jbHVkZSk7XG4gICAgfVxuICAgIGlmIChib2R5LmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUFsbCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYm9keS5yZWFkUHJlZmVyZW5jZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSBib2R5LnJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBib2R5LmluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBib2R5LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmIChib2R5LmhpbnQgJiYgKHR5cGVvZiBib2R5LmhpbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBib2R5LmhpbnQgPT09ICdvYmplY3QnKSkge1xuICAgICAgb3B0aW9ucy5oaW50ID0gYm9keS5oaW50O1xuICAgIH1cbiAgICBpZiAoYm9keS5leHBsYWluKSB7XG4gICAgICBvcHRpb25zLmV4cGxhaW4gPSBib2R5LmV4cGxhaW47XG4gICAgfVxuICAgIGlmIChib2R5LmNvbW1lbnQgJiYgdHlwZW9mIGJvZHkuY29tbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuY29tbWVudCA9IGJvZHkuY29tbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZScsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9jbGFzc2VzLzpjbGFzc05hbWUvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUdldChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2NsYXNzZXMvOmNsYXNzTmFtZScsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BVVCcsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0RFTEVURScsICcvY2xhc3Nlcy86Y2xhc3NOYW1lLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbGFzc2VzUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxjQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFBZ0QsU0FBQUQsdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFaEQsTUFBTUcsc0JBQXNCLEdBQUcsQ0FDN0IsTUFBTSxFQUNOLFNBQVMsRUFDVCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix3QkFBd0IsQ0FDekI7QUFFTSxNQUFNQyxhQUFhLFNBQVNDLHNCQUFhLENBQUM7RUFDL0NDLFNBQVNBLENBQUNDLEdBQUcsRUFBRTtJQUNiLE9BQU9BLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDRixTQUFTO0VBQzdCO0VBRUFHLFVBQVVBLENBQUNG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
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CloudCodeRouter = void 0;
7
+ var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
8
+ var _node = _interopRequireDefault(require("parse/node"));
9
+ var _rest = _interopRequireDefault(require("../rest"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const triggers = require('../triggers');
12
+ const middleware = require('../middlewares');
13
+ function formatJobSchedule(job_schedule) {
14
+ if (typeof job_schedule.startAfter === 'undefined') {
15
+ job_schedule.startAfter = new Date().toISOString();
16
+ }
17
+ return job_schedule;
18
+ }
19
+ function validateJobSchedule(config, job_schedule) {
20
+ const jobs = triggers.getJobs(config.applicationId) || {};
21
+ if (job_schedule.jobName && !jobs[job_schedule.jobName]) {
22
+ throw new _node.default.Error(_node.default.Error.INTERNAL_SERVER_ERROR, 'Cannot Schedule a job that is not deployed');
23
+ }
24
+ }
25
+ class CloudCodeRouter extends _PromiseRouter.default {
26
+ mountRoutes() {
27
+ this.route('GET', '/cloud_code/jobs', middleware.promiseEnforceMasterKeyAccess, CloudCodeRouter.getJobs);
28
+ this.route('GET', '/cloud_code/jobs/data', middleware.promiseEnforceMasterKeyAccess, CloudCodeRouter.getJobsData);
29
+ this.route('POST', '/cloud_code/jobs', middleware.promiseEnforceMasterKeyAccess, CloudCodeRouter.createJob);
30
+ this.route('PUT', '/cloud_code/jobs/:objectId', middleware.promiseEnforceMasterKeyAccess, CloudCodeRouter.editJob);
31
+ this.route('DELETE', '/cloud_code/jobs/:objectId', middleware.promiseEnforceMasterKeyAccess, CloudCodeRouter.deleteJob);
32
+ }
33
+ static getJobs(req) {
34
+ return _rest.default.find(req.config, req.auth, '_JobSchedule', {}, {}).then(scheduledJobs => {
35
+ return {
36
+ response: scheduledJobs.results
37
+ };
38
+ });
39
+ }
40
+ static getJobsData(req) {
41
+ const config = req.config;
42
+ const jobs = triggers.getJobs(config.applicationId) || {};
43
+ return _rest.default.find(req.config, req.auth, '_JobSchedule', {}, {}).then(scheduledJobs => {
44
+ return {
45
+ response: {
46
+ in_use: scheduledJobs.results.map(job => job.jobName),
47
+ jobs: Object.keys(jobs)
48
+ }
49
+ };
50
+ });
51
+ }
52
+ static createJob(req) {
53
+ const {
54
+ job_schedule
55
+ } = req.body || {};
56
+ validateJobSchedule(req.config, job_schedule);
57
+ return _rest.default.create(req.config, req.auth, '_JobSchedule', formatJobSchedule(job_schedule), req.client, req.info.context);
58
+ }
59
+ static editJob(req) {
60
+ const {
61
+ objectId
62
+ } = req.params;
63
+ const {
64
+ job_schedule
65
+ } = req.body || {};
66
+ validateJobSchedule(req.config, job_schedule);
67
+ return _rest.default.update(req.config, req.auth, '_JobSchedule', {
68
+ objectId
69
+ }, formatJobSchedule(job_schedule), undefined, req.info.context).then(response => {
70
+ return {
71
+ response
72
+ };
73
+ });
74
+ }
75
+ static deleteJob(req) {
76
+ const {
77
+ objectId
78
+ } = req.params;
79
+ return _rest.default.del(req.config, req.auth, '_JobSchedule', objectId, req.info.context).then(response => {
80
+ return {
81
+ response
82
+ };
83
+ });
84
+ }
85
+ }
86
+ exports.CloudCodeRouter = CloudCodeRouter;
87
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX25vZGUiLCJfcmVzdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInRyaWdnZXJzIiwibWlkZGxld2FyZSIsImZvcm1hdEpvYlNjaGVkdWxlIiwiam9iX3NjaGVkdWxlIiwic3RhcnRBZnRlciIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInZhbGlkYXRlSm9iU2NoZWR1bGUiLCJjb25maWciLCJqb2JzIiwiZ2V0Sm9icyIsImFwcGxpY2F0aW9uSWQiLCJqb2JOYW1lIiwiUGFyc2UiLCJFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIkNsb3VkQ29kZVJvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJnZXRKb2JzRGF0YSIsImNyZWF0ZUpvYiIsImVkaXRKb2IiLCJkZWxldGVKb2IiLCJyZXEiLCJyZXN0IiwiZmluZCIsImF1dGgiLCJ0aGVuIiwic2NoZWR1bGVkSm9icyIsInJlc3BvbnNlIiwicmVzdWx0cyIsImluX3VzZSIsIm1hcCIsImpvYiIsIk9iamVjdCIsImtleXMiLCJib2R5IiwiY3JlYXRlIiwiY2xpZW50IiwiaW5mbyIsImNvbnRleHQiLCJvYmplY3RJZCIsInBhcmFtcyIsInVwZGF0ZSIsInVuZGVmaW5lZCIsImRlbCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9DbG91ZENvZGVSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IG1pZGRsZXdhcmUgPSByZXF1aXJlKCcuLi9taWRkbGV3YXJlcycpO1xuXG5mdW5jdGlvbiBmb3JtYXRKb2JTY2hlZHVsZShqb2Jfc2NoZWR1bGUpIHtcbiAgaWYgKHR5cGVvZiBqb2Jfc2NoZWR1bGUuc3RhcnRBZnRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBqb2Jfc2NoZWR1bGUuc3RhcnRBZnRlciA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gam9iX3NjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUpvYlNjaGVkdWxlKGNvbmZpZywgam9iX3NjaGVkdWxlKSB7XG4gIGNvbnN0IGpvYnMgPSB0cmlnZ2Vycy5nZXRKb2JzKGNvbmZpZy5hcHBsaWNhdGlvbklkKSB8fCB7fTtcbiAgaWYgKGpvYl9zY2hlZHVsZS5qb2JOYW1lICYmICFqb2JzW2pvYl9zY2hlZHVsZS5qb2JOYW1lXSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgICdDYW5ub3QgU2NoZWR1bGUgYSBqb2IgdGhhdCBpcyBub3QgZGVwbG95ZWQnXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRDb2RlUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgICcvY2xvdWRfY29kZS9qb2JzJyxcbiAgICAgIG1pZGRsZXdhcmUucHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICBDbG91ZENvZGVSb3V0ZXIuZ2V0Sm9ic1xuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdHRVQnLFxuICAgICAgJy9jbG91ZF9jb2RlL2pvYnMvZGF0YScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgQ2xvdWRDb2RlUm91dGVyLmdldEpvYnNEYXRhXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9jbG91ZF9jb2RlL2pvYnMnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIENsb3VkQ29kZVJvdXRlci5jcmVhdGVKb2JcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUFVUJyxcbiAgICAgICcvY2xvdWRfY29kZS9qb2JzLzpvYmplY3RJZCcsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgQ2xvdWRDb2RlUm91dGVyLmVkaXRKb2JcbiAgICApO1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnREVMRVRFJyxcbiAgICAgICcvY2xvdWRfY29kZS9qb2JzLzpvYmplY3RJZCcsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgQ2xvdWRDb2RlUm91dGVyLmRlbGV0ZUpvYlxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Sm9icyhyZXEpIHtcbiAgICByZXR1cm4gcmVzdC5maW5kKHJlcS5jb25maWcsIHJlcS5hdXRoLCAnX0pvYlNjaGVkdWxlJywge30sIHt9KS50aGVuKHNjaGVkdWxlZEpvYnMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2U6IHNjaGVkdWxlZEpvYnMucmVzdWx0cyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Sm9ic0RhdGEocmVxKSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBqb2JzID0gdHJpZ2dlcnMuZ2V0Sm9icyhjb25maWcuYXBwbGljYXRpb25JZCkgfHwge307XG4gICAgcmV0dXJuIHJlc3QuZmluZChyZXEuY29uZmlnLCByZXEuYXV0aCwgJ19Kb2JTY2hlZHVsZScsIHt9LCB7fSkudGhlbihzY2hlZHVsZWRKb2JzID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgaW5fdXNlOiBzY2hlZHVsZWRKb2JzLnJlc3VsdHMubWFwKGpvYiA9PiBqb2Iuam9iTmFtZSksXG4gICAgICAgICAgam9iczogT2JqZWN0LmtleXMoam9icyksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUpvYihyZXEpIHtcbiAgICBjb25zdCB7IGpvYl9zY2hlZHVsZSB9ID0gcmVxLmJvZHkgfHwge307XG4gICAgdmFsaWRhdGVKb2JTY2hlZHVsZShyZXEuY29uZmlnLCBqb2Jfc2NoZWR1bGUpO1xuICAgIHJldHVybiByZXN0LmNyZWF0ZShcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgICdfSm9iU2NoZWR1bGUnLFxuICAgICAgZm9ybWF0Sm9iU2NoZWR1bGUoam9iX3NjaGVkdWxlKSxcbiAgICAgIHJlcS5jbGllbnQsXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBlZGl0Sm9iKHJlcSkge1xuICAgIGNvbnN0IHsgb2JqZWN0SWQgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgeyBqb2Jfc2NoZWR1bGUgfSA9IHJlcS5ib2R5IHx8IHt9O1xuICAgIHZhbGlkYXRlSm9iU2NoZWR1bGUocmVxLmNvbmZpZywgam9iX3NjaGVkdWxlKTtcbiAgICByZXR1cm4gcmVzdFxuICAgICAgLnVwZGF0ZShcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICdfSm9iU2NoZWR1bGUnLFxuICAgICAgICB7IG9iamVjdElkIH0sXG4gICAgICAgIGZvcm1hdEpvYlNjaGVkdWxlKGpvYl9zY2hlZHVsZSksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGVsZXRlSm9iKHJlcSkge1xuICAgIGNvbnN0IHsgb2JqZWN0SWQgfSA9IHJlcS5wYXJhbXM7XG4gICAgcmV0dXJuIHJlc3RcbiAgICAgIC5kZWwocmVxLmNvbmZpZywgcmVxLmF1dGgsICdfSm9iU2NoZWR1bGUnLCBvYmplY3RJZCwgcmVxLmluZm8uY29udGV4dClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQixTQUFBRCx1QkFBQUksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUMzQixNQUFNRyxRQUFRLEdBQUdOLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdkMsTUFBTU8sVUFBVSxHQUFHUCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFFNUMsU0FBU1EsaUJBQWlCQSxDQUFDQyxZQUFZLEVBQUU7RUFDdkMsSUFBSSxPQUFPQSxZQUFZLENBQUNDLFVBQVUsS0FBSyxXQUFXLEVBQUU7SUFDbERELFlBQVksQ0FBQ0MsVUFBVSxHQUFHLElBQUlDLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0VBQ3BEO0VBQ0EsT0FBT0gsWUFBWTtBQUNyQjtBQUVBLFNBQVNJLG1CQUFtQkEsQ0FBQ0MsTUFBTSxFQUFFTCxZQUFZLEVBQUU7RUFDakQsTUFBTU0sSUFBSSxHQUFHVCxRQUFR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