parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21
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/README.md +45 -17
- package/lib/AccountLockout.js +11 -26
- package/lib/Adapters/AdapterLoader.js +8 -14
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
- package/lib/Adapters/Auth/AuthAdapter.js +7 -16
- package/lib/Adapters/Auth/OAuth1Client.js +32 -57
- package/lib/Adapters/Auth/apple.js +6 -22
- package/lib/Adapters/Auth/facebook.js +7 -37
- package/lib/Adapters/Auth/gcenter.js +8 -37
- package/lib/Adapters/Auth/github.js +7 -10
- package/lib/Adapters/Auth/google.js +11 -34
- package/lib/Adapters/Auth/gpgames.js +5 -8
- package/lib/Adapters/Auth/httpsRequest.js +1 -7
- package/lib/Adapters/Auth/index.js +20 -65
- package/lib/Adapters/Auth/instagram.js +5 -9
- package/lib/Adapters/Auth/janraincapture.js +8 -12
- package/lib/Adapters/Auth/janrainengage.js +7 -11
- package/lib/Adapters/Auth/keycloak.js +5 -19
- package/lib/Adapters/Auth/ldap.js +1 -15
- package/lib/Adapters/Auth/line.js +7 -10
- package/lib/Adapters/Auth/linkedin.js +7 -12
- package/lib/Adapters/Auth/meetup.js +7 -10
- package/lib/Adapters/Auth/microsoft.js +7 -10
- package/lib/Adapters/Auth/oauth2.js +6 -18
- package/lib/Adapters/Auth/phantauth.js +8 -10
- package/lib/Adapters/Auth/qq.js +7 -13
- package/lib/Adapters/Auth/spotify.js +7 -14
- package/lib/Adapters/Auth/twitter.js +5 -15
- package/lib/Adapters/Auth/vkontakte.js +9 -15
- package/lib/Adapters/Auth/wechat.js +7 -10
- package/lib/Adapters/Auth/weibo.js +7 -11
- package/lib/Adapters/Cache/CacheAdapter.js +4 -12
- package/lib/Adapters/Cache/InMemoryCache.js +5 -19
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
- package/lib/Adapters/Cache/LRUCache.js +1 -11
- package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
- package/lib/Adapters/Cache/SchemaCache.js +1 -6
- package/lib/Adapters/Email/MailAdapter.js +2 -7
- package/lib/Adapters/Files/FilesAdapter.js +7 -21
- package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
- package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
- package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
- package/lib/Adapters/Logger/WinstonLogger.js +3 -30
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
- package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
- package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
- package/lib/Adapters/Push/PushAdapter.js +2 -8
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
- package/lib/Auth.js +54 -121
- package/lib/ClientSDK.js +3 -11
- package/lib/Config.js +69 -113
- package/lib/Controllers/AdaptableController.js +6 -18
- package/lib/Controllers/AnalyticsController.js +1 -9
- package/lib/Controllers/CacheController.js +3 -23
- package/lib/Controllers/DatabaseController.js +147 -345
- package/lib/Controllers/FilesController.js +5 -34
- package/lib/Controllers/HooksController.js +1 -51
- package/lib/Controllers/LiveQueryController.js +4 -23
- package/lib/Controllers/LoggerController.js +15 -54
- package/lib/Controllers/ParseGraphQLController.js +49 -104
- package/lib/Controllers/PushController.js +20 -59
- package/lib/Controllers/SchemaController.js +154 -344
- package/lib/Controllers/UserController.js +11 -72
- package/lib/Controllers/index.js +19 -68
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +1 -8
- package/lib/Deprecator/Deprecator.js +9 -18
- package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
- package/lib/GraphQL/ParseGraphQLServer.js +2 -29
- package/lib/GraphQL/helpers/objectsMutations.js +2 -12
- package/lib/GraphQL/helpers/objectsQueries.js +18 -76
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
- package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
- package/lib/GraphQL/loaders/filesMutations.js +2 -19
- package/lib/GraphQL/loaders/functionsMutations.js +6 -17
- package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
- package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
- package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
- package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
- package/lib/GraphQL/loaders/schemaMutations.js +1 -20
- package/lib/GraphQL/loaders/schemaQueries.js +1 -14
- package/lib/GraphQL/loaders/schemaTypes.js +2 -6
- package/lib/GraphQL/loaders/usersMutations.js +6 -28
- package/lib/GraphQL/loaders/usersQueries.js +4 -26
- package/lib/GraphQL/parseGraphQLUtils.js +6 -19
- package/lib/GraphQL/transformers/className.js +1 -4
- package/lib/GraphQL/transformers/constraintType.js +1 -20
- package/lib/GraphQL/transformers/inputType.js +1 -20
- package/lib/GraphQL/transformers/mutation.js +6 -51
- package/lib/GraphQL/transformers/outputType.js +1 -20
- package/lib/GraphQL/transformers/query.js +6 -42
- package/lib/GraphQL/transformers/schemaFields.js +7 -34
- package/lib/KeyPromiseQueue.js +1 -12
- package/lib/LiveQuery/Client.js +1 -25
- package/lib/LiveQuery/Id.js +1 -7
- package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
- package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
- package/lib/LiveQuery/ParsePubSub.js +1 -12
- package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
- package/lib/LiveQuery/QueryTools.js +14 -116
- package/lib/LiveQuery/RequestSchema.js +1 -1
- package/lib/LiveQuery/SessionTokenCache.js +1 -17
- package/lib/LiveQuery/Subscription.js +4 -18
- package/lib/LiveQuery/equalObjects.js +2 -14
- package/lib/Options/Definitions.js +79 -10
- package/lib/Options/docs.js +23 -3
- package/lib/Options/index.js +4 -12
- package/lib/Options/parsers.js +1 -18
- package/lib/Page.js +1 -9
- package/lib/ParseMessageQueue.js +1 -10
- package/lib/ParseServer.js +144 -182
- package/lib/ParseServerRESTController.js +6 -33
- package/lib/PromiseRouter.js +16 -50
- package/lib/Push/PushQueue.js +3 -15
- package/lib/Push/PushWorker.js +7 -32
- package/lib/Push/utils.js +9 -38
- package/lib/RestQuery.js +105 -242
- package/lib/RestWrite.js +212 -377
- package/lib/Routers/AggregateRouter.js +14 -51
- package/lib/Routers/AnalyticsRouter.js +2 -8
- package/lib/Routers/AudiencesRouter.js +1 -15
- package/lib/Routers/ClassesRouter.js +3 -53
- package/lib/Routers/CloudCodeRouter.js +1 -19
- package/lib/Routers/FeaturesRouter.js +1 -10
- package/lib/Routers/FilesRouter.js +29 -76
- package/lib/Routers/FunctionsRouter.js +5 -28
- package/lib/Routers/GlobalConfigRouter.js +4 -18
- package/lib/Routers/GraphQLRouter.js +1 -14
- package/lib/Routers/HooksRouter.js +1 -29
- package/lib/Routers/IAPValidationRouter.js +6 -29
- package/lib/Routers/InstallationsRouter.js +2 -12
- package/lib/Routers/LogsRouter.js +4 -16
- package/lib/Routers/PagesRouter.js +69 -129
- package/lib/Routers/PublicAPIRouter.js +3 -62
- package/lib/Routers/PurgeRouter.js +1 -15
- package/lib/Routers/PushRouter.js +2 -18
- package/lib/Routers/RolesRouter.js +1 -7
- package/lib/Routers/SchemasRouter.js +4 -34
- package/lib/Routers/SecurityRouter.js +1 -12
- package/lib/Routers/SessionsRouter.js +3 -19
- package/lib/Routers/UsersRouter.js +58 -155
- package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
- package/lib/SchemaMigrations/Migrations.js +2 -8
- package/lib/Security/Check.js +8 -16
- package/lib/Security/CheckGroup.js +4 -11
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
- package/lib/Security/CheckGroups/CheckGroups.js +1 -4
- package/lib/Security/CheckRunner.js +22 -41
- package/lib/StatusHandler.js +12 -69
- package/lib/TestUtils.js +1 -6
- package/lib/Utils.js +27 -66
- package/lib/batch.js +17 -28
- package/lib/cache.js +1 -3
- package/lib/cli/definitions/parse-live-query-server.js +1 -3
- package/lib/cli/definitions/parse-server.js +1 -3
- package/lib/cli/parse-live-query-server.js +1 -6
- package/lib/cli/parse-server.js +11 -21
- package/lib/cli/utils/commander.js +13 -51
- package/lib/cli/utils/runner.js +1 -14
- package/lib/cloud-code/Parse.Cloud.js +71 -92
- package/lib/cryptoUtils.js +11 -19
- package/lib/defaults.js +2 -14
- package/lib/deprecated.js +1 -2
- package/lib/index.js +16 -34
- package/lib/logger.js +6 -13
- package/lib/middlewares.js +147 -151
- package/lib/password.js +6 -10
- package/lib/request.js +173 -2
- package/lib/requiredParameter.js +1 -3
- package/lib/rest.js +19 -41
- package/lib/triggers.js +54 -252
- package/lib/vendor/mongodbUrl.js +125 -305
- package/package.json +22 -19
- package/lib/cloud-code/HTTPResponse.js +0 -73
- package/lib/cloud-code/httpRequest.js +0 -192
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.AdaptableController = void 0;
|
|
7
|
-
|
|
8
7
|
/*
|
|
9
8
|
AdaptableController.js
|
|
10
9
|
|
|
@@ -14,67 +13,56 @@ The super class takes care of creating the right instance for the adapter
|
|
|
14
13
|
based on the parameters passed
|
|
15
14
|
|
|
16
15
|
*/
|
|
16
|
+
|
|
17
17
|
// _adapter is private, use Symbol
|
|
18
18
|
var _adapter = Symbol();
|
|
19
|
-
|
|
20
19
|
class AdaptableController {
|
|
21
20
|
constructor(adapter, appId, options) {
|
|
22
21
|
this.options = options;
|
|
23
22
|
this.appId = appId;
|
|
24
23
|
this.adapter = adapter;
|
|
25
24
|
}
|
|
26
|
-
|
|
27
25
|
set adapter(adapter) {
|
|
28
26
|
this.validateAdapter(adapter);
|
|
29
27
|
this[_adapter] = adapter;
|
|
30
28
|
}
|
|
31
|
-
|
|
32
29
|
get adapter() {
|
|
33
30
|
return this[_adapter];
|
|
34
31
|
}
|
|
35
|
-
|
|
36
32
|
expectedAdapterType() {
|
|
37
33
|
throw new Error('Subclasses should implement expectedAdapterType()');
|
|
38
34
|
}
|
|
39
|
-
|
|
40
35
|
validateAdapter(adapter) {
|
|
41
36
|
AdaptableController.validateAdapter(adapter, this);
|
|
42
37
|
}
|
|
43
|
-
|
|
44
38
|
static validateAdapter(adapter, self, ExpectedType) {
|
|
45
39
|
if (!adapter) {
|
|
46
40
|
throw new Error(this.constructor.name + ' requires an adapter');
|
|
47
41
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
const Type = ExpectedType || self.expectedAdapterType();
|
|
43
|
+
// Allow skipping for testing
|
|
51
44
|
if (!Type) {
|
|
52
45
|
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
46
|
+
}
|
|
55
47
|
|
|
48
|
+
// Makes sure the prototype matches
|
|
56
49
|
const mismatches = Object.getOwnPropertyNames(Type.prototype).reduce((obj, key) => {
|
|
57
50
|
const adapterType = typeof adapter[key];
|
|
58
51
|
const expectedType = typeof Type.prototype[key];
|
|
59
|
-
|
|
60
52
|
if (adapterType !== expectedType) {
|
|
61
53
|
obj[key] = {
|
|
62
54
|
expected: expectedType,
|
|
63
55
|
actual: adapterType
|
|
64
56
|
};
|
|
65
57
|
}
|
|
66
|
-
|
|
67
58
|
return obj;
|
|
68
59
|
}, {});
|
|
69
|
-
|
|
70
60
|
if (Object.keys(mismatches).length > 0) {
|
|
71
61
|
throw new Error("Adapter prototype don't match expected prototype", adapter, mismatches);
|
|
72
62
|
}
|
|
73
63
|
}
|
|
74
|
-
|
|
75
64
|
}
|
|
76
|
-
|
|
77
65
|
exports.AdaptableController = AdaptableController;
|
|
78
66
|
var _default = AdaptableController;
|
|
79
67
|
exports.default = _default;
|
|
80
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWRhcHRlciIsIlN5bWJvbCIsIkFkYXB0YWJsZUNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFkYXB0ZXIiLCJhcHBJZCIsIm9wdGlvbnMiLCJ2YWxpZGF0ZUFkYXB0ZXIiLCJleHBlY3RlZEFkYXB0ZXJUeXBlIiwiRXJyb3IiLCJzZWxmIiwiRXhwZWN0ZWRUeXBlIiwibmFtZSIsIlR5cGUiLCJtaXNtYXRjaGVzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsInJlZHVjZSIsIm9iaiIsImtleSIsImFkYXB0ZXJUeXBlIiwiZXhwZWN0ZWRUeXBlIiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJrZXlzIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL0FkYXB0YWJsZUNvbnRyb2xsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkFkYXB0YWJsZUNvbnRyb2xsZXIuanNcblxuQWRhcHRhYmxlQ29udHJvbGxlciBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGNvbnRyb2xsZXJzXG50aGF0IHN1cHBvcnQgYWRhcHRlcixcblRoZSBzdXBlciBjbGFzcyB0YWtlcyBjYXJlIG9mIGNyZWF0aW5nIHRoZSByaWdodCBpbnN0YW5jZSBmb3IgdGhlIGFkYXB0ZXJcbmJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZFxuXG4gKi9cblxuLy8gX2FkYXB0ZXIgaXMgcHJpdmF0ZSwgdXNlIFN5bWJvbFxudmFyIF9hZGFwdGVyID0gU3ltYm9sKCk7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuYXBwSWQgPSBhcHBJZDtcbiAgICB0aGlzLmFkYXB0ZXIgPSBhZGFwdGVyO1xuICB9XG5cbiAgc2V0IGFkYXB0ZXIoYWRhcHRlcikge1xuICAgIHRoaXMudmFsaWRhdGVBZGFwdGVyKGFkYXB0ZXIpO1xuICAgIHRoaXNbX2FkYXB0ZXJdID0gYWRhcHRlcjtcbiAgfVxuXG4gIGdldCBhZGFwdGVyKCkge1xuICAgIHJldHVybiB0aGlzW19hZGFwdGVyXTtcbiAgfVxuXG4gIGV4cGVjdGVkQWRhcHRlclR5cGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdWJjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpJyk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXB0ZXIoYWRhcHRlcikge1xuICAgIEFkYXB0YWJsZUNvbnRyb2xsZXIudmFsaWRhdGVBZGFwdGVyKGFkYXB0ZXIsIHRoaXMpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWRhcHRlcihhZGFwdGVyLCBzZWxmLCBFeHBlY3RlZFR5cGUpIHtcbiAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnIHJlcXVpcmVzIGFuIGFkYXB0ZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBUeXBlID0gRXhwZWN0ZWRUeXBlIHx8IHNlbGYuZXhwZWN0ZWRBZGFwdGVyVHlwZSgpO1xuICAgIC8vIEFsbG93IHNraXBwaW5nIGZvciB0ZXN0aW5nXG4gICAgaWYgKCFUeXBlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTWFrZXMgc3VyZSB0aGUgcHJvdG90eXBlIG1hdGNoZXNcbiAgICBjb25zdCBtaXNtYXRjaGVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVHlwZS5wcm90b3R5cGUpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGFkYXB0ZXJUeXBlID0gdHlwZW9mIGFkYXB0ZXJba2V5XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IHR5cGVvZiBUeXBlLnByb3RvdHlwZVtrZXldO1xuICAgICAgaWYgKGFkYXB0ZXJUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgb2JqW2tleV0gPSB7XG4gICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkVHlwZSxcbiAgICAgICAgICBhY3R1YWw6IGFkYXB0ZXJUeXBlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobWlzbWF0Y2hlcykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRhcHRlciBwcm90b3R5cGUgZG9uJ3QgbWF0Y2ggZXhwZWN0ZWQgcHJvdG90eXBlXCIsIGFkYXB0ZXIsIG1pc21hdGNoZXMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBZGFwdGFibGVDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE1BQU0sRUFBRTtBQUVoQixNQUFNQyxtQkFBbUIsQ0FBQztFQUMvQkMsV0FBVyxDQUFDQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ25DLElBQUksQ0FBQ0EsT0FBTyxHQUFHQSxPQUFPO0lBQ3RCLElBQUksQ0FBQ0QsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ0QsT0FBTyxHQUFHQSxPQUFPO0VBQ3hCO0VBRUEsSUFBSUEsT0FBTyxDQUFDQSxPQUFPLEVBQUU7SUFDbkIsSUFBSSxDQUFDRyxlQUFlLENBQUNILE9BQU8sQ0FBQztJQUM3QixJQUFJLENBQUNKLFFBQVEsQ0FBQyxHQUFHSSxPQUFPO0VBQzFCO0VBRUEsSUFBSUEsT0FBTyxHQUFHO0lBQ1osT0FBTyxJQUFJLENBQUNKLFFBQVEsQ0FBQztFQUN2QjtFQUVBUSxtQkFBbUIsR0FBRztJQUNwQixNQUFNLElBQUlDLEtBQUssQ0FBQyxtREFBbUQsQ0FBQztFQUN0RTtFQUVBRixlQUFlLENBQUNILE9BQU8sRUFBRTtJQUN2QkYsbUJBQW1CLENBQUNLLGVBQWUsQ0FBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQztFQUNwRDtFQUVBLE9BQU9HLGVBQWUsQ0FBQ0gsT0FBTyxFQUFFTSxJQUFJLEVBQUVDLFlBQVksRUFBRTtJQUNsRCxJQUFJLENBQUNQLE9BQU8sRUFBRTtNQUNaLE1BQU0sSUFBSUssS0FBSyxDQUFDLElBQUksQ0FBQ04sV0FBVyxDQUFDUyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDakU7SUFFQSxNQUFNQyxJQUFJLEdBQUdGLFlBQVksSUFBSUQsSUFBSSxDQUFDRixtQkFBbUIsRUFBRTtJQUN2RDtJQUNBLElBQUksQ0FBQ0ssSUFBSSxFQUFFO01BQ1Q7SUFDRjs7SUFFQTtJQUNBLE1BQU1DLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxtQkFBbUIsQ0FBQ0gsSUFBSSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxLQUFLO01BQ2pGLE1BQU1DLFdBQVcsR0FBRyxPQUFPakIsT0FBTyxDQUFDZ0IsR0FBRyxDQUFDO01BQ3ZDLE1BQU1FLFlBQVksR0FBRyxPQUFPVCxJQUFJLENBQUNJLFNBQVMsQ0FBQ0csR0FBRyxDQUFDO01BQy9DLElBQUlDLFdBQVcsS0FBS0MsWUFBWSxFQUFFO1FBQ2hDSCxHQUFHLENBQUNDLEdBQUcsQ0FBQyxHQUFHO1VBQ1RHLFFBQVEsRUFBRUQsWUFBWTtVQUN0QkUsTUFBTSxFQUFFSDtRQUNWLENBQUM7TUFDSDtNQUNBLE9BQU9GLEdBQUc7SUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFTixJQUFJSixNQUFNLENBQUNVLElBQUksQ0FBQ1gsVUFBVSxDQUFDLENBQUNZLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDdEMsTUFBTSxJQUFJakIsS0FBSyxDQUFDLGtEQUFrRCxFQUFFTCxPQUFPLEVBQUVVLFVBQVUsQ0FBQztJQUMxRjtFQUNGO0FBQ0Y7QUFBQztBQUFBLGVBRWNaLG1CQUFtQjtBQUFBIn0=
|
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.AnalyticsController = void 0;
|
|
7
|
-
|
|
8
7
|
var _AdaptableController = _interopRequireDefault(require("./AdaptableController"));
|
|
9
|
-
|
|
10
8
|
var _AnalyticsAdapter = require("../Adapters/Analytics/AnalyticsAdapter");
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
class AnalyticsController extends _AdaptableController.default {
|
|
15
11
|
appOpened(req) {
|
|
16
12
|
return Promise.resolve().then(() => {
|
|
@@ -25,7 +21,6 @@ class AnalyticsController extends _AdaptableController.default {
|
|
|
25
21
|
};
|
|
26
22
|
});
|
|
27
23
|
}
|
|
28
|
-
|
|
29
24
|
trackEvent(req) {
|
|
30
25
|
return Promise.resolve().then(() => {
|
|
31
26
|
return this.adapter.trackEvent(req.params.eventName, req.body, req);
|
|
@@ -39,14 +34,11 @@ class AnalyticsController extends _AdaptableController.default {
|
|
|
39
34
|
};
|
|
40
35
|
});
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
expectedAdapterType() {
|
|
44
38
|
return _AnalyticsAdapter.AnalyticsAdapter;
|
|
45
39
|
}
|
|
46
|
-
|
|
47
40
|
}
|
|
48
|
-
|
|
49
41
|
exports.AnalyticsController = AnalyticsController;
|
|
50
42
|
var _default = AnalyticsController;
|
|
51
43
|
exports.default = _default;
|
|
52
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbmFseXRpY3NDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImFwcE9wZW5lZCIsInJlcSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImFkYXB0ZXIiLCJib2R5IiwicmVzcG9uc2UiLCJjYXRjaCIsInRyYWNrRXZlbnQiLCJwYXJhbXMiLCJldmVudE5hbWUiLCJleHBlY3RlZEFkYXB0ZXJUeXBlIiwiQW5hbHl0aWNzQWRhcHRlciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9BbmFseXRpY3NDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBZGFwdGFibGVDb250cm9sbGVyIGZyb20gJy4vQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBBbmFseXRpY3NBZGFwdGVyIH0gZnJvbSAnLi4vQWRhcHRlcnMvQW5hbHl0aWNzL0FuYWx5dGljc0FkYXB0ZXInO1xuXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBhcHBPcGVuZWQocmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuYXBwT3BlbmVkKHJlcS5ib2R5LCByZXEpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlIHx8IHt9IH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHRyYWNrRXZlbnQocmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIudHJhY2tFdmVudChyZXEucGFyYW1zLmV2ZW50TmFtZSwgcmVxLmJvZHksIHJlcSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UgfHwge30gfTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXR1cm4geyByZXNwb25zZToge30gfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpIHtcbiAgICByZXR1cm4gQW5hbHl0aWNzQWRhcHRlcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBbmFseXRpY3NDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQTBFO0FBRW5FLE1BQU1BLG1CQUFtQixTQUFTQyw0QkFBbUIsQ0FBQztFQUMzREMsU0FBUyxDQUFDQyxHQUFHLEVBQUU7SUFDYixPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRSxDQUNyQkMsSUFBSSxDQUFDLE1BQU07TUFDVixPQUFPLElBQUksQ0FBQ0MsT0FBTyxDQUFDTCxTQUFTLENBQUNDLEdBQUcsQ0FBQ0ssSUFBSSxFQUFFTCxHQUFHLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQ0RHLElBQUksQ0FBQ0csUUFBUSxJQUFJO01BQ2hCLE9BQU87UUFBRUEsUUFBUSxFQUFFQSxRQUFRLElBQUksQ0FBQztNQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBQyxNQUFNO01BQ1gsT0FBTztRQUFFRCxRQUFRLEVBQUUsQ0FBQztNQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDO0VBQ047RUFFQUUsVUFBVSxDQUFDUixHQUFHLEVBQUU7SUFDZCxPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRSxDQUNyQkMsSUFBSSxDQUFDLE1BQU07TUFDVixPQUFPLElBQUksQ0FBQ0MsT0FBTyxDQUFDSSxVQUFVLENBQUNSLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDQyxTQUFTLEVBQUVWLEdBQUcsQ0FBQ0ssSUFBSSxFQUFFTCxHQUFHLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQ0RHLElBQUksQ0FBQ0csUUFBUSxJQUFJO01BQ2hCLE9BQU87UUFBRUEsUUFBUSxFQUFFQSxRQUFRLElBQUksQ0FBQztNQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBQyxNQUFNO01BQ1gsT0FBTztRQUFFRCxRQUFRLEVBQUUsQ0FBQztNQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDO0VBQ047RUFFQUssbUJBQW1CLEdBQUc7SUFDcEIsT0FBT0Msa0NBQWdCO0VBQ3pCO0FBQ0Y7QUFBQztBQUFBLGVBRWNmLG1CQUFtQjtBQUFBIn0=
|
|
@@ -3,56 +3,43 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = exports.
|
|
7
|
-
|
|
6
|
+
exports.default = exports.SubCache = exports.CacheController = void 0;
|
|
8
7
|
var _AdaptableController = _interopRequireDefault(require("./AdaptableController"));
|
|
9
|
-
|
|
10
8
|
var _CacheAdapter = _interopRequireDefault(require("../Adapters/Cache/CacheAdapter"));
|
|
11
|
-
|
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
14
10
|
const KEY_SEPARATOR_CHAR = ':';
|
|
15
|
-
|
|
16
11
|
function joinKeys(...keys) {
|
|
17
12
|
return keys.join(KEY_SEPARATOR_CHAR);
|
|
18
13
|
}
|
|
14
|
+
|
|
19
15
|
/**
|
|
20
16
|
* Prefix all calls to the cache via a prefix string, useful when grouping Cache by object type.
|
|
21
17
|
*
|
|
22
18
|
* eg "Role" or "Session"
|
|
23
19
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
20
|
class SubCache {
|
|
27
21
|
constructor(prefix, cacheController, ttl) {
|
|
28
22
|
this.prefix = prefix;
|
|
29
23
|
this.cache = cacheController;
|
|
30
24
|
this.ttl = ttl;
|
|
31
25
|
}
|
|
32
|
-
|
|
33
26
|
get(key) {
|
|
34
27
|
const cacheKey = joinKeys(this.prefix, key);
|
|
35
28
|
return this.cache.get(cacheKey);
|
|
36
29
|
}
|
|
37
|
-
|
|
38
30
|
put(key, value, ttl) {
|
|
39
31
|
const cacheKey = joinKeys(this.prefix, key);
|
|
40
32
|
return this.cache.put(cacheKey, value, ttl);
|
|
41
33
|
}
|
|
42
|
-
|
|
43
34
|
del(key) {
|
|
44
35
|
const cacheKey = joinKeys(this.prefix, key);
|
|
45
36
|
return this.cache.del(cacheKey);
|
|
46
37
|
}
|
|
47
|
-
|
|
48
38
|
clear() {
|
|
49
39
|
return this.cache.clear();
|
|
50
40
|
}
|
|
51
|
-
|
|
52
41
|
}
|
|
53
|
-
|
|
54
42
|
exports.SubCache = SubCache;
|
|
55
|
-
|
|
56
43
|
class CacheController extends _AdaptableController.default {
|
|
57
44
|
constructor(adapter, appId, options = {}) {
|
|
58
45
|
super(adapter, appId, options);
|
|
@@ -60,33 +47,26 @@ class CacheController extends _AdaptableController.default {
|
|
|
60
47
|
this.user = new SubCache('user', this);
|
|
61
48
|
this.graphQL = new SubCache('graphQL', this);
|
|
62
49
|
}
|
|
63
|
-
|
|
64
50
|
get(key) {
|
|
65
51
|
const cacheKey = joinKeys(this.appId, key);
|
|
66
52
|
return this.adapter.get(cacheKey).then(null, () => Promise.resolve(null));
|
|
67
53
|
}
|
|
68
|
-
|
|
69
54
|
put(key, value, ttl) {
|
|
70
55
|
const cacheKey = joinKeys(this.appId, key);
|
|
71
56
|
return this.adapter.put(cacheKey, value, ttl);
|
|
72
57
|
}
|
|
73
|
-
|
|
74
58
|
del(key) {
|
|
75
59
|
const cacheKey = joinKeys(this.appId, key);
|
|
76
60
|
return this.adapter.del(cacheKey);
|
|
77
61
|
}
|
|
78
|
-
|
|
79
62
|
clear() {
|
|
80
63
|
return this.adapter.clear();
|
|
81
64
|
}
|
|
82
|
-
|
|
83
65
|
expectedAdapterType() {
|
|
84
66
|
return _CacheAdapter.default;
|
|
85
67
|
}
|
|
86
|
-
|
|
87
68
|
}
|
|
88
|
-
|
|
89
69
|
exports.CacheController = CacheController;
|
|
90
70
|
var _default = CacheController;
|
|
91
71
|
exports.default = _default;
|
|
92
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLRVlfU0VQQVJBVE9SX0NIQVIiLCJqb2luS2V5cyIsImtleXMiLCJqb2luIiwiU3ViQ2FjaGUiLCJjb25zdHJ1Y3RvciIsInByZWZpeCIsImNhY2hlQ29udHJvbGxlciIsInR0bCIsImNhY2hlIiwiZ2V0Iiwia2V5IiwiY2FjaGVLZXkiLCJwdXQiLCJ2YWx1ZSIsImRlbCIsImNsZWFyIiwiQ2FjaGVDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImFkYXB0ZXIiLCJhcHBJZCIsIm9wdGlvbnMiLCJyb2xlIiwidXNlciIsImdyYXBoUUwiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJleHBlY3RlZEFkYXB0ZXJUeXBlIiwiQ2FjaGVBZGFwdGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL0NhY2hlQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuL0FkYXB0YWJsZUNvbnRyb2xsZXInO1xuaW1wb3J0IENhY2hlQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9DYWNoZS9DYWNoZUFkYXB0ZXInO1xuXG5jb25zdCBLRVlfU0VQQVJBVE9SX0NIQVIgPSAnOic7XG5cbmZ1bmN0aW9uIGpvaW5LZXlzKC4uLmtleXMpIHtcbiAgcmV0dXJuIGtleXMuam9pbihLRVlfU0VQQVJBVE9SX0NIQVIpO1xufVxuXG4vKipcbiAqIFByZWZpeCBhbGwgY2FsbHMgdG8gdGhlIGNhY2hlIHZpYSBhIHByZWZpeCBzdHJpbmcsIHVzZWZ1bCB3aGVuIGdyb3VwaW5nIENhY2hlIGJ5IG9iamVjdCB0eXBlLlxuICpcbiAqIGVnIFwiUm9sZVwiIG9yIFwiU2Vzc2lvblwiXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHByZWZpeCwgY2FjaGVDb250cm9sbGVyLCB0dGwpIHtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVDb250cm9sbGVyO1xuICAgIHRoaXMudHRsID0gdHRsO1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gam9pbktleXModGhpcy5wcmVmaXgsIGtleSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgfVxuXG4gIHB1dChrZXksIHZhbHVlLCB0dGwpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGpvaW5LZXlzKHRoaXMucHJlZml4LCBrZXkpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnB1dChjYWNoZUtleSwgdmFsdWUsIHR0bCk7XG4gIH1cblxuICBkZWwoa2V5KSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBqb2luS2V5cyh0aGlzLnByZWZpeCwga2V5KTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWwoY2FjaGVLZXkpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FjaGVDb250cm9sbGVyIGV4dGVuZHMgQWRhcHRhYmxlQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXIsIGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihhZGFwdGVyLCBhcHBJZCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnJvbGUgPSBuZXcgU3ViQ2FjaGUoJ3JvbGUnLCB0aGlzKTtcbiAgICB0aGlzLnVzZXIgPSBuZXcgU3ViQ2FjaGUoJ3VzZXInLCB0aGlzKTtcbiAgICB0aGlzLmdyYXBoUUwgPSBuZXcgU3ViQ2FjaGUoJ2dyYXBoUUwnLCB0aGlzKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGpvaW5LZXlzKHRoaXMuYXBwSWQsIGtleSk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXQoY2FjaGVLZXkpLnRoZW4obnVsbCwgKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgfVxuXG4gIHB1dChrZXksIHZhbHVlLCB0dGwpIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGpvaW5LZXlzKHRoaXMuYXBwSWQsIGtleSk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5wdXQoY2FjaGVLZXksIHZhbHVlLCB0dGwpO1xuICB9XG5cbiAgZGVsKGtleSkge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gam9pbktleXModGhpcy5hcHBJZCwga2V5KTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRlbChjYWNoZUtleSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmNsZWFyKCk7XG4gIH1cblxuICBleHBlY3RlZEFkYXB0ZXJUeXBlKCkge1xuICAgIHJldHVybiBDYWNoZUFkYXB0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGVDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQTBEO0FBRTFELE1BQU1BLGtCQUFrQixHQUFHLEdBQUc7QUFFOUIsU0FBU0MsUUFBUSxDQUFDLEdBQUdDLElBQUksRUFBRTtFQUN6QixPQUFPQSxJQUFJLENBQUNDLElBQUksQ0FBQ0gsa0JBQWtCLENBQUM7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1JLFFBQVEsQ0FBQztFQUNwQkMsV0FBVyxDQUFDQyxNQUFNLEVBQUVDLGVBQWUsRUFBRUMsR0FBRyxFQUFFO0lBQ3hDLElBQUksQ0FBQ0YsTUFBTSxHQUFHQSxNQUFNO0lBQ3BCLElBQUksQ0FBQ0csS0FBSyxHQUFHRixlQUFlO0lBQzVCLElBQUksQ0FBQ0MsR0FBRyxHQUFHQSxHQUFHO0VBQ2hCO0VBRUFFLEdBQUcsQ0FBQ0MsR0FBRyxFQUFFO0lBQ1AsTUFBTUMsUUFBUSxHQUFHWCxRQUFRLENBQUMsSUFBSSxDQUFDSyxNQUFNLEVBQUVLLEdBQUcsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQ0YsS0FBSyxDQUFDQyxHQUFHLENBQUNFLFFBQVEsQ0FBQztFQUNqQztFQUVBQyxHQUFHLENBQUNGLEdBQUcsRUFBRUcsS0FBSyxFQUFFTixHQUFHLEVBQUU7SUFDbkIsTUFBTUksUUFBUSxHQUFHWCxRQUFRLENBQUMsSUFBSSxDQUFDSyxNQUFNLEVBQUVLLEdBQUcsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQ0YsS0FBSyxDQUFDSSxHQUFHLENBQUNELFFBQVEsRUFBRUUsS0FBSyxFQUFFTixHQUFHLENBQUM7RUFDN0M7RUFFQU8sR0FBRyxDQUFDSixHQUFHLEVBQUU7SUFDUCxNQUFNQyxRQUFRLEdBQUdYLFFBQVEsQ0FBQyxJQUFJLENBQUNLLE1BQU0sRUFBRUssR0FBRyxDQUFDO0lBQzNDLE9BQU8sSUFBSSxDQUFDRixLQUFLLENBQUNNLEdBQUcsQ0FBQ0gsUUFBUSxDQUFDO0VBQ2pDO0VBRUFJLEtBQUssR0FBRztJQUNOLE9BQU8sSUFBSSxDQUFDUCxLQUFLLENBQUNPLEtBQUssRUFBRTtFQUMzQjtBQUNGO0FBQUM7QUFFTSxNQUFNQyxlQUFlLFNBQVNDLDRCQUFtQixDQUFDO0VBQ3ZEYixXQUFXLENBQUNjLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDeEMsS0FBSyxDQUFDRixPQUFPLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxDQUFDO0lBRTlCLElBQUksQ0FBQ0MsSUFBSSxHQUFHLElBQUlsQixRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztJQUN0QyxJQUFJLENBQUNtQixJQUFJLEdBQUcsSUFBSW5CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQ3RDLElBQUksQ0FBQ29CLE9BQU8sR0FBRyxJQUFJcEIsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7RUFDOUM7RUFFQU0sR0FBRyxDQUFDQyxHQUFHLEVBQUU7SUFDUCxNQUFNQyxRQUFRLEdBQUdYLFFBQVEsQ0FBQyxJQUFJLENBQUNtQixLQUFLLEVBQUVULEdBQUcsQ0FBQztJQUMxQyxPQUFPLElBQUksQ0FBQ1EsT0FBTyxDQUFDVCxHQUFHLENBQUNFLFFBQVEsQ0FBQyxDQUFDYSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU1DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQzNFO0VBRUFkLEdBQUcsQ0FBQ0YsR0FBRyxFQUFFRyxLQUFLLEVBQUVOLEdBQUcsRUFBRTtJQUNuQixNQUFNSSxRQUFRLEdBQUdYLFFBQVEsQ0FBQyxJQUFJLENBQUNtQixLQUFLLEVBQUVULEdBQUcsQ0FBQztJQUMxQyxPQUFPLElBQUksQ0FBQ1EsT0FBTyxDQUFDTixHQUFHLENBQUNELFFBQVEsRUFBRUUsS0FBSyxFQUFFTixHQUFHLENBQUM7RUFDL0M7RUFFQU8sR0FBRyxDQUFDSixHQUFHLEVBQUU7SUFDUCxNQUFNQyxRQUFRLEdBQUdYLFFBQVEsQ0FBQyxJQUFJLENBQUNtQixLQUFLLEVBQUVULEdBQUcsQ0FBQztJQUMxQyxPQUFPLElBQUksQ0FBQ1EsT0FBTyxDQUFDSixHQUFHLENBQUNILFFBQVEsQ0FBQztFQUNuQztFQUVBSSxLQUFLLEdBQUc7SUFDTixPQUFPLElBQUksQ0FBQ0csT0FBTyxDQUFDSCxLQUFLLEVBQUU7RUFDN0I7RUFFQVksbUJBQW1CLEdBQUc7SUFDcEIsT0FBT0MscUJBQVk7RUFDckI7QUFDRjtBQUFDO0FBQUEsZUFFY1osZUFBZTtBQUFBIn0=
|