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
|
@@ -1,72 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.FilesController =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var _path2 = _interopRequireDefault(_path);
|
|
19
|
-
|
|
20
|
-
var _mime = require('mime');
|
|
21
|
-
|
|
22
|
-
var _mime2 = _interopRequireDefault(_mime);
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
|
-
const legacyFilesRegex = new RegExp("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}-.*"); // FilesController.js
|
|
27
|
-
class FilesController extends _AdaptableController2.default {
|
|
28
|
-
|
|
6
|
+
exports.default = exports.FilesController = void 0;
|
|
7
|
+
var _cryptoUtils = require("../cryptoUtils");
|
|
8
|
+
var _AdaptableController = _interopRequireDefault(require("./AdaptableController"));
|
|
9
|
+
var _FilesAdapter = require("../Adapters/Files/FilesAdapter");
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
// FilesController.js
|
|
13
|
+
|
|
14
|
+
const Parse = require('parse').Parse;
|
|
15
|
+
const legacyFilesRegex = new RegExp('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}-.*');
|
|
16
|
+
class FilesController extends _AdaptableController.default {
|
|
29
17
|
getFileData(config, filename) {
|
|
30
18
|
return this.adapter.getFileData(filename);
|
|
31
19
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const extname = _path2.default.extname(filename);
|
|
36
|
-
|
|
20
|
+
async createFile(config, filename, data, contentType, options) {
|
|
21
|
+
const extname = _path.default.extname(filename);
|
|
37
22
|
const hasExtension = extname.length > 0;
|
|
38
|
-
|
|
39
|
-
if (!hasExtension && contentType &&
|
|
40
|
-
filename = filename + '.' +
|
|
23
|
+
const mime = (await import('mime')).default;
|
|
24
|
+
if (!hasExtension && contentType && mime.getExtension(contentType)) {
|
|
25
|
+
filename = filename + '.' + mime.getExtension(contentType);
|
|
41
26
|
} else if (hasExtension && !contentType) {
|
|
42
|
-
contentType =
|
|
27
|
+
contentType = mime.getType(filename);
|
|
43
28
|
}
|
|
44
|
-
|
|
45
29
|
if (!this.options.preserveFileName) {
|
|
46
30
|
filename = (0, _cryptoUtils.randomHexString)(32) + '_' + filename;
|
|
47
31
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
});
|
|
32
|
+
const location = await this.adapter.getFileLocation(config, filename);
|
|
33
|
+
await this.adapter.createFile(filename, data, contentType, options);
|
|
34
|
+
return {
|
|
35
|
+
url: location,
|
|
36
|
+
name: filename
|
|
37
|
+
};
|
|
56
38
|
}
|
|
57
|
-
|
|
58
39
|
deleteFile(config, filename) {
|
|
59
40
|
return this.adapter.deleteFile(filename);
|
|
60
41
|
}
|
|
42
|
+
getMetadata(filename) {
|
|
43
|
+
if (typeof this.adapter.getMetadata === 'function') {
|
|
44
|
+
return this.adapter.getMetadata(filename);
|
|
45
|
+
}
|
|
46
|
+
return Promise.resolve({});
|
|
47
|
+
}
|
|
61
48
|
|
|
62
49
|
/**
|
|
63
50
|
* Find file references in REST-format object and adds the url key
|
|
64
51
|
* with the current mount point and app id.
|
|
65
52
|
* Object may be a single object or list of REST-format objects.
|
|
66
53
|
*/
|
|
67
|
-
expandFilesInObject(config, object) {
|
|
54
|
+
async expandFilesInObject(config, object) {
|
|
68
55
|
if (object instanceof Array) {
|
|
69
|
-
object.map(obj => this.expandFilesInObject(config, obj));
|
|
56
|
+
const promises = object.map(obj => this.expandFilesInObject(config, obj));
|
|
57
|
+
await Promise.all(promises);
|
|
70
58
|
return;
|
|
71
59
|
}
|
|
72
60
|
if (typeof object !== 'object') {
|
|
@@ -83,29 +71,36 @@ class FilesController extends _AdaptableController2.default {
|
|
|
83
71
|
// all filenames starting with a "-" seperated UUID should be from files.parse.com
|
|
84
72
|
// all other filenames have been migrated or created from Parse Server
|
|
85
73
|
if (config.fileKey === undefined) {
|
|
86
|
-
fileObject['url'] = this.adapter.getFileLocation(config, filename);
|
|
74
|
+
fileObject['url'] = await this.adapter.getFileLocation(config, filename);
|
|
87
75
|
} else {
|
|
88
76
|
if (filename.indexOf('tfss-') === 0) {
|
|
89
77
|
fileObject['url'] = 'http://files.parsetfss.com/' + config.fileKey + '/' + encodeURIComponent(filename);
|
|
90
78
|
} else if (legacyFilesRegex.test(filename)) {
|
|
91
79
|
fileObject['url'] = 'http://files.parse.com/' + config.fileKey + '/' + encodeURIComponent(filename);
|
|
92
80
|
} else {
|
|
93
|
-
fileObject['url'] = this.adapter.getFileLocation(config, filename);
|
|
81
|
+
fileObject['url'] = await this.adapter.getFileLocation(config, filename);
|
|
94
82
|
}
|
|
95
83
|
}
|
|
96
84
|
}
|
|
97
85
|
}
|
|
98
86
|
}
|
|
99
|
-
|
|
100
87
|
expectedAdapterType() {
|
|
101
88
|
return _FilesAdapter.FilesAdapter;
|
|
102
89
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
90
|
+
handleFileStream(config, filename, req, res, contentType) {
|
|
91
|
+
return this.adapter.handleFileStream(filename, req, res, contentType);
|
|
92
|
+
}
|
|
93
|
+
validateFilename(filename) {
|
|
94
|
+
if (typeof this.adapter.validateFilename === 'function') {
|
|
95
|
+
const error = this.adapter.validateFilename(filename);
|
|
96
|
+
if (typeof error !== 'string') {
|
|
97
|
+
return error;
|
|
98
|
+
}
|
|
99
|
+
return new Parse.Error(Parse.Error.INVALID_FILE_NAME, error);
|
|
100
|
+
}
|
|
101
|
+
return (0, _FilesAdapter.validateFilename)(filename);
|
|
106
102
|
}
|
|
107
103
|
}
|
|
108
|
-
|
|
109
104
|
exports.FilesController = FilesController;
|
|
110
|
-
exports.default = FilesController;
|
|
111
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9GaWxlc0NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsibGVnYWN5RmlsZXNSZWdleCIsIlJlZ0V4cCIsIkZpbGVzQ29udHJvbGxlciIsIkFkYXB0YWJsZUNvbnRyb2xsZXIiLCJnZXRGaWxlRGF0YSIsImNvbmZpZyIsImZpbGVuYW1lIiwiYWRhcHRlciIsImNyZWF0ZUZpbGUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJleHRuYW1lIiwicGF0aCIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJnZXRUeXBlIiwib3B0aW9ucyIsInByZXNlcnZlRmlsZU5hbWUiLCJsb2NhdGlvbiIsImdldEZpbGVMb2NhdGlvbiIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVybCIsIm5hbWUiLCJkZWxldGVGaWxlIiwiZXhwYW5kRmlsZXNJbk9iamVjdCIsIm9iamVjdCIsIkFycmF5IiwibWFwIiwib2JqIiwia2V5IiwiZmlsZU9iamVjdCIsImZpbGVLZXkiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidGVzdCIsImV4cGVjdGVkQWRhcHRlclR5cGUiLCJGaWxlc0FkYXB0ZXIiLCJnZXRGaWxlU3RyZWFtIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxtQkFBbUIsSUFBSUMsTUFBSixDQUFXLGlGQUFYLENBQXpCLEMsQ0FQQTtBQVNPLE1BQU1DLGVBQU4sU0FBOEJDLDZCQUE5QixDQUFrRDs7QUFFdkRDLGNBQVlDLE1BQVosRUFBb0JDLFFBQXBCLEVBQThCO0FBQzVCLFdBQU8sS0FBS0MsT0FBTCxDQUFhSCxXQUFiLENBQXlCRSxRQUF6QixDQUFQO0FBQ0Q7O0FBRURFLGFBQVdILE1BQVgsRUFBbUJDLFFBQW5CLEVBQTZCRyxJQUE3QixFQUFtQ0MsV0FBbkMsRUFBZ0Q7O0FBRTlDLFVBQU1DLFVBQVVDLGVBQUtELE9BQUwsQ0FBYUwsUUFBYixDQUFoQjs7QUFFQSxVQUFNTyxlQUFlRixRQUFRRyxNQUFSLEdBQWlCLENBQXRDOztBQUVBLFFBQUksQ0FBQ0QsWUFBRCxJQUFpQkgsV0FBakIsSUFBZ0NLLGVBQUtDLFlBQUwsQ0FBa0JOLFdBQWxCLENBQXBDLEVBQW9FO0FBQ2xFSixpQkFBV0EsV0FBVyxHQUFYLEdBQWlCUyxlQUFLQyxZQUFMLENBQWtCTixXQUFsQixDQUE1QjtBQUNELEtBRkQsTUFFTyxJQUFJRyxnQkFBZ0IsQ0FBQ0gsV0FBckIsRUFBa0M7QUFDdkNBLG9CQUFjSyxlQUFLRSxPQUFMLENBQWFYLFFBQWIsQ0FBZDtBQUNEOztBQUVELFFBQUksQ0FBQyxLQUFLWSxPQUFMLENBQWFDLGdCQUFsQixFQUFvQztBQUNsQ2IsaUJBQVcsa0NBQWdCLEVBQWhCLElBQXNCLEdBQXRCLEdBQTRCQSxRQUF2QztBQUNEOztBQUVELFVBQU1jLFdBQVcsS0FBS2IsT0FBTCxDQUFhYyxlQUFiLENBQTZCaEIsTUFBN0IsRUFBcUNDLFFBQXJDLENBQWpCO0FBQ0EsV0FBTyxLQUFLQyxPQUFMLENBQWFDLFVBQWIsQ0FBd0JGLFFBQXhCLEVBQWtDRyxJQUFsQyxFQUF3Q0MsV0FBeEMsRUFBcURZLElBQXJELENBQTBELE1BQU07QUFDckUsYUFBT0MsUUFBUUMsT0FBUixDQUFnQjtBQUNyQkMsYUFBS0wsUUFEZ0I7QUFFckJNLGNBQU1wQjtBQUZlLE9BQWhCLENBQVA7QUFJRCxLQUxNLENBQVA7QUFNRDs7QUFFRHFCLGFBQVd0QixNQUFYLEVBQW1CQyxRQUFuQixFQUE2QjtBQUMzQixXQUFPLEtBQUtDLE9BQUwsQ0FBYW9CLFVBQWIsQ0FBd0JyQixRQUF4QixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7O0FBS0FzQixzQkFBb0J2QixNQUFwQixFQUE0QndCLE1BQTVCLEVBQW9DO0FBQ2xDLFFBQUlBLGtCQUFrQkMsS0FBdEIsRUFBNkI7QUFDM0JELGFBQU9FLEdBQVAsQ0FBWUMsR0FBRCxJQUFTLEtBQUtKLG1CQUFMLENBQXlCdkIsTUFBekIsRUFBaUMyQixHQUFqQyxDQUFwQjtBQUNBO0FBQ0Q7QUFDRCxRQUFJLE9BQU9ILE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDOUI7QUFDRDtBQUNELFNBQUssTUFBTUksR0FBWCxJQUFrQkosTUFBbEIsRUFBMEI7QUFDeEIsWUFBTUssYUFBYUwsT0FBT0ksR0FBUCxDQUFuQjtBQUNBLFVBQUlDLGNBQWNBLFdBQVcsUUFBWCxNQUF5QixNQUEzQyxFQUFtRDtBQUNqRCxZQUFJQSxXQUFXLEtBQVgsQ0FBSixFQUF1QjtBQUNyQjtBQUNEO0FBQ0QsY0FBTTVCLFdBQVc0QixXQUFXLE1BQVgsQ0FBakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFJN0IsT0FBTzhCLE9BQVAsS0FBbUJDLFNBQXZCLEVBQWtDO0FBQ2hDRixxQkFBVyxLQUFYLElBQW9CLEtBQUszQixPQUFMLENBQWFjLGVBQWIsQ0FBNkJoQixNQUE3QixFQUFxQ0MsUUFBckMsQ0FBcEI7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFJQSxTQUFTK0IsT0FBVCxDQUFpQixPQUFqQixNQUE4QixDQUFsQyxFQUFxQztBQUNuQ0gsdUJBQVcsS0FBWCxJQUFvQixnQ0FBZ0M3QixPQUFPOEIsT0FBdkMsR0FBaUQsR0FBakQsR0FBdURHLG1CQUFtQmhDLFFBQW5CLENBQTNFO0FBQ0QsV0FGRCxNQUVPLElBQUlOLGlCQUFpQnVDLElBQWpCLENBQXNCakMsUUFBdEIsQ0FBSixFQUFxQztBQUMxQzRCLHVCQUFXLEtBQVgsSUFBb0IsNEJBQTRCN0IsT0FBTzhCLE9BQW5DLEdBQTZDLEdBQTdDLEdBQW1ERyxtQkFBbUJoQyxRQUFuQixDQUF2RTtBQUNELFdBRk0sTUFFQTtBQUNMNEIsdUJBQVcsS0FBWCxJQUFvQixLQUFLM0IsT0FBTCxDQUFhYyxlQUFiLENBQTZCaEIsTUFBN0IsRUFBcUNDLFFBQXJDLENBQXBCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFRGtDLHdCQUFzQjtBQUNwQixXQUFPQywwQkFBUDtBQUNEOztBQUVEQyxnQkFBY3JDLE1BQWQsRUFBc0JDLFFBQXRCLEVBQWdDO0FBQzlCLFdBQU8sS0FBS0MsT0FBTCxDQUFhbUMsYUFBYixDQUEyQnBDLFFBQTNCLENBQVA7QUFDRDtBQS9Fc0Q7O1FBQTVDSixlLEdBQUFBLGU7a0JBa0ZFQSxlIiwiZmlsZSI6IkZpbGVzQ29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZpbGVzQ29udHJvbGxlci5qc1xuaW1wb3J0IHsgcmFuZG9tSGV4U3RyaW5nIH0gZnJvbSAnLi4vY3J5cHRvVXRpbHMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0ZpbGVzL0ZpbGVzQWRhcHRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUnO1xuXG5jb25zdCBsZWdhY3lGaWxlc1JlZ2V4ID0gbmV3IFJlZ0V4cChcIl5bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0tLipcIik7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc0NvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcblxuICBnZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRGaWxlRGF0YShmaWxlbmFtZSk7XG4gIH1cblxuICBjcmVhdGVGaWxlKGNvbmZpZywgZmlsZW5hbWUsIGRhdGEsIGNvbnRlbnRUeXBlKSB7XG5cbiAgICBjb25zdCBleHRuYW1lID0gcGF0aC5leHRuYW1lKGZpbGVuYW1lKTtcblxuICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGV4dG5hbWUubGVuZ3RoID4gMDtcblxuICAgIGlmICghaGFzRXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlICYmIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKSkge1xuICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZSArICcuJyArIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0V4dGVuc2lvbiAmJiAhY29udGVudFR5cGUpIHtcbiAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wcmVzZXJ2ZUZpbGVOYW1lKSB7XG4gICAgICBmaWxlbmFtZSA9IHJhbmRvbUhleFN0cmluZygzMikgKyAnXycgKyBmaWxlbmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5jcmVhdGVGaWxlKGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgdXJsOiBsb2NhdGlvbixcbiAgICAgICAgbmFtZTogZmlsZW5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5kZWxldGVGaWxlKGZpbGVuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGZpbGUgcmVmZXJlbmNlcyBpbiBSRVNULWZvcm1hdCBvYmplY3QgYW5kIGFkZHMgdGhlIHVybCBrZXlcbiAgICogd2l0aCB0aGUgY3VycmVudCBtb3VudCBwb2ludCBhbmQgYXBwIGlkLlxuICAgKiBPYmplY3QgbWF5IGJlIGEgc2luZ2xlIG9iamVjdCBvciBsaXN0IG9mIFJFU1QtZm9ybWF0IG9iamVjdHMuXG4gICAqL1xuICBleHBhbmRGaWxlc0luT2JqZWN0KGNvbmZpZywgb2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBvYmplY3QubWFwKChvYmopID0+IHRoaXMuZXhwYW5kRmlsZXNJbk9iamVjdChjb25maWcsIG9iaikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICBpZiAoZmlsZU9iamVjdCAmJiBmaWxlT2JqZWN0WydfX3R5cGUnXSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0Wyd1cmwnXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZmlsZU9iamVjdFsnbmFtZSddO1xuICAgICAgICAvLyBhbGwgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggXCJ0ZnNzLVwiIHNob3VsZCBiZSBmcm9tIGZpbGVzLnBhcnNldGZzcy5jb21cbiAgICAgICAgLy8gYWxsIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGEgXCItXCIgc2VwZXJhdGVkIFVVSUQgc2hvdWxkIGJlIGZyb20gZmlsZXMucGFyc2UuY29tXG4gICAgICAgIC8vIGFsbCBvdGhlciBmaWxlbmFtZXMgaGF2ZSBiZWVuIG1pZ3JhdGVkIG9yIGNyZWF0ZWQgZnJvbSBQYXJzZSBTZXJ2ZXJcbiAgICAgICAgaWYgKGNvbmZpZy5maWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ3Rmc3MtJykgPT09IDApIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID0gJ2h0dHA6Ly9maWxlcy5wYXJzZXRmc3MuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsZWdhY3lGaWxlc1JlZ2V4LnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9ICdodHRwOi8vZmlsZXMucGFyc2UuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID0gdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBlY3RlZEFkYXB0ZXJUeXBlKCkge1xuICAgIHJldHVybiBGaWxlc0FkYXB0ZXI7XG4gIH1cblxuICBnZXRGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmdldEZpbGVTdHJlYW0oZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVzQ29udHJvbGxlcjtcbiJdfQ==
|
|
105
|
+
var _default = exports.default = FilesController;
|
|
106
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ZpbGVzQWRhcHRlciIsIl9wYXRoIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUGFyc2UiLCJsZWdhY3lGaWxlc1JlZ2V4IiwiUmVnRXhwIiwiRmlsZXNDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImdldEZpbGVEYXRhIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJhZGFwdGVyIiwiY3JlYXRlRmlsZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIm9wdGlvbnMiLCJleHRuYW1lIiwicGF0aCIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJnZXRUeXBlIiwicHJlc2VydmVGaWxlTmFtZSIsInJhbmRvbUhleFN0cmluZyIsImxvY2F0aW9uIiwiZ2V0RmlsZUxvY2F0aW9uIiwidXJsIiwibmFtZSIsImRlbGV0ZUZpbGUiLCJnZXRNZXRhZGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXhwYW5kRmlsZXNJbk9iamVjdCIsIm9iamVjdCIsIkFycmF5IiwicHJvbWlzZXMiLCJtYXAiLCJvYmoiLCJhbGwiLCJrZXkiLCJmaWxlT2JqZWN0IiwiZmlsZUtleSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0ZXN0IiwiZXhwZWN0ZWRBZGFwdGVyVHlwZSIsIkZpbGVzQWRhcHRlciIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZXJyb3IiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL0ZpbGVzQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGaWxlc0NvbnRyb2xsZXIuanNcbmltcG9ydCB7IHJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCBBZGFwdGFibGVDb250cm9sbGVyIGZyb20gJy4vQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVuYW1lLCBGaWxlc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlJykuUGFyc2U7XG5cbmNvbnN0IGxlZ2FjeUZpbGVzUmVnZXggPSBuZXcgUmVnRXhwKFxuICAnXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfS0uKidcbik7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc0NvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0RmlsZURhdGEoZmlsZW5hbWUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRmlsZShjb25maWcsIGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpO1xuXG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZXh0bmFtZS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHRcbiAgICBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSAmJiBtaW1lLmdldEV4dGVuc2lvbihjb250ZW50VHlwZSkpIHtcbiAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUgKyAnLicgKyBtaW1lLmdldEV4dGVuc2lvbihjb250ZW50VHlwZSk7XG4gICAgfSBlbHNlIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucHJlc2VydmVGaWxlTmFtZSkge1xuICAgICAgZmlsZW5hbWUgPSByYW5kb21IZXhTdHJpbmcoMzIpICsgJ18nICsgZmlsZW5hbWU7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVGaWxlKGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogbG9jYXRpb24sXG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICB9XG4gIH1cblxuICBkZWxldGVGaWxlKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRlbGV0ZUZpbGUoZmlsZW5hbWUpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoZmlsZW5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgZmlsZSByZWZlcmVuY2VzIGluIFJFU1QtZm9ybWF0IG9iamVjdCBhbmQgYWRkcyB0aGUgdXJsIGtleVxuICAgKiB3aXRoIHRoZSBjdXJyZW50IG1vdW50IHBvaW50IGFuZCBhcHAgaWQuXG4gICAqIE9iamVjdCBtYXkgYmUgYSBzaW5nbGUgb2JqZWN0IG9yIGxpc3Qgb2YgUkVTVC1mb3JtYXQgb2JqZWN0cy5cbiAgICovXG4gIGFzeW5jIGV4cGFuZEZpbGVzSW5PYmplY3QoY29uZmlnLCBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gb2JqZWN0Lm1hcChvYmogPT4gdGhpcy5leHBhbmRGaWxlc0luT2JqZWN0KGNvbmZpZywgb2JqKSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICAgIGlmIChmaWxlT2JqZWN0ICYmIGZpbGVPYmplY3RbJ19fdHlwZSddID09PSAnRmlsZScpIHtcbiAgICAgICAgaWYgKGZpbGVPYmplY3RbJ3VybCddKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBmaWxlT2JqZWN0WyduYW1lJ107XG4gICAgICAgIC8vIGFsbCBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBcInRmc3MtXCIgc2hvdWxkIGJlIGZyb20gZmlsZXMucGFyc2V0ZnNzLmNvbVxuICAgICAgICAvLyBhbGwgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggYSBcIi1cIiBzZXBlcmF0ZWQgVVVJRCBzaG91bGQgYmUgZnJvbSBmaWxlcy5wYXJzZS5jb21cbiAgICAgICAgLy8gYWxsIG90aGVyIGZpbGVuYW1lcyBoYXZlIGJlZW4gbWlncmF0ZWQgb3IgY3JlYXRlZCBmcm9tIFBhcnNlIFNlcnZlclxuICAgICAgICBpZiAoY29uZmlnLmZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsZW5hbWUuaW5kZXhPZigndGZzcy0nKSA9PT0gMCkge1xuICAgICAgICAgICAgZmlsZU9iamVjdFsndXJsJ10gPVxuICAgICAgICAgICAgICAnaHR0cDovL2ZpbGVzLnBhcnNldGZzcy5jb20vJyArIGNvbmZpZy5maWxlS2V5ICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxlZ2FjeUZpbGVzUmVnZXgudGVzdChmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID1cbiAgICAgICAgICAgICAgJ2h0dHA6Ly9maWxlcy5wYXJzZS5jb20vJyArIGNvbmZpZy5maWxlS2V5ICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsZU9iamVjdFsndXJsJ10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGV4cGVjdGVkQWRhcHRlclR5cGUoKSB7XG4gICAgcmV0dXJuIEZpbGVzQWRhcHRlcjtcbiAgfVxuXG4gIGhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5hZGFwdGVyLnZhbGlkYXRlRmlsZW5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5hZGFwdGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgICAgaWYgKHR5cGVvZiBlcnJvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZXNDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQXdCLFNBQUFFLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBSnhCOztBQUtBLE1BQU1HLEtBQUssR0FBR1IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDUSxLQUFLO0FBRXBDLE1BQU1DLGdCQUFnQixHQUFHLElBQUlDLE1BQU0sQ0FDakMsaUZBQ0YsQ0FBQztBQUVNLE1BQU1DLGVBQWUsU0FBU0MsNEJBQW1CLENBQUM7RUFDdkRDLFdBQVdBLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO0lBQzVCLE9BQU8sSUFBSSxDQUFDQyxPQUFPLENBQUNILFdBQVcsQ0FBQ0UsUUFBUSxDQUFDO0VBQzNDO0VBRUEsTUFBTUUsVUFBVUEsQ0FBQ0gsTUFBTSxFQUFFQyxRQUFRLEVBQUVHLElBQUksRUFBRUMsV0FBVyxFQUFFQyxPQUFPLEVBQUU7SUFDN0QsTUFBTUMsT0FBTyxHQUFHQyxhQUFJLENBQUNELE9BQU8sQ0FBQ04sUUFBUSxDQUFDO0lBRXRDLE1BQU1RLFlBQVksR0FBR0YsT0FBTyxDQUFDRyxN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NkJBQTZCLEdBQUdoQyxNQUFNLENBQUNpQyxPQUFPLEdBQUcsR0FBRyxHQUFHRyxrQkFBa0IsQ0FBQ25DLFFBQVEsQ0FBQztVQUN2RixDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMwQyxJQUFJLENBQUNwQyxRQUFRLENBQUMsRUFBRTtZQUMxQytCLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FDZix5QkFBeUIsR0FBR2hDLE1BQU0sQ0FBQ2lDLE9BQU8sR0FBRyxHQUFHLEdBQUdHLGtCQUFrQixDQUFDbkMsUUFBUSxDQUFDO1VBQ25GLENBQUMsTUFBTTtZQUNMK0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDOUIsT0FBTyxDQUFDZSxlQUFlLENBQUNqQixNQUFNLEVBQUVDLFFBQVEsQ0FBQztVQUMxRTtRQUNGO01BQ0Y7SUFDRjtFQUNGO0VBRUFxQyxtQkFBbUJBLENBQUEsRUFBRztJQUNwQixPQUFPQywwQkFBWTtFQUNyQjtFQUVBQyxnQkFBZ0JBLENBQUN4QyxNQUFNLEVBQUVDLFFBQVEsRUFBRXdDLEdBQUcsRUFBRUMsR0FBRyxFQUFFckMsV0FBVyxFQUFFO0lBQ3hELE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNzQyxnQkFBZ0IsQ0FBQ3ZDLFFBQVEsRUFBRXdDLEdBQUcsRUFBRUMsR0FBRyxFQUFFckMsV0FBVyxDQUFDO0VBQ3ZFO0VBRUFzQyxnQkFBZ0JBLENBQUMxQyxRQUFRLEVBQUU7SUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQ0MsT0FBTyxDQUFDeUMsZ0JBQWdCLEtBQUssVUFBVSxFQUFFO01BQ3ZELE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUMxQyxPQUFPLENBQUN5QyxnQkFBZ0IsQ0FBQzFDLFFBQVEsQ0FBQztNQUNyRCxJQUFJLE9BQU8yQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU9BLEtBQUs7TUFDZDtNQUNBLE9BQU8sSUFBSWxELEtBQUssQ0FBQ21ELEtBQUssQ0FBQ25ELEtBQUssQ0FBQ21ELEtBQUssQ0FBQ0MsaUJBQWlCLEVBQUVGLEtBQUssQ0FBQztJQUM5RDtJQUNBLE9BQU8sSUFBQUQsOEJBQWdCLEVBQUMxQyxRQUFRLENBQUM7RUFDbkM7QUFDRjtBQUFDOEMsT0FBQSxDQUFBbEQsZUFBQSxHQUFBQSxlQUFBO0FBQUEsSUFBQW1ELFFBQUEsR0FBQUQsT0FBQSxDQUFBdEQsT0FBQSxHQUVjSSxlQUFlIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -3,53 +3,32 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.HooksController =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var triggers = _interopRequireWildcard(_triggers);
|
|
11
|
-
|
|
12
|
-
var _node = require("parse/node");
|
|
13
|
-
|
|
14
|
-
var Parse = _interopRequireWildcard(_node);
|
|
15
|
-
|
|
16
|
-
var _request = require("request");
|
|
17
|
-
|
|
18
|
-
var request = _interopRequireWildcard(_request);
|
|
19
|
-
|
|
6
|
+
exports.default = exports.HooksController = void 0;
|
|
7
|
+
var triggers = _interopRequireWildcard(require("../triggers"));
|
|
8
|
+
var Parse = _interopRequireWildcard(require("parse/node"));
|
|
9
|
+
var _request = _interopRequireDefault(require("../request"));
|
|
20
10
|
var _logger = require("../logger");
|
|
21
|
-
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var _https = require("https");
|
|
27
|
-
|
|
28
|
-
var _https2 = _interopRequireDefault(_https);
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
33
|
-
|
|
11
|
+
var _http = _interopRequireDefault(require("http"));
|
|
12
|
+
var _https = _interopRequireDefault(require("https"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
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); }
|
|
34
15
|
// -disable-next
|
|
35
|
-
/** weak */
|
|
36
|
-
|
|
37
|
-
const DefaultHooksCollectionName = "_Hooks";
|
|
38
16
|
// -disable-next
|
|
39
|
-
|
|
17
|
+
const DefaultHooksCollectionName = '_Hooks';
|
|
40
18
|
const HTTPAgents = {
|
|
41
|
-
http: new
|
|
42
|
-
|
|
19
|
+
http: new _http.default.Agent({
|
|
20
|
+
keepAlive: true
|
|
21
|
+
}),
|
|
22
|
+
https: new _https.default.Agent({
|
|
23
|
+
keepAlive: true
|
|
24
|
+
})
|
|
43
25
|
};
|
|
44
|
-
|
|
45
26
|
class HooksController {
|
|
46
|
-
|
|
47
27
|
constructor(applicationId, databaseController, webhookKey) {
|
|
48
28
|
this._applicationId = applicationId;
|
|
49
29
|
this._webhookKey = webhookKey;
|
|
50
30
|
this.database = databaseController;
|
|
51
31
|
}
|
|
52
|
-
|
|
53
32
|
load() {
|
|
54
33
|
return this._getHooks().then(hooks => {
|
|
55
34
|
hooks = hooks || [];
|
|
@@ -58,33 +37,47 @@ class HooksController {
|
|
|
58
37
|
});
|
|
59
38
|
});
|
|
60
39
|
}
|
|
61
|
-
|
|
62
40
|
getFunction(functionName) {
|
|
63
|
-
return this._getHooks({
|
|
41
|
+
return this._getHooks({
|
|
42
|
+
functionName: functionName
|
|
43
|
+
}).then(results => results[0]);
|
|
64
44
|
}
|
|
65
|
-
|
|
66
45
|
getFunctions() {
|
|
67
|
-
return this._getHooks({
|
|
46
|
+
return this._getHooks({
|
|
47
|
+
functionName: {
|
|
48
|
+
$exists: true
|
|
49
|
+
}
|
|
50
|
+
});
|
|
68
51
|
}
|
|
69
|
-
|
|
70
52
|
getTrigger(className, triggerName) {
|
|
71
|
-
return this._getHooks({
|
|
53
|
+
return this._getHooks({
|
|
54
|
+
className: className,
|
|
55
|
+
triggerName: triggerName
|
|
56
|
+
}).then(results => results[0]);
|
|
72
57
|
}
|
|
73
|
-
|
|
74
58
|
getTriggers() {
|
|
75
|
-
return this._getHooks({
|
|
59
|
+
return this._getHooks({
|
|
60
|
+
className: {
|
|
61
|
+
$exists: true
|
|
62
|
+
},
|
|
63
|
+
triggerName: {
|
|
64
|
+
$exists: true
|
|
65
|
+
}
|
|
66
|
+
});
|
|
76
67
|
}
|
|
77
|
-
|
|
78
68
|
deleteFunction(functionName) {
|
|
79
69
|
triggers.removeFunction(functionName, this._applicationId);
|
|
80
|
-
return this._removeHooks({
|
|
70
|
+
return this._removeHooks({
|
|
71
|
+
functionName: functionName
|
|
72
|
+
});
|
|
81
73
|
}
|
|
82
|
-
|
|
83
74
|
deleteTrigger(className, triggerName) {
|
|
84
75
|
triggers.removeTrigger(triggerName, className, this._applicationId);
|
|
85
|
-
return this._removeHooks({
|
|
76
|
+
return this._removeHooks({
|
|
77
|
+
className: className,
|
|
78
|
+
triggerName: triggerName
|
|
79
|
+
});
|
|
86
80
|
}
|
|
87
|
-
|
|
88
81
|
_getHooks(query = {}) {
|
|
89
82
|
return this.database.find(DefaultHooksCollectionName, query).then(results => {
|
|
90
83
|
return results.map(result => {
|
|
@@ -93,27 +86,31 @@ class HooksController {
|
|
|
93
86
|
});
|
|
94
87
|
});
|
|
95
88
|
}
|
|
96
|
-
|
|
97
89
|
_removeHooks(query) {
|
|
98
90
|
return this.database.destroy(DefaultHooksCollectionName, query).then(() => {
|
|
99
91
|
return Promise.resolve({});
|
|
100
92
|
});
|
|
101
93
|
}
|
|
102
|
-
|
|
103
94
|
saveHook(hook) {
|
|
104
95
|
var query;
|
|
105
96
|
if (hook.functionName && hook.url) {
|
|
106
|
-
query = {
|
|
97
|
+
query = {
|
|
98
|
+
functionName: hook.functionName
|
|
99
|
+
};
|
|
107
100
|
} else if (hook.triggerName && hook.className && hook.url) {
|
|
108
|
-
query = {
|
|
101
|
+
query = {
|
|
102
|
+
className: hook.className,
|
|
103
|
+
triggerName: hook.triggerName
|
|
104
|
+
};
|
|
109
105
|
} else {
|
|
110
|
-
throw new Parse.Error(143,
|
|
106
|
+
throw new Parse.Error(143, 'invalid hook declaration');
|
|
111
107
|
}
|
|
112
|
-
return this.database.update(DefaultHooksCollectionName, query, hook, {
|
|
108
|
+
return this.database.update(DefaultHooksCollectionName, query, hook, {
|
|
109
|
+
upsert: true
|
|
110
|
+
}).then(() => {
|
|
113
111
|
return Promise.resolve(hook);
|
|
114
112
|
});
|
|
115
113
|
}
|
|
116
|
-
|
|
117
114
|
addHookToTriggers(hook) {
|
|
118
115
|
var wrappedFunction = wrapToHTTPRequest(hook, this._webhookKey);
|
|
119
116
|
wrappedFunction.url = hook.url;
|
|
@@ -123,12 +120,10 @@ class HooksController {
|
|
|
123
120
|
triggers.addFunction(hook.functionName, wrappedFunction, null, this._applicationId);
|
|
124
121
|
}
|
|
125
122
|
}
|
|
126
|
-
|
|
127
123
|
addHook(hook) {
|
|
128
124
|
this.addHookToTriggers(hook);
|
|
129
125
|
return this.saveHook(hook);
|
|
130
126
|
}
|
|
131
|
-
|
|
132
127
|
createOrUpdateHook(aHook) {
|
|
133
128
|
var hook;
|
|
134
129
|
if (aHook && aHook.functionName && aHook.url) {
|
|
@@ -141,17 +136,15 @@ class HooksController {
|
|
|
141
136
|
hook.url = aHook.url;
|
|
142
137
|
hook.triggerName = aHook.triggerName;
|
|
143
138
|
} else {
|
|
144
|
-
throw new Parse.Error(143,
|
|
139
|
+
throw new Parse.Error(143, 'invalid hook declaration');
|
|
145
140
|
}
|
|
146
|
-
|
|
147
141
|
return this.addHook(hook);
|
|
148
142
|
}
|
|
149
|
-
|
|
150
143
|
createHook(aHook) {
|
|
151
144
|
if (aHook.functionName) {
|
|
152
145
|
return this.getFunction(aHook.functionName).then(result => {
|
|
153
146
|
if (result) {
|
|
154
|
-
throw new Parse.Error(143, `function name: ${aHook.functionName} already
|
|
147
|
+
throw new Parse.Error(143, `function name: ${aHook.functionName} already exists`);
|
|
155
148
|
} else {
|
|
156
149
|
return this.createOrUpdateHook(aHook);
|
|
157
150
|
}
|
|
@@ -164,10 +157,8 @@ class HooksController {
|
|
|
164
157
|
return this.createOrUpdateHook(aHook);
|
|
165
158
|
});
|
|
166
159
|
}
|
|
167
|
-
|
|
168
|
-
throw new Parse.Error(143, "invalid hook declaration");
|
|
160
|
+
throw new Parse.Error(143, 'invalid hook declaration');
|
|
169
161
|
}
|
|
170
|
-
|
|
171
162
|
updateHook(aHook) {
|
|
172
163
|
if (aHook.functionName) {
|
|
173
164
|
return this.getFunction(aHook.functionName).then(result => {
|
|
@@ -184,15 +175,18 @@ class HooksController {
|
|
|
184
175
|
throw new Parse.Error(143, `class ${aHook.className} does not exist`);
|
|
185
176
|
});
|
|
186
177
|
}
|
|
187
|
-
throw new Parse.Error(143,
|
|
178
|
+
throw new Parse.Error(143, 'invalid hook declaration');
|
|
188
179
|
}
|
|
189
180
|
}
|
|
190
|
-
|
|
191
181
|
exports.HooksController = HooksController;
|
|
192
182
|
function wrapToHTTPRequest(hook, key) {
|
|
193
|
-
return
|
|
183
|
+
return req => {
|
|
194
184
|
const jsonBody = {};
|
|
195
185
|
for (var i in req) {
|
|
186
|
+
// Parse Server config is not serializable
|
|
187
|
+
if (i === 'config') {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
196
190
|
jsonBody[i] = req[i];
|
|
197
191
|
}
|
|
198
192
|
if (req.object) {
|
|
@@ -204,30 +198,31 @@ function wrapToHTTPRequest(hook, key) {
|
|
|
204
198
|
jsonBody.original.className = req.original.className;
|
|
205
199
|
}
|
|
206
200
|
const jsonRequest = {
|
|
201
|
+
url: hook.url,
|
|
207
202
|
headers: {
|
|
208
203
|
'Content-Type': 'application/json'
|
|
209
204
|
},
|
|
210
|
-
body:
|
|
205
|
+
body: jsonBody,
|
|
206
|
+
method: 'POST'
|
|
211
207
|
};
|
|
212
|
-
|
|
213
208
|
const agent = hook.url.startsWith('https') ? HTTPAgents['https'] : HTTPAgents['http'];
|
|
214
209
|
jsonRequest.agent = agent;
|
|
215
|
-
|
|
216
210
|
if (key) {
|
|
217
211
|
jsonRequest.headers['X-Parse-Webhook-Key'] = key;
|
|
218
212
|
} else {
|
|
219
213
|
_logger.logger.warn('Making outgoing webhook request without webhookKey being set!');
|
|
220
214
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
215
|
+
return (0, _request.default)(jsonRequest).then(response => {
|
|
216
|
+
let err;
|
|
217
|
+
let result;
|
|
218
|
+
let body = response.data;
|
|
224
219
|
if (body) {
|
|
225
|
-
if (typeof body ===
|
|
220
|
+
if (typeof body === 'string') {
|
|
226
221
|
try {
|
|
227
222
|
body = JSON.parse(body);
|
|
228
|
-
} catch
|
|
223
|
+
} catch {
|
|
229
224
|
err = {
|
|
230
|
-
error:
|
|
225
|
+
error: 'Malformed response',
|
|
231
226
|
code: -1,
|
|
232
227
|
partialResponse: body.substring(0, 100)
|
|
233
228
|
};
|
|
@@ -238,21 +233,22 @@ function wrapToHTTPRequest(hook, key) {
|
|
|
238
233
|
err = body.error;
|
|
239
234
|
}
|
|
240
235
|
}
|
|
241
|
-
|
|
242
236
|
if (err) {
|
|
243
|
-
|
|
237
|
+
throw err;
|
|
244
238
|
} else if (hook.triggerName === 'beforeSave') {
|
|
245
239
|
if (typeof result === 'object') {
|
|
246
240
|
delete result.createdAt;
|
|
247
241
|
delete result.updatedAt;
|
|
242
|
+
delete result.className;
|
|
248
243
|
}
|
|
249
|
-
return
|
|
244
|
+
return {
|
|
245
|
+
object: result
|
|
246
|
+
};
|
|
250
247
|
} else {
|
|
251
|
-
return
|
|
248
|
+
return result;
|
|
252
249
|
}
|
|
253
250
|
});
|
|
254
251
|
};
|
|
255
252
|
}
|
|
256
|
-
|
|
257
|
-
exports.default = HooksController;
|
|
258
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9Ib29rc0NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsidHJpZ2dlcnMiLCJQYXJzZSIsInJlcXVlc3QiLCJEZWZhdWx0SG9va3NDb2xsZWN0aW9uTmFtZSIsIkhUVFBBZ2VudHMiLCJodHRwIiwiQWdlbnQiLCJrZWVwQWxpdmUiLCJodHRwcyIsIkhvb2tzQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYXBwbGljYXRpb25JZCIsImRhdGFiYXNlQ29udHJvbGxlciIsIndlYmhvb2tLZXkiLCJfYXBwbGljYXRpb25JZCIsIl93ZWJob29rS2V5IiwiZGF0YWJhc2UiLCJsb2FkIiwiX2dldEhvb2tzIiwidGhlbiIsImhvb2tzIiwiZm9yRWFjaCIsImhvb2siLCJhZGRIb29rVG9UcmlnZ2VycyIsImdldEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lIiwicmVzdWx0cyIsImdldEZ1bmN0aW9ucyIsIiRleGlzdHMiLCJnZXRUcmlnZ2VyIiwiY2xhc3NOYW1lIiwidHJpZ2dlck5hbWUiLCJnZXRUcmlnZ2VycyIsImRlbGV0ZUZ1bmN0aW9uIiwicmVtb3ZlRnVuY3Rpb24iLCJfcmVtb3ZlSG9va3MiLCJkZWxldGVUcmlnZ2VyIiwicmVtb3ZlVHJpZ2dlciIsInF1ZXJ5IiwiZmluZCIsIm1hcCIsInJlc3VsdCIsIm9iamVjdElkIiwiZGVzdHJveSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2F2ZUhvb2siLCJ1cmwiLCJFcnJvciIsInVwZGF0ZSIsInVwc2VydCIsIndyYXBwZWRGdW5jdGlvbiIsIndyYXBUb0hUVFBSZXF1ZXN0IiwiYWRkVHJpZ2dlciIsImFkZEZ1bmN0aW9uIiwiYWRkSG9vayIsImNyZWF0ZU9yVXBkYXRlSG9vayIsImFIb29rIiwiVHlwZXMiLCJjcmVhdGVIb29rIiwidXBkYXRlSG9vayIsImtleSIsInJlcSIsInJlcyIsImpzb25Cb2R5IiwiaSIsIm9iamVjdCIsInRvSlNPTiIsIm9yaWdpbmFsIiwianNvblJlcXVlc3QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhZ2VudCIsInN0YXJ0c1dpdGgiLCJsb2dnZXIiLCJ3YXJuIiwicG9zdCIsImVyciIsImh0dHBSZXNwb25zZSIsInBhcnNlIiwiZSIsImVycm9yIiwiY29kZSIsInBhcnRpYWxSZXNwb25zZSIsInN1YnN0cmluZyIsInN1Y2Nlc3MiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7SUFBWUEsUTs7QUFFWjs7SUFBWUMsSzs7QUFFWjs7SUFBWUMsTzs7QUFDWjs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUpBO0FBTEE7O0FBV0EsTUFBTUMsNkJBQTZCLFFBQW5DO0FBUkE7O0FBU0EsTUFBTUMsYUFBYTtBQUNqQkMsUUFBTSxJQUFJQSxlQUFLQyxLQUFULENBQWUsRUFBRUMsV0FBVyxJQUFiLEVBQWYsQ0FEVztBQUVqQkMsU0FBTyxJQUFJQSxnQkFBTUYsS0FBVixDQUFnQixFQUFFQyxXQUFXLElBQWIsRUFBaEI7QUFGVSxDQUFuQjs7QUFLTyxNQUFNRSxlQUFOLENBQXNCOztBQUszQkMsY0FBWUMsYUFBWixFQUFrQ0Msa0JBQWxDLEVBQXNEQyxVQUF0RCxFQUFrRTtBQUNoRSxTQUFLQyxjQUFMLEdBQXNCSCxhQUF0QjtBQUNBLFNBQUtJLFdBQUwsR0FBbUJGLFVBQW5CO0FBQ0EsU0FBS0csUUFBTCxHQUFnQkosa0JBQWhCO0FBQ0Q7O0FBRURLLFNBQU87QUFDTCxXQUFPLEtBQUtDLFNBQUwsR0FBaUJDLElBQWpCLENBQXNCQyxTQUFTO0FBQ3BDQSxjQUFRQSxTQUFTLEVBQWpCO0FBQ0FBLFlBQU1DLE9BQU4sQ0FBZUMsSUFBRCxJQUFVO0FBQ3RCLGFBQUtDLGlCQUFMLENBQXVCRCxJQUF2QjtBQUNELE9BRkQ7QUFHRCxLQUxNLENBQVA7QUFNRDs7QUFFREUsY0FBWUMsWUFBWixFQUEwQjtBQUN4QixXQUFPLEtBQUtQLFNBQUwsQ0FBZSxFQUFFTyxjQUFjQSxZQUFoQixFQUFmLEVBQStDTixJQUEvQyxDQUFvRE8sV0FBV0EsUUFBUSxDQUFSLENBQS9ELENBQVA7QUFDRDs7QUFFREMsaUJBQWU7QUFDYixXQUFPLEtBQUtULFNBQUwsQ0FBZSxFQUFFTyxjQUFjLEVBQUVHLFNBQVMsSUFBWCxFQUFoQixFQUFmLENBQVA7QUFDRDs7QUFFREMsYUFBV0MsU0FBWCxFQUFzQkMsV0FBdEIsRUFBbUM7QUFDakMsV0FBTyxLQUFLYixTQUFMLENBQWUsRUFBRVksV0FBV0EsU0FBYixFQUF3QkMsYUFBYUEsV0FBckMsRUFBZixFQUFtRVosSUFBbkUsQ0FBd0VPLFdBQVdBLFFBQVEsQ0FBUixDQUFuRixDQUFQO0FBQ0Q7O0FBRURNLGdCQUFjO0FBQ1osV0FBTyxLQUFLZCxTQUFMLENBQWUsRUFBRVksV0FBVyxFQUFFRixTQUFTLElBQVgsRUFBYixFQUFnQ0csYUFBYSxFQUFFSCxTQUFTLElBQVgsRUFBN0MsRUFBZixDQUFQO0FBQ0Q7O0FBRURLLGlCQUFlUixZQUFmLEVBQTZCO0FBQzNCekIsYUFBU2tDLGNBQVQsQ0FBd0JULFlBQXhCLEVBQXNDLEtBQUtYLGNBQTNDO0FBQ0EsV0FBTyxLQUFLcUIsWUFBTCxDQUFrQixFQUFFVixjQUFjQSxZQUFoQixFQUFsQixDQUFQO0FBQ0Q7O0FBRURXLGdCQUFjTixTQUFkLEVBQXlCQyxXQUF6QixFQUFzQztBQUNwQy9CLGFBQVNxQyxhQUFULENBQXVCTixXQUF2QixFQUFvQ0QsU0FBcEMsRUFBK0MsS0FBS2hCLGNBQXBEO0FBQ0EsV0FBTyxLQUFLcUIsWUFBTCxDQUFrQixFQUFFTCxXQUFXQSxTQUFiLEVBQXdCQyxhQUFhQSxXQUFyQyxFQUFsQixDQUFQO0FBQ0Q7O0FBRURiLFlBQVVvQixRQUFRLEVBQWxCLEVBQXNCO0FBQ3BCLFdBQU8sS0FBS3RCLFFBQUwsQ0FBY3VCLElBQWQsQ0FBbUJwQywwQkFBbkIsRUFBK0NtQyxLQUEvQyxFQUFzRG5CLElBQXRELENBQTRETyxPQUFELElBQWE7QUFDN0UsYUFBT0EsUUFBUWMsR0FBUixDQUFhQyxNQUFELElBQVk7QUFDN0IsZUFBT0EsT0FBT0MsUUFBZDtBQUNBLGVBQU9ELE1BQVA7QUFDRCxPQUhNLENBQVA7QUFJRCxLQUxNLENBQVA7QUFNRDs7QUFFRE4sZUFBYUcsS0FBYixFQUFvQjtBQUNsQixXQUFPLEtBQUt0QixRQUFMLENBQWMyQixPQUFkLENBQXNCeEMsMEJBQXRCLEVBQWtEbUMsS0FBbEQsRUFBeURuQixJQUF6RCxDQUE4RCxNQUFNO0FBQ3pFLGFBQU95QixRQUFRQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRCxLQUZNLENBQVA7QUFHRDs7QUFFREMsV0FBU3hCLElBQVQsRUFBZTtBQUNiLFFBQUlnQixLQUFKO0FBQ0EsUUFBSWhCLEtBQUtHLFlBQUwsSUFBcUJILEtBQUt5QixHQUE5QixFQUFtQztBQUNqQ1QsY0FBUSxFQUFFYixjQUFjSCxLQUFLRyxZQUFyQixFQUFSO0FBQ0QsS0FGRCxNQUVPLElBQUlILEtBQUtTLFdBQUwsSUFBb0JULEtBQUtRLFNBQXpCLElBQXNDUixLQUFLeUIsR0FBL0MsRUFBb0Q7QUFDekRULGNBQVEsRUFBRVIsV0FBV1IsS0FBS1EsU0FBbEIsRUFBNkJDLGFBQWFULEtBQUtTLFdBQS9DLEVBQVI7QUFDRCxLQUZNLE1BRUE7QUFDTCxZQUFNLElBQUk5QixNQUFNK0MsS0FBVixDQUFnQixHQUFoQixFQUFxQiwwQkFBckIsQ0FBTjtBQUNEO0FBQ0QsV0FBTyxLQUFLaEMsUUFBTCxDQUFjaUMsTUFBZCxDQUFxQjlDLDBCQUFyQixFQUFpRG1DLEtBQWpELEVBQXdEaEIsSUFBeEQsRUFBOEQsRUFBQzRCLFFBQVEsSUFBVCxFQUE5RCxFQUE4RS9CLElBQTlFLENBQW1GLE1BQU07QUFDOUYsYUFBT3lCLFFBQVFDLE9BQVIsQ0FBZ0J2QixJQUFoQixDQUFQO0FBQ0QsS0FGTSxDQUFQO0FBR0Q7O0FBRURDLG9CQUFrQkQsSUFBbEIsRUFBd0I7QUFDdEIsUUFBSTZCLGtCQUFrQkMsa0JBQWtCOUIsSUFBbEIsRUFBd0IsS0FBS1AsV0FBN0IsQ0FBdEI7QUFDQW9DLG9CQUFnQkosR0FBaEIsR0FBc0J6QixLQUFLeUIsR0FBM0I7QUFDQSxRQUFJekIsS0FBS1EsU0FBVCxFQUFvQjtBQUNsQjlCLGVBQVNxRCxVQUFULENBQW9CL0IsS0FBS1MsV0FBekIsRUFBc0NULEtBQUtRLFNBQTNDLEVBQXNEcUIsZUFBdEQsRUFBdUUsS0FBS3JDLGNBQTVFO0FBQ0QsS0FGRCxNQUVPO0FBQ0xkLGVBQVNzRCxXQUFULENBQXFCaEMsS0FBS0csWUFBMUIsRUFBd0MwQixlQUF4QyxFQUF5RCxJQUF6RCxFQUErRCxLQUFLckMsY0FBcEU7QUFDRDtBQUNGOztBQUVEeUMsVUFBUWpDLElBQVIsRUFBYztBQUNaLFNBQUtDLGlCQUFMLENBQXVCRCxJQUF2QjtBQUNBLFdBQU8sS0FBS3dCLFFBQUwsQ0FBY3hCLElBQWQsQ0FBUDtBQUNEOztBQUVEa0MscUJBQW1CQyxLQUFuQixFQUEwQjtBQUN4QixRQUFJbkMsSUFBSjtBQUNBLFFBQUltQyxTQUFTQSxNQUFNaEMsWUFBZixJQUErQmdDLE1BQU1WLEdBQXpDLEVBQThDO0FBQzVDekIsYUFBTyxFQUFQO0FBQ0FBLFdBQUtHLFlBQUwsR0FBb0JnQyxNQUFNaEMsWUFBMUI7QUFDQUgsV0FBS3lCLEdBQUwsR0FBV1UsTUFBTVYsR0FBakI7QUFDRCxLQUpELE1BSU8sSUFBSVUsU0FBU0EsTUFBTTNCLFNBQWYsSUFBNEIyQixNQUFNVixHQUFsQyxJQUF5Q1UsTUFBTTFCLFdBQS9DLElBQThEL0IsU0FBUzBELEtBQVQsQ0FBZUQsTUFBTTFCLFdBQXJCLENBQWxFLEVBQXFHO0FBQzFHVCxhQUFPLEVBQVA7QUFDQUEsV0FBS1EsU0FBTCxHQUFpQjJCLE1BQU0zQixTQUF2QjtBQUNBUixXQUFLeUIsR0FBTCxHQUFXVSxNQUFNVixHQUFqQjtBQUNBekIsV0FBS1MsV0FBTCxHQUFtQjBCLE1BQU0xQixXQUF6QjtBQUVELEtBTk0sTUFNQTtBQUNMLFlBQU0sSUFBSTlCLE1BQU0rQyxLQUFWLENBQWdCLEdBQWhCLEVBQXFCLDBCQUFyQixDQUFOO0FBQ0Q7O0FBRUQsV0FBTyxLQUFLTyxPQUFMLENBQWFqQyxJQUFiLENBQVA7QUFDRDs7QUFFRHFDLGFBQVdGLEtBQVgsRUFBa0I7QUFDaEIsUUFBSUEsTUFBTWhDLFlBQVYsRUFBd0I7QUFDdEIsYUFBTyxLQUFLRCxXQUFMLENBQWlCaUMsTUFBTWhDLFlBQXZCLEVBQXFDTixJQUFyQyxDQUEyQ3NCLE1BQUQsSUFBWTtBQUMzRCxZQUFJQSxNQUFKLEVBQVk7QUFDVixnQkFBTSxJQUFJeEMsTUFBTStDLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBc0Isa0JBQWlCUyxNQUFNaEMsWUFBYSxnQkFBMUQsQ0FBTjtBQUNELFNBRkQsTUFFTztBQUNMLGlCQUFPLEtBQUsrQixrQkFBTCxDQUF3QkMsS0FBeEIsQ0FBUDtBQUNEO0FBQ0YsT0FOTSxDQUFQO0FBT0QsS0FSRCxNQVFPLElBQUlBLE1BQU0zQixTQUFOLElBQW1CMkIsTUFBTTFCLFdBQTdCLEVBQTBDO0FBQy9DLGFBQU8sS0FBS0YsVUFBTCxDQUFnQjRCLE1BQU0zQixTQUF0QixFQUFpQzJCLE1BQU0xQixXQUF2QyxFQUFvRFosSUFBcEQsQ0FBMERzQixNQUFELElBQVk7QUFDMUUsWUFBSUEsTUFBSixFQUFZO0FBQ1YsZ0JBQU0sSUFBSXhDLE1BQU0rQyxLQUFWLENBQWdCLEdBQWhCLEVBQXNCLFNBQVFTLE1BQU0zQixTQUFVLHdCQUF1QjJCLE1BQU0xQixXQUFZLEVBQXZGLENBQU47QUFDRDtBQUNELGVBQU8sS0FBS3lCLGtCQUFMLENBQXdCQyxLQUF4QixDQUFQO0FBQ0QsT0FMTSxDQUFQO0FBTUQ7O0FBRUQsVUFBTSxJQUFJeEQsTUFBTStDLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBcUIsMEJBQXJCLENBQU47QUFDRDs7QUFFRFksYUFBV0gsS0FBWCxFQUFrQjtBQUNoQixRQUFJQSxNQUFNaEMsWUFBVixFQUF3QjtBQUN0QixhQUFPLEtBQUtELFdBQUwsQ0FBaUJpQyxNQUFNaEMsWUFBdkIsRUFBcUNOLElBQXJDLENBQTJDc0IsTUFBRCxJQUFZO0FBQzNELFlBQUlBLE1BQUosRUFBWTtBQUNWLGlCQUFPLEtBQUtlLGtCQUFMLENBQXdCQyxLQUF4QixDQUFQO0FBQ0Q7QUFDRCxjQUFNLElBQUl4RCxNQUFNK0MsS0FBVixDQUFnQixHQUFoQixFQUFzQixzQkFBcUJTLE1BQU1oQyxZQUFhLGFBQTlELENBQU47QUFDRCxPQUxNLENBQVA7QUFNRCxLQVBELE1BT08sSUFBSWdDLE1BQU0zQixTQUFOLElBQW1CMkIsTUFBTTFCLFdBQTdCLEVBQTBDO0FBQy9DLGFBQU8sS0FBS0YsVUFBTCxDQUFnQjRCLE1BQU0zQixTQUF0QixFQUFpQzJCLE1BQU0xQixXQUF2QyxFQUFvRFosSUFBcEQsQ0FBMERzQixNQUFELElBQVk7QUFDMUUsWUFBSUEsTUFBSixFQUFZO0FBQ1YsaUJBQU8sS0FBS2Usa0JBQUwsQ0FBd0JDLEtBQXhCLENBQVA7QUFDRDtBQUNELGNBQU0sSUFBSXhELE1BQU0rQyxLQUFWLENBQWdCLEdBQWhCLEVBQXNCLFNBQVFTLE1BQU0zQixTQUFVLGlCQUE5QyxDQUFOO0FBQ0QsT0FMTSxDQUFQO0FBTUQ7QUFDRCxVQUFNLElBQUk3QixNQUFNK0MsS0FBVixDQUFnQixHQUFoQixFQUFxQiwwQkFBckIsQ0FBTjtBQUNEO0FBbkowQjs7UUFBaEJ2QyxlLEdBQUFBLGU7QUFzSmIsU0FBUzJDLGlCQUFULENBQTJCOUIsSUFBM0IsRUFBaUN1QyxHQUFqQyxFQUFzQztBQUNwQyxTQUFPLENBQUNDLEdBQUQsRUFBTUMsR0FBTixLQUFjO0FBQ25CLFVBQU1DLFdBQVcsRUFBakI7QUFDQSxTQUFLLElBQUlDLENBQVQsSUFBY0gsR0FBZCxFQUFtQjtBQUNqQkUsZUFBU0MsQ0FBVCxJQUFjSCxJQUFJRyxDQUFKLENBQWQ7QUFDRDtBQUNELFFBQUlILElBQUlJLE1BQVIsRUFBZ0I7QUFDZEYsZUFBU0UsTUFBVCxHQUFrQkosSUFBSUksTUFBSixDQUFXQyxNQUFYLEVBQWxCO0FBQ0FILGVBQVNFLE1BQVQsQ0FBZ0JwQyxTQUFoQixHQUE0QmdDLElBQUlJLE1BQUosQ0FBV3BDLFNBQXZDO0FBQ0Q7QUFDRCxRQUFJZ0MsSUFBSU0sUUFBUixFQUFrQjtBQUNoQkosZUFBU0ksUUFBVCxHQUFvQk4sSUFBSU0sUUFBSixDQUFhRCxNQUFiLEVBQXBCO0FBQ0FILGVBQVNJLFFBQVQsQ0FBa0J0QyxTQUFsQixHQUE4QmdDLElBQUlNLFFBQUosQ0FBYXRDLFNBQTNDO0FBQ0Q7QUFDRCxVQUFNdUMsY0FBbUI7QUFDdkJDLGVBQVM7QUFDUCx3QkFBZ0I7QUFEVCxPQURjO0FBSXZCQyxZQUFNQyxLQUFLQyxTQUFMLENBQWVULFFBQWY7QUFKaUIsS0FBekI7O0FBT0EsVUFBTVUsUUFBUXBELEtBQUt5QixHQUFMLENBQVM0QixVQUFULENBQW9CLE9BQXBCLElBQStCdkUsV0FBVyxPQUFYLENBQS9CLEdBQXFEQSxXQUFXLE1BQVgsQ0FBbkU7QUFDQWlFLGdCQUFZSyxLQUFaLEdBQW9CQSxLQUFwQjs7QUFFQSxRQUFJYixHQUFKLEVBQVM7QUFDUFEsa0JBQVlDLE9BQVosQ0FBb0IscUJBQXBCLElBQTZDVCxHQUE3QztBQUNELEtBRkQsTUFFTztBQUNMZSxxQkFBT0MsSUFBUCxDQUFZLCtEQUFaO0FBQ0Q7O0FBRUQzRSxZQUFRNEUsSUFBUixDQUFheEQsS0FBS3lCLEdBQWxCLEVBQXVCc0IsV0FBdkIsRUFBb0MsVUFBVVUsR0FBVixFQUFlQyxZQUFmLEVBQTZCVCxJQUE3QixFQUFtQztBQUNyRSxVQUFJOUIsTUFBSjtBQUNBLFVBQUk4QixJQUFKLEVBQVU7QUFDUixZQUFJLE9BQU9BLElBQVAsS0FBZ0IsUUFBcEIsRUFBOEI7QUFDNUIsY0FBSTtBQUNGQSxtQkFBT0MsS0FBS1MsS0FBTCxDQUFXVixJQUFYLENBQVA7QUFDRCxXQUZELENBRUUsT0FBT1csQ0FBUCxFQUFVO0FBQ1ZILGtCQUFNO0FBQ0pJLHFCQUFPLG9CQURIO0FBRUpDLG9CQUFNLENBQUMsQ0FGSDtBQUdKQywrQkFBaUJkLEtBQUtlLFNBQUwsQ0FBZSxDQUFmLEVBQWtCLEdBQWxCO0FBSGIsYUFBTjtBQUtEO0FBQ0Y7QUFDRCxZQUFJLENBQUNQLEdBQUwsRUFBVTtBQUNSdEMsbUJBQVM4QixLQUFLZ0IsT0FBZDtBQUNBUixnQkFBTVIsS0FBS1ksS0FBWDtBQUNEO0FBQ0Y7O0FBRUQsVUFBSUosR0FBSixFQUFTO0FBQ1AsZUFBT2hCLElBQUlvQixLQUFKLENBQVVKLEdBQVYsQ0FBUDtBQUNELE9BRkQsTUFFTyxJQUFJekQsS0FBS1MsV0FBTCxLQUFxQixZQUF6QixFQUF1QztBQUM1QyxZQUFJLE9BQU9VLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDOUIsaUJBQU9BLE9BQU8rQyxTQUFkO0FBQ0EsaUJBQU8vQyxPQUFPZ0QsU0FBZDtBQUNEO0FBQ0QsZUFBTzFCLElBQUl3QixPQUFKLENBQVksRUFBQ3JCLFFBQVF6QixNQUFULEVBQVosQ0FBUDtBQUNELE9BTk0sTUFNQTtBQUNMLGVBQU9zQixJQUFJd0IsT0FBSixDQUFZOUMsTUFBWixDQUFQO0FBQ0Q7QUFDRixLQS9CRDtBQWdDRCxHQTdERDtBQThERDs7a0JBRWNoQyxlIiwiZmlsZSI6Ikhvb2tzQ29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAZmxvdyB3ZWFrICovXG5cbmltcG9ydCAqIGFzIHRyaWdnZXJzICAgICAgICBmcm9tIFwiLi4vdHJpZ2dlcnNcIjtcbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0ICogYXMgUGFyc2UgICAgICAgICAgIGZyb20gXCJwYXJzZS9ub2RlXCI7XG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCAqIGFzIHJlcXVlc3QgICAgICAgICBmcm9tIFwicmVxdWVzdFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gICAgICAgICAgIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgaHR0cCAgICAgICAgICAgICAgICAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgaHR0cHMgICAgICAgICAgICAgICAgZnJvbSAnaHR0cHMnO1xuXG5jb25zdCBEZWZhdWx0SG9va3NDb2xsZWN0aW9uTmFtZSA9IFwiX0hvb2tzXCI7XG5jb25zdCBIVFRQQWdlbnRzID0ge1xuICBodHRwOiBuZXcgaHR0cC5BZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSB9KSxcbiAgaHR0cHM6IG5ldyBodHRwcy5BZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZSB9KSxcbn1cblxuZXhwb3J0IGNsYXNzIEhvb2tzQ29udHJvbGxlciB7XG4gIF9hcHBsaWNhdGlvbklkOnN0cmluZztcbiAgX3dlYmhvb2tLZXk6c3RyaW5nO1xuICBkYXRhYmFzZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uSWQ6c3RyaW5nLCBkYXRhYmFzZUNvbnRyb2xsZXIsIHdlYmhvb2tLZXkpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gYXBwbGljYXRpb25JZDtcbiAgICB0aGlzLl93ZWJob29rS2V5ID0gd2ViaG9va0tleTtcbiAgICB0aGlzLmRhdGFiYXNlID0gZGF0YWJhc2VDb250cm9sbGVyO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SG9va3MoKS50aGVuKGhvb2tzID0+IHtcbiAgICAgIGhvb2tzID0gaG9va3MgfHwgW107XG4gICAgICBob29rcy5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkSG9va1RvVHJpZ2dlcnMoaG9vayk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9nZXRIb29rcyh7IGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH0pLnRoZW4ocmVzdWx0cyA9PiByZXN1bHRzWzBdKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SG9va3MoeyBmdW5jdGlvbk5hbWU6IHsgJGV4aXN0czogdHJ1ZSB9IH0pO1xuICB9XG5cbiAgZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEhvb2tzKHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHRyaWdnZXJOYW1lOiB0cmlnZ2VyTmFtZSB9KS50aGVuKHJlc3VsdHMgPT4gcmVzdWx0c1swXSk7XG4gIH1cblxuICBnZXRUcmlnZ2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SG9va3MoeyBjbGFzc05hbWU6IHsgJGV4aXN0czogdHJ1ZSB9LCB0cmlnZ2VyTmFtZTogeyAkZXhpc3RzOiB0cnVlIH0gfSk7XG4gIH1cblxuICBkZWxldGVGdW5jdGlvbihmdW5jdGlvbk5hbWUpIHtcbiAgICB0cmlnZ2Vycy5yZW1vdmVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIHRoaXMuX2FwcGxpY2F0aW9uSWQpO1xuICAgIHJldHVybiB0aGlzLl9yZW1vdmVIb29rcyh7IGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH0pO1xuICB9XG5cbiAgZGVsZXRlVHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJOYW1lKSB7XG4gICAgdHJpZ2dlcnMucmVtb3ZlVHJpZ2dlcih0cmlnZ2VyTmFtZSwgY2xhc3NOYW1lLCB0aGlzLl9hcHBsaWNhdGlvbklkKTtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlSG9va3MoeyBjbGFzc05hbWU6IGNsYXNzTmFtZSwgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lIH0pO1xuICB9XG5cbiAgX2dldEhvb2tzKHF1ZXJ5ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5maW5kKERlZmF1bHRIb29rc0NvbGxlY3Rpb25OYW1lLCBxdWVyeSkudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5vYmplY3RJZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbW92ZUhvb2tzKHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZGVzdHJveShEZWZhdWx0SG9va3NDb2xsZWN0aW9uTmFtZSwgcXVlcnkpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH1cblxuICBzYXZlSG9vayhob29rKSB7XG4gICAgdmFyIHF1ZXJ5O1xuICAgIGlmIChob29rLmZ1bmN0aW9uTmFtZSAmJiBob29rLnVybCkge1xuICAgICAgcXVlcnkgPSB7IGZ1bmN0aW9uTmFtZTogaG9vay5mdW5jdGlvbk5hbWUgfVxuICAgIH0gZWxzZSBpZiAoaG9vay50cmlnZ2VyTmFtZSAmJiBob29rLmNsYXNzTmFtZSAmJiBob29rLnVybCkge1xuICAgICAgcXVlcnkgPSB7IGNsYXNzTmFtZTogaG9vay5jbGFzc05hbWUsIHRyaWdnZXJOYW1lOiBob29rLnRyaWdnZXJOYW1lIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDE0MywgXCJpbnZhbGlkIGhvb2sgZGVjbGFyYXRpb25cIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLnVwZGF0ZShEZWZhdWx0SG9va3NDb2xsZWN0aW9uTmFtZSwgcXVlcnksIGhvb2ssIHt1cHNlcnQ6IHRydWV9KS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaG9vayk7XG4gICAgfSlcbiAgfVxuXG4gIGFkZEhvb2tUb1RyaWdnZXJzKGhvb2spIHtcbiAgICB2YXIgd3JhcHBlZEZ1bmN0aW9uID0gd3JhcFRvSFRUUFJlcXVlc3QoaG9vaywgdGhpcy5fd2ViaG9va0tleSk7XG4gICAgd3JhcHBlZEZ1bmN0aW9uLnVybCA9IGhvb2sudXJsO1xuICAgIGlmIChob29rLmNsYXNzTmFtZSkge1xuICAgICAgdHJpZ2dlcnMuYWRkVHJpZ2dlcihob29rLnRyaWdnZXJOYW1lLCBob29rLmNsYXNzTmFtZSwgd3JhcHBlZEZ1bmN0aW9uLCB0aGlzLl9hcHBsaWNhdGlvbklkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmlnZ2Vycy5hZGRGdW5jdGlvbihob29rLmZ1bmN0aW9uTmFtZSwgd3JhcHBlZEZ1bmN0aW9uLCBudWxsLCB0aGlzLl9hcHBsaWNhdGlvbklkKTtcbiAgICB9XG4gIH1cblxuICBhZGRIb29rKGhvb2spIHtcbiAgICB0aGlzLmFkZEhvb2tUb1RyaWdnZXJzKGhvb2spO1xuICAgIHJldHVybiB0aGlzLnNhdmVIb29rKGhvb2spO1xuICB9XG5cbiAgY3JlYXRlT3JVcGRhdGVIb29rKGFIb29rKSB7XG4gICAgdmFyIGhvb2s7XG4gICAgaWYgKGFIb29rICYmIGFIb29rLmZ1bmN0aW9uTmFtZSAmJiBhSG9vay51cmwpIHtcbiAgICAgIGhvb2sgPSB7fTtcbiAgICAgIGhvb2suZnVuY3Rpb25OYW1lID0gYUhvb2suZnVuY3Rpb25OYW1lO1xuICAgICAgaG9vay51cmwgPSBhSG9vay51cmw7XG4gICAgfSBlbHNlIGlmIChhSG9vayAmJiBhSG9vay5jbGFzc05hbWUgJiYgYUhvb2sudXJsICYmIGFIb29rLnRyaWdnZXJOYW1lICYmIHRyaWdnZXJzLlR5cGVzW2FIb29rLnRyaWdnZXJOYW1lXSkge1xuICAgICAgaG9vayA9IHt9O1xuICAgICAgaG9vay5jbGFzc05hbWUgPSBhSG9vay5jbGFzc05hbWU7XG4gICAgICBob29rLnVybCA9IGFIb29rLnVybDtcbiAgICAgIGhvb2sudHJpZ2dlck5hbWUgPSBhSG9vay50cmlnZ2VyTmFtZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBcImludmFsaWQgaG9vayBkZWNsYXJhdGlvblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRIb29rKGhvb2spO1xuICB9XG5cbiAgY3JlYXRlSG9vayhhSG9vaykge1xuICAgIGlmIChhSG9vay5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZ1bmN0aW9uKGFIb29rLmZ1bmN0aW9uTmFtZSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBgZnVuY3Rpb24gbmFtZTogJHthSG9vay5mdW5jdGlvbk5hbWV9IGFscmVhZHkgZXhpdHNgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPclVwZGF0ZUhvb2soYUhvb2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFIb29rLmNsYXNzTmFtZSAmJiBhSG9vay50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJpZ2dlcihhSG9vay5jbGFzc05hbWUsIGFIb29rLnRyaWdnZXJOYW1lKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsIGBjbGFzcyAke2FIb29rLmNsYXNzTmFtZX0gYWxyZWFkeSBoYXMgdHJpZ2dlciAke2FIb29rLnRyaWdnZXJOYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yVXBkYXRlSG9vayhhSG9vayk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBcImludmFsaWQgaG9vayBkZWNsYXJhdGlvblwiKTtcbiAgfVxuXG4gIHVwZGF0ZUhvb2soYUhvb2spIHtcbiAgICBpZiAoYUhvb2suZnVuY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGdW5jdGlvbihhSG9vay5mdW5jdGlvbk5hbWUpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JVcGRhdGVIb29rKGFIb29rKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBgbm8gZnVuY3Rpb24gbmFtZWQ6ICR7YUhvb2suZnVuY3Rpb25OYW1lfSBpcyBkZWZpbmVkYCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFIb29rLmNsYXNzTmFtZSAmJiBhSG9vay50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJpZ2dlcihhSG9vay5jbGFzc05hbWUsIGFIb29rLnRyaWdnZXJOYW1lKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9yVXBkYXRlSG9vayhhSG9vayk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDE0MywgYGNsYXNzICR7YUhvb2suY2xhc3NOYW1lfSBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsIFwiaW52YWxpZCBob29rIGRlY2xhcmF0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBUb0hUVFBSZXF1ZXN0KGhvb2ssIGtleSkge1xuICByZXR1cm4gKHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3QganNvbkJvZHkgPSB7fTtcbiAgICBmb3IgKHZhciBpIGluIHJlcSkge1xuICAgICAganNvbkJvZHlbaV0gPSByZXFbaV07XG4gICAgfVxuICAgIGlmIChyZXEub2JqZWN0KSB7XG4gICAgICBqc29uQm9keS5vYmplY3QgPSByZXEub2JqZWN0LnRvSlNPTigpO1xuICAgICAganNvbkJvZHkub2JqZWN0LmNsYXNzTmFtZSA9IHJlcS5vYmplY3QuY2xhc3NOYW1lO1xuICAgIH1cbiAgICBpZiAocmVxLm9yaWdpbmFsKSB7XG4gICAgICBqc29uQm9keS5vcmlnaW5hbCA9IHJlcS5vcmlnaW5hbC50b0pTT04oKTtcbiAgICAgIGpzb25Cb2R5Lm9yaWdpbmFsLmNsYXNzTmFtZSA9IHJlcS5vcmlnaW5hbC5jbGFzc05hbWU7XG4gICAgfVxuICAgIGNvbnN0IGpzb25SZXF1ZXN0OiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uQm9keSksXG4gICAgfTtcblxuICAgIGNvbnN0IGFnZW50ID0gaG9vay51cmwuc3RhcnRzV2l0aCgnaHR0cHMnKSA/IEhUVFBBZ2VudHNbJ2h0dHBzJ10gOiBIVFRQQWdlbnRzWydodHRwJ107XG4gICAganNvblJlcXVlc3QuYWdlbnQgPSBhZ2VudDtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGpzb25SZXF1ZXN0LmhlYWRlcnNbJ1gtUGFyc2UtV2ViaG9vay1LZXknXSA9IGtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLndhcm4oJ01ha2luZyBvdXRnb2luZyB3ZWJob29rIHJlcXVlc3Qgd2l0aG91dCB3ZWJob29rS2V5IGJlaW5nIHNldCEnKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0LnBvc3QoaG9vay51cmwsIGpzb25SZXF1ZXN0LCBmdW5jdGlvbiAoZXJyLCBodHRwUmVzcG9uc2UsIGJvZHkpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAoYm9keSkge1xuICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyID0ge1xuICAgICAgICAgICAgICBlcnJvcjogXCJNYWxmb3JtZWQgcmVzcG9uc2VcIixcbiAgICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICAgIHBhcnRpYWxSZXNwb25zZTogYm9keS5zdWJzdHJpbmcoMCwgMTAwKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXN1bHQgPSBib2R5LnN1Y2Nlc3M7XG4gICAgICAgICAgZXJyID0gYm9keS5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZXMuZXJyb3IoZXJyKTtcbiAgICAgIH0gZWxzZSBpZiAoaG9vay50cmlnZ2VyTmFtZSA9PT0gJ2JlZm9yZVNhdmUnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHQuY3JlYXRlZEF0O1xuICAgICAgICAgIGRlbGV0ZSByZXN1bHQudXBkYXRlZEF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuc3VjY2Vzcyh7b2JqZWN0OiByZXN1bHR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXMuc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tzQ29udHJvbGxlcjtcbiJdfQ==
|
|
253
|
+
var _default = exports.default = HooksController;
|
|
254
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0cmlnZ2VycyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIlBhcnNlIiwiX3JlcXVlc3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZ2dlciIsIl9odHRwIiwiX2h0dHBzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiRGVmYXVsdEhvb2tzQ29sbGVjdGlvbk5hbWUiLCJIVFRQQWdlbnRzIiwiaHR0cCIsIkFnZW50Iiwia2VlcEFsaXZlIiwiaHR0cHMiLCJIb29rc0NvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcGxpY2F0aW9uSWQiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJ3ZWJob29rS2V5IiwiX2FwcGxpY2F0aW9uSWQiLCJfd2ViaG9va0tleSIsImRhdGFiYXNlIiwibG9hZCIsIl9nZXRIb29rcyIsInRoZW4iLCJob29rcyIsImZvckVhY2giLCJob29rIiwiYWRkSG9va1RvVHJpZ2dlcnMiLCJnZXRGdW5jdGlvbiIsImZ1bmN0aW9uTmFtZSIsInJlc3VsdHMiLCJnZXRGdW5jdGlvbnMiLCIkZXhpc3RzIiwiZ2V0VHJpZ2dlciIsImNsYXNzTmFtZSIsInRyaWdnZXJOYW1lIiwiZ2V0VHJpZ2dlcnMiLCJkZWxldGVGdW5jdGlvbiIsInJlbW92ZUZ1bmN0aW9uIiwiX3JlbW92ZUhvb2tzIiwiZGVsZXRlVHJpZ2dlciIsInJlbW92ZVRyaWdnZXIiLCJxdWVyeSIsImZpbmQiLCJtYXAiLCJyZXN1bHQiLCJvYmplY3RJZCIsImRlc3Ryb3kiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNhdmVIb29rIiwidXJsIiwiRXJyb3IiLCJ1cGRhdGUiLCJ1cHNlcnQiLCJ3cmFwcGVkRnVuY3Rpb24iLCJ3cmFwVG9IVFRQUmVxdWVzdCIsImFkZFRyaWdnZXIiLCJhZGRGdW5jdGlvbiIsImFkZEhvb2siLCJjcmVhdGVPclVwZGF0ZUhvb2siLCJhSG9vayIsIlR5cGVzIiwiY3JlYXRlSG9vayIsInVwZGF0ZUhvb2siLCJleHBvcnRzIiwia2V5IiwicmVxIiwianNvbkJvZHkiLCJvYmplY3QiLCJ0b0pTT04iLCJvcmlnaW5hbCIsImpzb25SZXF1ZXN0IiwiaGVhZGVycyIsImJvZHkiLCJtZXRob2QiLCJhZ2VudCIsInN0YXJ0c1dpdGgiLCJsb2dnZXIiLCJ3YXJuIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiZXJyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwiY29kZSIsInBhcnRpYWxSZXNwb25zZSIsInN1YnN0cmluZyIsInN1Y2Nlc3MiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9Ib29rc0NvbnRyb2xsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBmbG93IHdlYWsgKi9cblxuaW1wb3J0ICogYXMgdHJpZ2dlcnMgZnJvbSAnLi4vdHJpZ2dlcnMnO1xuLy8gQGZsb3ctZGlzYWJsZS1uZXh0XG5pbXBvcnQgKiBhcyBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG5jb25zdCBEZWZhdWx0SG9va3NDb2xsZWN0aW9uTmFtZSA9ICdfSG9va3MnO1xuY29uc3QgSFRUUEFnZW50cyA9IHtcbiAgaHR0cDogbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG4gIGh0dHBzOiBuZXcgaHR0cHMuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUgfSksXG59O1xuXG5leHBvcnQgY2xhc3MgSG9va3NDb250cm9sbGVyIHtcbiAgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgX3dlYmhvb2tLZXk6IHN0cmluZztcbiAgZGF0YWJhc2U6IGFueTtcblxuICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbklkOiBzdHJpbmcsIGRhdGFiYXNlQ29udHJvbGxlciwgd2ViaG9va0tleSkge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuICAgIHRoaXMuX3dlYmhvb2tLZXkgPSB3ZWJob29rS2V5O1xuICAgIHRoaXMuZGF0YWJhc2UgPSBkYXRhYmFzZUNvbnRyb2xsZXI7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRIb29rcygpLnRoZW4oaG9va3MgPT4ge1xuICAgICAgaG9va3MgPSBob29rcyB8fCBbXTtcbiAgICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB7XG4gICAgICAgIHRoaXMuYWRkSG9va1RvVHJpZ2dlcnMoaG9vayk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9nZXRIb29rcyh7IGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH0pLnRoZW4ocmVzdWx0cyA9PiByZXN1bHRzWzBdKTtcbiAgfVxuXG4gIGdldEZ1bmN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SG9va3MoeyBmdW5jdGlvbk5hbWU6IHsgJGV4aXN0czogdHJ1ZSB9IH0pO1xuICB9XG5cbiAgZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEhvb2tzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lLFxuICAgIH0pLnRoZW4ocmVzdWx0cyA9PiByZXN1bHRzWzBdKTtcbiAgfVxuXG4gIGdldFRyaWdnZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRIb29rcyh7XG4gICAgICBjbGFzc05hbWU6IHsgJGV4aXN0czogdHJ1ZSB9LFxuICAgICAgdHJpZ2dlck5hbWU6IHsgJGV4aXN0czogdHJ1ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRnVuY3Rpb24oZnVuY3Rpb25OYW1lKSB7XG4gICAgdHJpZ2dlcnMucmVtb3ZlRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCB0aGlzLl9hcHBsaWNhdGlvbklkKTtcbiAgICByZXR1cm4gdGhpcy5fcmVtb3ZlSG9va3MoeyBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSB9KTtcbiAgfVxuXG4gIGRlbGV0ZVRyaWdnZXIoY2xhc3NOYW1lLCB0cmlnZ2VyTmFtZSkge1xuICAgIHRyaWdnZXJzLnJlbW92ZVRyaWdnZXIodHJpZ2dlck5hbWUsIGNsYXNzTmFtZSwgdGhpcy5fYXBwbGljYXRpb25JZCk7XG4gICAgcmV0dXJuIHRoaXMuX3JlbW92ZUhvb2tzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgX2dldEhvb2tzKHF1ZXJ5ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5maW5kKERlZmF1bHRIb29rc0NvbGxlY3Rpb25OYW1lLCBxdWVyeSkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHJldHVybiByZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICBkZWxldGUgcmVzdWx0Lm9iamVjdElkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfcmVtb3ZlSG9va3MocXVlcnkpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5kZXN0cm95KERlZmF1bHRIb29rc0NvbGxlY3Rpb25OYW1lLCBxdWVyeSkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVIb29rKGhvb2spIHtcbiAgICB2YXIgcXVlcnk7XG4gICAgaWYgKGhvb2suZnVuY3Rpb25OYW1lICYmIGhvb2sudXJsKSB7XG4gICAgICBxdWVyeSA9IHsgZnVuY3Rpb25OYW1lOiBob29rLmZ1bmN0aW9uTmFtZSB9O1xuICAgIH0gZWxzZSBpZiAoaG9vay50cmlnZ2VyTmFtZSAmJiBob29rLmNsYXNzTmFtZSAmJiBob29rLnVybCkge1xuICAgICAgcXVlcnkgPSB7IGNsYXNzTmFtZTogaG9vay5jbGFzc05hbWUsIHRyaWdnZXJOYW1lOiBob29rLnRyaWdnZXJOYW1lIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsICdpbnZhbGlkIGhvb2sgZGVjbGFyYXRpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VcbiAgICAgIC51cGRhdGUoRGVmYXVsdEhvb2tzQ29sbGVjdGlvbk5hbWUsIHF1ZXJ5LCBob29rLCB7IHVwc2VydDogdHJ1ZSB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGhvb2spO1xuICAgICAgfSk7XG4gIH1cblxuICBhZGRIb29rVG9UcmlnZ2Vycyhob29rKSB7XG4gICAgdmFyIHdyYXBwZWRGdW5jdGlvbiA9IHdyYXBUb0hUVFBSZXF1ZXN0KGhvb2ssIHRoaXMuX3dlYmhvb2tLZXkpO1xuICAgIHdyYXBwZWRGdW5jdGlvbi51cmwgPSBob29rLnVybDtcbiAgICBpZiAoaG9vay5jbGFzc05hbWUpIHtcbiAgICAgIHRyaWdnZXJzLmFkZFRyaWdnZXIoaG9vay50cmlnZ2VyTmFtZSwgaG9vay5jbGFzc05hbWUsIHdyYXBwZWRGdW5jdGlvbiwgdGhpcy5fYXBwbGljYXRpb25JZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaWdnZXJzLmFkZEZ1bmN0aW9uKGhvb2suZnVuY3Rpb25OYW1lLCB3cmFwcGVkRnVuY3Rpb24sIG51bGwsIHRoaXMuX2FwcGxpY2F0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEhvb2soaG9vaykge1xuICAgIHRoaXMuYWRkSG9va1RvVHJpZ2dlcnMoaG9vayk7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZUhvb2soaG9vayk7XG4gIH1cblxuICBjcmVhdGVPclVwZGF0ZUhvb2soYUhvb2spIHtcbiAgICB2YXIgaG9vaztcbiAgICBpZiAoYUhvb2sgJiYgYUhvb2suZnVuY3Rpb25OYW1lICYmIGFIb29rLnVybCkge1xuICAgICAgaG9vayA9IHt9O1xuICAgICAgaG9vay5mdW5jdGlvbk5hbWUgPSBhSG9vay5mdW5jdGlvbk5hbWU7XG4gICAgICBob29rLnVybCA9IGFIb29rLnVybDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYUhvb2sgJiZcbiAgICAgIGFIb29rLmNsYXNzTmFtZSAmJlxuICAgICAgYUhvb2sudXJsICYmXG4gICAgICBhSG9vay50cmlnZ2VyTmFtZSAmJlxuICAgICAgdHJpZ2dlcnMuVHlwZXNbYUhvb2sudHJpZ2dlck5hbWVdXG4gICAgKSB7XG4gICAgICBob29rID0ge307XG4gICAgICBob29rLmNsYXNzTmFtZSA9IGFIb29rLmNsYXNzTmFtZTtcbiAgICAgIGhvb2sudXJsID0gYUhvb2sudXJsO1xuICAgICAgaG9vay50cmlnZ2VyTmFtZSA9IGFIb29rLnRyaWdnZXJOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCAnaW52YWxpZCBob29rIGRlY2xhcmF0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkSG9vayhob29rKTtcbiAgfVxuXG4gIGNyZWF0ZUhvb2soYUhvb2spIHtcbiAgICBpZiAoYUhvb2suZnVuY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGdW5jdGlvbihhSG9vay5mdW5jdGlvbk5hbWUpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsIGBmdW5jdGlvbiBuYW1lOiAke2FIb29rLmZ1bmN0aW9uTmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPclVwZGF0ZUhvb2soYUhvb2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFIb29rLmNsYXNzTmFtZSAmJiBhSG9vay50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJpZ2dlcihhSG9vay5jbGFzc05hbWUsIGFIb29rLnRyaWdnZXJOYW1lKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAxNDMsXG4gICAgICAgICAgICBgY2xhc3MgJHthSG9vay5jbGFzc05hbWV9IGFscmVhZHkgaGFzIHRyaWdnZXIgJHthSG9vay50cmlnZ2VyTmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPclVwZGF0ZUhvb2soYUhvb2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDE0MywgJ2ludmFsaWQgaG9vayBkZWNsYXJhdGlvbicpO1xuICB9XG5cbiAgdXBkYXRlSG9vayhhSG9vaykge1xuICAgIGlmIChhSG9vay5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZ1bmN0aW9uKGFIb29rLmZ1bmN0aW9uTmFtZSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JVcGRhdGVIb29rKGFIb29rKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCBgbm8gZnVuY3Rpb24gbmFtZWQ6ICR7YUhvb2suZnVuY3Rpb25OYW1lfSBpcyBkZWZpbmVkYCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFIb29rLmNsYXNzTmFtZSAmJiBhSG9vay50cmlnZ2VyTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJpZ2dlcihhSG9vay5jbGFzc05hbWUsIGFIb29rLnRyaWdnZXJOYW1lKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVPclVwZGF0ZUhvb2soYUhvb2spO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcigxNDMsIGBjbGFzcyAke2FIb29rLmNsYXNzTmFtZX0gZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoMTQzLCAnaW52YWxpZCBob29rIGRlY2xhcmF0aW9uJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcFRvSFRUUFJlcXVlc3QoaG9vaywga2V5KSB7XG4gIHJldHVybiByZXEgPT4ge1xuICAgIGNvbnN0IGpzb25Cb2R5ID0ge307XG4gICAgZm9yICh2YXIgaSBpbiByZXEpIHtcbiAgICAgIC8vIFBhcnNlIFNlcnZlciBjb25maWcgaXMgbm90IHNlcmlhbGl6YWJsZVxuICAgICAgaWYgKGkgPT09ICdjb25maWcnKSB7IGNvbnRpbnVlOyB9XG4gICAgICBqc29uQm9keVtpXSA9IHJlcVtpXTtcbiAgICB9XG4gICAgaWYgKHJlcS5vYmplY3QpIHtcbiAgICAgIGpzb25Cb2R5Lm9iamVjdCA9IHJlcS5vYmplY3QudG9KU09OKCk7XG4gICAgICBqc29uQm9keS5vYmplY3QuY2xhc3NOYW1lID0gcmVxLm9iamVjdC5jbGFzc05hbWU7XG4gICAgfVxuICAgIGlmIChyZXEub3JpZ2luYWwpIHtcbiAgICAgIGpzb25Cb2R5Lm9yaWdpbmFsID0gcmVxLm9yaWdpbmFsLnRvSlNPTigpO1xuICAgICAganNvbkJvZHkub3JpZ2luYWwuY2xhc3NOYW1lID0gcmVxLm9yaWdpbmFsLmNsYXNzTmFtZTtcbiAgICB9XG4gICAgY29uc3QganNvblJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIHVybDogaG9vay51cmwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keToganNvbkJvZHksXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9O1xuXG4gICAgY29uc3QgYWdlbnQgPSBob29rLnVybC5zdGFydHNXaXRoKCdodHRwcycpID8gSFRUUEFnZW50c1snaHR0cHMnXSA6IEhUVFBBZ2VudHNbJ2h0dHAnXTtcbiAgICBqc29uUmVxdWVzdC5hZ2VudCA9IGFnZW50O1xuXG4gICAgaWYgKGtleSkge1xuICAgICAganNvblJlcXVlc3QuaGVhZGVyc1snWC1QYXJzZS1XZWJob29rLUtleSddID0ga2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIud2FybignTWFraW5nIG91dGdvaW5nIHdlYmhvb2sgcmVxdWVzdCB3aXRob3V0IHdlYmhvb2tLZXkgYmVpbmcgc2V0IScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdChqc29uUmVxdWVzdCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBsZXQgZXJyO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGxldCBib2R5ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGlmIChib2R5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBlcnIgPSB7XG4gICAgICAgICAgICAgIGVycm9yOiAnTWFsZm9ybWVkIHJlc3BvbnNlJyxcbiAgICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICAgIHBhcnRpYWxSZXNwb25zZTogYm9keS5zdWJzdHJpbmcoMCwgMTAwKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYm9keS5zdWNjZXNzO1xuICAgICAgICAgIGVyciA9IGJvZHkuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSBlbHNlIGlmIChob29rLnRyaWdnZXJOYW1lID09PSAnYmVmb3JlU2F2ZScpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdC5jcmVhdGVkQXQ7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdC51cGRhdGVkQXQ7XG4gICAgICAgICAgZGVsZXRlIHJlc3VsdC5jbGFzc05hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgb2JqZWN0OiByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhvb2tzQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBQUEsUUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsS0FBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsUUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sTUFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQTBCLFNBQUFHLHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxF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
|