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.
- package/LICENSE +167 -25
- package/NOTICE +10 -0
- package/README.md +929 -278
- package/lib/AccountLockout.js +47 -30
- package/lib/Adapters/AdapterLoader.js +21 -6
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
- package/lib/Adapters/Auth/AuthAdapter.js +116 -13
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
- package/lib/Adapters/Auth/OAuth1Client.js +27 -46
- package/lib/Adapters/Auth/apple.js +123 -0
- package/lib/Adapters/Auth/facebook.js +162 -35
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +118 -48
- package/lib/Adapters/Auth/google.js +160 -51
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +6 -7
- package/lib/Adapters/Auth/index.js +170 -62
- package/lib/Adapters/Auth/instagram.js +114 -40
- package/lib/Adapters/Auth/janraincapture.js +52 -23
- package/lib/Adapters/Auth/janrainengage.js +19 -36
- package/lib/Adapters/Auth/keycloak.js +148 -0
- package/lib/Adapters/Auth/ldap.js +167 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +111 -55
- package/lib/Adapters/Auth/meetup.js +24 -34
- package/lib/Adapters/Auth/mfa.js +324 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +97 -162
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +108 -49
- package/lib/Adapters/Auth/spotify.js +107 -55
- package/lib/Adapters/Auth/twitter.js +188 -48
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +26 -39
- package/lib/Adapters/Auth/wechat.js +106 -44
- package/lib/Adapters/Auth/weibo.js +132 -58
- package/lib/Adapters/Cache/CacheAdapter.js +13 -8
- package/lib/Adapters/Cache/InMemoryCache.js +3 -13
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
- package/lib/Adapters/Cache/LRUCache.js +13 -27
- package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +10 -8
- package/lib/Adapters/Files/FilesAdapter.js +83 -25
- package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
- package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
- package/lib/Adapters/Logger/WinstonLogger.js +69 -88
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
- package/lib/Adapters/Push/PushAdapter.js +14 -7
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +488 -125
- package/lib/ClientSDK.js +2 -6
- package/lib/Config.js +525 -94
- package/lib/Controllers/AdaptableController.js +5 -25
- package/lib/Controllers/AnalyticsController.js +22 -23
- package/lib/Controllers/CacheController.js +10 -31
- package/lib/Controllers/DatabaseController.js +767 -313
- package/lib/Controllers/FilesController.js +49 -54
- package/lib/Controllers/HooksController.js +80 -84
- package/lib/Controllers/LiveQueryController.js +35 -22
- package/lib/Controllers/LoggerController.js +22 -58
- package/lib/Controllers/ParseGraphQLController.js +293 -0
- package/lib/Controllers/PushController.js +58 -49
- package/lib/Controllers/SchemaController.js +916 -422
- package/lib/Controllers/UserController.js +265 -180
- package/lib/Controllers/index.js +90 -125
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +30 -0
- package/lib/Deprecator/Deprecator.js +127 -0
- package/lib/Error.js +48 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +214 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/loaders/configMutations.js +87 -0
- package/lib/GraphQL/loaders/configQueries.js +79 -0
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +78 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +162 -0
- package/lib/GraphQL/loaders/schemaQueries.js +81 -0
- package/lib/GraphQL/loaders/schemaTypes.js +341 -0
- package/lib/GraphQL/loaders/usersMutations.js +433 -0
- package/lib/GraphQL/loaders/usersQueries.js +90 -0
- package/lib/GraphQL/parseGraphQLUtils.js +63 -0
- package/lib/GraphQL/transformers/className.js +14 -0
- package/lib/GraphQL/transformers/constraintType.js +53 -0
- package/lib/GraphQL/transformers/inputType.js +51 -0
- package/lib/GraphQL/transformers/mutation.js +274 -0
- package/lib/GraphQL/transformers/outputType.js +51 -0
- package/lib/GraphQL/transformers/query.js +237 -0
- package/lib/GraphQL/transformers/schemaFields.js +99 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +25 -33
- package/lib/LiveQuery/Id.js +2 -5
- package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
- package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
- package/lib/LiveQuery/ParsePubSub.js +7 -16
- package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
- package/lib/LiveQuery/QueryTools.js +76 -15
- package/lib/LiveQuery/RequestSchema.js +111 -97
- package/lib/LiveQuery/SessionTokenCache.js +23 -36
- package/lib/LiveQuery/Subscription.js +8 -17
- package/lib/LiveQuery/equalObjects.js +2 -3
- package/lib/Options/Definitions.js +1355 -382
- package/lib/Options/docs.js +301 -62
- package/lib/Options/index.js +11 -1
- package/lib/Options/parsers.js +14 -10
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +6 -13
- package/lib/ParseServer.js +474 -235
- package/lib/ParseServerRESTController.js +102 -40
- package/lib/PromiseRouter.js +39 -50
- package/lib/Push/PushQueue.js +24 -30
- package/lib/Push/PushWorker.js +32 -56
- package/lib/Push/utils.js +22 -35
- package/lib/RestQuery.js +361 -139
- package/lib/RestWrite.js +713 -344
- package/lib/Routers/AggregateRouter.js +97 -71
- package/lib/Routers/AnalyticsRouter.js +8 -14
- package/lib/Routers/AudiencesRouter.js +16 -35
- package/lib/Routers/ClassesRouter.js +86 -72
- package/lib/Routers/CloudCodeRouter.js +28 -37
- package/lib/Routers/FeaturesRouter.js +22 -25
- package/lib/Routers/FilesRouter.js +266 -171
- package/lib/Routers/FunctionsRouter.js +87 -103
- package/lib/Routers/GlobalConfigRouter.js +94 -33
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +43 -47
- package/lib/Routers/IAPValidationRouter.js +57 -70
- package/lib/Routers/InstallationsRouter.js +17 -25
- package/lib/Routers/LogsRouter.js +10 -25
- package/lib/Routers/PagesRouter.js +647 -0
- package/lib/Routers/PublicAPIRouter.js +104 -112
- package/lib/Routers/PurgeRouter.js +19 -29
- package/lib/Routers/PushRouter.js +14 -28
- package/lib/Routers/RolesRouter.js +7 -14
- package/lib/Routers/SchemasRouter.js +63 -42
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +25 -38
- package/lib/Routers/UsersRouter.js +463 -190
- package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
- package/lib/SchemaMigrations/Migrations.js +30 -0
- package/lib/Security/Check.js +109 -0
- package/lib/Security/CheckGroup.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +29 -0
- package/lib/StatusHandler.js +96 -93
- package/lib/TestUtils.js +70 -14
- package/lib/Utils.js +468 -0
- package/lib/batch.js +74 -40
- package/lib/cache.js +8 -8
- package/lib/cli/definitions/parse-live-query-server.js +4 -3
- package/lib/cli/definitions/parse-server.js +4 -3
- package/lib/cli/parse-live-query-server.js +9 -17
- package/lib/cli/parse-server.js +49 -47
- package/lib/cli/utils/commander.js +20 -29
- package/lib/cli/utils/runner.js +31 -32
- package/lib/cloud-code/Parse.Cloud.js +711 -36
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +6 -11
- package/lib/defaults.js +21 -15
- package/lib/deprecated.js +1 -1
- package/lib/index.js +78 -67
- package/lib/logger.js +12 -20
- package/lib/middlewares.js +484 -160
- package/lib/password.js +10 -6
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +4 -3
- package/lib/rest.js +157 -82
- package/lib/triggers.js +627 -185
- package/lib/vendor/README.md +3 -3
- package/lib/vendor/mongodbUrl.js +224 -137
- package/package.json +135 -57
- package/postinstall.js +38 -50
- package/public_html/invalid_verification_link.html +3 -3
- package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
- package/types/@types/deepcopy/index.d.ts +5 -0
- package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
- package/types/Options/index.d.ts +301 -0
- package/types/ParseServer.d.ts +65 -0
- package/types/eslint.config.mjs +30 -0
- package/types/index.d.ts +21 -0
- package/types/logger.d.ts +2 -0
- package/types/tests.ts +44 -0
- package/types/tsconfig.json +24 -0
- package/CHANGELOG.md +0 -1246
- package/PATENTS +0 -37
- package/bin/dev +0 -37
- package/lib/.DS_Store +0 -0
- package/lib/Adapters/Auth/common.js +0 -2
- package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
- package/lib/Controllers/SchemaCache.js +0 -97
- package/lib/LiveQuery/.DS_Store +0 -0
- package/lib/cli/utils/parsers.js +0 -77
- package/lib/cloud-code/.DS_Store +0 -0
- package/lib/cloud-code/HTTPResponse.js +0 -57
- package/lib/cloud-code/Untitled-1 +0 -123
- package/lib/cloud-code/httpRequest.js +0 -102
- package/lib/cloud-code/team.html +0 -123
- package/lib/graphql/ParseClass.js +0 -234
- package/lib/graphql/Schema.js +0 -197
- package/lib/graphql/index.js +0 -1
- package/lib/graphql/types/ACL.js +0 -35
- package/lib/graphql/types/Date.js +0 -25
- package/lib/graphql/types/File.js +0 -24
- package/lib/graphql/types/GeoPoint.js +0 -35
- package/lib/graphql/types/JSONObject.js +0 -30
- package/lib/graphql/types/NumberInput.js +0 -43
- package/lib/graphql/types/NumberQuery.js +0 -42
- package/lib/graphql/types/Pointer.js +0 -35
- package/lib/graphql/types/QueryConstraint.js +0 -61
- package/lib/graphql/types/StringQuery.js +0 -39
- 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfZGVlcGNvcHkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2dyYXBocWxSZWxheSIsIl9GdW5jdGlvbnNSb3V0ZXIiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJsb2FkIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiZnVuY3Rpb25OYW1lcyIsImxlbmd0aCIsImNsb3VkQ29kZUZ1bmN0aW9uRW51bSIsImFkZEdyYXBoUUxUeXBlIiwiR3JhcGhRTEVudW1UeXBlIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidmFsdWVzIiwicmVkdWNlIiwiZnVuY3Rpb25OYW1lIiwidmFsdWUiLCJjYWxsQ2xvdWRDb2RlTXV0YXRpb24iLCJtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkIiwiaW5wdXRGaWVsZHMiLCJ0eXBlIiwiR3JhcGhRTE5vbk51bGwiLCJwYXJhbXMiLCJPQkpFQ1QiLCJvdXRwdXRGaWVsZHMiLCJyZXN1bHQiLCJBTlkiLCJtdXRhdGVBbmRHZXRQYXlsb2FkIiwiYXJncyIsImNvbnRleHQiLCJkZWVwY29weSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwiRnVuY3Rpb25zUm91dGVyIiwiaGFuZGxlQ2xvdWRGdW5jdGlvbiIsImJvZHkiLCJyZXNwb25zZSIsImhhbmRsZUVycm9yIiwiaW5wdXQiLCJvZlR5cGUiLCJhZGRHcmFwaFFMTXV0YXRpb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9mdW5jdGlvbnNNdXRhdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhRTE5vbk51bGwsIEdyYXBoUUxFbnVtVHlwZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IGRlZXBjb3B5IGZyb20gJ2RlZXBjb3B5JztcbmltcG9ydCB7IG11dGF0aW9uV2l0aENsaWVudE11dGF0aW9uSWQgfSBmcm9tICdncmFwaHFsLXJlbGF5JztcbmltcG9ydCB7IEZ1bmN0aW9uc1JvdXRlciB9IGZyb20gJy4uLy4uL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcbmltcG9ydCAqIGFzIGRlZmF1bHRHcmFwaFFMVHlwZXMgZnJvbSAnLi9kZWZhdWx0R3JhcGhRTFR5cGVzJztcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIGlmIChwYXJzZUdyYXBoUUxTY2hlbWEuZnVuY3Rpb25OYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY2xvdWRDb2RlRnVuY3Rpb25FbnVtID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKFxuICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgIG5hbWU6ICdDbG91ZENvZGVGdW5jdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdUaGUgQ2xvdWRDb2RlRnVuY3Rpb24gZW51bSB0eXBlIGNvbnRhaW5zIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGNsb3VkIGNvZGUgZnVuY3Rpb25zLicsXG4gICAgICAgIHZhbHVlczogcGFyc2VHcmFwaFFMU2NoZW1hLmZ1bmN0aW9uTmFtZXMucmVkdWNlKFxuICAgICAgICAgICh2YWx1ZXMsIGZ1bmN0aW9uTmFtZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICAgIFtmdW5jdGlvbk5hbWVdOiB7IHZhbHVlOiBmdW5jdGlvbk5hbWUgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICBjb25zdCBjYWxsQ2xvdWRDb2RlTXV0YXRpb24gPSBtdXRhdGlvbldpdGhDbGllbnRNdXRhdGlvbklkKHtcbiAgICAgIG5hbWU6ICdDYWxsQ2xvdWRDb2RlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGNhbGxDbG91ZENvZGUgbXV0YXRpb24gY2FuIGJlIHVzZWQgdG8gaW52b2tlIGEgY2xvdWQgY29kZSBmdW5jdGlvbi4nLFxuICAgICAgaW5wdXRGaWVsZHM6IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQuJyxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoY2xvdWRDb2RlRnVuY3Rpb25FbnVtKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGVzZSBhcmUgdGhlIHBhcmFtcyB0byBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLicsXG4gICAgICAgICAgdHlwZTogZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1QsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb3V0cHV0RmllbGRzOiB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBjbG91ZCBjb2RlIGZ1bmN0aW9uIGV4ZWN1dGlvbi4nLFxuICAgICAgICAgIHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuQU5ZLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG11dGF0ZUFuZEdldFBheWxvYWQ6IGFzeW5jIChhcmdzLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBmdW5jdGlvbk5hbWUsIHBhcmFtcyB9ID0gZGVlcGNvcHkoYXJncyk7XG4gICAgICAgICAgY29uc3QgeyBjb25maWcsIGF1dGgsIGluZm8gfSA9IGNvbnRleHQ7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdWx0OiAoXG4gICAgICAgICAgICAgIGF3YWl0IEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKS5yZXNwb25zZS5yZXN1bHQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjYWxsQ2xvdWRDb2RlTXV0YXRpb24uYXJncy5pbnB1dC50eXBlLm9mVHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNhbGxDbG91ZENvZGVNdXRhdGlvbi50eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTE11dGF0aW9uKCdjYWxsQ2xvdWRDb2RlJywgY2FsbENsb3VkQ29kZU11dGF0aW9uLCB0cnVlLCB0cnVlKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxnQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssbUJBQUEsR0FBQUMsdUJBQUEsQ0FBQU4sT0FBQTtBQUE2RCxTQUFBTSx3QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUgsdUJBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxnQkFBQVAsQ0FBQSxJQUFBRCxDQUFBLGdCQUFBQyxDQUFBLE9BQUFhLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxJQUFBRCxDQUFBLEdBQUFVLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFsQixDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxDQUFBSyxHQUFBLElBQUFMLENBQUEsQ0FBQU0sR0FBQSxJQUFBUCxDQUFBLENBQUFFLENBQUEsRUFBQVAsQ0FBQSxFQUFBTSxDQUFBLElBQUFDLENBQUEsQ0FBQVAsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsV0FBQU8sQ0FBQSxLQUFBUixDQUFBLEVBQUFDLENBQUE7QUFBQSxTQUFBTix1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxHQUFBTCxDQUFBLEtBQUFVLE9BQUEsRUFBQVYsQ0FBQTtBQUU3RCxNQUFNbUIsSUFBSSxHQUFHQyxrQkFBa0IsSUFBSTtFQUNqQyxJQUFJQSxrQkFBa0IsQ0FBQ0MsYUFBYSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQy9DLE1BQU1DLHFCQUFxQixHQUFHSCxrQkFBa0IsQ0FBQ0ksY0FBYyxDQUM3RCxJQUFJQyx3QkFBZSxDQUFDO01BQ2xCQyxJQUFJLEVBQUUsbUJBQW1CO01BQ3pCQyxXQUFXLEVBQ1Qsd0ZBQXdGO01BQzFGQyxNQUFNLEVBQUVSLGtCQUFrQixDQUFDQyxhQUFhLENBQUNRLE1BQU0sQ0FDN0MsQ0FBQ0QsTUFBTSxFQUFFRSxZQUFZLE1BQU07UUFDekIsR0FBR0YsTUFBTTtRQUNULENBQUNFLFlBQVksR0FBRztVQUFFQyxLQUFLLEVBQUVEO1FBQWE7TUFDeEMsQ0FBQyxDQUFDLEVBQ0YsQ0FBQyxDQUNIO0lBQ0YsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxFQUNKLElBQ0YsQ0FBQztJQUVELE1BQU1FLHFCQUFxQixHQUFHLElBQUFDLDBDQUE0QixFQUFDO01BQ3pEUCxJQUFJLEVBQUUsZUFBZTtNQUNyQkMsV0FBVyxFQUFFLHlFQUF5RTtNQUN0Rk8sV0FBVyxFQUFFO1FBQ1hKLFlBQVksRUFBRTtVQUNaSCxXQUFXLEVBQUUsb0NBQW9DO1VBQ2pEUSxJQUFJLEVBQUUsSUFBSUMsdUJBQWMsQ0FBQ2IscUJBQXFCO1FBQ2hELENBQUM7UUFDRGMsTUFBTSxFQUFFO1VBQ05WLFdBQVcsRUFBRSxvREFBb0Q7VUFDakVRLElBQUksRUFBRXJDLG1CQUFtQixDQUFDd0M7UUFDNUI7TUFDRixDQUFDO01BQ0RDLFlBQVksRUFBRTtRQUNaQyxNQUFNLEVBQUU7VUFDTmIsV0FBVyxFQUFFLGdFQUFnRTtVQUM3RVEsSUFBSSxFQUFFckMsbUJBQW1CLENBQUMyQztRQUM1QjtNQUNGLENBQUM7TUFDREMsbUJBQW1CLEVBQUUsTUFBQUEsQ0FBT0MsSUFBSSxFQUFFQyxPQUFPLEtBQUs7UUFDNUMsSUFBSTtVQUNGLE1BQU07WUFBRWQsWUFBWTtZQUFFTztVQUFPLENBQUMsR0FBRyxJQUFBUSxpQkFBUSxFQUFDRixJQUFJLENBQUM7VUFDL0MsTUFBTTtZQUFFRyxNQUFNO1lBQUVDLElBQUk7WUFBRUM7VUFBSyxDQUFDLEdBQUdKLE9BQU87VUFFdEMsT0FBTztZQUNMSixNQUFNLEVBQUUsQ0FDTixNQUFNUyxnQ0FBZSxDQUFDQyxtQkFBbUIsQ0FBQztjQUN4Q2IsTUFBTSxFQUFFO2dCQUNOUDtjQUNGLENBQUM7Y0FDRGdCLE1BQU07Y0FDTkMsSUFBSTtjQUNKQyxJQUFJO2NBQ0pHLElBQUksRUFBRWQ7WUFDUixDQUFDLENBQUMsRUFDRmUsUUFBUSxDQUFDWjtVQUNiLENBQUM7UUFDSCxDQUFDLENBQUMsT0FBT3hDLENBQUMsRUFBRTtVQUNWb0Isa0JBQWtCLENBQUNpQyxXQUFXLENBQUNyRCxDQUFDLENBQUM7UUFDbkM7TUFDRjtJQUNGLENBQUMsQ0FBQztJQUVGb0Isa0JBQWtCLENBQUNJLGNBQWMsQ0FBQ1EscUJBQXFCLENBQUNXLElBQUksQ0FBQ1csS0FBSyxDQUFDbkIsSUFBSSxDQUFDb0IsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7SUFDM0ZuQyxrQkFBa0IsQ0FBQ0ksY0FBYyxDQUFDUSxxQkFBcUIsQ0FBQ0csSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7SUFDekVmLGtCQUFrQixDQUFDb0Msa0JBQWtCLENBQUMsZUFBZSxFQUFFeEIscUJBQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztFQUMzRjtBQUNGLENBQUM7QUFBQ3lCLE9BQUEsQ0FBQXRDLElBQUEsR0FBQUEsSUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -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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
|