@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,251 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getAnalyticsController = getAnalyticsController;
7
+ exports.getAuthDataManager = getAuthDataManager;
8
+ exports.getCacheController = getCacheController;
9
+ exports.getControllers = getControllers;
10
+ exports.getDatabaseAdapter = getDatabaseAdapter;
11
+ exports.getDatabaseController = getDatabaseController;
12
+ exports.getFilesController = getFilesController;
13
+ exports.getHooksController = getHooksController;
14
+ exports.getLiveQueryController = getLiveQueryController;
15
+ exports.getLoggerController = getLoggerController;
16
+ exports.getParseGraphQLController = getParseGraphQLController;
17
+ exports.getPushController = getPushController;
18
+ exports.getUserController = getUserController;
19
+ var _Auth = _interopRequireDefault(require("../Adapters/Auth"));
20
+ var _Options = require("../Options");
21
+ var _AdapterLoader = require("../Adapters/AdapterLoader");
22
+ var _defaults = _interopRequireDefault(require("../defaults"));
23
+ var _LoggerController = require("./LoggerController");
24
+ var _FilesController = require("./FilesController");
25
+ var _HooksController = require("./HooksController");
26
+ var _UserController = require("./UserController");
27
+ var _CacheController = require("./CacheController");
28
+ var _LiveQueryController = require("./LiveQueryController");
29
+ var _AnalyticsController = require("./AnalyticsController");
30
+ var _PushController = require("./PushController");
31
+ var _PushQueue = require("../Push/PushQueue");
32
+ var _PushWorker = require("../Push/PushWorker");
33
+ var _DatabaseController = _interopRequireDefault(require("./DatabaseController"));
34
+ var _GridFSBucketAdapter = require("../Adapters/Files/GridFSBucketAdapter");
35
+ var _WinstonLoggerAdapter = require("../Adapters/Logger/WinstonLoggerAdapter");
36
+ var _InMemoryCacheAdapter = require("../Adapters/Cache/InMemoryCacheAdapter");
37
+ var _AnalyticsAdapter = require("../Adapters/Analytics/AnalyticsAdapter");
38
+ var _MongoStorageAdapter = _interopRequireDefault(require("../Adapters/Storage/Mongo/MongoStorageAdapter"));
39
+ var _PostgresStorageAdapter = _interopRequireDefault(require("../Adapters/Storage/Postgres/PostgresStorageAdapter"));
40
+ var _ParseGraphQLController = _interopRequireDefault(require("./ParseGraphQLController"));
41
+ var _SchemaCache = _interopRequireDefault(require("../Adapters/Cache/SchemaCache"));
42
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
43
+ // Controllers
44
+
45
+ // Adapters
46
+
47
+ function getControllers(options) {
48
+ const loggerController = getLoggerController(options);
49
+ const filesController = getFilesController(options);
50
+ const userController = getUserController(options);
51
+ const cacheController = getCacheController(options);
52
+ const analyticsController = getAnalyticsController(options);
53
+ const liveQueryController = getLiveQueryController(options);
54
+ const databaseController = getDatabaseController(options);
55
+ const hooksController = getHooksController(options, databaseController);
56
+ const authDataManager = getAuthDataManager(options);
57
+ const parseGraphQLController = getParseGraphQLController(options, {
58
+ databaseController,
59
+ cacheController
60
+ });
61
+ return {
62
+ loggerController,
63
+ filesController,
64
+ userController,
65
+ analyticsController,
66
+ cacheController,
67
+ parseGraphQLController,
68
+ liveQueryController,
69
+ databaseController,
70
+ hooksController,
71
+ authDataManager,
72
+ schemaCache: _SchemaCache.default
73
+ };
74
+ }
75
+ function getLoggerController(options) {
76
+ const {
77
+ appId,
78
+ jsonLogs,
79
+ logsFolder,
80
+ verbose,
81
+ logLevel,
82
+ logStringTruncateLength,
83
+ maxLogFiles,
84
+ silent,
85
+ loggerAdapter
86
+ } = options;
87
+ const loggerOptions = {
88
+ jsonLogs,
89
+ logsFolder,
90
+ verbose,
91
+ logLevel,
92
+ logStringTruncateLength,
93
+ silent,
94
+ maxLogFiles
95
+ };
96
+ const loggerControllerAdapter = (0, _AdapterLoader.loadAdapter)(loggerAdapter, _WinstonLoggerAdapter.WinstonLoggerAdapter, loggerOptions);
97
+ return new _LoggerController.LoggerController(loggerControllerAdapter, appId, loggerOptions);
98
+ }
99
+ function getFilesController(options) {
100
+ const {
101
+ appId,
102
+ databaseURI,
103
+ databaseOptions = {},
104
+ filesAdapter,
105
+ databaseAdapter,
106
+ preserveFileName,
107
+ fileKey
108
+ } = options;
109
+ if (!filesAdapter && databaseAdapter) {
110
+ throw 'When using an explicit database adapter, you must also use an explicit filesAdapter.';
111
+ }
112
+ const filesControllerAdapter = (0, _AdapterLoader.loadAdapter)(filesAdapter, () => {
113
+ return new _GridFSBucketAdapter.GridFSBucketAdapter(databaseURI, databaseOptions, fileKey);
114
+ });
115
+ return new _FilesController.FilesController(filesControllerAdapter, appId, {
116
+ preserveFileName
117
+ });
118
+ }
119
+ function getUserController(options) {
120
+ const {
121
+ appId,
122
+ emailAdapter,
123
+ verifyUserEmails
124
+ } = options;
125
+ const emailControllerAdapter = (0, _AdapterLoader.loadAdapter)(emailAdapter);
126
+ return new _UserController.UserController(emailControllerAdapter, appId, {
127
+ verifyUserEmails
128
+ });
129
+ }
130
+ function getCacheController(options) {
131
+ const {
132
+ appId,
133
+ cacheAdapter,
134
+ cacheTTL,
135
+ cacheMaxSize
136
+ } = options;
137
+ const cacheControllerAdapter = (0, _AdapterLoader.loadAdapter)(cacheAdapter, _InMemoryCacheAdapter.InMemoryCacheAdapter, {
138
+ appId: appId,
139
+ ttl: cacheTTL,
140
+ maxSize: cacheMaxSize
141
+ });
142
+ return new _CacheController.CacheController(cacheControllerAdapter, appId);
143
+ }
144
+ function getParseGraphQLController(options, controllerDeps) {
145
+ return new _ParseGraphQLController.default({
146
+ mountGraphQL: options.mountGraphQL,
147
+ ...controllerDeps
148
+ });
149
+ }
150
+ function getAnalyticsController(options) {
151
+ const {
152
+ analyticsAdapter
153
+ } = options;
154
+ const analyticsControllerAdapter = (0, _AdapterLoader.loadAdapter)(analyticsAdapter, _AnalyticsAdapter.AnalyticsAdapter);
155
+ return new _AnalyticsController.AnalyticsController(analyticsControllerAdapter);
156
+ }
157
+ function getLiveQueryController(options) {
158
+ return new _LiveQueryController.LiveQueryController(options.liveQuery);
159
+ }
160
+ function getDatabaseController(options) {
161
+ const {
162
+ databaseURI,
163
+ collectionPrefix,
164
+ databaseOptions
165
+ } = options;
166
+ let {
167
+ databaseAdapter
168
+ } = options;
169
+ if ((databaseOptions || databaseURI && databaseURI !== _defaults.default.databaseURI || collectionPrefix !== _defaults.default.collectionPrefix) && databaseAdapter) {
170
+ throw 'You cannot specify both a databaseAdapter and a databaseURI/databaseOptions/collectionPrefix.';
171
+ } else if (!databaseAdapter) {
172
+ databaseAdapter = getDatabaseAdapter(databaseURI, collectionPrefix, databaseOptions);
173
+ } else {
174
+ databaseAdapter = (0, _AdapterLoader.loadAdapter)(databaseAdapter);
175
+ }
176
+ return new _DatabaseController.default(databaseAdapter, options);
177
+ }
178
+ function getHooksController(options, databaseController) {
179
+ const {
180
+ appId,
181
+ webhookKey
182
+ } = options;
183
+ return new _HooksController.HooksController(appId, databaseController, webhookKey);
184
+ }
185
+ async function getPushController(options) {
186
+ const {
187
+ scheduledPush,
188
+ push
189
+ } = options;
190
+ const pushOptions = Object.assign({}, push);
191
+ const pushQueueOptions = pushOptions.queueOptions || {};
192
+ if (pushOptions.queueOptions) {
193
+ delete pushOptions.queueOptions;
194
+ }
195
+
196
+ // Pass the push options too as it works with the default
197
+ const ParsePushAdapter = await (0, _AdapterLoader.loadModule)('@parse/push-adapter');
198
+ const pushAdapter = (0, _AdapterLoader.loadAdapter)(pushOptions && pushOptions.adapter, ParsePushAdapter, pushOptions);
199
+ // We pass the options and the base class for the adatper,
200
+ // Note that passing an instance would work too
201
+ const pushController = new _PushController.PushController();
202
+ const hasPushSupport = !!(pushAdapter && push);
203
+ const hasPushScheduledSupport = hasPushSupport && scheduledPush === true;
204
+ const {
205
+ disablePushWorker
206
+ } = pushQueueOptions;
207
+ const pushControllerQueue = new _PushQueue.PushQueue(pushQueueOptions);
208
+ let pushWorker;
209
+ if (!disablePushWorker) {
210
+ pushWorker = new _PushWorker.PushWorker(pushAdapter, pushQueueOptions);
211
+ }
212
+ return {
213
+ pushController,
214
+ hasPushSupport,
215
+ hasPushScheduledSupport,
216
+ pushControllerQueue,
217
+ pushWorker
218
+ };
219
+ }
220
+ function getAuthDataManager(options) {
221
+ const {
222
+ auth,
223
+ enableAnonymousUsers
224
+ } = options;
225
+ return (0, _Auth.default)(auth, enableAnonymousUsers);
226
+ }
227
+ function getDatabaseAdapter(databaseURI, collectionPrefix, databaseOptions) {
228
+ let protocol;
229
+ try {
230
+ const parsedURI = new URL(databaseURI);
231
+ protocol = parsedURI.protocol ? parsedURI.protocol.toLowerCase() : null;
232
+ } catch {
233
+ /* */
234
+ }
235
+ switch (protocol) {
236
+ case 'postgres:':
237
+ case 'postgresql:':
238
+ return new _PostgresStorageAdapter.default({
239
+ uri: databaseURI,
240
+ collectionPrefix,
241
+ databaseOptions
242
+ });
243
+ default:
244
+ return new _MongoStorageAdapter.default({
245
+ uri: databaseURI,
246
+ collectionPrefix,
247
+ mongoOptions: databaseOptions
248
+ });
249
+ }
250
+ }
251
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXV0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX09wdGlvbnMiLCJfQWRhcHRlckxvYWRlciIsIl9kZWZhdWx0cyIsIl9Mb2dnZXJDb250cm9sbGVyIiwiX0ZpbGVzQ29udHJvbGxlciIsIl9Ib29rc0NvbnRyb2xsZXIiLCJfVXNlckNvbnRyb2xsZXIiLCJfQ2FjaGVDb250cm9sbGVyIiwiX0xpdmVRdWVyeUNvbnRyb2xsZXIiLCJfQW5hbHl0aWNzQ29udHJvbGxlciIsIl9QdXNoQ29udHJvbGxlciIsIl9QdXNoUXVldWUiLCJfUHVzaFdvcmtlciIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfR3JpZEZTQnVja2V0QWRhcHRlciIsIl9XaW5zdG9uTG9nZ2VyQWRhcHRlciIsIl9Jbk1lbW9yeUNhY2hlQWRhcHRlciIsIl9BbmFseXRpY3NBZGFwdGVyIiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX1NjaGVtYUNhY2hlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZ2V0Q29udHJvbGxlcnMiLCJvcHRpb25zIiwibG9nZ2VyQ29udHJvbGxlciIsImdldExvZ2dlckNvbnRyb2xsZXIiLCJmaWxlc0NvbnRyb2xsZXIiLCJnZXRGaWxlc0NvbnRyb2xsZXIiLCJ1c2VyQ29udHJvbGxlciIsImdldFVzZXJDb250cm9sbGVyIiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiYW5hbHl0aWNzQ29udHJvbGxlciIsImdldEFuYWx5dGljc0NvbnRyb2xsZXIiLCJsaXZlUXVlcnlDb250cm9sbGVyIiwiZ2V0TGl2ZVF1ZXJ5Q29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImdldERhdGFiYXNlQ29udHJvbGxlciIsImhvb2tzQ29udHJvbGxlciIsImdldEhvb2tzQ29udHJvbGxlciIsImF1dGhEYXRhTWFuYWdlciIsImdldEF1dGhEYXRhTWFuYWdlciIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJnZXRQYXJzZUdyYXBoUUxDb250cm9sbGVyIiwic2NoZW1hQ2FjaGUiLCJTY2hlbWFDYWNoZSIsImFwcElkIiwianNvbkxvZ3MiLCJsb2dzRm9sZGVyIiwidmVyYm9zZSIsImxvZ0xldmVsIiwibG9nU3RyaW5nVHJ1bmNhdGVMZW5ndGgiLCJtYXhMb2dGaWxlcyIsInNpbGVudCIsImxvZ2dlckFkYXB0ZXIiLCJsb2dnZXJPcHRpb25zIiwibG9nZ2VyQ29udHJvbGxlckFkYXB0ZXIiLCJsb2FkQWRhcHRlciIsIldpbnN0b25Mb2dnZXJBZGFwdGVyIiwiTG9nZ2VyQ29udHJvbGxlciIsImRhdGFiYXNlVVJJIiwiZGF0YWJhc2VPcHRpb25zIiwiZmlsZXNBZGFwdGVyIiwiZGF0YWJhc2VBZGFwdGVyIiwicHJlc2VydmVGaWxlTmFtZSIsImZpbGVLZXkiLCJmaWxlc0NvbnRyb2xsZXJBZGFwdGVyIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQ29udHJvbGxlciIsImVtYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJlbWFpbENvbnRyb2xsZXJBZGFwdGVyIiwiVXNlckNvbnRyb2xsZXIiLCJjYWNoZUFkYXB0ZXIiLCJjYWNoZVRUTCIsImNhY2hlTWF4U2l6ZSIsImNhY2hlQ29udHJvbGxlckFkYXB0ZXIiLCJJbk1lbW9yeUNhY2hlQWRhcHRlciIsInR0bCIsIm1heFNpemUiLCJDYWNoZUNvbnRyb2xsZXIiLCJjb250cm9sbGVyRGVwcyIsIlBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJtb3VudEdyYXBoUUwiLCJhbmFseXRpY3NBZGFwdGVyIiwiYW5hbHl0aWNzQ29udHJvbGxlckFkYXB0ZXIiLCJBbmFseXRpY3NBZGFwdGVyIiwiQW5hbHl0aWNzQ29udHJvbGxlciIsIkxpdmVRdWVyeUNvbnRyb2xsZXIiLCJsaXZlUXVlcnkiLCJjb2xsZWN0aW9uUHJlZml4IiwiZGVmYXVsdHMiLCJnZXREYXRhYmFzZUFkYXB0ZXIiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJ3ZWJob29rS2V5IiwiSG9va3NDb250cm9sbGVyIiwiZ2V0UHVzaENvbnRyb2xsZXIiLCJzY2hlZHVsZWRQdXNoIiwicHVzaCIsInB1c2hPcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwicHVzaFF1ZXVlT3B0aW9ucyIsInF1ZXVlT3B0aW9ucyIsIlBhcnNlUHVzaEFkYXB0ZXIiLCJsb2FkTW9kdWxlIiwicHVzaEFkYXB0ZXIiLCJhZGFwdGVyIiwicHVzaENvbnRyb2xsZXIiLCJQdXNoQ29udHJvbGxlciIsImhhc1B1c2hTdXBwb3J0IiwiaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQiLCJkaXNhYmxlUHVzaFdvcmtlciIsInB1c2hDb250cm9sbGVyUXVldWUiLCJQdXNoUXVldWUiLCJwdXNoV29ya2VyIiwiUHVzaFdvcmtlciIsImF1dGgiLCJlbmFibGVBbm9ueW1vdXNVc2VycyIsInByb3RvY29sIiwicGFyc2VkVVJJIiwiVVJMIiwidG9Mb3dlckNhc2UiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwidXJpIiwiTW9uZ29TdG9yYWdlQWRhcHRlciIsIm1vbmdvT3B0aW9ucyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXV0aERhdGFNYW5hZ2VyIGZyb20gJy4uL0FkYXB0ZXJzL0F1dGgnO1xuaW1wb3J0IHsgUGFyc2VTZXJ2ZXJPcHRpb25zIH0gZnJvbSAnLi4vT3B0aW9ucyc7XG5pbXBvcnQgeyBsb2FkQWRhcHRlciwgbG9hZE1vZHVsZSB9IGZyb20gJy4uL0FkYXB0ZXJzL0FkYXB0ZXJMb2FkZXInO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcbi8vIENvbnRyb2xsZXJzXG5pbXBvcnQgeyBMb2dnZXJDb250cm9sbGVyIH0gZnJvbSAnLi9Mb2dnZXJDb250cm9sbGVyJztcbmltcG9ydCB7IEZpbGVzQ29udHJvbGxlciB9IGZyb20gJy4vRmlsZXNDb250cm9sbGVyJztcbmltcG9ydCB7IEhvb2tzQ29udHJvbGxlciB9IGZyb20gJy4vSG9va3NDb250cm9sbGVyJztcbmltcG9ydCB7IFVzZXJDb250cm9sbGVyIH0gZnJvbSAnLi9Vc2VyQ29udHJvbGxlcic7XG5pbXBvcnQgeyBDYWNoZUNvbnRyb2xsZXIgfSBmcm9tICcuL0NhY2hlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBMaXZlUXVlcnlDb250cm9sbGVyIH0gZnJvbSAnLi9MaXZlUXVlcnlDb250cm9sbGVyJztcbmltcG9ydCB7IEFuYWx5dGljc0NvbnRyb2xsZXIgfSBmcm9tICcuL0FuYWx5dGljc0NvbnRyb2xsZXInO1xuaW1wb3J0IHsgUHVzaENvbnRyb2xsZXIgfSBmcm9tICcuL1B1c2hDb250cm9sbGVyJztcbmltcG9ydCB7IFB1c2hRdWV1ZSB9IGZyb20gJy4uL1B1c2gvUHVzaFF1ZXVlJztcbmltcG9ydCB7IFB1c2hXb3JrZXIgfSBmcm9tICcuLi9QdXNoL1B1c2hXb3JrZXInO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuL0RhdGFiYXNlQ29udHJvbGxlcic7XG5cbi8vIEFkYXB0ZXJzXG5pbXBvcnQgeyBHcmlkRlNCdWNrZXRBZGFwdGVyIH0gZnJvbSAnLi4vQWRhcHRlcnMvRmlsZXMvR3JpZEZTQnVja2V0QWRhcHRlcic7XG5pbXBvcnQgeyBXaW5zdG9uTG9nZ2VyQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0xvZ2dlci9XaW5zdG9uTG9nZ2VyQWRhcHRlcic7XG5pbXBvcnQgeyBJbk1lbW9yeUNhY2hlQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0NhY2hlL0luTWVtb3J5Q2FjaGVBZGFwdGVyJztcbmltcG9ydCB7IEFuYWx5dGljc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlcic7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi4vQWRhcHRlcnMvU3RvcmFnZS9Qb3N0Z3Jlcy9Qb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyIGZyb20gJy4vUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgU2NoZW1hQ2FjaGUgZnJvbSAnLi4vQWRhcHRlcnMvQ2FjaGUvU2NoZW1hQ2FjaGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcnMob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKSB7XG4gIGNvbnN0IGxvZ2dlckNvbnRyb2xsZXIgPSBnZXRMb2dnZXJDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBnZXRGaWxlc0NvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJDb250cm9sbGVyID0gZ2V0VXNlckNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGNhY2hlQ29udHJvbGxlciA9IGdldENhY2hlQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgYW5hbHl0aWNzQ29udHJvbGxlciA9IGdldEFuYWx5dGljc0NvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGxpdmVRdWVyeUNvbnRyb2xsZXIgPSBnZXRMaXZlUXVlcnlDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBkYXRhYmFzZUNvbnRyb2xsZXIgPSBnZXREYXRhYmFzZUNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGhvb2tzQ29udHJvbGxlciA9IGdldEhvb2tzQ29udHJvbGxlcihvcHRpb25zLCBkYXRhYmFzZUNvbnRyb2xsZXIpO1xuICBjb25zdCBhdXRoRGF0YU1hbmFnZXIgPSBnZXRBdXRoRGF0YU1hbmFnZXIob3B0aW9ucyk7XG4gIGNvbnN0IHBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSBnZXRQYXJzZUdyYXBoUUxDb250cm9sbGVyKG9wdGlvbnMsIHtcbiAgICBkYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBsb2dnZXJDb250cm9sbGVyLFxuICAgIGZpbGVzQ29udHJvbGxlcixcbiAgICB1c2VyQ29udHJvbGxlcixcbiAgICBhbmFseXRpY3NDb250cm9sbGVyLFxuICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgIGxpdmVRdWVyeUNvbnRyb2xsZXIsXG4gICAgZGF0YWJhc2VDb250cm9sbGVyLFxuICAgIGhvb2tzQ29udHJvbGxlcixcbiAgICBhdXRoRGF0YU1hbmFnZXIsXG4gICAgc2NoZW1hQ2FjaGU6IFNjaGVtYUNhY2hlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBMb2dnZXJDb250cm9sbGVyIHtcbiAgY29uc3Qge1xuICAgIGFwcElkLFxuICAgIGpzb25Mb2dzLFxuICAgIGxvZ3NGb2xkZXIsXG4gICAgdmVyYm9zZSxcbiAgICBsb2dMZXZlbCxcbiAgICBsb2dTdHJpbmdUcnVuY2F0ZUxlbmd0aCxcbiAgICBtYXhMb2dGaWxlcyxcbiAgICBzaWxlbnQsXG4gICAgbG9nZ2VyQWRhcHRlcixcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvZ2dlck9wdGlvbnMgPSB7XG4gICAganNvbkxvZ3MsXG4gICAgbG9nc0ZvbGRlcixcbiAgICB2ZXJib3NlLFxuICAgIGxvZ0xldmVsLFxuICAgIGxvZ1N0cmluZ1RydW5jYXRlTGVuZ3RoLFxuICAgIHNpbGVudCxcbiAgICBtYXhMb2dGaWxlcyxcbiAgfTtcbiAgY29uc3QgbG9nZ2VyQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihsb2dnZXJBZGFwdGVyLCBXaW5zdG9uTG9nZ2VyQWRhcHRlciwgbG9nZ2VyT3B0aW9ucyk7XG4gIHJldHVybiBuZXcgTG9nZ2VyQ29udHJvbGxlcihsb2dnZXJDb250cm9sbGVyQWRhcHRlciwgYXBwSWQsIGxvZ2dlck9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZXNDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IEZpbGVzQ29udHJvbGxlciB7XG4gIGNvbnN0IHtcbiAgICBhcHBJZCxcbiAgICBkYXRhYmFzZVVSSSxcbiAgICBkYXRhYmFzZU9wdGlvbnMgPSB7fSxcbiAgICBmaWxlc0FkYXB0ZXIsXG4gICAgZGF0YWJhc2VBZGFwdGVyLFxuICAgIHByZXNlcnZlRmlsZU5hbWUsXG4gICAgZmlsZUtleSxcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICghZmlsZXNBZGFwdGVyICYmIGRhdGFiYXNlQWRhcHRlcikge1xuICAgIHRocm93ICdXaGVuIHVzaW5nIGFuIGV4cGxpY2l0IGRhdGFiYXNlIGFkYXB0ZXIsIHlvdSBtdXN0IGFsc28gdXNlIGFuIGV4cGxpY2l0IGZpbGVzQWRhcHRlci4nO1xuICB9XG4gIGNvbnN0IGZpbGVzQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihmaWxlc0FkYXB0ZXIsICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIoZGF0YWJhc2VVUkksIGRhdGFiYXNlT3B0aW9ucywgZmlsZUtleSk7XG4gIH0pO1xuICByZXR1cm4gbmV3IEZpbGVzQ29udHJvbGxlcihmaWxlc0NvbnRyb2xsZXJBZGFwdGVyLCBhcHBJZCwge1xuICAgIHByZXNlcnZlRmlsZU5hbWUsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlckNvbnRyb2xsZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKTogVXNlckNvbnRyb2xsZXIge1xuICBjb25zdCB7IGFwcElkLCBlbWFpbEFkYXB0ZXIsIHZlcmlmeVVzZXJFbWFpbHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYWlsQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihlbWFpbEFkYXB0ZXIpO1xuICByZXR1cm4gbmV3IFVzZXJDb250cm9sbGVyKGVtYWlsQ29udHJvbGxlckFkYXB0ZXIsIGFwcElkLCB7XG4gICAgdmVyaWZ5VXNlckVtYWlscyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZUNvbnRyb2xsZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKTogQ2FjaGVDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhcHBJZCwgY2FjaGVBZGFwdGVyLCBjYWNoZVRUTCwgY2FjaGVNYXhTaXplIH0gPSBvcHRpb25zO1xuICBjb25zdCBjYWNoZUNvbnRyb2xsZXJBZGFwdGVyID0gbG9hZEFkYXB0ZXIoY2FjaGVBZGFwdGVyLCBJbk1lbW9yeUNhY2hlQWRhcHRlciwge1xuICAgIGFwcElkOiBhcHBJZCxcbiAgICB0dGw6IGNhY2hlVFRMLFxuICAgIG1heFNpemU6IGNhY2hlTWF4U2l6ZSxcbiAgfSk7XG4gIHJldHVybiBuZXcgQ2FjaGVDb250cm9sbGVyKGNhY2hlQ29udHJvbGxlckFkYXB0ZXIsIGFwcElkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlR3JhcGhRTENvbnRyb2xsZXIoXG4gIG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyxcbiAgY29udHJvbGxlckRlcHNcbik6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIge1xuICByZXR1cm4gbmV3IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIoe1xuICAgIG1vdW50R3JhcGhRTDogb3B0aW9ucy5tb3VudEdyYXBoUUwsXG4gICAgLi4uY29udHJvbGxlckRlcHMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5hbHl0aWNzQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBBbmFseXRpY3NDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhbmFseXRpY3NBZGFwdGVyIH0gPSBvcHRpb25zO1xuICBjb25zdCBhbmFseXRpY3NDb250cm9sbGVyQWRhcHRlciA9IGxvYWRBZGFwdGVyKGFuYWx5dGljc0FkYXB0ZXIsIEFuYWx5dGljc0FkYXB0ZXIpO1xuICByZXR1cm4gbmV3IEFuYWx5dGljc0NvbnRyb2xsZXIoYW5hbHl0aWNzQ29udHJvbGxlckFkYXB0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGl2ZVF1ZXJ5Q29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBMaXZlUXVlcnlDb250cm9sbGVyIHtcbiAgcmV0dXJuIG5ldyBMaXZlUXVlcnlDb250cm9sbGVyKG9wdGlvbnMubGl2ZVF1ZXJ5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFiYXNlQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBEYXRhYmFzZUNvbnRyb2xsZXIge1xuICBjb25zdCB7IGRhdGFiYXNlVVJJLCBjb2xsZWN0aW9uUHJlZml4LCBkYXRhYmFzZU9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGxldCB7IGRhdGFiYXNlQWRhcHRlciB9ID0gb3B0aW9ucztcbiAgaWYgKFxuICAgIChkYXRhYmFzZU9wdGlvbnMgfHxcbiAgICAgIChkYXRhYmFzZVVSSSAmJiBkYXRhYmFzZVVSSSAhPT0gZGVmYXVsdHMuZGF0YWJhc2VVUkkpIHx8XG4gICAgICBjb2xsZWN0aW9uUHJlZml4ICE9PSBkZWZhdWx0cy5jb2xsZWN0aW9uUHJlZml4KSAmJlxuICAgIGRhdGFiYXNlQWRhcHRlclxuICApIHtcbiAgICB0aHJvdyAnWW91IGNhbm5vdCBzcGVjaWZ5IGJvdGggYSBkYXRhYmFzZUFkYXB0ZXIgYW5kIGEgZGF0YWJhc2VVUkkvZGF0YWJhc2VPcHRpb25zL2NvbGxlY3Rpb25QcmVmaXguJztcbiAgfSBlbHNlIGlmICghZGF0YWJhc2VBZGFwdGVyKSB7XG4gICAgZGF0YWJhc2VBZGFwdGVyID0gZ2V0RGF0YWJhc2VBZGFwdGVyKGRhdGFiYXNlVVJJLCBjb2xsZWN0aW9uUHJlZml4LCBkYXRhYmFzZU9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGRhdGFiYXNlQWRhcHRlciA9IGxvYWRBZGFwdGVyKGRhdGFiYXNlQWRhcHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRhYmFzZUNvbnRyb2xsZXIoZGF0YWJhc2VBZGFwdGVyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tzQ29udHJvbGxlcihcbiAgb3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zLFxuICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlclxuKTogSG9va3NDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhcHBJZCwgd2ViaG9va0tleSB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIG5ldyBIb29rc0NvbnRyb2xsZXIoYXBwSWQsIGRhdGFiYXNlQ29udHJvbGxlciwgd2ViaG9va0tleSk7XG59XG5cbmludGVyZmFjZSBQdXNoQ29udHJvbGxpbmcge1xuICBwdXNoQ29udHJvbGxlcjogUHVzaENvbnRyb2xsZXI7XG4gIGhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0OiBib29sZWFuO1xuICBwdXNoQ29udHJvbGxlclF1ZXVlOiBQdXNoUXVldWU7XG4gIHB1c2hXb3JrZXI6IFB1c2hXb3JrZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdXNoQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBQdXNoQ29udHJvbGxpbmcge1xuICBjb25zdCB7IHNjaGVkdWxlZFB1c2gsIHB1c2ggfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgcHVzaE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwdXNoKTtcbiAgY29uc3QgcHVzaFF1ZXVlT3B0aW9ucyA9IHB1c2hPcHRpb25zLnF1ZXVlT3B0aW9ucyB8fCB7fTtcbiAgaWYgKHB1c2hPcHRpb25zLnF1ZXVlT3B0aW9ucykge1xuICAgIGRlbGV0ZSBwdXNoT3B0aW9ucy5xdWV1ZU9wdGlvbnM7XG4gIH1cblxuICAvLyBQYXNzIHRoZSBwdXNoIG9wdGlvbnMgdG9vIGFzIGl0IHdvcmtzIHdpdGggdGhlIGRlZmF1bHRcbiAgY29uc3QgUGFyc2VQdXNoQWRhcHRlciA9IGF3YWl0IGxvYWRNb2R1bGUoJ0BwYXJzZS9wdXNoLWFkYXB0ZXInKTtcbiAgY29uc3QgcHVzaEFkYXB0ZXIgPSBsb2FkQWRhcHRlcihcbiAgICBwdXNoT3B0aW9ucyAmJiBwdXNoT3B0aW9ucy5hZGFwdGVyLFxuICAgIFBhcnNlUHVzaEFkYXB0ZXIsXG4gICAgcHVzaE9wdGlvbnNcbiAgKTtcbiAgLy8gV2UgcGFzcyB0aGUgb3B0aW9ucyBhbmQgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBhZGF0cGVyLFxuICAvLyBOb3RlIHRoYXQgcGFzc2luZyBhbiBpbnN0YW5jZSB3b3VsZCB3b3JrIHRvb1xuICBjb25zdCBwdXNoQ29udHJvbGxlciA9IG5ldyBQdXNoQ29udHJvbGxlcigpO1xuICBjb25zdCBoYXNQdXNoU3VwcG9ydCA9ICEhKHB1c2hBZGFwdGVyICYmIHB1c2gpO1xuICBjb25zdCBoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCA9IGhhc1B1c2hTdXBwb3J0ICYmIHNjaGVkdWxlZFB1c2ggPT09IHRydWU7XG5cbiAgY29uc3QgeyBkaXNhYmxlUHVzaFdvcmtlciB9ID0gcHVzaFF1ZXVlT3B0aW9ucztcblxuICBjb25zdCBwdXNoQ29udHJvbGxlclF1ZXVlID0gbmV3IFB1c2hRdWV1ZShwdXNoUXVldWVPcHRpb25zKTtcbiAgbGV0IHB1c2hXb3JrZXI7XG4gIGlmICghZGlzYWJsZVB1c2hXb3JrZXIpIHtcbiAgICBwdXNoV29ya2VyID0gbmV3IFB1c2hXb3JrZXIocHVzaEFkYXB0ZXIsIHB1c2hRdWV1ZU9wdGlvbnMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHVzaENvbnRyb2xsZXIsXG4gICAgaGFzUHVzaFN1cHBvcnQsXG4gICAgaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQsXG4gICAgcHVzaENvbnRyb2xsZXJRdWV1ZSxcbiAgICBwdXNoV29ya2VyLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aERhdGFNYW5hZ2VyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICBjb25zdCB7IGF1dGgsIGVuYWJsZUFub255bW91c1VzZXJzIH0gPSBvcHRpb25zO1xuICByZXR1cm4gYXV0aERhdGFNYW5hZ2VyKGF1dGgsIGVuYWJsZUFub255bW91c1VzZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFiYXNlQWRhcHRlcihkYXRhYmFzZVVSSSwgY29sbGVjdGlvblByZWZpeCwgZGF0YWJhc2VPcHRpb25zKSB7XG4gIGxldCBwcm90b2NvbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRVUkkgPSBuZXcgVVJMKGRhdGFiYXNlVVJJKTtcbiAgICBwcm90b2NvbCA9IHBhcnNlZFVSSS5wcm90b2NvbCA/IHBhcnNlZFVSSS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgLyogKi9cbiAgfVxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAncG9zdGdyZXM6JzpcbiAgICBjYXNlICdwb3N0Z3Jlc3FsOic6XG4gICAgICByZXR1cm4gbmV3IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIoe1xuICAgICAgICB1cmk6IGRhdGFiYXNlVVJJLFxuICAgICAgICBjb2xsZWN0aW9uUHJlZml4LFxuICAgICAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBNb25nb1N0b3JhZ2VBZGFwdGVyKHtcbiAgICAgICAgdXJpOiBkYXRhYmFzZVVSSSxcbiAgICAgICAgY29sbGVjdGlvblByZWZpeCxcbiAgICAgICAgbW9uZ29PcHRpb25zOiBkYXRhYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxj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QSxNQUFNUyxjQUFjLEdBQUcsSUFBSUMsOEJBQWMsQ0FBQyxDQUFDO0VBQzNDLE1BQU1DLGNBQWMsR0FBRyxDQUFDLEVBQUVKLFdBQVcsSUFBSVIsSUFBSSxDQUFDO0VBQzlDLE1BQU1hLHVCQUF1QixHQUFHRCxjQUFjLElBQUliLGFBQWEsS0FBSyxJQUFJO0VBRXhFLE1BQU07SUFBRWU7RUFBa0IsQ0FBQyxHQUFHVixnQkFBZ0I7RUFFOUMsTUFBTVcsbUJBQW1CLEdBQUcsSUFBSUMsb0JBQVMsQ0FBQ1osZ0JBQWdCLENBQUM7RUFDM0QsSUFBSWEsVUFBVTtFQUNkLElBQUksQ0FBQ0gsaUJBQWlCLEVBQUU7SUFDdEJHLFVBQVUsR0FBRyxJQUFJQyxzQkFBVSxDQUFDVixXQUFXLEVBQUVKLGdCQUFnQixDQUFDO0VBQzVEO0VBQ0EsT0FBTztJQUNMTSxjQUFjO0lBQ2RFLGNBQWM7SUFDZEMsdUJBQXVCO0lBQ3ZCRSxtQkFBbUI7SUFDbkJFO0VBQ0YsQ0FBQztBQUNIO0FBRU8sU0FBUzFFLGtCQUFrQkEsQ0FBQ2xCLE9BQTJCLEVBQUU7RUFDOUQsTUFBTTtJQUFFOEYsSUFBSTtJQUFFQztFQUFxQixDQUFDLEdBQUcvRixPQUFPO0VBQzlDLE9BQU8sSUFBQWlCLGFBQWUsRUFBQzZFLElBQUksRUFBRUMsb0JBQW9CLENBQUM7QUFDcEQ7QUFFTyxTQUFTMUIsa0JBQWtCQSxDQUFDaEMsV0FBVyxFQUFFOEIsZ0JBQWdCLEVBQUU3QixlQUFlLEVBQUU7RUFDakYsSUFBSTBELFFBQVE7RUFDWixJQUFJO0lBQ0YsTUFBTUMsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBQzdELFdBQVcsQ0FBQztJQUN0QzJELFFBQVEsR0FBR0MsU0FBUyxDQUFDRCxRQUFRLEdBQUdDLFNBQVMsQ0FBQ0QsUUFBUSxDQUFDRyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUk7RUFDekUsQ0FBQyxDQUFDLE1BQU07SUFDTjtFQUFBO0VBRUYsUUFBUUgsUUFBUTtJQUNkLEtBQUssV0FBVztJQUNoQixLQUFLLGFBQWE7TUFDaEIsT0FBTyxJQUFJSSwrQkFBc0IsQ0FBQztRQUNoQ0MsR0FBRyxFQUFFaEUsV0FBVztRQUNoQjhCLGdCQUFnQjtRQUNoQjdCO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7TUFDRSxPQUFPLElBQUlnRSw0QkFBbUIsQ0FBQztRQUM3QkQsR0FBRyxFQUFFaEUsV0FBVztRQUNoQjhCLGdCQUFnQjtRQUNoQm9DLFlBQVksRUFBRWpFO01BQ2hCLENBQUMsQ0FBQztFQUNOO0FBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIExvYWRTY2hlbWFPcHRpb25zID0ge1xuICBjbGVhckNhY2hlOiBib29sZWFuLFxufTtcblxuZXhwb3J0IHR5cGUgU2NoZW1hRmllbGQgPSB7XG4gIHR5cGU6IHN0cmluZyxcbiAgdGFyZ2V0Q2xhc3M/OiA/c3RyaW5nLFxuICByZXF1aXJlZD86ID9ib29sZWFuLFxuICBkZWZhdWx0VmFsdWU/OiA/YW55LFxufTtcblxuZXhwb3J0IHR5cGUgU2NoZW1hRmllbGRzID0geyBbc3RyaW5nXTogU2NoZW1hRmllbGQgfTtcblxuZXhwb3J0IHR5cGUgU2NoZW1hID0ge1xuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgZmllbGRzOiBTY2hlbWFGaWVsZHMsXG4gIGNsYXNzTGV2ZWxQZXJtaXNzaW9uczogQ2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICBpbmRleGVzPzogP2FueSxcbn07XG5cbmV4cG9ydCB0eXBlIENsYXNzTGV2ZWxQZXJtaXNzaW9ucyA9IHtcbiAgQUNMPzoge1xuICAgIFtzdHJpbmddOiB7XG4gICAgICBbc3RyaW5nXTogYm9vbGVhbixcbiAgICB9LFxuICB9LFxuICBmaW5kPzogeyBbc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjb3VudD86IHsgW3N0cmluZ106IGJvb2xlYW4gfSxcbiAgZ2V0PzogeyBbc3RyaW5nXTogYm9vbGVhbiB9LFxuICBjcmVhdGU/OiB7IFtzdHJpbmddOiBib29sZWFuIH0sXG4gIHVwZGF0ZT86IHsgW3N0cmluZ106IGJvb2xlYW4gfSxcbiAgZGVsZXRlPzogeyBbc3RyaW5nXTogYm9vbGVhbiB9LFxuICBhZGRGaWVsZD86IHsgW3N0cmluZ106IGJvb2xlYW4gfSxcbiAgcmVhZFVzZXJGaWVsZHM/OiBzdHJpbmdbXSxcbiAgd3JpdGVVc2VyRmllbGRzPzogc3RyaW5nW10sXG4gIHByb3RlY3RlZEZpZWxkcz86IHsgW3N0cmluZ106IHN0cmluZ1tdIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The deprecations.
5
+ *
6
+ * Add deprecations to the array using the following keys:
7
+ * - `optionKey` {String}: The option key incl. its path, e.g. `security.enableCheck`.
8
+ * - `envKey` {String}: The environment key, e.g. `PARSE_SERVER_SECURITY`.
9
+ * - `changeNewKey` {String}: Set the new key name if the current key will be replaced,
10
+ * or set to an empty string if the current key will be removed without replacement.
11
+ * - `changeNewDefault` {String}: Set the new default value if the key's default value
12
+ * will change in a future version.
13
+ * - `resolvedValue` {any}: The option value that suppresses the deprecation warning,
14
+ * indicating the user has already adopted the future behavior. Only applicable when
15
+ * `changeNewKey` is an empty string (option will be removed without replacement).
16
+ * For example, `false` for an option that will be removed, if setting it to `false`
17
+ * disables the deprecated feature.
18
+ * - `solution`: The instruction to resolve this deprecation warning. Optional. This
19
+ * instruction must not include the deprecation warning which is auto-generated.
20
+ * It should only contain additional instruction regarding the deprecation if
21
+ * necessary.
22
+ *
23
+ * If there are no deprecations, this must return an empty array.
24
+ */
25
+ module.exports = [{
26
+ optionKey: 'fileUpload.allowedFileUrlDomains',
27
+ changeNewDefault: '[]',
28
+ solution: "Set 'fileUpload.allowedFileUrlDomains' to the domains you want to allow, or to '[]' to block all file URLs."
29
+ }, {
30
+ optionKey: 'pages.encodePageParamHeaders',
31
+ changeNewDefault: 'true',
32
+ solution: "Set 'pages.encodePageParamHeaders' to 'true' to URI-encode non-ASCII characters in page parameter headers."
33
+ }, {
34
+ optionKey: 'readOnlyMasterKeyIps',
35
+ changeNewDefault: '["127.0.0.1", "::1"]',
36
+ solution: "Set 'readOnlyMasterKeyIps' to the IP addresses that should be allowed to use the read-only master key, or to '[\"127.0.0.1\", \"::1\"]' to restrict access to localhost."
37
+ }, {
38
+ optionKey: 'mountPlayground',
39
+ changeNewKey: '',
40
+ solution: "Use Parse Dashboard as GraphQL IDE or configure a third-party GraphQL client such as Apollo Sandbox, GraphiQL, or Insomnia with custom request headers."
41
+ }, {
42
+ optionKey: 'playgroundPath',
43
+ changeNewKey: '',
44
+ solution: "Use Parse Dashboard as GraphQL IDE or configure a third-party GraphQL client such as Apollo Sandbox, GraphiQL, or Insomnia with custom request headers."
45
+ }, {
46
+ optionKey: 'requestComplexity.includeDepth',
47
+ changeNewDefault: '10',
48
+ solution: "Set 'requestComplexity.includeDepth' to a positive integer appropriate for your app to limit include pointer chain depth, or to '-1' to disable."
49
+ }, {
50
+ optionKey: 'requestComplexity.includeCount',
51
+ changeNewDefault: '100',
52
+ solution: "Set 'requestComplexity.includeCount' to a positive integer appropriate for your app to limit the number of include paths per query, or to '-1' to disable."
53
+ }, {
54
+ optionKey: 'requestComplexity.subqueryDepth',
55
+ changeNewDefault: '10',
56
+ solution: "Set 'requestComplexity.subqueryDepth' to a positive integer appropriate for your app to limit subquery nesting depth, or to '-1' to disable."
57
+ }, {
58
+ optionKey: 'requestComplexity.queryDepth',
59
+ changeNewDefault: '10',
60
+ solution: "Set 'requestComplexity.queryDepth' to a positive integer appropriate for your app to limit query condition nesting depth, or to '-1' to disable."
61
+ }, {
62
+ optionKey: 'requestComplexity.graphQLDepth',
63
+ changeNewDefault: '20',
64
+ solution: "Set 'requestComplexity.graphQLDepth' to a positive integer appropriate for your app to limit GraphQL field selection depth, or to '-1' to disable."
65
+ }, {
66
+ optionKey: 'requestComplexity.graphQLFields',
67
+ changeNewDefault: '200',
68
+ solution: "Set 'requestComplexity.graphQLFields' to a positive integer appropriate for your app to limit the number of GraphQL field selections, or to '-1' to disable."
69
+ }, {
70
+ optionKey: 'requestComplexity.batchRequestLimit',
71
+ changeNewDefault: '100',
72
+ solution: "Set 'requestComplexity.batchRequestLimit' to a positive integer appropriate for your app to limit the number of sub-requests per batch request, or to '-1' to disable."
73
+ }, {
74
+ optionKey: 'enableProductPurchaseLegacyApi',
75
+ changeNewKey: '',
76
+ resolvedValue: false,
77
+ solution: "The product purchase API is an undocumented, unmaintained legacy feature that may not function as expected and will be removed in a future major version. We strongly advise against using it. Set 'enableProductPurchaseLegacyApi' to 'false' to disable it, or remove the option to accept the future removal."
78
+ }, {
79
+ optionKey: 'allowExpiredAuthDataToken',
80
+ changeNewKey: '',
81
+ resolvedValue: false,
82
+ solution: "Auth providers are always validated on login regardless of this setting. Set 'allowExpiredAuthDataToken' to 'false' or remove the option to accept the future removal."
83
+ }, {
84
+ optionKey: 'protectedFieldsOwnerExempt',
85
+ changeNewDefault: 'false',
86
+ solution: "Set 'protectedFieldsOwnerExempt' to 'false' to apply protectedFields consistently to the user's own _User object (same as all other classes), or to 'true' to keep the current behavior where a user can see all their own fields."
87
+ }, {
88
+ optionKey: 'protectedFieldsTriggerExempt',
89
+ changeNewDefault: 'true',
90
+ solution: "Set 'protectedFieldsTriggerExempt' to 'true' to make Cloud Code triggers (e.g. beforeSave, afterSave) receive the full object including protected fields, or to 'false' to keep the current behavior where protected fields are stripped from trigger objects."
91
+ }, {
92
+ optionKey: 'protectedFieldsSaveResponseExempt',
93
+ changeNewDefault: 'false',
94
+ solution: "Set 'protectedFieldsSaveResponseExempt' to 'false' to strip protected fields from write operation responses (create, update), consistent with how they are stripped from query results. Set to 'true' to keep the current behavior where protected fields are included in write responses."
95
+ }, {
96
+ optionKey: 'installation.duplicateDeviceTokenActionEnforceAuth',
97
+ changeNewDefault: 'true',
98
+ solution: "Set 'installation.duplicateDeviceTokenActionEnforceAuth' to 'true' to enforce the caller's auth context (and the resulting ACL and CLP) when Parse Server deduplicates _Installation records sharing the same deviceToken. Set to 'false' to keep the current behavior of bypassing permissions on the dedup operation."
99
+ }];
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCIsInNvbHV0aW9uIiwiY2hhbmdlTmV3S2V5IiwicmVzb2x2ZWRWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBkZXByZWNhdGlvbnMuXG4gKlxuICogQWRkIGRlcHJlY2F0aW9ucyB0byB0aGUgYXJyYXkgdXNpbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogLSBgb3B0aW9uS2V5YCB7U3RyaW5nfTogVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAqIC0gYGVudktleWAge1N0cmluZ306IFRoZSBlbnZpcm9ubWVudCBrZXksIGUuZy4gYFBBUlNFX1NFUlZFUl9TRUNVUklUWWAuXG4gKiAtIGBjaGFuZ2VOZXdLZXlgIHtTdHJpbmd9OiBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAqIG9yIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50LlxuICogLSBgY2hhbmdlTmV3RGVmYXVsdGAge1N0cmluZ306IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAqIHdpbGwgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gKiAtIGByZXNvbHZlZFZhbHVlYCB7YW55fTogVGhlIG9wdGlvbiB2YWx1ZSB0aGF0IHN1cHByZXNzZXMgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcsXG4gKiBpbmRpY2F0aW5nIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGFkb3B0ZWQgdGhlIGZ1dHVyZSBiZWhhdmlvci4gT25seSBhcHBsaWNhYmxlIHdoZW5cbiAqIGBjaGFuZ2VOZXdLZXlgIGlzIGFuIGVtcHR5IHN0cmluZyAob3B0aW9uIHdpbGwgYmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50KS5cbiAqIEZvciBleGFtcGxlLCBgZmFsc2VgIGZvciBhbiBvcHRpb24gdGhhdCB3aWxsIGJlIHJlbW92ZWQsIGlmIHNldHRpbmcgaXQgdG8gYGZhbHNlYFxuICogZGlzYWJsZXMgdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZS5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gIHtcbiAgICBvcHRpb25LZXk6ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ1tdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zJyB0byB0aGUgZG9tYWlucyB5b3Ugd2FudCB0byBhbGxvdywgb3IgdG8gJ1tdJyB0byBibG9jayBhbGwgZmlsZSBVUkxzLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnLFxuICAgIHNvbHV0aW9uOiBcIlNldCAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycgdG8gJ3RydWUnIHRvIFVSSS1lbmNvZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gcGFnZSBwYXJhbWV0ZXIgaGVhZGVycy5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJyxcbiAgICBjaGFuZ2VOZXdEZWZhdWx0OiAnW1wiMTI3LjAuMC4xXCIsIFwiOjoxXCJdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJyB0byB0aGUgSVAgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdXNlIHRoZSByZWFkLW9ubHkgbWFzdGVyIGtleSwgb3IgdG8gJ1tcXFwiMTI3LjAuMC4xXFxcIiwgXFxcIjo6MVxcXCJdJyB0byByZXN0cmljdCBhY2Nlc3MgdG8gbG9jYWxob3N0LlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAnbW91bnRQbGF5Z3JvdW5kJyxcbiAgICBjaGFuZ2VOZXdLZXk6ICcnLFxuICAgIHNvbHV0aW9uOiBcIlVzZSBQYXJzZSBEYXNoYm9hcmQgYXMgR3JhcGhRTCBJREUgb3IgY29uZmlndXJlIGEgdGhpcmQtcGFydHkgR3JhcGhRTCBjbGllbnQgc3VjaCBhcyBBcG9sbG8gU2FuZGJveCwgR3JhcGhpUUwsIG9yIEluc29tbmlhIHdpdGggY3VzdG9tIHJlcXVlc3QgaGVhZGVycy5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3BsYXlncm91bmRQYXRoJyxcbiAgICBjaGFuZ2VOZXdLZXk6ICcnLFxuICAgIHNvbHV0aW9uOiBcIlVzZSBQYXJzZSBEYXNoYm9hcmQgYXMgR3JhcGhRTCBJREUgb3IgY29uZmlndXJlIGEgdGhpcmQtcGFydHkgR3JhcGhRTCBjbGllbnQgc3VjaCBhcyBBcG9sbG8gU2FuZGJveCwgR3JhcGhpUUwsIG9yIEluc29tbmlhIHdpdGggY3VzdG9tIHJlcXVlc3QgaGVhZGVycy5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3JlcXVlc3RDb21wbGV4aXR5LmluY2x1ZGVEZXB0aCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzEwJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlcXVlc3RDb21wbGV4aXR5LmluY2x1ZGVEZXB0aCcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGFwcHJvcHJpYXRlIGZvciB5b3VyIGFwcCB0byBsaW1pdCBpbmNsdWRlIHBvaW50ZXIgY2hhaW4gZGVwdGgsIG9yIHRvICctMScgdG8gZGlzYWJsZS5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3JlcXVlc3RDb21wbGV4aXR5LmluY2x1ZGVDb3VudCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzEwMCcsXG4gICAgc29sdXRpb246IFwiU2V0ICdyZXF1ZXN0Q29tcGxleGl0eS5pbmNsdWRlQ291bnQnIHRvIGEgcG9zaXRpdmUgaW50ZWdlciBhcHByb3ByaWF0ZSBmb3IgeW91ciBhcHAgdG8gbGltaXQgdGhlIG51bWJlciBvZiBpbmNsdWRlIHBhdGhzIHBlciBxdWVyeSwgb3IgdG8gJy0xJyB0byBkaXNhYmxlLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncmVxdWVzdENvbXBsZXhpdHkuc3VicXVlcnlEZXB0aCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzEwJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlcXVlc3RDb21wbGV4aXR5LnN1YnF1ZXJ5RGVwdGgnIHRvIGEgcG9zaXRpdmUgaW50ZWdlciBhcHByb3ByaWF0ZSBmb3IgeW91ciBhcHAgdG8gbGltaXQgc3VicXVlcnkgbmVzdGluZyBkZXB0aCwgb3IgdG8gJy0xJyB0byBkaXNhYmxlLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncmVxdWVzdENvbXBsZXhpdHkucXVlcnlEZXB0aCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzEwJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlcXVlc3RDb21wbGV4aXR5LnF1ZXJ5RGVwdGgnIHRvIGEgcG9zaXRpdmUgaW50ZWdlciBhcHByb3ByaWF0ZSBmb3IgeW91ciBhcHAgdG8gbGltaXQgcXVlcnkgY29uZGl0aW9uIG5lc3RpbmcgZGVwdGgsIG9yIHRvICctMScgdG8gZGlzYWJsZS5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3JlcXVlc3RDb21wbGV4aXR5LmdyYXBoUUxEZXB0aCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzIwJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlcXVlc3RDb21wbGV4aXR5LmdyYXBoUUxEZXB0aCcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGFwcHJvcHJpYXRlIGZvciB5b3VyIGFwcCB0byBsaW1pdCBHcmFwaFFMIGZpZWxkIHNlbGVjdGlvbiBkZXB0aCwgb3IgdG8gJy0xJyB0byBkaXNhYmxlLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncmVxdWVzdENvbXBsZXhpdHkuZ3JhcGhRTEZpZWxkcycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzIwMCcsXG4gICAgc29sdXRpb246IFwiU2V0ICdyZXF1ZXN0Q29tcGxleGl0eS5ncmFwaFFMRmllbGRzJyB0byBhIHBvc2l0aXZlIGludGVnZXIgYXBwcm9wcmlhdGUgZm9yIHlvdXIgYXBwIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgR3JhcGhRTCBmaWVsZCBzZWxlY3Rpb25zLCBvciB0byAnLTEnIHRvIGRpc2FibGUuXCIsXG4gIH0sXG4gIHtcbiAgICBvcHRpb25LZXk6ICdyZXF1ZXN0Q29tcGxleGl0eS5iYXRjaFJlcXVlc3RMaW1pdCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJzEwMCcsXG4gICAgc29sdXRpb246IFwiU2V0ICdyZXF1ZXN0Q29tcGxleGl0eS5iYXRjaFJlcXVlc3RMaW1pdCcgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGFwcHJvcHJpYXRlIGZvciB5b3VyIGFwcCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHN1Yi1yZXF1ZXN0cyBwZXIgYmF0Y2ggcmVxdWVzdCwgb3IgdG8gJy0xJyB0byBkaXNhYmxlLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAnZW5hYmxlUHJvZHVjdFB1cmNoYXNlTGVnYWN5QXBpJyxcbiAgICBjaGFuZ2VOZXdLZXk6ICcnLFxuICAgIHJlc29sdmVkVmFsdWU6IGZhbHNlLFxuICAgIHNvbHV0aW9uOiBcIlRoZSBwcm9kdWN0IHB1cmNoYXNlIEFQSSBpcyBhbiB1bmRvY3VtZW50ZWQsIHVubWFpbnRhaW5lZCBsZWdhY3kgZmVhdHVyZSB0aGF0IG1heSBub3QgZnVuY3Rpb24gYXMgZXhwZWN0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uLiBXZSBzdHJvbmdseSBhZHZpc2UgYWdhaW5zdCB1c2luZyBpdC4gU2V0ICdlbmFibGVQcm9kdWN0UHVyY2hhc2VMZWdhY3lBcGknIHRvICdmYWxzZScgdG8gZGlzYWJsZSBpdCwgb3IgcmVtb3ZlIHRoZSBvcHRpb24gdG8gYWNjZXB0IHRoZSBmdXR1cmUgcmVtb3ZhbC5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ2FsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4nLFxuICAgIGNoYW5nZU5ld0tleTogJycsXG4gICAgcmVzb2x2ZWRWYWx1ZTogZmFsc2UsXG4gICAgc29sdXRpb246IFwiQXV0aCBwcm92aWRlcnMgYXJlIGFsd2F5cyB2YWxpZGF0ZWQgb24gbG9naW4gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuIFNldCAnYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbicgdG8gJ2ZhbHNlJyBvciByZW1vdmUgdGhlIG9wdGlvbiB0byBhY2NlcHQgdGhlIGZ1dHVyZSByZW1vdmFsLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncHJvdGVjdGVkRmllbGRzT3duZXJFeGVtcHQnLFxuICAgIGNoYW5nZU5ld0RlZmF1bHQ6ICdmYWxzZScsXG4gICAgc29sdXRpb246IFwiU2V0ICdwcm90ZWN0ZWRGaWVsZHNPd25lckV4ZW1wdCcgdG8gJ2ZhbHNlJyB0byBhcHBseSBwcm90ZWN0ZWRGaWVsZHMgY29uc2lzdGVudGx5IHRvIHRoZSB1c2VyJ3Mgb3duIF9Vc2VyIG9iamVjdCAoc2FtZSBhcyBhbGwgb3RoZXIgY2xhc3NlcyksIG9yIHRvICd0cnVlJyB0byBrZWVwIHRoZSBjdXJyZW50IGJlaGF2aW9yIHdoZXJlIGEgdXNlciBjYW4gc2VlIGFsbCB0aGVpciBvd24gZmllbGRzLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncHJvdGVjdGVkRmllbGRzVHJpZ2dlckV4ZW1wdCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnLFxuICAgIHNvbHV0aW9uOiBcIlNldCAncHJvdGVjdGVkRmllbGRzVHJpZ2dlckV4ZW1wdCcgdG8gJ3RydWUnIHRvIG1ha2UgQ2xvdWQgQ29kZSB0cmlnZ2VycyAoZS5nLiBiZWZvcmVTYXZlLCBhZnRlclNhdmUpIHJlY2VpdmUgdGhlIGZ1bGwgb2JqZWN0IGluY2x1ZGluZyBwcm90ZWN0ZWQgZmllbGRzLCBvciB0byAnZmFsc2UnIHRvIGtlZXAgdGhlIGN1cnJlbnQgYmVoYXZpb3Igd2hlcmUgcHJvdGVjdGVkIGZpZWxkcyBhcmUgc3RyaXBwZWQgZnJvbSB0cmlnZ2VyIG9iamVjdHMuXCIsXG4gIH0sXG4gIHtcbiAgICBvcHRpb25LZXk6ICdwcm90ZWN0ZWRGaWVsZHNTYXZlUmVzcG9uc2VFeGVtcHQnLFxuICAgIGNoYW5nZU5ld0RlZmF1bHQ6ICdmYWxzZScsXG4gICAgc29sdXRpb246IFwiU2V0ICdwcm90ZWN0ZWRGaWVsZHNTYXZlUmVzcG9uc2VFeGVtcHQnIHRvICdmYWxzZScgdG8gc3RyaXAgcHJvdGVjdGVkIGZpZWxkcyBmcm9tIHdyaXRlIG9wZXJhdGlvbiByZXNwb25zZXMgKGNyZWF0ZSwgdXBkYXRlKSwgY29uc2lzdGVudCB3aXRoIGhvdyB0aGV5IGFyZSBzdHJpcHBlZCBmcm9tIHF1ZXJ5IHJlc3VsdHMuIFNldCB0byAndHJ1ZScgdG8ga2VlcCB0aGUgY3VycmVudCBiZWhhdmlvciB3aGVyZSBwcm90ZWN0ZWQgZmllbGRzIGFyZSBpbmNsdWRlZCBpbiB3cml0ZSByZXNwb25zZXMuXCIsXG4gIH0sXG4gIHtcbiAgICBvcHRpb25LZXk6ICdpbnN0YWxsYXRpb24uZHVwbGljYXRlRGV2aWNlVG9rZW5BY3Rpb25FbmZvcmNlQXV0aCcsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnLFxuICAgIHNvbHV0aW9uOiBcIlNldCAnaW5zdGFsbGF0aW9uLmR1cGxpY2F0ZURldmljZVRva2VuQWN0aW9uRW5mb3JjZUF1dGgnIHRvICd0cnVlJyB0byBlbmZvcmNlIHRoZSBjYWxsZXIncyBhdXRoIGNvbnRleHQgKGFuZCB0aGUgcmVzdWx0aW5nIEFDTCBhbmQgQ0xQKSB3aGVuIFBhcnNlIFNlcnZlciBkZWR1cGxpY2F0ZXMgX0luc3RhbGxhdGlvbiByZWNvcmRzIHNoYXJpbmcgdGhlIHNhbWUgZGV2aWNlVG9rZW4uIFNldCB0byAnZmFsc2UnIHRvIGtlZXAgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgYnlwYXNzaW5nIHBlcm1pc3Npb25zIG9uIHRoZSBkZWR1cCBvcGVyYXRpb24uXCIsXG4gIH0sXG5dO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLENBQ2Y7RUFDRUMsU0FBUyxFQUFFLGtDQUFrQztFQUM3Q0MsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSw4QkFBOEI7RUFDekNDLGdCQUFnQixFQUFFLE1BQU07RUFDeEJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsc0JBQXNCO0VBQ2pDQyxnQkFBZ0IsRUFBRSxzQkFBc0I7RUFDeENDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsaUJBQWlCO0VBQzVCRyxZQUFZLEVBQUUsRUFBRTtFQUNoQkQsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSxnQkFBZ0I7RUFDM0JHLFlBQVksRUFBRSxFQUFFO0VBQ2hCRCxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLGdDQUFnQztFQUMzQ0MsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSxnQ0FBZ0M7RUFDM0NDLGdCQUFnQixFQUFFLEtBQUs7RUFDdkJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsaUNBQWlDO0VBQzVDQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLDhCQUE4QjtFQUN6Q0MsZ0JBQWdCLEVBQUUsSUFBSTtFQUN0QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSxnQ0FBZ0M7RUFDM0NDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsaUNBQWlDO0VBQzVDQyxnQkFBZ0IsRUFBRSxLQUFLO0VBQ3ZCQyxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLHFDQUFxQztFQUNoREMsZ0JBQWdCLEVBQUUsS0FBSztFQUN2QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSxnQ0FBZ0M7RUFDM0NHLFlBQVksRUFBRSxFQUFFO0VBQ2hCQyxhQUFhLEVBQUUsS0FBSztFQUNwQkYsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSwyQkFBMkI7RUFDdENHLFlBQVksRUFBRSxFQUFFO0VBQ2hCQyxhQUFhLEVBQUUsS0FBSztFQUNwQkYsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSw0QkFBNEI7RUFDdkNDLGdCQUFnQixFQUFFLE9BQU87RUFDekJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsOEJBQThCO0VBQ3pDQyxnQkFBZ0IsRUFBRSxNQUFNO0VBQ3hCQyxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLG1DQUFtQztFQUM5Q0MsZ0JBQWdCLEVBQUUsT0FBTztFQUN6QkMsUUFBUSxFQUFFO0FBQ1osQ0FBQyxFQUNEO0VBQ0VGLFNBQVMsRUFBRSxvREFBb0Q7RUFDL0RDLGdCQUFnQixFQUFFLE1BQU07RUFDeEJDLFFBQVEsRUFBRTtBQUNaLENBQUMsQ0FDRiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ var _logger = _interopRequireDefault(require("../logger"));
4
+ var _Deprecations = _interopRequireDefault(require("./Deprecations"));
5
+ var _Utils = _interopRequireDefault(require("../Utils"));
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
+ /**
8
+ * The deprecator class.
9
+ */
10
+ class Deprecator {
11
+ /**
12
+ * Scans the Parse Server for deprecated options.
13
+ * This needs to be called before setting option defaults, otherwise it
14
+ * becomes indistinguishable whether an option has been set manually or
15
+ * by default.
16
+ * @param {any} options The Parse Server options.
17
+ */
18
+ static scanParseServerOptions(options) {
19
+ // Scan for deprecations
20
+ for (const deprecation of Deprecator._getDeprecations()) {
21
+ // Get deprecation properties
22
+ const solution = deprecation.solution;
23
+ const optionKey = deprecation.optionKey;
24
+ const changeNewDefault = deprecation.changeNewDefault;
25
+ const changeNewKey = deprecation.changeNewKey;
26
+
27
+ // If default will change, only throw a warning if option is not set
28
+ if (changeNewDefault != null && _Utils.default.getNestedProperty(options, optionKey) == null) {
29
+ Deprecator._logOption({
30
+ optionKey,
31
+ changeNewDefault,
32
+ solution
33
+ });
34
+ }
35
+
36
+ // If key will be removed or renamed, only throw a warning if option is set;
37
+ // skip if option is set to the resolved value that suppresses the deprecation
38
+ const resolvedValue = deprecation.resolvedValue;
39
+ const optionValue = _Utils.default.getNestedProperty(options, optionKey);
40
+ if (changeNewKey != null && optionValue != null && optionValue !== resolvedValue) {
41
+ Deprecator._logOption({
42
+ optionKey,
43
+ changeNewKey,
44
+ solution
45
+ });
46
+ }
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Logs a deprecation warning for a parameter that can only be determined dynamically
52
+ * during runtime.
53
+ *
54
+ * Note: Do not use this to log deprecations of Parse Server options, but add such
55
+ * deprecations to `Deprecations.js` instead. See the contribution docs for more
56
+ * details.
57
+ *
58
+ * For consistency, the deprecation warning is composed of the following parts:
59
+ *
60
+ * > DeprecationWarning: `usage` is deprecated and will be removed in a future version.
61
+ * `solution`.
62
+ *
63
+ * - `usage`: The deprecated usage.
64
+ * - `solution`: The instruction to resolve this deprecation warning.
65
+ *
66
+ * For example:
67
+ * > DeprecationWarning: `Prefixing field names with dollar sign ($) in aggregation query`
68
+ * is deprecated and will be removed in a future version. `Reference field names without
69
+ * dollar sign prefix.`
70
+ *
71
+ * @param {Object} options The deprecation options.
72
+ * @param {String} options.usage The usage that is deprecated.
73
+ * @param {String} [options.solution] The instruction to resolve this deprecation warning.
74
+ * Optional. It is recommended to add an instruction for the convenience of the developer.
75
+ */
76
+ static logRuntimeDeprecation(options) {
77
+ Deprecator._logGeneric(options);
78
+ }
79
+
80
+ /**
81
+ * Returns the deprecation definitions.
82
+ * @returns {Array<Object>} The deprecations.
83
+ */
84
+ static _getDeprecations() {
85
+ return _Deprecations.default;
86
+ }
87
+
88
+ /**
89
+ * Logs a generic deprecation warning.
90
+ *
91
+ * @param {Object} options The deprecation options.
92
+ * @param {String} options.usage The usage that is deprecated.
93
+ * @param {String} [options.solution] The instruction to resolve this deprecation warning.
94
+ * Optional. It is recommended to add an instruction for the convenience of the developer.
95
+ */
96
+ static _logGeneric({
97
+ usage,
98
+ solution
99
+ }) {
100
+ // Compose message
101
+ let output = `DeprecationWarning: ${usage} is deprecated and will be removed in a future version.`;
102
+ output += solution ? ` ${solution}` : '';
103
+ _logger.default.warn(output);
104
+ }
105
+
106
+ /**
107
+ * Logs a deprecation warning for a Parse Server option.
108
+ *
109
+ * @param {String} optionKey The option key incl. its path, e.g. `security.enableCheck`.
110
+ * @param {String} envKey The environment key, e.g. `PARSE_SERVER_SECURITY`.
111
+ * @param {String} changeNewKey Set the new key name if the current key will be replaced,
112
+ * or set to an empty string if the current key will be removed without replacement.
113
+ * @param {String} changeNewDefault Set the new default value if the key's default value
114
+ * will change in a future version.
115
+ * @param {String} [solution] The instruction to resolve this deprecation warning. This
116
+ * message must not include the warning that the parameter is deprecated, that is
117
+ * automatically added to the message. It should only contain the instruction on how
118
+ * to resolve this warning.
119
+ */
120
+ static _logOption({
121
+ optionKey,
122
+ envKey,
123
+ changeNewKey,
124
+ changeNewDefault,
125
+ solution
126
+ }) {
127
+ const type = optionKey ? 'option' : 'environment key';
128
+ const key = optionKey ? optionKey : envKey;
129
+ const keyAction = changeNewKey == null ? undefined : changeNewKey.length > 0 ? `renamed to '${changeNewKey}'` : `removed`;
130
+
131
+ // Compose message
132
+ let output = `DeprecationWarning: The Parse Server ${type} '${key}' `;
133
+ output += changeNewKey != null ? `is deprecated and will be ${keyAction} in a future version.` : '';
134
+ output += changeNewDefault ? `default will change to '${changeNewDefault}' in a future version.` : '';
135
+ output += solution ? ` ${solution}` : '';
136
+ _logger.default.warn(output);
137
+ }
138
+ }
139
+ module.exports = Deprecator;
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRpb25zIiwiX1V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiRGVwcmVjYXRvciIsInNjYW5QYXJzZVNlcnZlck9wdGlvbnMiLCJvcHRpb25zIiwiZGVwcmVjYXRpb24iLCJfZ2V0RGVwcmVjYXRpb25zIiwic29sdXRpb24iLCJvcHRpb25LZXkiLCJjaGFuZ2VOZXdEZWZhdWx0IiwiY2hhbmdlTmV3S2V5IiwiVXRpbHMiLCJnZXROZXN0ZWRQcm9wZXJ0eSIsIl9sb2dPcHRpb24iLCJyZXNvbHZlZFZhbHVlIiwib3B0aW9uVmFsdWUiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJfbG9nR2VuZXJpYyIsIkRlcHJlY2F0aW9ucyIsInVzYWdlIiwib3V0cHV0IiwibG9nZ2VyIiwid2FybiIsImVudktleSIsInR5cGUiLCJrZXkiLCJrZXlBY3Rpb24iLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgRGVwcmVjYXRpb25zIGZyb20gJy4vRGVwcmVjYXRpb25zJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi9VdGlscyc7XG5cbi8qKlxuICogVGhlIGRlcHJlY2F0b3IgY2xhc3MuXG4gKi9cbmNsYXNzIERlcHJlY2F0b3Ige1xuICAvKipcbiAgICogU2NhbnMgdGhlIFBhcnNlIFNlcnZlciBmb3IgZGVwcmVjYXRlZCBvcHRpb25zLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc2V0dGluZyBvcHRpb24gZGVmYXVsdHMsIG90aGVyd2lzZSBpdFxuICAgKiBiZWNvbWVzIGluZGlzdGluZ3Vpc2hhYmxlIHdoZXRoZXIgYW4gb3B0aW9uIGhhcyBiZWVuIHNldCBtYW51YWxseSBvclxuICAgKiBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgc2NhblBhcnNlU2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLy8gU2NhbiBmb3IgZGVwcmVjYXRpb25zXG4gICAgZm9yIChjb25zdCBkZXByZWNhdGlvbiBvZiBEZXByZWNhdG9yLl9nZXREZXByZWNhdGlvbnMoKSkge1xuICAgICAgLy8gR2V0IGRlcHJlY2F0aW9uIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHNvbHV0aW9uID0gZGVwcmVjYXRpb24uc29sdXRpb247XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBkZXByZWNhdGlvbi5vcHRpb25LZXk7XG4gICAgICBjb25zdCBjaGFuZ2VOZXdEZWZhdWx0ID0gZGVwcmVjYXRpb24uY2hhbmdlTmV3RGVmYXVsdDtcbiAgICAgIGNvbnN0IGNoYW5nZU5ld0tleSA9IGRlcHJlY2F0aW9uLmNoYW5nZU5ld0tleTtcblxuICAgICAgLy8gSWYgZGVmYXVsdCB3aWxsIGNoYW5nZSwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChjaGFuZ2VOZXdEZWZhdWx0ICE9IG51bGwgJiYgVXRpbHMuZ2V0TmVzdGVkUHJvcGVydHkob3B0aW9ucywgb3B0aW9uS2V5KSA9PSBudWxsKSB7XG4gICAgICAgIERlcHJlY2F0b3IuX2xvZ09wdGlvbih7IG9wdGlvbktleSwgY2hhbmdlTmV3RGVmYXVsdCwgc29sdXRpb24gfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGtleSB3aWxsIGJlIHJlbW92ZWQgb3IgcmVuYW1lZCwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIHNldDtcbiAgICAgIC8vIHNraXAgaWYgb3B0aW9uIGlzIHNldCB0byB0aGUgcmVzb2x2ZWQgdmFsdWUgdGhhdCBzdXBwcmVzc2VzIHRoZSBkZXByZWNhdGlvblxuICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IGRlcHJlY2F0aW9uLnJlc29sdmVkVmFsdWU7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IFV0aWxzLmdldE5lc3RlZFByb3BlcnR5KG9wdGlvbnMsIG9wdGlvbktleSk7XG4gICAgICBpZiAoY2hhbmdlTmV3S2V5ICE9IG51bGwgJiYgb3B0aW9uVmFsdWUgIT0gbnVsbCAmJiBvcHRpb25WYWx1ZSAhPT0gcmVzb2x2ZWRWYWx1ZSkge1xuICAgICAgICBEZXByZWNhdG9yLl9sb2dPcHRpb24oeyBvcHRpb25LZXksIGNoYW5nZU5ld0tleSwgc29sdXRpb24gfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIHBhcmFtZXRlciB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgZHluYW1pY2FsbHlcbiAgICogZHVyaW5nIHJ1bnRpbWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgdGhpcyB0byBsb2cgZGVwcmVjYXRpb25zIG9mIFBhcnNlIFNlcnZlciBvcHRpb25zLCBidXQgYWRkIHN1Y2hcbiAgICogZGVwcmVjYXRpb25zIHRvIGBEZXByZWNhdGlvbnMuanNgIGluc3RlYWQuIFNlZSB0aGUgY29udHJpYnV0aW9uIGRvY3MgZm9yIG1vcmVcbiAgICogZGV0YWlscy5cbiAgICpcbiAgICogRm9yIGNvbnNpc3RlbmN5LCB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHBhcnRzOlxuICAgKlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYHVzYWdlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogYHNvbHV0aW9uYC5cbiAgICpcbiAgICogLSBgdXNhZ2VgOiBUaGUgZGVwcmVjYXRlZCB1c2FnZS5cbiAgICogLSBgc29sdXRpb25gOiBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYFByZWZpeGluZyBmaWVsZCBuYW1lcyB3aXRoIGRvbGxhciBzaWduICgkKSBpbiBhZ2dyZWdhdGlvbiBxdWVyeWBcbiAgICogaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIGBSZWZlcmVuY2UgZmllbGQgbmFtZXMgd2l0aG91dFxuICAgKiBkb2xsYXIgc2lnbiBwcmVmaXguYFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgZGVwcmVjYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudXNhZ2UgVGhlIHVzYWdlIHRoYXQgaXMgZGVwcmVjYXRlZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvbHV0aW9uXSBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqIE9wdGlvbmFsLiBJdCBpcyByZWNvbW1lbmRlZCB0byBhZGQgYW4gaW5zdHJ1Y3Rpb24gZm9yIHRoZSBjb252ZW5pZW5jZSBvZiB0aGUgZGV2ZWxvcGVyLlxuICAgKi9cbiAgc3RhdGljIGxvZ1J1bnRpbWVEZXByZWNhdGlvbihvcHRpb25zKSB7XG4gICAgRGVwcmVjYXRvci5fbG9nR2VuZXJpYyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZXByZWNhdGlvbiBkZWZpbml0aW9ucy5cbiAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IFRoZSBkZXByZWNhdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgX2dldERlcHJlY2F0aW9ucygpIHtcbiAgICByZXR1cm4gRGVwcmVjYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBnZW5lcmljIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBkZXByZWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51c2FnZSBUaGUgdXNhZ2UgdGhhdCBpcyBkZXByZWNhdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc29sdXRpb25dIFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICogT3B0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZXZlbG9wZXIuXG4gICAqL1xuICBzdGF0aWMgX2xvZ0dlbmVyaWMoeyB1c2FnZSwgc29sdXRpb24gfSkge1xuICAgIC8vIENvbXBvc2UgbWVzc2FnZVxuICAgIGxldCBvdXRwdXQgPSBgRGVwcmVjYXRpb25XYXJuaW5nOiAke3VzYWdlfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5gO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGEgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgYSBQYXJzZSBTZXJ2ZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uS2V5IFRoZSBvcHRpb24ga2V5IGluY2wuIGl0cyBwYXRoLCBlLmcuIGBzZWN1cml0eS5lbmFibGVDaGVja2AuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBlbnZLZXkgVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZU5ld0tleSBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAgICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFuZ2VOZXdEZWZhdWx0IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAgICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzb2x1dGlvbl0gVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBUaGlzXG4gICAqIG1lc3NhZ2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgd2FybmluZyB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCwgdGhhdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBtZXNzYWdlLiBJdCBzaG91bGQgb25seSBjb250YWluIHRoZSBpbnN0cnVjdGlvbiBvbiBob3dcbiAgICogdG8gcmVzb2x2ZSB0aGlzIHdhcm5pbmcuXG4gICAqL1xuICBzdGF0aWMgX2xvZ09wdGlvbih7IG9wdGlvbktleSwgZW52S2V5LCBjaGFuZ2VOZXdLZXksIGNoYW5nZU5ld0RlZmF1bHQsIHNvbHV0aW9uIH0pIHtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uS2V5ID8gJ29wdGlvbicgOiAnZW52aXJvbm1lbnQga2V5JztcbiAgICBjb25zdCBrZXkgPSBvcHRpb25LZXkgPyBvcHRpb25LZXkgOiBlbnZLZXk7XG4gICAgY29uc3Qga2V5QWN0aW9uID1cbiAgICAgIGNoYW5nZU5ld0tleSA9PSBudWxsXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogY2hhbmdlTmV3S2V5Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGByZW5hbWVkIHRvICcke2NoYW5nZU5ld0tleX0nYFxuICAgICAgICAgIDogYHJlbW92ZWRgO1xuXG4gICAgLy8gQ29tcG9zZSBtZXNzYWdlXG4gICAgbGV0IG91dHB1dCA9IGBEZXByZWNhdGlvbldhcm5pbmc6IFRoZSBQYXJzZSBTZXJ2ZXIgJHt0eXBlfSAnJHtrZXl9JyBgO1xuICAgIG91dHB1dCArPSBjaGFuZ2VOZXdLZXkgIT0gbnVsbCA/IGBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlICR7a2V5QWN0aW9ufSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmAgOiAnJztcbiAgICBvdXRwdXQgKz0gY2hhbmdlTmV3RGVmYXVsdFxuICAgICAgPyBgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byAnJHtjaGFuZ2VOZXdEZWZhdWx0fScgaW4gYSBmdXR1cmUgdmVyc2lvbi5gXG4gICAgICA6ICcnO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlcHJlY2F0b3I7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQTZCLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRTdCO0FBQ0E7QUFDQTtBQUNBLE1BQU1HLFVBQVUsQ0FBQztFQUNmO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBT0Msc0JBQXNCQSxDQUFDQyxPQUFPLEVBQUU7SUFDckM7SUFDQSxLQUFLLE1BQU1DLFdBQVcsSUFBSUgsVUFBVSxDQUFDSSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7TUFDdkQ7TUFDQSxNQUFNQyxR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
package/lib/Error.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSanitizedError = createSanitizedError;
7
+ exports.createSanitizedHttpError = createSanitizedHttpError;
8
+ var _logger = _interopRequireDefault(require("./logger"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Creates a sanitized error that hides detailed information from clients
12
+ * while logging the detailed message server-side.
13
+ *
14
+ * @param {number} errorCode - The Parse.Error code (e.g., Parse.Error.OPERATION_FORBIDDEN)
15
+ * @param {string} detailedMessage - The detailed error message to log server-side
16
+ * @param {object} config - Parse Server config with enableSanitizedErrorResponse
17
+ * @param {string} [sanitizedMessage='Permission denied'] - The sanitized message to return to clients
18
+ * @returns {Parse.Error} A Parse.Error with sanitized message
19
+ */
20
+ function createSanitizedError(errorCode, detailedMessage, config, sanitizedMessage = 'Permission denied') {
21
+ // On testing we need to add a prefix to the message to allow to find the correct call in the TestUtils.js file
22
+ if (process.env.TESTING) {
23
+ _logger.default.error('Sanitized error:', detailedMessage);
24
+ } else {
25
+ _logger.default.error(detailedMessage);
26
+ }
27
+ return new Parse.Error(errorCode, config?.enableSanitizedErrorResponse !== false ? sanitizedMessage : detailedMessage);
28
+ }
29
+
30
+ /**
31
+ * Creates a sanitized error from a regular Error object
32
+ * Used for non-Parse.Error errors (e.g., Express errors)
33
+ *
34
+ * @param {number} statusCode - HTTP status code (e.g., 403)
35
+ * @param {string} detailedMessage - The detailed error message to log server-side
36
+ * @returns {Error} An Error with sanitized message
37
+ */
38
+ function createSanitizedHttpError(statusCode, detailedMessage, config) {
39
+ // On testing we need to add a prefix to the message to allow to find the correct call in the TestUtils.js file
40
+ if (process.env.TESTING) {
41
+ _logger.default.error('Sanitized error:', detailedMessage);
42
+ } else {
43
+ _logger.default.error(detailedMessage);
44
+ }
45
+ const error = new Error();
46
+ error.status = statusCode;
47
+ error.message = config?.enableSanitizedErrorResponse !== false ? 'Permission denied' : detailedMessage;
48
+ return error;
49
+ }
50
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsImVycm9yQ29kZSIsImRldGFpbGVkTWVzc2FnZSIsImNvbmZpZyIsInNhbml0aXplZE1lc3NhZ2UiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsImRlZmF1bHRMb2dnZXIiLCJlcnJvciIsIlBhcnNlIiwiRXJyb3IiLCJlbmFibGVTYW5pdGl6ZWRFcnJvclJlc3BvbnNlIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi9zcmMvRXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzYW5pdGl6ZWQgZXJyb3IgdGhhdCBoaWRlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmcm9tIGNsaWVudHNcbiAqIHdoaWxlIGxvZ2dpbmcgdGhlIGRldGFpbGVkIG1lc3NhZ2Ugc2VydmVyLXNpZGUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGVycm9yQ29kZSAtIFRoZSBQYXJzZS5FcnJvciBjb2RlIChlLmcuLCBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOKVxuICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbGVkTWVzc2FnZSAtIFRoZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIHRvIGxvZyBzZXJ2ZXItc2lkZVxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIFBhcnNlIFNlcnZlciBjb25maWcgd2l0aCBlbmFibGVTYW5pdGl6ZWRFcnJvclJlc3BvbnNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Nhbml0aXplZE1lc3NhZ2U9J1Blcm1pc3Npb24gZGVuaWVkJ10gLSBUaGUgc2FuaXRpemVkIG1lc3NhZ2UgdG8gcmV0dXJuIHRvIGNsaWVudHNcbiAqIEByZXR1cm5zIHtQYXJzZS5FcnJvcn0gQSBQYXJzZS5FcnJvciB3aXRoIHNhbml0aXplZCBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNhbml0aXplZEVycm9yKGVycm9yQ29kZSwgZGV0YWlsZWRNZXNzYWdlLCBjb25maWcsIHNhbml0aXplZE1lc3NhZ2UgPSAnUGVybWlzc2lvbiBkZW5pZWQnKSB7XG4gIC8vIE9uIHRlc3Rpbmcgd2UgbmVlZCB0byBhZGQgYSBwcmVmaXggdG8gdGhlIG1lc3NhZ2UgdG8gYWxsb3cgdG8gZmluZCB0aGUgY29ycmVjdCBjYWxsIGluIHRoZSBUZXN0VXRpbHMuanMgZmlsZVxuICBpZiAocHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgIGRlZmF1bHRMb2dnZXIuZXJyb3IoJ1Nhbml0aXplZCBlcnJvcjonLCBkZXRhaWxlZE1lc3NhZ2UpO1xuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRMb2dnZXIuZXJyb3IoZGV0YWlsZWRNZXNzYWdlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoZXJyb3JDb2RlLCBjb25maWc/LmVuYWJsZVNhbml0aXplZEVycm9yUmVzcG9uc2UgIT09IGZhbHNlID8gc2FuaXRpemVkTWVzc2FnZSA6IGRldGFpbGVkTWVzc2FnZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNhbml0aXplZCBlcnJvciBmcm9tIGEgcmVndWxhciBFcnJvciBvYmplY3RcbiAqIFVzZWQgZm9yIG5vbi1QYXJzZS5FcnJvciBlcnJvcnMgKGUuZy4sIEV4cHJlc3MgZXJyb3JzKVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNDb2RlIC0gSFRUUCBzdGF0dXMgY29kZSAoZS5nLiwgNDAzKVxuICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbGVkTWVzc2FnZSAtIFRoZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIHRvIGxvZyBzZXJ2ZXItc2lkZVxuICogQHJldHVybnMge0Vycm9yfSBBbiBFcnJvciB3aXRoIHNhbml0aXplZCBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcihzdGF0dXNDb2RlLCBkZXRhaWxlZE1lc3NhZ2UsIGNvbmZpZykge1xuICAvLyBPbiB0ZXN0aW5nIHdlIG5lZWQgdG8gYWRkIGEgcHJlZml4IHRvIHRoZSBtZXNzYWdlIHRvIGFsbG93IHRvIGZpbmQgdGhlIGNvcnJlY3QgY2FsbCBpbiB0aGUgVGVzdFV0aWxzLmpzIGZpbGVcbiAgaWYgKHByb2Nlc3MuZW52LlRFU1RJTkcpIHtcbiAgICBkZWZhdWx0TG9nZ2VyLmVycm9yKCdTYW5pdGl6ZWQgZXJyb3I6JywgZGV0YWlsZWRNZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBkZWZhdWx0TG9nZ2VyLmVycm9yKGRldGFpbGVkTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICBlcnJvci5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICBlcnJvci5tZXNzYWdlID0gY29uZmlnPy5lbmFibGVTYW5pdGl6ZWRFcnJvclJlc3BvbnNlICE9PSBmYWxzZSA/ICdQZXJtaXNzaW9uIGRlbmllZCcgOiBkZXRhaWxlZE1lc3NhZ2U7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IHsgY3JlYXRlU2FuaXRpemVkRXJyb3IsIGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXFDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0csb0JBQW9CQSxDQUFDQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxnQkFBZ0IsR0FBRyxtQkFBbUIsRUFBRTtFQUN4RztFQUNBLElBQUlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxPQUFPLEVBQUU7SUFDdkJDLGVBQWEsQ0FBQ0MsS0FBSyxDQUFDLGtCQUFrQixFQUFFUCxlQUFlLENBQUM7RUFDMUQsQ0FBQyxNQUFNO0lBQ0xNLGVBQWEsQ0FBQ0MsS0FBSyxDQUFDUCxlQUFlLENBQUM7RUFDdEM7RUFFQSxPQUFPLElBQUlRLEtBQUssQ0FBQ0MsS0FBSyxDQUFDVixTQUFTLEVBQUVFLE1BQU0sRUFBRVMsNEJBQTRCLEtBQUssS0FBSyxHQUFHUixnQkFBZ0IsR0FBR0YsZUFBZSxDQUFDO0FBQ3hIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTVyx3QkFBd0JBLENBQUNDLFVBQVUsRUFBRVosZUFBZSxFQUFFQyxNQUFNLEVBQUU7RUFDckU7RUFDQSxJQUFJRSxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFO0lBQ3ZCQyxlQUFhLENBQUNDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRVAsZUFBZSxDQUFDO0VBQzFELENBQUMsTUFBTTtJQUNMTSxlQUFhLENBQUNDLEtBQUssQ0FBQ1AsZUFBZSxDQUFDO0VBQ3RDO0VBRUEsTUFBTU8sS0FBSyxHQUFHLElBQUlFLEtBQUssQ0FBQyxDQUFDO0VBQ3pCRixLQUFLLENBQUNNLE1BQU0sR0FBR0QsVUFBVTtFQUN6QkwsS0FBSyxDQUFDTyxPQUFPLEdBQUdiLE1BQU0sRUFBRVMsNEJBQTRCLEtBQUssS0FBSyxHQUFHLG1CQUFtQixHQUFHVixlQUFlO0VBQ3RHLE9BQU9PLEtBQUs7QUFDZCIsImlnbm9yZUxpc3QiOltdfQ==