parse-server 2.8.4 → 8.6.2

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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = exports.GLOBAL_ID_ATT = void 0;
7
+ var _graphqlRelay = require("graphql-relay");
8
+ var _graphqlListFields = _interopRequireDefault(require("graphql-list-fields"));
9
+ var defaultGraphQLTypes = _interopRequireWildcard(require("./defaultGraphQLTypes"));
10
+ var objectsQueries = _interopRequireWildcard(require("../helpers/objectsQueries"));
11
+ var _parseClassTypes = require("./parseClassTypes");
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
+ const GLOBAL_ID_ATT = exports.GLOBAL_ID_ATT = {
15
+ description: 'This is the global id.',
16
+ type: defaultGraphQLTypes.OBJECT_ID
17
+ };
18
+ const load = parseGraphQLSchema => {
19
+ const {
20
+ nodeInterface,
21
+ nodeField
22
+ } = (0, _graphqlRelay.nodeDefinitions)(async (globalId, context, queryInfo) => {
23
+ try {
24
+ const {
25
+ type,
26
+ id
27
+ } = (0, _graphqlRelay.fromGlobalId)(globalId);
28
+ const {
29
+ config,
30
+ auth,
31
+ info
32
+ } = context;
33
+ const selectedFields = (0, _graphqlListFields.default)(queryInfo);
34
+ const {
35
+ keys,
36
+ include
37
+ } = (0, _parseClassTypes.extractKeysAndInclude)(selectedFields);
38
+ return {
39
+ className: type,
40
+ ...(await objectsQueries.getObject(type, id, keys, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses))
41
+ };
42
+ } catch (e) {
43
+ parseGraphQLSchema.handleError(e);
44
+ }
45
+ }, obj => {
46
+ return parseGraphQLSchema.parseClassTypes[obj.className].classGraphQLOutputType.name;
47
+ });
48
+ parseGraphQLSchema.addGraphQLType(nodeInterface, true);
49
+ parseGraphQLSchema.relayNodeInterface = nodeInterface;
50
+ parseGraphQLSchema.addGraphQLQuery('node', nodeField, true);
51
+ };
52
+ exports.load = load;
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFJlbGF5IiwicmVxdWlyZSIsIl9ncmFwaHFsTGlzdEZpZWxkcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJvYmplY3RzUXVlcmllcyIsIl9wYXJzZUNsYXNzVHlwZXMiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJHTE9CQUxfSURfQVRUIiwiZXhwb3J0cyIsImRlc2NyaXB0aW9uIiwidHlwZSIsIk9CSkVDVF9JRCIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJub2RlSW50ZXJmYWNlIiwibm9kZUZpZWxkIiwibm9kZURlZmluaXRpb25zIiwiZ2xvYmFsSWQiLCJjb250ZXh0IiwicXVlcnlJbmZvIiwiaWQiLCJmcm9tR2xvYmFsSWQiLCJjb25maWciLCJhdXRoIiwiaW5mbyIsInNlbGVjdGVkRmllbGRzIiwiZ2V0RmllbGROYW1lcyIsImtleXMiLCJpbmNsdWRlIiwiZXh0cmFjdEtleXNBbmRJbmNsdWRlIiwiY2xhc3NOYW1lIiwiZ2V0T2JqZWN0IiwidW5kZWZpbmVkIiwicGFyc2VDbGFzc2VzIiwiaGFuZGxlRXJyb3IiLCJvYmoiLCJwYXJzZUNsYXNzVHlwZXMiLCJjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIiwibmFtZSIsImFkZEdyYXBoUUxUeXBlIiwicmVsYXlOb2RlSW50ZXJmYWNlIiwiYWRkR3JhcGhRTFF1ZXJ5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9kZWZhdWx0UmVsYXlTY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9kZURlZmluaXRpb25zLCBmcm9tR2xvYmFsSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCBnZXRGaWVsZE5hbWVzIGZyb20gJ2dyYXBocWwtbGlzdC1maWVsZHMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxUeXBlcyBmcm9tICcuL2RlZmF1bHRHcmFwaFFMVHlwZXMnO1xuaW1wb3J0ICogYXMgb2JqZWN0c1F1ZXJpZXMgZnJvbSAnLi4vaGVscGVycy9vYmplY3RzUXVlcmllcyc7XG5pbXBvcnQgeyBleHRyYWN0S2V5c0FuZEluY2x1ZGUgfSBmcm9tICcuL3BhcnNlQ2xhc3NUeXBlcyc7XG5cbmNvbnN0IEdMT0JBTF9JRF9BVFQgPSB7XG4gIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgZ2xvYmFsIGlkLicsXG4gIHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUX0lELFxufTtcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIGNvbnN0IHsgbm9kZUludGVyZmFjZSwgbm9kZUZpZWxkIH0gPSBub2RlRGVmaW5pdGlvbnMoXG4gICAgYXN5bmMgKGdsb2JhbElkLCBjb250ZXh0LCBxdWVyeUluZm8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgaWQgfSA9IGZyb21HbG9iYWxJZChnbG9iYWxJZCk7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IGdldEZpZWxkTmFtZXMocXVlcnlJbmZvKTtcblxuICAgICAgICBjb25zdCB7IGtleXMsIGluY2x1ZGUgfSA9IGV4dHJhY3RLZXlzQW5kSW5jbHVkZShzZWxlY3RlZEZpZWxkcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjbGFzc05hbWU6IHR5cGUsXG4gICAgICAgICAgLi4uKGF3YWl0IG9iamVjdHNRdWVyaWVzLmdldE9iamVjdChcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICBpbmNsdWRlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzXG4gICAgICAgICAgKSksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9iaiA9PiB7XG4gICAgICByZXR1cm4gcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3NUeXBlc1tvYmouY2xhc3NOYW1lXS5jbGFzc0dyYXBoUUxPdXRwdXRUeXBlLm5hbWU7XG4gICAgfVxuICApO1xuXG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShub2RlSW50ZXJmYWNlLCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLnJlbGF5Tm9kZUludGVyZmFjZSA9IG5vZGVJbnRlcmZhY2U7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMUXVlcnkoJ25vZGUnLCBub2RlRmllbGQsIHRydWUpO1xufTtcblxuZXhwb3J0IHsgR0xPQkFMX0lEX0FUVCwgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxrQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGNBQUEsR0FBQUQsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFOLE9BQUE7QUFBMEQsU0FBQUksd0JBQUFHLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFMLHVCQUFBLFlBQUFBLENBQUFHLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQU4sdUJBQUFLLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsR0FBQUwsQ0FBQSxLQUFBVSxPQUFBLEVBQUFWLENBQUE7QUFFMUQsTUFBTW1CLGFBQWEsR0FBQUMsT0FBQSxDQUFBRCxhQUFBLEdBQUc7RUFDcEJFLFdBQVcsRUFBRSx3QkFBd0I7RUFDckNDLElBQUksRUFBRTFCLG1CQUFtQixDQUFDMkI7QUFDNUIsQ0FBQztBQUVELE1BQU1DLElBQUksR0FBR0Msa0JBQWtCLElBQUk7RUFDakMsTUFBTTtJQUFFQyxhQUFhO0lBQUVDO0VBQVUsQ0FBQyxHQUFHLElBQUFDLDZCQUFlLEVBQ2xELE9BQU9DLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxTQUFTLEtBQUs7SUFDdEMsSUFBSTtNQUNGLE1BQU07UUFBRVQsSUFBSTtRQUFFVTtNQUFHLENBQUMsR0FBRyxJQUFBQywwQkFBWSxFQUFDSixRQUFRLENBQUM7TUFDM0MsTUFBTTtRQUFFSyxNQUFNO1FBQUVDLElBQUk7UUFBRUM7TUFBSyxDQUFDLEdBQUdOLE9BQU87TUFDdEMsTUFBTU8sY0FBYyxHQUFHLElBQUFDLDBCQUFhLEVBQUNQLFNBQVMsQ0FBQztNQUUvQyxNQUFNO1FBQUVRLElBQUk7UUFBRUM7TUFBUSxDQUFDLEdBQUcsSUFBQUMsc0NBQXFCLEVBQUNKLGNBQWMsQ0FBQztNQUUvRCxPQUFPO1FBQ0xLLFNBQVMsRUFBRXBCLElBQUk7UUFDZixJQUFJLE1BQU14QixjQUFjLENBQUM2QyxTQUFTLENBQ2hDckIsSUFBSSxFQUNKVSxFQUFFLEVBQ0ZPLElBQUksRUFDSkMsT0FBTyxFQUNQSSxTQUFTLEVBQ1RBLFNBQVMsRUFDVFYsTUFBTSxFQUNOQyxJQUFJLEVBQ0pDLElBQUksRUFDSlgsa0JBQWtCLENBQUNvQixZQUNyQixDQUFDO01BQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxPQUFPN0MsQ0FBQyxFQUFFO01BQ1Z5QixrQkFBa0IsQ0FBQ3FCLFdBQVcsQ0FBQzlDLENBQUMsQ0FBQztJQUNuQztFQUNGLENBQUMsRUFDRCtDLEdBQUcsSUFBSTtJQUNMLE9BQU90QixrQkFBa0IsQ0FBQ3VCLGVBQWUsQ0FBQ0QsR0FBRyxDQUFDTCxTQUFTLENBQUMsQ0FBQ08sc0JBQXNCLENBQUNDLElBQUk7RUFDdEYsQ0FDRixDQUFDO0VBRUR6QixrQkFBa0IsQ0FBQzBCLGNBQWMsQ0FBQ3pCLGFBQWEsRUFBRSxJQUFJLENBQUM7RUFDdERELGtCQUFrQixDQUFDMkIsa0JBQWtCLEdBQUcxQixhQUFhO0VBQ3JERCxrQkFBa0IsQ0FBQzRCLGVBQWUsQ0FBQyxNQUFNLEVBQUUxQixTQUFTLEVBQUUsSUFBSSxDQUFDO0FBQzdELENBQUM7QUFBQ1AsT0FBQSxDQUFBSSxJQUFBLEdBQUFBLElBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = exports.handleUpload = void 0;
7
+ var _graphql = require("graphql");
8
+ var _http = require("http");
9
+ var _graphqlRelay = require("graphql-relay");
10
+ var _node = _interopRequireDefault(require("parse/node"));
11
+ var defaultGraphQLTypes = _interopRequireWildcard(require("./defaultGraphQLTypes"));
12
+ var _logger = _interopRequireDefault(require("../../logger"));
13
+ 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); }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ // Handle GraphQL file upload and proxy file upload to GraphQL server url specified in config;
16
+ // `createFile` is not directly called by Parse Server to leverage standard file upload mechanism
17
+ const handleUpload = async (upload, config) => {
18
+ const {
19
+ createReadStream,
20
+ filename,
21
+ mimetype
22
+ } = await upload;
23
+ const headers = {
24
+ ...config.headers
25
+ };
26
+ delete headers['accept-encoding'];
27
+ delete headers['accept'];
28
+ delete headers['connection'];
29
+ delete headers['host'];
30
+ delete headers['content-length'];
31
+ const stream = createReadStream();
32
+ const mime = (await import('mime')).default;
33
+ try {
34
+ const ext = mime.getExtension(mimetype);
35
+ const fullFileName = filename.endsWith(`.${ext}`) ? filename : `${filename}.${ext}`;
36
+ const serverUrl = new URL(config.serverURL);
37
+ const fileInfo = await new Promise((resolve, reject) => {
38
+ const req = (0, _http.request)({
39
+ hostname: serverUrl.hostname,
40
+ port: serverUrl.port,
41
+ path: `${serverUrl.pathname}/files/${fullFileName}`,
42
+ method: 'POST',
43
+ headers
44
+ }, res => {
45
+ let data = '';
46
+ res.on('data', chunk => {
47
+ data += chunk;
48
+ });
49
+ res.on('end', () => {
50
+ try {
51
+ resolve(JSON.parse(data));
52
+ } catch {
53
+ reject(new _node.default.Error(_node.default.error, data));
54
+ }
55
+ });
56
+ });
57
+ stream.pipe(req);
58
+ stream.on('end', () => {
59
+ req.end();
60
+ });
61
+ });
62
+ return {
63
+ fileInfo
64
+ };
65
+ } catch (e) {
66
+ stream.destroy();
67
+ _logger.default.error('Error creating a file: ', e);
68
+ throw new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `Could not store file: ${filename}.`);
69
+ }
70
+ };
71
+ exports.handleUpload = handleUpload;
72
+ const load = parseGraphQLSchema => {
73
+ const createMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
74
+ name: 'CreateFile',
75
+ description: 'The createFile mutation can be used to create and upload a new file.',
76
+ inputFields: {
77
+ upload: {
78
+ description: 'This is the new file to be created and uploaded.',
79
+ type: new _graphql.GraphQLNonNull(defaultGraphQLTypes.GraphQLUpload)
80
+ }
81
+ },
82
+ outputFields: {
83
+ fileInfo: {
84
+ description: 'This is the created file info.',
85
+ type: new _graphql.GraphQLNonNull(defaultGraphQLTypes.FILE_INFO)
86
+ }
87
+ },
88
+ mutateAndGetPayload: async (args, context) => {
89
+ try {
90
+ const {
91
+ upload
92
+ } = args;
93
+ const {
94
+ config
95
+ } = context;
96
+ return handleUpload(upload, config);
97
+ } catch (e) {
98
+ parseGraphQLSchema.handleError(e);
99
+ }
100
+ }
101
+ });
102
+ parseGraphQLSchema.addGraphQLType(createMutation.args.input.type.ofType, true, true);
103
+ parseGraphQLSchema.addGraphQLType(createMutation.type, true, true);
104
+ parseGraphQLSchema.addGraphQLMutation('createFile', createMutation, true, true);
105
+ };
106
+ exports.load = load;
107
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfaHR0cCIsIl9ncmFwaHFsUmVsYXkiLCJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbG9nZ2VyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFuZGxlVXBsb2FkIiwidXBsb2FkIiwiY29uZmlnIiwiY3JlYXRlUmVhZFN0cmVhbSIsImZpbGVuYW1lIiwibWltZXR5cGUiLCJoZWFkZXJzIiwic3RyZWFtIiwibWltZSIsImV4dCIsImdldEV4dGVuc2lvbiIsImZ1bGxGaWxlTmFtZSIsImVuZHNXaXRoIiwic2VydmVyVXJsIiwiVVJMIiwic2VydmVyVVJMIiwiZmlsZUluZm8iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcSIsInJlcXVlc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXRoIiwicGF0aG5hbWUiLCJtZXRob2QiLCJyZXMiLCJkYXRhIiwib24iLCJjaHVuayIsIkpTT04iLCJwYXJzZSIsIlBhcnNlIiwiRXJyb3IiLCJlcnJvciIsInBpcGUiLCJlbmQiLCJkZXN0cm95IiwibG9nZ2VyIiwiRklMRV9TQVZFX0VSUk9SIiwiZXhwb3J0cyIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJjcmVhdGVNdXRhdGlvbiIsIm11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJpbnB1dEZpZWxkcyIsInR5cGUiLCJHcmFwaFFMTm9uTnVsbCIsIkdyYXBoUUxVcGxvYWQiLCJvdXRwdXRGaWVsZHMiLCJGSUxFX0lORk8iLCJtdXRhdGVBbmRHZXRQYXlsb2FkIiwiYXJncyIsImNvbnRleHQiLCJoYW5kbGVFcnJvciIsImFkZEdyYXBoUUxUeXBlIiwiaW5wdXQiLCJvZlR5cGUiLCJhZGRHcmFwaFFMTXV0YXRpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvR3JhcGhRTC9sb2FkZXJzL2ZpbGVzTXV0YXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUUxOb25OdWxsIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkIH0gZnJvbSAnZ3JhcGhxbC1yZWxheSc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFR5cGVzIGZyb20gJy4vZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5cbi8vIEhhbmRsZSBHcmFwaFFMIGZpbGUgdXBsb2FkIGFuZCBwcm94eSBmaWxlIHVwbG9hZCB0byBHcmFwaFFMIHNlcnZlciB1cmwgc3BlY2lmaWVkIGluIGNvbmZpZztcbi8vIGBjcmVhdGVGaWxlYCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IFBhcnNlIFNlcnZlciB0byBsZXZlcmFnZSBzdGFuZGFyZCBmaWxlIHVwbG9hZCBtZWNoYW5pc21cbmNvbnN0IGhhbmRsZVVwbG9hZCA9IGFzeW5jICh1cGxvYWQsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGZpbGVuYW1lLCBtaW1ldHlwZSB9ID0gYXdhaXQgdXBsb2FkO1xuICBjb25zdCBoZWFkZXJzID0geyAuLi5jb25maWcuaGVhZGVycyB9O1xuICBkZWxldGUgaGVhZGVyc1snYWNjZXB0LWVuY29kaW5nJ107XG4gIGRlbGV0ZSBoZWFkZXJzWydhY2NlcHQnXTtcbiAgZGVsZXRlIGhlYWRlcnNbJ2Nvbm5lY3Rpb24nXTtcbiAgZGVsZXRlIGhlYWRlcnNbJ2hvc3QnXTtcbiAgZGVsZXRlIGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG4gIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW0oKTtcbiAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgdHJ5IHtcbiAgICBjb25zdCBleHQgPSBtaW1lLmdldEV4dGVuc2lvbihtaW1ldHlwZSk7XG4gICAgY29uc3QgZnVsbEZpbGVOYW1lID0gZmlsZW5hbWUuZW5kc1dpdGgoYC4ke2V4dH1gKSA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWV9LiR7ZXh0fWA7XG4gICAgY29uc3Qgc2VydmVyVXJsID0gbmV3IFVSTChjb25maWcuc2VydmVyVVJMKTtcbiAgICBjb25zdCBmaWxlSW5mbyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IHJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0bmFtZTogc2VydmVyVXJsLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHNlcnZlclVybC5wb3J0LFxuICAgICAgICAgIHBhdGg6IGAke3NlcnZlclVybC5wYXRobmFtZX0vZmlsZXMvJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9LFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgICAgcmVzLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICAgICAgZGF0YSArPSBjaHVuaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5lcnJvciwgZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgc3RyZWFtLnBpcGUocmVxKTtcbiAgICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICByZXEuZW5kKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZUluZm8sXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsIGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCk7XG4gIH1cbn07XG5cbmNvbnN0IGxvYWQgPSBwYXJzZUdyYXBoUUxTY2hlbWEgPT4ge1xuICBjb25zdCBjcmVhdGVNdXRhdGlvbiA9IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQoe1xuICAgIG5hbWU6ICdDcmVhdGVGaWxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoZSBjcmVhdGVGaWxlIG11dGF0aW9uIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgdXBsb2FkIGEgbmV3IGZpbGUuJyxcbiAgICBpbnB1dEZpZWxkczoge1xuICAgICAgdXBsb2FkOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgbmV3IGZpbGUgdG8gYmUgY3JlYXRlZCBhbmQgdXBsb2FkZWQuJyxcbiAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKGRlZmF1bHRHcmFwaFFMVHlwZXMuR3JhcGhRTFVwbG9hZCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgb3V0cHV0RmllbGRzOiB7XG4gICAgICBmaWxlSW5mbzoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGNyZWF0ZWQgZmlsZSBpbmZvLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChkZWZhdWx0R3JhcGhRTFR5cGVzLkZJTEVfSU5GTyksXG4gICAgICB9LFxuICAgIH0sXG4gICAgbXV0YXRlQW5kR2V0UGF5bG9hZDogYXN5bmMgKGFyZ3MsIGNvbnRleHQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdXBsb2FkIH0gPSBhcmdzO1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gY29udGV4dDtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVwbG9hZCh1cGxvYWQsIGNvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY3JlYXRlTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjcmVhdGVNdXRhdGlvbi50eXBlLCB0cnVlLCB0cnVlKTtcbiAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxNdXRhdGlvbignY3JlYXRlRmlsZScsIGNyZWF0ZU11dGF0aW9uLCB0cnVlLCB0cnVlKTtcbn07XG5cbmV4cG9ydCB7IGxvYWQsIGhhbmRsZVVwbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxhQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxtQkFBQSxHQUFBQyx1QkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBSCxzQkFB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
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = void 0;
7
+ var _graphql = require("graphql");
8
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
9
+ var _graphqlRelay = require("graphql-relay");
10
+ var _FunctionsRouter = require("../../Routers/FunctionsRouter");
11
+ var defaultGraphQLTypes = _interopRequireWildcard(require("./defaultGraphQLTypes"));
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
+ const load = parseGraphQLSchema => {
15
+ if (parseGraphQLSchema.functionNames.length > 0) {
16
+ const cloudCodeFunctionEnum = parseGraphQLSchema.addGraphQLType(new _graphql.GraphQLEnumType({
17
+ name: 'CloudCodeFunction',
18
+ description: 'The CloudCodeFunction enum type contains a list of all available cloud code functions.',
19
+ values: parseGraphQLSchema.functionNames.reduce((values, functionName) => ({
20
+ ...values,
21
+ [functionName]: {
22
+ value: functionName
23
+ }
24
+ }), {})
25
+ }), true, true);
26
+ const callCloudCodeMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
27
+ name: 'CallCloudCode',
28
+ description: 'The callCloudCode mutation can be used to invoke a cloud code function.',
29
+ inputFields: {
30
+ functionName: {
31
+ description: 'This is the function to be called.',
32
+ type: new _graphql.GraphQLNonNull(cloudCodeFunctionEnum)
33
+ },
34
+ params: {
35
+ description: 'These are the params to be passed to the function.',
36
+ type: defaultGraphQLTypes.OBJECT
37
+ }
38
+ },
39
+ outputFields: {
40
+ result: {
41
+ description: 'This is the result value of the cloud code function execution.',
42
+ type: defaultGraphQLTypes.ANY
43
+ }
44
+ },
45
+ mutateAndGetPayload: async (args, context) => {
46
+ try {
47
+ const {
48
+ functionName,
49
+ params
50
+ } = (0, _deepcopy.default)(args);
51
+ const {
52
+ config,
53
+ auth,
54
+ info
55
+ } = context;
56
+ return {
57
+ result: (await _FunctionsRouter.FunctionsRouter.handleCloudFunction({
58
+ params: {
59
+ functionName
60
+ },
61
+ config,
62
+ auth,
63
+ info,
64
+ body: params
65
+ })).response.result
66
+ };
67
+ } catch (e) {
68
+ parseGraphQLSchema.handleError(e);
69
+ }
70
+ }
71
+ });
72
+ parseGraphQLSchema.addGraphQLType(callCloudCodeMutation.args.input.type.ofType, true, true);
73
+ parseGraphQLSchema.addGraphQLType(callCloudCodeMutation.type, true, true);
74
+ parseGraphQLSchema.addGraphQLMutation('callCloudCode', callCloudCodeMutation, true, true);
75
+ }
76
+ };
77
+ exports.load = load;
78
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfZGVlcGNvcHkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2dyYXBocWxSZWxheSIsIl9GdW5jdGlvbnNSb3V0ZXIiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJsb2FkIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiZnVuY3Rpb25OYW1lcyIsImxlbmd0aCIsImNsb3VkQ29kZUZ1bmN0aW9uRW51bSIsImFkZEdyYXBoUUxUeXBlIiwiR3JhcGhRTEVudW1UeXBlIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidmFsdWVzIiwicmVkdWNlIiwiZnVuY3Rpb25OYW1lIiwidmFsdWUiLCJjYWxsQ2xvdWRDb2RlTXV0YXRpb24iLCJtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkIiwiaW5wdXRGaWVsZHMiLCJ0eXBlIiwiR3JhcGhRTE5vbk51bGwiLCJwYXJhbXMiLCJPQkpFQ1QiLCJvdXRwdXRGaWVsZHMiLCJyZXN1bHQiLCJBTlkiLCJtdXRhdGVBbmRHZXRQYXlsb2FkIiwiYXJncyIsImNvbnRleHQiLCJkZWVwY29weSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwiRnVuY3Rpb25zUm91dGVyIiwiaGFuZGxlQ2xvdWRGdW5jdGlvbiIsImJvZHkiLCJyZXNwb25zZSIsImhhbmRsZUVycm9yIiwiaW5wdXQiLCJvZlR5cGUiLCJhZGRHcmFwaFFMTXV0YXRpb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9mdW5jdGlvbnNNdXRhdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhRTE5vbk51bGwsIEdyYXBoUUxFbnVtVHlwZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IGRlZXBjb3B5IGZyb20gJ2RlZXBjb3B5JztcbmltcG9ydCB7IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCB7IEZ1bmN0aW9uc1JvdXRlciB9IGZyb20gJy4uLy4uL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcbmltcG9ydCAqIGFzIGRlZmF1bHRHcmFwaFFMVHlwZXMgZnJvbSAnLi9kZWZhdWx0R3JhcGhRTFR5cGVzJztcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIGlmIChwYXJzZUdyYXBoUUxTY2hlbWEuZnVuY3Rpb25OYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY2xvdWRDb2RlRnVuY3Rpb25FbnVtID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFxuICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgIG5hbWU6ICdDbG91ZENvZGVGdW5jdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdUaGUgQ2xvdWRDb2RlRnVuY3Rpb24gZW51bSB0eXBlIGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNsb3VkIGNvZGUgZnVuY3Rpb25zLicsXG4gICAgICAgIHZhbHVlczogcGFyc2VHcmFwaFFMU2NoZW1hLmZ1bmN0aW9uTmFtZXMucmVkdWNlKFxuICAgICAgICAgICh2YWx1ZXMsIGZ1bmN0aW9uTmFtZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICAgIFtmdW5jdGlvbk5hbWVdOiB7IHZhbHVlOiBmdW5jdGlvbk5hbWUgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICBjb25zdCBjYWxsQ2xvdWRDb2RlTXV0YXRpb24gPSBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkKHtcbiAgICAgIG5hbWU6ICdDYWxsQ2xvdWRDb2RlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGxDbG91ZENvZGUgbXV0YXRpb24gY2FuIGJlIHVzZWQgdG8gaW52b2tlIGEgY2xvdWQgY29kZSBmdW5jdGlvbi4nLFxuICAgICAgaW5wdXRGaWVsZHM6IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQuJyxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoY2xvdWRDb2RlRnVuY3Rpb25FbnVtKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGVzZSBhcmUgdGhlIHBhcmFtcyB0byBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLicsXG4gICAgICAgICAgdHlwZTogZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1QsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb3V0cHV0RmllbGRzOiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBjbG91ZCBjb2RlIGZ1bmN0aW9uIGV4ZWN1dGlvbi4nLFxuICAgICAgICAgIHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuQU5ZLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBmdW5jdGlvbk5hbWUsIHBhcmFtcyB9ID0gZGVlcGNvcHkoYXJncyk7XG4gICAgICAgICAgY29uc3QgeyBjb25maWcsIGF1dGgsIGluZm8gfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdWx0OiAoXG4gICAgICAgICAgICAgIGF3YWl0IEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKS5yZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjYWxsQ2xvdWRDb2RlTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNhbGxDbG91ZENvZGVNdXRhdGlvbi50eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTE11dGF0aW9uKCdjYWxsQ2xvdWRDb2RlJywgY2FsbENsb3VkQ29kZU11dGF0aW9uLCB0cnVlLCB0cnVlKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFI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
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.load = void 0;
7
+ var _graphql = require("graphql");
8
+ var _graphqlRelay = require("graphql-relay");
9
+ var _graphqlListFields = _interopRequireDefault(require("graphql-list-fields"));
10
+ var _deepcopy = _interopRequireDefault(require("deepcopy"));
11
+ var defaultGraphQLTypes = _interopRequireWildcard(require("./defaultGraphQLTypes"));
12
+ var _parseGraphQLUtils = require("../parseGraphQLUtils");
13
+ var objectsMutations = _interopRequireWildcard(require("../helpers/objectsMutations"));
14
+ var objectsQueries = _interopRequireWildcard(require("../helpers/objectsQueries"));
15
+ var _ParseGraphQLController = require("../../Controllers/ParseGraphQLController");
16
+ var _className = require("../transformers/className");
17
+ var _mutation = require("../transformers/mutation");
18
+ 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); }
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
+ const filterDeletedFields = fields => Object.keys(fields).reduce((acc, key) => {
21
+ if (typeof fields[key] === 'object' && fields[key]?.__op === 'Delete') {
22
+ acc[key] = null;
23
+ }
24
+ return acc;
25
+ }, fields);
26
+ const getOnlyRequiredFields = (updatedFields, selectedFieldsString, includedFieldsString, nativeObjectFields) => {
27
+ const includedFields = includedFieldsString ? includedFieldsString.split(',') : [];
28
+ const selectedFields = selectedFieldsString ? selectedFieldsString.split(',') : [];
29
+ const missingFields = selectedFields.filter(field => !nativeObjectFields.includes(field) || includedFields.includes(field)).join(',');
30
+ if (!missingFields.length) {
31
+ return {
32
+ needGet: false,
33
+ keys: ''
34
+ };
35
+ } else {
36
+ return {
37
+ needGet: true,
38
+ keys: missingFields
39
+ };
40
+ }
41
+ };
42
+ const load = function (parseGraphQLSchema, parseClass, parseClassConfig) {
43
+ const className = parseClass.className;
44
+ const graphQLClassName = (0, _className.transformClassNameToGraphQL)(className);
45
+ const getGraphQLQueryName = graphQLClassName.charAt(0).toLowerCase() + graphQLClassName.slice(1);
46
+ const {
47
+ create: isCreateEnabled = true,
48
+ update: isUpdateEnabled = true,
49
+ destroy: isDestroyEnabled = true,
50
+ createAlias = '',
51
+ updateAlias = '',
52
+ destroyAlias = ''
53
+ } = (0, _parseGraphQLUtils.getParseClassMutationConfig)(parseClassConfig);
54
+ const {
55
+ classGraphQLCreateType,
56
+ classGraphQLUpdateType,
57
+ classGraphQLOutputType
58
+ } = parseGraphQLSchema.parseClassTypes[className];
59
+ if (isCreateEnabled) {
60
+ const createGraphQLMutationName = createAlias || `create${graphQLClassName}`;
61
+ const createGraphQLMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
62
+ name: `Create${graphQLClassName}`,
63
+ description: `The ${createGraphQLMutationName} mutation can be used to create a new object of the ${graphQLClassName} class.`,
64
+ inputFields: {
65
+ fields: {
66
+ description: 'These are the fields that will be used to create the new object.',
67
+ type: classGraphQLCreateType || defaultGraphQLTypes.OBJECT
68
+ }
69
+ },
70
+ outputFields: {
71
+ [getGraphQLQueryName]: {
72
+ description: 'This is the created object.',
73
+ type: new _graphql.GraphQLNonNull(classGraphQLOutputType || defaultGraphQLTypes.OBJECT)
74
+ }
75
+ },
76
+ mutateAndGetPayload: async (args, context, mutationInfo) => {
77
+ try {
78
+ let {
79
+ fields
80
+ } = (0, _deepcopy.default)(args);
81
+ if (!fields) {
82
+ fields = {};
83
+ }
84
+ const {
85
+ config,
86
+ auth,
87
+ info
88
+ } = context;
89
+ const parseFields = await (0, _mutation.transformTypes)('create', fields, {
90
+ className,
91
+ parseGraphQLSchema,
92
+ originalFields: args.fields,
93
+ req: {
94
+ config,
95
+ auth,
96
+ info
97
+ }
98
+ });
99
+ const createdObject = await objectsMutations.createObject(className, parseFields, config, auth, info);
100
+ const selectedFields = (0, _graphqlListFields.default)(mutationInfo).filter(field => field.startsWith(`${getGraphQLQueryName}.`)).map(field => field.replace(`${getGraphQLQueryName}.`, ''));
101
+ const {
102
+ keys,
103
+ include
104
+ } = (0, _parseGraphQLUtils.extractKeysAndInclude)(selectedFields);
105
+ const {
106
+ keys: requiredKeys,
107
+ needGet
108
+ } = getOnlyRequiredFields(fields, keys, include, ['id', 'objectId', 'createdAt', 'updatedAt']);
109
+ const needToGetAllKeys = objectsQueries.needToGetAllKeys(parseClass.fields, keys, parseGraphQLSchema.parseClasses);
110
+ let optimizedObject = {};
111
+ if (needGet && !needToGetAllKeys) {
112
+ optimizedObject = await objectsQueries.getObject(className, createdObject.objectId, requiredKeys, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses);
113
+ } else if (needToGetAllKeys) {
114
+ optimizedObject = await objectsQueries.getObject(className, createdObject.objectId, undefined, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses);
115
+ }
116
+ return {
117
+ [getGraphQLQueryName]: {
118
+ ...createdObject,
119
+ updatedAt: createdObject.createdAt,
120
+ ...filterDeletedFields(parseFields),
121
+ ...optimizedObject
122
+ }
123
+ };
124
+ } catch (e) {
125
+ parseGraphQLSchema.handleError(e);
126
+ }
127
+ }
128
+ });
129
+ if (parseGraphQLSchema.addGraphQLType(createGraphQLMutation.args.input.type.ofType) && parseGraphQLSchema.addGraphQLType(createGraphQLMutation.type)) {
130
+ parseGraphQLSchema.addGraphQLMutation(createGraphQLMutationName, createGraphQLMutation);
131
+ }
132
+ }
133
+ if (isUpdateEnabled) {
134
+ const updateGraphQLMutationName = updateAlias || `update${graphQLClassName}`;
135
+ const updateGraphQLMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
136
+ name: `Update${graphQLClassName}`,
137
+ description: `The ${updateGraphQLMutationName} mutation can be used to update an object of the ${graphQLClassName} class.`,
138
+ inputFields: {
139
+ id: defaultGraphQLTypes.GLOBAL_OR_OBJECT_ID_ATT,
140
+ fields: {
141
+ description: 'These are the fields that will be used to update the object.',
142
+ type: classGraphQLUpdateType || defaultGraphQLTypes.OBJECT
143
+ }
144
+ },
145
+ outputFields: {
146
+ [getGraphQLQueryName]: {
147
+ description: 'This is the updated object.',
148
+ type: new _graphql.GraphQLNonNull(classGraphQLOutputType || defaultGraphQLTypes.OBJECT)
149
+ }
150
+ },
151
+ mutateAndGetPayload: async (args, context, mutationInfo) => {
152
+ try {
153
+ let {
154
+ id,
155
+ fields
156
+ } = (0, _deepcopy.default)(args);
157
+ if (!fields) {
158
+ fields = {};
159
+ }
160
+ const {
161
+ config,
162
+ auth,
163
+ info
164
+ } = context;
165
+ const globalIdObject = (0, _graphqlRelay.fromGlobalId)(id);
166
+ if (globalIdObject.type === className) {
167
+ id = globalIdObject.id;
168
+ }
169
+ const parseFields = await (0, _mutation.transformTypes)('update', fields, {
170
+ className,
171
+ parseGraphQLSchema,
172
+ originalFields: args.fields,
173
+ req: {
174
+ config,
175
+ auth,
176
+ info
177
+ }
178
+ });
179
+ const updatedObject = await objectsMutations.updateObject(className, id, parseFields, config, auth, info);
180
+ const selectedFields = (0, _graphqlListFields.default)(mutationInfo).filter(field => field.startsWith(`${getGraphQLQueryName}.`)).map(field => field.replace(`${getGraphQLQueryName}.`, ''));
181
+ const {
182
+ keys,
183
+ include
184
+ } = (0, _parseGraphQLUtils.extractKeysAndInclude)(selectedFields);
185
+ const {
186
+ keys: requiredKeys,
187
+ needGet
188
+ } = getOnlyRequiredFields(fields, keys, include, ['id', 'objectId', 'updatedAt']);
189
+ const needToGetAllKeys = objectsQueries.needToGetAllKeys(parseClass.fields, keys, parseGraphQLSchema.parseClasses);
190
+ let optimizedObject = {};
191
+ if (needGet && !needToGetAllKeys) {
192
+ optimizedObject = await objectsQueries.getObject(className, id, requiredKeys, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses);
193
+ } else if (needToGetAllKeys) {
194
+ optimizedObject = await objectsQueries.getObject(className, id, undefined, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses);
195
+ }
196
+ return {
197
+ [getGraphQLQueryName]: {
198
+ objectId: id,
199
+ ...updatedObject,
200
+ ...filterDeletedFields(parseFields),
201
+ ...optimizedObject
202
+ }
203
+ };
204
+ } catch (e) {
205
+ parseGraphQLSchema.handleError(e);
206
+ }
207
+ }
208
+ });
209
+ if (parseGraphQLSchema.addGraphQLType(updateGraphQLMutation.args.input.type.ofType) && parseGraphQLSchema.addGraphQLType(updateGraphQLMutation.type)) {
210
+ parseGraphQLSchema.addGraphQLMutation(updateGraphQLMutationName, updateGraphQLMutation);
211
+ }
212
+ }
213
+ if (isDestroyEnabled) {
214
+ const deleteGraphQLMutationName = destroyAlias || `delete${graphQLClassName}`;
215
+ const deleteGraphQLMutation = (0, _graphqlRelay.mutationWithClientMutationId)({
216
+ name: `Delete${graphQLClassName}`,
217
+ description: `The ${deleteGraphQLMutationName} mutation can be used to delete an object of the ${graphQLClassName} class.`,
218
+ inputFields: {
219
+ id: defaultGraphQLTypes.GLOBAL_OR_OBJECT_ID_ATT
220
+ },
221
+ outputFields: {
222
+ [getGraphQLQueryName]: {
223
+ description: 'This is the deleted object.',
224
+ type: new _graphql.GraphQLNonNull(classGraphQLOutputType || defaultGraphQLTypes.OBJECT)
225
+ }
226
+ },
227
+ mutateAndGetPayload: async (args, context, mutationInfo) => {
228
+ try {
229
+ let {
230
+ id
231
+ } = (0, _deepcopy.default)(args);
232
+ const {
233
+ config,
234
+ auth,
235
+ info
236
+ } = context;
237
+ const globalIdObject = (0, _graphqlRelay.fromGlobalId)(id);
238
+ if (globalIdObject.type === className) {
239
+ id = globalIdObject.id;
240
+ }
241
+ const selectedFields = (0, _graphqlListFields.default)(mutationInfo).filter(field => field.startsWith(`${getGraphQLQueryName}.`)).map(field => field.replace(`${getGraphQLQueryName}.`, ''));
242
+ const {
243
+ keys,
244
+ include
245
+ } = (0, _parseGraphQLUtils.extractKeysAndInclude)(selectedFields);
246
+ let optimizedObject = {};
247
+ if (keys && keys.split(',').filter(key => !['id', 'objectId'].includes(key)).length > 0) {
248
+ optimizedObject = await objectsQueries.getObject(className, id, keys, include, undefined, undefined, config, auth, info, parseGraphQLSchema.parseClasses);
249
+ }
250
+ await objectsMutations.deleteObject(className, id, config, auth, info);
251
+ return {
252
+ [getGraphQLQueryName]: {
253
+ objectId: id,
254
+ ...optimizedObject
255
+ }
256
+ };
257
+ } catch (e) {
258
+ parseGraphQLSchema.handleError(e);
259
+ }
260
+ }
261
+ });
262
+ if (parseGraphQLSchema.addGraphQLType(deleteGraphQLMutation.args.input.type.ofType) && parseGraphQLSchema.addGraphQLType(deleteGraphQLMutation.type)) {
263
+ parseGraphQLSchema.addGraphQLMutation(deleteGraphQLMutationName, deleteGraphQLMutation);
264
+ }
265
+ }
266
+ };
267
+ exports.load = load;
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfZ3JhcGhxbFJlbGF5IiwiX2dyYXBocWxMaXN0RmllbGRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwY29weSIsImRlZmF1bHRHcmFwaFFMVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9wYXJzZUdyYXBoUUxVdGlscyIsIm9iamVjdHNNdXRhdGlvbnMiLCJvYmplY3RzUXVlcmllcyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2NsYXNzTmFtZSIsIl9tdXRhdGlvbiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImZpbHRlckRlbGV0ZWRGaWVsZHMiLCJmaWVsZHMiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwiX19vcCIsImdldE9ubHlSZXF1aXJlZEZpZWxkcyIsInVwZGF0ZWRGaWVsZHMiLCJzZWxlY3RlZEZpZWxkc1N0cmluZyIsImluY2x1ZGVkRmllbGRzU3RyaW5nIiwibmF0aXZlT2JqZWN0RmllbGRzIiwiaW5jbHVkZWRGaWVsZHMiLCJzcGxpdCIsInNlbGVjdGVkRmllbGRzIiwibWlzc2luZ0ZpZWxkcyIsImZpbHRlciIsImZpZWxkIiwiaW5jbHVkZXMiLCJqb2luIiwibGVuZ3RoIiwibmVlZEdldCIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJwYXJzZUNsYXNzIiwicGFyc2VDbGFzc0NvbmZpZyIsImNsYXNzTmFtZSIsImdyYXBoUUxDbGFzc05hbWUiLCJ0cmFuc2Zvcm1DbGFzc05hbWVUb0dyYXBoUUwiLCJnZXRHcmFwaFFMUXVlcnlOYW1lIiwiY2hhckF0IiwidG9Mb3dlckNhc2UiLCJzbGljZSIsImNyZWF0ZSIsImlzQ3JlYXRlRW5hYmxlZCIsInVwZGF0ZSIsImlzVXBkYXRlRW5hYmxlZCIsImRlc3Ryb3kiLCJpc0Rlc3Ryb3lFbmFibGVkIiwiY3JlYXRlQWxpYXMiLCJ1cGRhdGVBbGlhcyIsImRlc3Ryb3lBbGlhcyIsImdldFBhcnNlQ2xhc3NNdXRhdGlvbkNvbmZpZyIsImNsYXNzR3JhcGhRTENyZWF0ZVR5cGUiLCJjbGFzc0dyYXBoUUxVcGRhdGVUeXBlIiwiY2xhc3NHcmFwaFFMT3V0cHV0VHlwZSIsInBhcnNlQ2xhc3NUeXBlcyIsImNyZWF0ZUdyYXBoUUxNdXRhdGlvbk5hbWUiLCJjcmVhdGVHcmFwaFFMTXV0YXRpb24iLCJtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiaW5wdXRGaWVsZHMiLCJ0eXBlIiwiT0JKRUNUIiwib3V0cHV0RmllbGRzIiwiR3JhcGhRTE5vbk51bGwiLCJtdXRhdGVBbmRHZXRQYXlsb2FkIiwiYXJncyIsImNvbnRleHQiLCJtdXRhdGlvbkluZm8iLCJkZWVwY29weSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwicGFyc2VGaWVsZHMiLCJ0cmFuc2Zvcm1UeXBlcyIsIm9yaWdpbmFsRmllbGRzIiwicmVxIiwiY3JlYXRlZE9iamVjdCIsImNyZWF0ZU9iamVjdCIsImdldEZpZWxkTmFtZXMiLCJzdGFydHNXaXRoIiwibWFwIiwicmVwbGFjZSIsImluY2x1ZGUiLCJleHRyYWN0S2V5c0FuZEluY2x1ZGUiLCJyZXF1aXJlZEtleXMiLCJuZWVkVG9HZXRBbGxLZXlzIiwicGFyc2VDbGFzc2VzIiwib3B0aW1pemVkT2JqZWN0IiwiZ2V0T2JqZWN0Iiwib2JqZWN0SWQiLCJ1bmRlZmluZWQiLCJ1cGRhdGVkQXQiLCJjcmVhdGVkQXQiLCJoYW5kbGVFcnJvciIsImFkZEdyYXBoUUxUeXBlIiwiaW5wdXQiLCJvZlR5cGUiLCJhZGRHcmFwaFFMTXV0YXRpb24iLCJ1cGRhdGVHcmFwaFFMTXV0YXRpb25OYW1lIiwidXBkYXRlR3JhcGhRTE11dGF0aW9uIiwiaWQiLCJHTE9CQUxfT1JfT0JKRUNUX0lEX0FUVCIsImdsb2JhbElkT2JqZWN0IiwiZnJvbUdsb2JhbElkIiwidXBkYXRlZE9iamVjdCIsInVwZGF0ZU9iamVjdCIsImRlbGV0ZUdyYXBoUUxNdXRhdGlvbk5hbWUiLCJkZWxldGVHcmFwaFFMTXV0YXRpb24iLCJkZWxldGVPYmplY3QiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9wYXJzZUNsYXNzTXV0YXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUUxOb25OdWxsIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBmcm9tR2xvYmFsSWQsIG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCBnZXRGaWVsZE5hbWVzIGZyb20gJ2dyYXBocWwtbGlzdC1maWVsZHMnO1xuaW1wb3J0IGRlZXBjb3B5IGZyb20gJ2RlZXBjb3B5JztcbmltcG9ydCAqIGFzIGRlZmF1bHRHcmFwaFFMVHlwZXMgZnJvbSAnLi9kZWZhdWx0R3JhcGhRTFR5cGVzJztcbmltcG9ydCB7IGV4dHJhY3RLZXlzQW5kSW5jbHVkZSwgZ2V0UGFyc2VDbGFzc011dGF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vcGFyc2VHcmFwaFFMVXRpbHMnO1xuaW1wb3J0ICogYXMgb2JqZWN0c011dGF0aW9ucyBmcm9tICcuLi9oZWxwZXJzL29iamVjdHNNdXRhdGlvbnMnO1xuaW1wb3J0ICogYXMgb2JqZWN0c1F1ZXJpZXMgZnJvbSAnLi4vaGVscGVycy9vYmplY3RzUXVlcmllcyc7XG5pbXBvcnQgeyBQYXJzZUdyYXBoUUxDbGFzc0NvbmZpZyB9IGZyb20gJy4uLy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuaW1wb3J0IHsgdHJhbnNmb3JtQ2xhc3NOYW1lVG9HcmFwaFFMIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2NsYXNzTmFtZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1UeXBlcyB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9tdXRhdGlvbic7XG5cbmNvbnN0IGZpbHRlckRlbGV0ZWRGaWVsZHMgPSBmaWVsZHMgPT5cbiAgT2JqZWN0LmtleXMoZmllbGRzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmaWVsZHNba2V5XSA9PT0gJ29iamVjdCcgJiYgZmllbGRzW2tleV0/Ll9fb3AgPT09ICdEZWxldGUnKSB7XG4gICAgICBhY2Nba2V5XSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIGZpZWxkcyk7XG5cbmNvbnN0IGdldE9ubHlSZXF1aXJlZEZpZWxkcyA9IChcbiAgdXBkYXRlZEZpZWxkcyxcbiAgc2VsZWN0ZWRGaWVsZHNTdHJpbmcsXG4gIGluY2x1ZGVkRmllbGRzU3RyaW5nLFxuICBuYXRpdmVPYmplY3RGaWVsZHNcbikgPT4ge1xuICBjb25zdCBpbmNsdWRlZEZpZWxkcyA9IGluY2x1ZGVkRmllbGRzU3RyaW5nID8gaW5jbHVkZWRGaWVsZHNTdHJpbmcuc3BsaXQoJywnKSA6IFtdO1xuICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHNlbGVjdGVkRmllbGRzU3RyaW5nID8gc2VsZWN0ZWRGaWVsZHNTdHJpbmcuc3BsaXQoJywnKSA6IFtdO1xuICBjb25zdCBtaXNzaW5nRmllbGRzID0gc2VsZWN0ZWRGaWVsZHNcbiAgICAuZmlsdGVyKGZpZWxkID0+ICFuYXRpdmVPYmplY3RGaWVsZHMuaW5jbHVkZXMoZmllbGQpIHx8IGluY2x1ZGVkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSlcbiAgICAuam9pbignLCcpO1xuICBpZiAoIW1pc3NpbmdGaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgbmVlZEdldDogZmFsc2UsIGtleXM6ICcnIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgbmVlZEdldDogdHJ1ZSwga2V5czogbWlzc2luZ0ZpZWxkcyB9O1xuICB9XG59O1xuXG5jb25zdCBsb2FkID0gZnVuY3Rpb24gKHBhcnNlR3JhcGhRTFNjaGVtYSwgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZzogP1BhcnNlR3JhcGhRTENsYXNzQ29uZmlnKSB7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnNlQ2xhc3MuY2xhc3NOYW1lO1xuICBjb25zdCBncmFwaFFMQ2xhc3NOYW1lID0gdHJhbnNmb3JtQ2xhc3NOYW1lVG9HcmFwaFFMKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGdldEdyYXBoUUxRdWVyeU5hbWUgPSBncmFwaFFMQ2xhc3NOYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgZ3JhcGhRTENsYXNzTmFtZS5zbGljZSgxKTtcblxuICBjb25zdCB7XG4gICAgY3JlYXRlOiBpc0NyZWF0ZUVuYWJsZWQgPSB0cnVlLFxuICAgIHVwZGF0ZTogaXNVcGRhdGVFbmFibGVkID0gdHJ1ZSxcbiAgICBkZXN0cm95OiBpc0Rlc3Ryb3lFbmFibGVkID0gdHJ1ZSxcbiAgICBjcmVhdGVBbGlhczogY3JlYXRlQWxpYXMgPSAnJyxcbiAgICB1cGRhdGVBbGlhczogdXBkYXRlQWxpYXMgPSAnJyxcbiAgICBkZXN0cm95QWxpYXM6IGRlc3Ryb3lBbGlhcyA9ICcnLFxuICB9ID0gZ2V0UGFyc2VDbGFzc011dGF0aW9uQ29uZmlnKHBhcnNlQ2xhc3NDb25maWcpO1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUsXG4gICAgY2xhc3NHcmFwaFFMT3V0cHV0VHlwZSxcbiAgfSA9IHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzVHlwZXNbY2xhc3NOYW1lXTtcblxuICBpZiAoaXNDcmVhdGVFbmFibGVkKSB7XG4gICAgY29uc3QgY3JlYXRlR3JhcGhRTE11dGF0aW9uTmFtZSA9IGNyZWF0ZUFsaWFzIHx8IGBjcmVhdGUke2dyYXBoUUxDbGFzc05hbWV9YDtcbiAgICBjb25zdCBjcmVhdGVHcmFwaFFMTXV0YXRpb24gPSBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkKHtcbiAgICAgIG5hbWU6IGBDcmVhdGUke2dyYXBoUUxDbGFzc05hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhlICR7Y3JlYXRlR3JhcGhRTE11dGF0aW9uTmFtZX0gbXV0YXRpb24gY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCBvZiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgICAgaW5wdXRGaWVsZHM6IHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGVzZSBhcmUgdGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIG5ldyBvYmplY3QuJyxcbiAgICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG91dHB1dEZpZWxkczoge1xuICAgICAgICBbZ2V0R3JhcGhRTFF1ZXJ5TmFtZV06IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGNyZWF0ZWQgb2JqZWN0LicsXG4gICAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTE91dHB1dFR5cGUgfHwgZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1QpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0LCBtdXRhdGlvbkluZm8pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgeyBmaWVsZHMgfSA9IGRlZXBjb3B5KGFyZ3MpO1xuICAgICAgICAgIGlmICghZmllbGRzKSB7IGZpZWxkcyA9IHt9OyB9XG4gICAgICAgICAgY29uc3QgeyBjb25maWcsIGF1dGgsIGluZm8gfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICBjb25zdCBwYXJzZUZpZWxkcyA9IGF3YWl0IHRyYW5zZm9ybVR5cGVzKCdjcmVhdGUnLCBmaWVsZHMsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzOiBhcmdzLmZpZWxkcyxcbiAgICAgICAgICAgIHJlcTogeyBjb25maWcsIGF1dGgsIGluZm8gfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGNyZWF0ZWRPYmplY3QgPSBhd2FpdCBvYmplY3RzTXV0YXRpb25zLmNyZWF0ZU9iamVjdChcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHBhcnNlRmllbGRzLFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgIGluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRmllbGRzID0gZ2V0RmllbGROYW1lcyhtdXRhdGlvbkluZm8pXG4gICAgICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnN0YXJ0c1dpdGgoYCR7Z2V0R3JhcGhRTFF1ZXJ5TmFtZX0uYCkpXG4gICAgICAgICAgICAubWFwKGZpZWxkID0+IGZpZWxkLnJlcGxhY2UoYCR7Z2V0R3JhcGhRTFF1ZXJ5TmFtZX0uYCwgJycpKTtcbiAgICAgICAgICBjb25zdCB7IGtleXMsIGluY2x1ZGUgfSA9IGV4dHJhY3RLZXlzQW5kSW5jbHVkZShzZWxlY3RlZEZpZWxkcyk7XG4gICAgICAgICAgY29uc3QgeyBrZXlzOiByZXF1aXJlZEtleXMsIG5lZWRHZXQgfSA9IGdldE9ubHlSZXF1aXJlZEZpZWxkcyhmaWVsZHMsIGtleXMsIGluY2x1ZGUsIFtcbiAgICAgICAgICAgICdpZCcsXG4gICAgICAgICAgICAnb2JqZWN0SWQnLFxuICAgICAgICAgICAgJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgICAndXBkYXRlZEF0JyxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBjb25zdCBuZWVkVG9HZXRBbGxLZXlzID0gb2JqZWN0c1F1ZXJpZXMubmVlZFRvR2V0QWxsS2V5cyhcbiAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzLFxuICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBvcHRpbWl6ZWRPYmplY3QgPSB7fTtcbiAgICAgICAgICBpZiAobmVlZEdldCAmJiAhbmVlZFRvR2V0QWxsS2V5cykge1xuICAgICAgICAgICAgb3B0aW1pemVkT2JqZWN0ID0gYXdhaXQgb2JqZWN0c1F1ZXJpZXMuZ2V0T2JqZWN0KFxuICAgICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAgIGNyZWF0ZWRPYmplY3Qub2JqZWN0SWQsXG4gICAgICAgICAgICAgIHJlcXVpcmVkS2V5cyxcbiAgICAgICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3Nlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5lZWRUb0dldEFsbEtleXMpIHtcbiAgICAgICAgICAgIG9wdGltaXplZE9iamVjdCA9IGF3YWl0IG9iamVjdHNRdWVyaWVzLmdldE9iamVjdChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgICBjcmVhdGVkT2JqZWN0Lm9iamVjdElkLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbZ2V0R3JhcGhRTFF1ZXJ5TmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uY3JlYXRlZE9iamVjdCxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0OiBjcmVhdGVkT2JqZWN0LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgLi4uZmlsdGVyRGVsZXRlZEZpZWxkcyhwYXJzZUZpZWxkcyksXG4gICAgICAgICAgICAgIC4uLm9wdGltaXplZE9iamVjdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjcmVhdGVHcmFwaFFMTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSkgJiZcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjcmVhdGVHcmFwaFFMTXV0YXRpb24udHlwZSlcbiAgICApIHtcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMTXV0YXRpb24oY3JlYXRlR3JhcGhRTE11dGF0aW9uTmFtZSwgY3JlYXRlR3JhcGhRTE11dGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNVcGRhdGVFbmFibGVkKSB7XG4gICAgY29uc3QgdXBkYXRlR3JhcGhRTE11dGF0aW9uTmFtZSA9IHVwZGF0ZUFsaWFzIHx8IGB1cGRhdGUke2dyYXBoUUxDbGFzc05hbWV9YDtcbiAgICBjb25zdCB1cGRhdGVHcmFwaFFMTXV0YXRpb24gPSBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkKHtcbiAgICAgIG5hbWU6IGBVcGRhdGUke2dyYXBoUUxDbGFzc05hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhlICR7dXBkYXRlR3JhcGhRTE11dGF0aW9uTmFtZX0gbXV0YXRpb24gY2FuIGJlIHVzZWQgdG8gdXBkYXRlIGFuIG9iamVjdCBvZiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgICAgaW5wdXRGaWVsZHM6IHtcbiAgICAgICAgaWQ6IGRlZmF1bHRHcmFwaFFMVHlwZXMuR0xPQkFMX09SX09CSkVDVF9JRF9BVFQsXG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBvYmplY3QuJyxcbiAgICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG91dHB1dEZpZWxkczoge1xuICAgICAgICBbZ2V0R3JhcGhRTFF1ZXJ5TmFtZV06IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHVwZGF0ZWQgb2JqZWN0LicsXG4gICAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTE91dHB1dFR5cGUgfHwgZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1QpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0LCBtdXRhdGlvbkluZm8pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgeyBpZCwgZmllbGRzIH0gPSBkZWVwY29weShhcmdzKTtcbiAgICAgICAgICBpZiAoIWZpZWxkcykgeyBmaWVsZHMgPSB7fTsgfVxuICAgICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuXG4gICAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaWQpO1xuXG4gICAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09IGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWQgPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwYXJzZUZpZWxkcyA9IGF3YWl0IHRyYW5zZm9ybVR5cGVzKCd1cGRhdGUnLCBmaWVsZHMsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYSxcbiAgICAgICAgICAgIG9yaWdpbmFsRmllbGRzOiBhcmdzLmZpZWxkcyxcbiAgICAgICAgICAgIHJlcTogeyBjb25maWcsIGF1dGgsIGluZm8gfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRPYmplY3QgPSBhd2FpdCBvYmplY3RzTXV0YXRpb25zLnVwZGF0ZU9iamVjdChcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgcGFyc2VGaWVsZHMsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgaW5mb1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IGdldEZpZWxkTmFtZXMobXV0YXRpb25JbmZvKVxuICAgICAgICAgICAgLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKGAke2dldEdyYXBoUUxRdWVyeU5hbWV9LmApKVxuICAgICAgICAgICAgLm1hcChmaWVsZCA9PiBmaWVsZC5yZXBsYWNlKGAke2dldEdyYXBoUUxRdWVyeU5hbWV9LmAsICcnKSk7XG4gICAgICAgICAgY29uc3QgeyBrZXlzLCBpbmNsdWRlIH0gPSBleHRyYWN0S2V5c0FuZEluY2x1ZGUoc2VsZWN0ZWRGaWVsZHMpO1xuICAgICAgICAgIGNvbnN0IHsga2V5czogcmVxdWlyZWRLZXlzLCBuZWVkR2V0IH0gPSBnZXRPbmx5UmVxdWlyZWRGaWVsZHMoZmllbGRzLCBrZXlzLCBpbmNsdWRlLCBbXG4gICAgICAgICAgICAnaWQnLFxuICAgICAgICAgICAgJ29iamVjdElkJyxcbiAgICAgICAgICAgICd1cGRhdGVkQXQnLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGNvbnN0IG5lZWRUb0dldEFsbEtleXMgPSBvYmplY3RzUXVlcmllcy5uZWVkVG9HZXRBbGxLZXlzKFxuICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHMsXG4gICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3Nlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IG9wdGltaXplZE9iamVjdCA9IHt9O1xuICAgICAgICAgIGlmIChuZWVkR2V0ICYmICFuZWVkVG9HZXRBbGxLZXlzKSB7XG4gICAgICAgICAgICBvcHRpbWl6ZWRPYmplY3QgPSBhd2FpdCBvYmplY3RzUXVlcmllcy5nZXRPYmplY3QoXG4gICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIHJlcXVpcmVkS2V5cyxcbiAgICAgICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3Nlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5lZWRUb0dldEFsbEtleXMpIHtcbiAgICAgICAgICAgIG9wdGltaXplZE9iamVjdCA9IGF3YWl0IG9iamVjdHNRdWVyaWVzLmdldE9iamVjdChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBpbmNsdWRlLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2dldEdyYXBoUUxRdWVyeU5hbWVdOiB7XG4gICAgICAgICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgICAgICAgICAgLi4udXBkYXRlZE9iamVjdCxcbiAgICAgICAgICAgICAgLi4uZmlsdGVyRGVsZXRlZEZpZWxkcyhwYXJzZUZpZWxkcyksXG4gICAgICAgICAgICAgIC4uLm9wdGltaXplZE9iamVjdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZSh1cGRhdGVHcmFwaFFMTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSkgJiZcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZSh1cGRhdGVHcmFwaFFMTXV0YXRpb24udHlwZSlcbiAgICApIHtcbiAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMTXV0YXRpb24odXBkYXRlR3JhcGhRTE11dGF0aW9uTmFtZSwgdXBkYXRlR3JhcGhRTE11dGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNEZXN0cm95RW5hYmxlZCkge1xuICAgIGNvbnN0IGRlbGV0ZUdyYXBoUUxNdXRhdGlvbk5hbWUgPSBkZXN0cm95QWxpYXMgfHwgYGRlbGV0ZSR7Z3JhcGhRTENsYXNzTmFtZX1gO1xuICAgIGNvbnN0IGRlbGV0ZUdyYXBoUUxNdXRhdGlvbiA9IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQoe1xuICAgICAgbmFtZTogYERlbGV0ZSR7Z3JhcGhRTENsYXNzTmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IGBUaGUgJHtkZWxldGVHcmFwaFFMTXV0YXRpb25OYW1lfSBtdXRhdGlvbiBjYW4gYmUgdXNlZCB0byBkZWxldGUgYW4gb2JqZWN0IG9mIHRoZSAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgICBpbnB1dEZpZWxkczoge1xuICAgICAgICBpZDogZGVmYXVsdEdyYXBoUUxUeXBlcy5HTE9CQUxfT1JfT0JKRUNUX0lEX0FUVCxcbiAgICAgIH0sXG4gICAgICBvdXRwdXRGaWVsZHM6IHtcbiAgICAgICAgW2dldEdyYXBoUUxRdWVyeU5hbWVdOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBkZWxldGVkIG9iamVjdC4nLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtdXRhdGVBbmRHZXRQYXlsb2FkOiBhc3luYyAoYXJncywgY29udGV4dCwgbXV0YXRpb25JbmZvKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHsgaWQgfSA9IGRlZXBjb3B5KGFyZ3MpO1xuICAgICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuXG4gICAgICAgICAgY29uc3QgZ2xvYmFsSWRPYmplY3QgPSBmcm9tR2xvYmFsSWQoaWQpO1xuXG4gICAgICAgICAgaWYgKGdsb2JhbElkT2JqZWN0LnR5cGUgPT09IGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgaWQgPSBnbG9iYWxJZE9iamVjdC5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IGdldEZpZWxkTmFtZXMobXV0YXRpb25JbmZvKVxuICAgICAgICAgICAgLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKGAke2dldEdyYXBoUUxRdWVyeU5hbWV9LmApKVxuICAgICAgICAgICAgLm1hcChmaWVsZCA9PiBmaWVsZC5yZXBsYWNlKGAke2dldEdyYXBoUUxRdWVyeU5hbWV9LmAsICcnKSk7XG4gICAgICAgICAgY29uc3QgeyBrZXlzLCBpbmNsdWRlIH0gPSBleHRyYWN0S2V5c0FuZEluY2x1ZGUoc2VsZWN0ZWRGaWVsZHMpO1xuICAgICAgICAgIGxldCBvcHRpbWl6ZWRPYmplY3QgPSB7fTtcbiAgICAgICAgICBpZiAoa2V5cyAmJiBrZXlzLnNwbGl0KCcsJykuZmlsdGVyKGtleSA9PiAhWydpZCcsICdvYmplY3RJZCddLmluY2x1ZGVzKGtleSkpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9wdGltaXplZE9iamVjdCA9IGF3YWl0IG9iamVjdHNRdWVyaWVzLmdldE9iamVjdChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3Nlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgb2JqZWN0c011dGF0aW9ucy5kZWxldGVPYmplY3QoY2xhc3NOYW1lLCBpZCwgY29uZmlnLCBhdXRoLCBpbmZvKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2dldEdyYXBoUUxRdWVyeU5hbWVdOiB7XG4gICAgICAgICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgICAgICAgICAgLi4ub3B0aW1pemVkT2JqZWN0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmhhbmRsZUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGRlbGV0ZUdyYXBoUUxNdXRhdGlvbi5hcmdzLmlucHV0LnR5cGUub2ZUeXBlKSAmJlxuICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGRlbGV0ZUdyYXBoUUxNdXRhdGlvbi50eXBlKVxuICAgICkge1xuICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxNdXRhdGlvbihkZWxldGVHcmFwaFFMTXV0YXRpb25OYW1lLCBkZWxldGVHcmFwaFFMTXV0YXRpb24pO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IHsgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxrQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssbUJBQUEsR0FBQUMsdUJBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdB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