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,49 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.LRUCache =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var _lruCache2 = _interopRequireDefault(_lruCache);
|
|
11
|
-
|
|
12
|
-
var _defaults = require('../../defaults');
|
|
13
|
-
|
|
14
|
-
var _defaults2 = _interopRequireDefault(_defaults);
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
6
|
+
exports.default = exports.LRUCache = void 0;
|
|
7
|
+
var _lruCache = require("lru-cache");
|
|
8
|
+
var _defaults = _interopRequireDefault(require("../../defaults"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
10
|
class LRUCache {
|
|
19
11
|
constructor({
|
|
20
|
-
ttl =
|
|
21
|
-
maxSize =
|
|
12
|
+
ttl = _defaults.default.cacheTTL,
|
|
13
|
+
maxSize = _defaults.default.cacheMaxSize
|
|
22
14
|
}) {
|
|
23
|
-
this.cache = new
|
|
15
|
+
this.cache = new _lruCache.LRUCache({
|
|
24
16
|
max: maxSize,
|
|
25
|
-
|
|
17
|
+
ttl
|
|
26
18
|
});
|
|
27
19
|
}
|
|
28
|
-
|
|
29
20
|
get(key) {
|
|
30
21
|
return this.cache.get(key) || null;
|
|
31
22
|
}
|
|
32
|
-
|
|
33
23
|
put(key, value, ttl = this.ttl) {
|
|
34
24
|
this.cache.set(key, value, ttl);
|
|
35
25
|
}
|
|
36
|
-
|
|
37
26
|
del(key) {
|
|
38
|
-
this.cache.
|
|
27
|
+
this.cache.delete(key);
|
|
39
28
|
}
|
|
40
|
-
|
|
41
29
|
clear() {
|
|
42
|
-
this.cache.
|
|
30
|
+
this.cache.clear();
|
|
43
31
|
}
|
|
44
|
-
|
|
45
32
|
}
|
|
46
|
-
|
|
47
33
|
exports.LRUCache = LRUCache;
|
|
48
|
-
exports.default = LRUCache;
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
var _default = exports.default = LRUCache;
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbHJ1Q2FjaGUiLCJyZXF1aXJlIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkxSVUNhY2hlIiwiY29uc3RydWN0b3IiLCJ0dGwiLCJkZWZhdWx0cyIsImNhY2hlVFRMIiwibWF4U2l6ZSIsImNhY2hlTWF4U2l6ZSIsImNhY2hlIiwiTFJVIiwibWF4IiwiZ2V0Iiwia2V5IiwicHV0IiwidmFsdWUiLCJzZXQiLCJkZWwiLCJkZWxldGUiLCJjbGVhciIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9MUlVDYWNoZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMUlVDYWNoZSBhcyBMUlUgfSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uLy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGNsYXNzIExSVUNhY2hlIHtcbiAgY29uc3RydWN0b3IoeyB0dGwgPSBkZWZhdWx0cy5jYWNoZVRUTCwgbWF4U2l6ZSA9IGRlZmF1bHRzLmNhY2hlTWF4U2l6ZSB9KSB7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBtYXhTaXplLFxuICAgICAgdHRsLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpIHx8IG51bGw7XG4gIH1cblxuICBwdXQoa2V5LCB2YWx1ZSwgdHRsID0gdGhpcy50dGwpIHtcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlLCB0dGwpO1xuICB9XG5cbiAgZGVsKGtleSkge1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTFJVQ2FjaGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFzQyxTQUFBRSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUvQixNQUFNRyxRQUFRLENBQUM7RUFDcEJDLFdBQVdBLENBQUM7SUFBRUMsR0FBRyxHQUFHQyxpQkFBUSxDQUFDQyxRQUFRO0lBQUVDLE9BQU8sR0FBR0YsaUJBQVEsQ0FBQ0c7RUFBYSxDQUFDLEVBQUU7SUFDeEUsSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBSUMsa0JBQUcsQ0FBQztNQUNuQkMsR0FBRyxFQUFFSixPQUFPO01BQ1pIO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQVEsR0FBR0EsQ0FBQ0MsR0FBRyxFQUFFO0lBQ1AsT0FBTyxJQUFJLENBQUNKLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxHQUFHLENBQUMsSUFBSSxJQUFJO0VBQ3BDO0VBRUFDLEdBQUdBLENBQUNELEdBQUcsRUFBRUUsS0FBSyxFQUFFWCxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLEVBQUU7SUFDOUIsSUFBSSxDQUFDSyxLQUFLLENBQUNPLEdBQUcsQ0FBQ0gsR0FBRyxFQUFFRSxLQUFLLEVBQUVYLEdBQUcsQ0FBQztFQUNqQztFQUVBYSxHQUFHQSxDQUFDSixHQUFHLEVBQUU7SUFDUCxJQUFJLENBQUNKLEtBQUssQ0FBQ1MsTUFBTSxDQUFDTCxHQUFHLENBQUM7RUFDeEI7RUFFQU0sS0FBS0EsQ0FBQSxFQUFHO0lBQ04sSUFBSSxDQUFDVixLQUFLLENBQUNVLEtBQUssQ0FBQyxDQUFDO0VBQ3BCO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBbEIsUUFBQSxHQUFBQSxRQUFBO0FBQUEsSUFBQW1CLFFBQUEsR0FBQUQsT0FBQSxDQUFBbkIsT0FBQSxHQUVjQyxRQUFRIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -3,29 +3,24 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = exports.NullCacheAdapter = void 0;
|
|
6
7
|
class NullCacheAdapter {
|
|
7
|
-
|
|
8
8
|
constructor() {}
|
|
9
|
-
|
|
10
9
|
get() {
|
|
11
10
|
return new Promise(resolve => {
|
|
12
11
|
return resolve(null);
|
|
13
12
|
});
|
|
14
13
|
}
|
|
15
|
-
|
|
16
14
|
put() {
|
|
17
15
|
return Promise.resolve();
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
del() {
|
|
21
18
|
return Promise.resolve();
|
|
22
19
|
}
|
|
23
|
-
|
|
24
20
|
clear() {
|
|
25
21
|
return Promise.resolve();
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
|
|
29
24
|
exports.NullCacheAdapter = NullCacheAdapter;
|
|
30
|
-
exports.default = NullCacheAdapter;
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
25
|
+
var _default = exports.default = NullCacheAdapter;
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOdWxsQ2FjaGVBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJnZXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1dCIsImRlbCIsImNsZWFyIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9OdWxsQ2FjaGVBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBOdWxsQ2FjaGVBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGdldCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1dCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBkZWwoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE51bGxDYWNoZUFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLE1BQU1BLGdCQUFnQixDQUFDO0VBQzVCQyxXQUFXQSxDQUFBLEVBQUcsQ0FBQztFQUVmQyxHQUFHQSxDQUFBLEVBQUc7SUFDSixPQUFPLElBQUlDLE9BQU8sQ0FBQ0MsT0FBTyxJQUFJO01BQzVCLE9BQU9BLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0VBQ0o7RUFFQUMsR0FBR0EsQ0FBQSxFQUFHO0lBQ0osT0FBT0YsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztFQUMxQjtFQUVBRSxHQUFHQSxDQUFBLEVBQUc7SUFDSixPQUFPSCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBQzFCO0VBRUFHLEtBQUtBLENBQUEsRUFBRztJQUNOLE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7RUFDMUI7QUFDRjtBQUFDSSxPQUFBLENBQUFSLGdCQUFBLEdBQUFBLGdCQUFBO0FBQUEsSUFBQVMsUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1YsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,100 +1,109 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.RedisCacheAdapter =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _logger = require('../../logger');
|
|
13
|
-
|
|
14
|
-
var _logger2 = _interopRequireDefault(_logger);
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
6
|
+
exports.default = exports.RedisCacheAdapter = void 0;
|
|
7
|
+
var _redis = require("redis");
|
|
8
|
+
var _logger = _interopRequireDefault(require("../../logger"));
|
|
9
|
+
var _KeyPromiseQueue = require("../../KeyPromiseQueue");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
11
|
const DEFAULT_REDIS_TTL = 30 * 1000; // 30 seconds in milliseconds
|
|
19
|
-
|
|
20
|
-
function debug() {
|
|
21
|
-
|
|
12
|
+
const FLUSH_DB_KEY = '__flush_db__';
|
|
13
|
+
function debug(...args) {
|
|
14
|
+
const message = ['RedisCacheAdapter: ' + arguments[0]].concat(args.slice(1, args.length));
|
|
15
|
+
_logger.default.debug.apply(_logger.default, message);
|
|
22
16
|
}
|
|
23
|
-
|
|
17
|
+
const isValidTTL = ttl => typeof ttl === 'number' && ttl > 0;
|
|
24
18
|
class RedisCacheAdapter {
|
|
25
|
-
|
|
26
19
|
constructor(redisCtx, ttl = DEFAULT_REDIS_TTL) {
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
20
|
+
this.ttl = isValidTTL(ttl) ? ttl : DEFAULT_REDIS_TTL;
|
|
21
|
+
this.client = (0, _redis.createClient)(redisCtx);
|
|
22
|
+
this.queue = new _KeyPromiseQueue.KeyPromiseQueue();
|
|
23
|
+
this.client.on('error', err => {
|
|
24
|
+
_logger.default.error('RedisCacheAdapter client error', {
|
|
25
|
+
error: err
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
this.client.on('connect', () => {});
|
|
29
|
+
this.client.on('reconnecting', () => {});
|
|
30
|
+
this.client.on('ready', () => {});
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
async connect() {
|
|
33
|
+
if (this.client.isOpen) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
return await this.client.connect();
|
|
37
|
+
}
|
|
38
|
+
async handleShutdown() {
|
|
39
|
+
if (!this.client) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
await this.client.quit();
|
|
44
|
+
} catch (err) {
|
|
45
|
+
_logger.default.error('RedisCacheAdapter error on shutdown', {
|
|
46
|
+
error: err
|
|
43
47
|
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async get(key) {
|
|
51
|
+
debug('get', {
|
|
52
|
+
key
|
|
44
53
|
});
|
|
45
|
-
|
|
54
|
+
try {
|
|
55
|
+
await this.queue.enqueue(key);
|
|
56
|
+
const res = await this.client.get(key);
|
|
57
|
+
if (!res) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return JSON.parse(res);
|
|
61
|
+
} catch (err) {
|
|
62
|
+
_logger.default.error('RedisCacheAdapter error on get', {
|
|
63
|
+
error: err
|
|
64
|
+
});
|
|
65
|
+
}
|
|
46
66
|
}
|
|
47
|
-
|
|
48
|
-
put(key, value, ttl = this.ttl) {
|
|
67
|
+
async put(key, value, ttl = this.ttl) {
|
|
49
68
|
value = JSON.stringify(value);
|
|
50
|
-
debug('put',
|
|
69
|
+
debug('put', {
|
|
70
|
+
key,
|
|
71
|
+
value,
|
|
72
|
+
ttl
|
|
73
|
+
});
|
|
74
|
+
await this.queue.enqueue(key);
|
|
51
75
|
if (ttl === 0) {
|
|
52
|
-
|
|
76
|
+
// ttl of zero is a logical no-op, but redis cannot set expire time of zero
|
|
77
|
+
return;
|
|
53
78
|
}
|
|
54
|
-
if (ttl
|
|
55
|
-
|
|
79
|
+
if (ttl === Infinity) {
|
|
80
|
+
return this.client.set(key, value);
|
|
56
81
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
63
|
-
} else {
|
|
64
|
-
this.client.psetex(key, ttl, value, function () {
|
|
65
|
-
resolve();
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
});
|
|
82
|
+
if (!isValidTTL(ttl)) {
|
|
83
|
+
ttl = this.ttl;
|
|
84
|
+
}
|
|
85
|
+
return this.client.set(key, value, {
|
|
86
|
+
PX: ttl
|
|
69
87
|
});
|
|
70
|
-
return this.p;
|
|
71
88
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
this.p = this.p.then(() => {
|
|
76
|
-
return new Promise(resolve => {
|
|
77
|
-
this.client.del(key, function () {
|
|
78
|
-
resolve();
|
|
79
|
-
});
|
|
80
|
-
});
|
|
89
|
+
async del(key) {
|
|
90
|
+
debug('del', {
|
|
91
|
+
key
|
|
81
92
|
});
|
|
82
|
-
|
|
93
|
+
await this.queue.enqueue(key);
|
|
94
|
+
return this.client.del(key);
|
|
83
95
|
}
|
|
84
|
-
|
|
85
|
-
clear() {
|
|
96
|
+
async clear() {
|
|
86
97
|
debug('clear');
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
this.client.flushdb(function () {
|
|
90
|
-
resolve();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
return this.p;
|
|
98
|
+
await this.queue.enqueue(FLUSH_DB_KEY);
|
|
99
|
+
return this.client.sendCommand(['FLUSHDB']);
|
|
95
100
|
}
|
|
96
|
-
}
|
|
97
101
|
|
|
102
|
+
// Used for testing
|
|
103
|
+
getAllKeys() {
|
|
104
|
+
return this.client.keys('*');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
98
107
|
exports.RedisCacheAdapter = RedisCacheAdapter;
|
|
99
|
-
exports.default = RedisCacheAdapter;
|
|
100
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
108
|
+
var _default = exports.default = RedisCacheAdapter;
|
|
109
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVkaXMiLCJyZXF1aXJlIiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfS2V5UHJvbWlzZVF1ZXVlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiREVGQVVMVF9SRURJU19UVEwiLCJGTFVTSF9EQl9LRVkiLCJkZWJ1ZyIsImFyZ3MiLCJtZXNzYWdlIiwiYXJndW1lbnRzIiwiY29uY2F0Iiwic2xpY2UiLCJsZW5ndGgiLCJsb2dnZXIiLCJhcHBseSIsImlzVmFsaWRUVEwiLCJ0dGwiLCJSZWRpc0NhY2hlQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicmVkaXNDdHgiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJxdWV1ZSIsIktleVByb21pc2VRdWV1ZSIsIm9uIiwiZXJyIiwiZXJyb3IiLCJjb25uZWN0IiwiaXNPcGVuIiwiaGFuZGxlU2h1dGRvd24iLCJxdWl0IiwiZ2V0Iiwia2V5IiwiZW5xdWV1ZSIsInJlcyIsIkpTT04iLCJwYXJzZSIsInB1dCIsInZhbHVlIiwic3RyaW5naWZ5IiwiSW5maW5pdHkiLCJzZXQiLCJQWCIsImRlbCIsImNsZWFyIiwic2VuZENvbW1hbmQiLCJnZXRBbGxLZXlzIiwia2V5cyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdyZWRpcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBLZXlQcm9taXNlUXVldWUgfSBmcm9tICcuLi8uLi9LZXlQcm9taXNlUXVldWUnO1xuXG5jb25zdCBERUZBVUxUX1JFRElTX1RUTCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kcyBpbiBtaWxsaXNlY29uZHNcbmNvbnN0IEZMVVNIX0RCX0tFWSA9ICdfX2ZsdXNoX2RiX18nO1xuXG5mdW5jdGlvbiBkZWJ1ZyguLi5hcmdzOiBhbnkpIHtcbiAgY29uc3QgbWVzc2FnZSA9IFsnUmVkaXNDYWNoZUFkYXB0ZXI6ICcgKyBhcmd1bWVudHNbMF1dLmNvbmNhdChhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKSk7XG4gIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIG1lc3NhZ2UpO1xufVxuXG5jb25zdCBpc1ZhbGlkVFRMID0gdHRsID0+IHR5cGVvZiB0dGwgPT09ICdudW1iZXInICYmIHR0bCA+IDA7XG5cbmV4cG9ydCBjbGFzcyBSZWRpc0NhY2hlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKHJlZGlzQ3R4LCB0dGwgPSBERUZBVUxUX1JFRElTX1RUTCkge1xuICAgIHRoaXMudHRsID0gaXNWYWxpZFRUTCh0dGwpID8gdHRsIDogREVGQVVMVF9SRURJU19UVEw7XG4gICAgdGhpcy5jbGllbnQgPSBjcmVhdGVDbGllbnQocmVkaXNDdHgpO1xuICAgIHRoaXMucXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Vycm9yJywgZXJyID0+IHsgbG9nZ2VyLmVycm9yKCdSZWRpc0NhY2hlQWRhcHRlciBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gICAgdGhpcy5jbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7fSk7XG4gICAgdGhpcy5jbGllbnQub24oJ3JlY29ubmVjdGluZycsICgpID0+IHt9KTtcbiAgICB0aGlzLmNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmNsaWVudC5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LmNvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnF1aXQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0KGtleSkge1xuICAgIGRlYnVnKCdnZXQnLCB7IGtleSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5xdWV1ZS5lbnF1ZXVlKGtleSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQoa2V5KTtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gZ2V0JywgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGRlYnVnKCdwdXQnLCB7IGtleSwgdmFsdWUsIHR0bCB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICBpZiAodHRsID09PSAwKSB7XG4gICAgICAvLyB0dGwgb2YgemVybyBpcyBhIGxvZ2ljYWwgbm8tb3AsIGJ1dCByZWRpcyBjYW5ub3Qgc2V0IGV4cGlyZSB0aW1lIG9mIHplcm9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHRsID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUVEwodHRsKSkge1xuICAgICAgdHRsID0gdGhpcy50dGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZXQoa2V5LCB2YWx1ZSwgeyBQWDogdHRsIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGtleSkge1xuICAgIGRlYnVnKCdkZWwnLCB7IGtleSB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpIHtcbiAgICBkZWJ1ZygnY2xlYXInKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoRkxVU0hfREJfS0VZKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoWydGTFVTSERCJ10pO1xuICB9XG5cbiAgLy8gVXNlZCBmb3IgdGVzdGluZ1xuICBnZXRBbGxLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5rZXlzKCcqJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVkaXNDYWNoZUFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFBd0QsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFeEQsTUFBTUcsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE1BQU1DLFlBQVksR0FBRyxjQUFjO0FBRW5DLFNBQVNDLEtBQUtBLENBQUMsR0FBR0MsSUFBUyxFQUFFO0VBQzNCLE1BQU1DLE9BQU8sR0FBRyxDQUFDLHFCQUFxQixHQUFHQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxJQUFJLENBQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUVKLElBQUks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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const SchemaCache = {};
|
|
8
|
+
var _default = exports.default = {
|
|
9
|
+
all() {
|
|
10
|
+
return [...(SchemaCache.allClasses || [])];
|
|
11
|
+
},
|
|
12
|
+
get(className) {
|
|
13
|
+
return this.all().find(cached => cached.className === className);
|
|
14
|
+
},
|
|
15
|
+
put(allSchema) {
|
|
16
|
+
SchemaCache.allClasses = allSchema;
|
|
17
|
+
},
|
|
18
|
+
del(className) {
|
|
19
|
+
this.put(this.all().filter(cached => cached.className !== className));
|
|
20
|
+
},
|
|
21
|
+
clear() {
|
|
22
|
+
delete SchemaCache.allClasses;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2hlbWFDYWNoZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJhbGwiLCJhbGxDbGFzc2VzIiwiZ2V0IiwiY2xhc3NOYW1lIiwiZmluZCIsImNhY2hlZCIsInB1dCIsImFsbFNjaGVtYSIsImRlbCIsImZpbHRlciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0NhY2hlL1NjaGVtYUNhY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNjaGVtYUNhY2hlID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYWxsKCkge1xuICAgIHJldHVybiBbLi4uKFNjaGVtYUNhY2hlLmFsbENsYXNzZXMgfHwgW10pXTtcbiAgfSxcblxuICBnZXQoY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsKCkuZmluZChjYWNoZWQgPT4gY2FjaGVkLmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lKTtcbiAgfSxcblxuICBwdXQoYWxsU2NoZW1hKSB7XG4gICAgU2NoZW1hQ2FjaGUuYWxsQ2xhc3NlcyA9IGFsbFNjaGVtYTtcbiAgfSxcblxuICBkZWwoY2xhc3NOYW1lKSB7XG4gICAgdGhpcy5wdXQodGhpcy5hbGwoKS5maWx0ZXIoY2FjaGVkID0+IGNhY2hlZC5jbGFzc05hbWUgIT09IGNsYXNzTmFtZSkpO1xuICB9LFxuXG4gIGNsZWFyKCkge1xuICAgIGRlbGV0ZSBTY2hlbWFDYWNoZS5hbGxDbGFzc2VzO1xuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRVI7RUFDYkMsR0FBR0EsQ0FBQSxFQUFHO0lBQ0osT0FBTyxDQUFDLElBQUlKLFdBQVcsQ0FBQ0ssVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQzVDLENBQUM7RUFFREMsR0FBR0EsQ0FBQ0MsU0FBUyxFQUFFO0lBQ2IsT0FBTyxJQUFJLENBQUNILEdBQUcsQ0FBQyxDQUFDLENBQUNJLElBQUksQ0FBQ0MsTUFBTSxJQUFJQSxNQUFNLENBQUNGLFNBQVMsS0FBS0EsU0FBUyxDQUFDO0VBQ2xFLENBQUM7RUFFREcsR0FBR0EsQ0FBQ0MsU0FBUyxFQUFFO0lBQ2JYLFdBQVcsQ0FBQ0ssVUFBVSxHQUFHTSxTQUFTO0VBQ3BDLENBQUM7RUFFREMsR0FBR0EsQ0FBQ0wsU0FBUyxFQUFFO0lBQ2IsSUFBSSxDQUFDRyxHQUFHLENBQUMsSUFBSSxDQUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDUyxNQUFNLENBQUNKLE1BQU0sSUFBSUEsTUFBTSxDQUFDRixTQUFTLEtBQUtBLFNBQVMsQ0FBQyxDQUFDO0VBQ3ZFLENBQUM7RUFFRE8sS0FBS0EsQ0FBQSxFQUFHO0lBQ04sT0FBT2QsV0FBVyxDQUFDSyxVQUFVO0VBQy9CO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -3,13 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
/*
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
exports.default = exports.MailAdapter = void 0;
|
|
7
|
+
/* eslint-disable unused-imports/no-unused-vars */
|
|
8
|
+
/**
|
|
9
|
+
* @interface
|
|
10
|
+
* @memberof module:Adapters
|
|
11
|
+
* Mail Adapter prototype
|
|
12
|
+
* A MailAdapter should implement at least sendMail()
|
|
10
13
|
*/
|
|
11
14
|
class MailAdapter {
|
|
12
|
-
|
|
15
|
+
/**
|
|
13
16
|
* A method for sending mail
|
|
14
17
|
* @param options would have the parameters
|
|
15
18
|
* - to: the recipient
|
|
@@ -24,7 +27,6 @@ class MailAdapter {
|
|
|
24
27
|
// sendVerificationEmail({ link, appName, user }) {}
|
|
25
28
|
// sendPasswordResetEmail({ link, appName, user }) {}
|
|
26
29
|
}
|
|
27
|
-
|
|
28
30
|
exports.MailAdapter = MailAdapter;
|
|
29
|
-
exports.default = MailAdapter;
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
var _default = exports.default = MailAdapter;
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYWlsQWRhcHRlciIsInNlbmRNYWlsIiwib3B0aW9ucyIsImV4cG9ydHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvRW1haWwvTWFpbEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQGludGVyZmFjZVxuICogQG1lbWJlcm9mIG1vZHVsZTpBZGFwdGVyc1xuICogTWFpbCBBZGFwdGVyIHByb3RvdHlwZVxuICogQSBNYWlsQWRhcHRlciBzaG91bGQgaW1wbGVtZW50IGF0IGxlYXN0IHNlbmRNYWlsKClcbiAqL1xuZXhwb3J0IGNsYXNzIE1haWxBZGFwdGVyIHtcbiAgLyoqXG4gICAqIEEgbWV0aG9kIGZvciBzZW5kaW5nIG1haWxcbiAgICogQHBhcmFtIG9wdGlvbnMgd291bGQgaGF2ZSB0aGUgcGFyYW1ldGVyc1xuICAgKiAtIHRvOiB0aGUgcmVjaXBpZW50XG4gICAqIC0gdGV4dDogdGhlIHJhdyB0ZXh0IG9mIHRoZSBtZXNzYWdlXG4gICAqIC0gc3ViamVjdDogdGhlIHN1YmplY3Qgb2YgdGhlIGVtYWlsXG4gICAqL1xuICBzZW5kTWFpbChvcHRpb25zKSB7fVxuXG4gIC8qIFlvdSBjYW4gaW1wbGVtZW50IHRob3NlIG1ldGhvZHMgaWYgeW91IHdhbnRcbiAgICogdG8gcHJvdmlkZSBIVE1MIHRlbXBsYXRlcyBldGMuLi5cbiAgICovXG4gIC8vIHNlbmRWZXJpZmljYXRpb25FbWFpbCh7IGxpbmssIGFwcE5hbWUsIHVzZXIgfSkge31cbiAgLy8gc2VuZFBhc3N3b3JkUmVzZXRFbWFpbCh7IGxpbmssIGFwcE5hbWUsIHVzZXIgfSkge31cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFpbEFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsV0FBVyxDQUFDO0VBQ3ZCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLFFBQVFBLENBQUNDLE9BQU8sRUFBRSxDQUFDOztFQUVuQjtBQUNGO0FBQ0E7RUFDRTtFQUNBO0FBQ0Y7QUFBQ0MsT0FBQSxDQUFBSCxXQUFBLEdBQUFBLFdBQUE7QUFBQSxJQUFBSSxRQUFBLEdBQUFELE9BQUEsQ0FBQUUsT0FBQSxHQUVjTCxXQUFXIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,22 +1,51 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
exports.default = exports.FilesAdapter = void 0;
|
|
7
|
+
exports.validateFilename = validateFilename;
|
|
8
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
/* eslint-disable unused-imports/no-unused-vars */
|
|
11
|
+
// Files Adapter
|
|
12
|
+
//
|
|
13
|
+
// Allows you to change the file storage mechanism.
|
|
14
|
+
//
|
|
15
|
+
// Adapter classes must implement the following functions:
|
|
16
|
+
// * createFile(filename, data, contentType)
|
|
17
|
+
// * deleteFile(filename)
|
|
18
|
+
// * getFileData(filename)
|
|
19
|
+
// * getFileLocation(config, filename)
|
|
20
|
+
// Adapter classes should implement the following functions:
|
|
21
|
+
// * validateFilename(filename)
|
|
22
|
+
// * handleFileStream(filename, req, res, contentType)
|
|
23
|
+
//
|
|
24
|
+
// Default is GridFSBucketAdapter, which requires mongo
|
|
25
|
+
// and for the API server to be using the DatabaseController with Mongo
|
|
26
|
+
// database adapter.
|
|
7
27
|
|
|
8
|
-
|
|
28
|
+
/**
|
|
29
|
+
* @interface
|
|
30
|
+
* @memberof module:Adapters
|
|
31
|
+
*/
|
|
32
|
+
class FilesAdapter {
|
|
33
|
+
/** Responsible for storing the file in order to be retrieved later by its filename
|
|
9
34
|
*
|
|
10
35
|
* @param {string} filename - the filename to save
|
|
11
36
|
* @param {*} data - the buffer of data from the file
|
|
12
37
|
* @param {string} contentType - the supposed contentType
|
|
13
38
|
* @discussion the contentType can be undefined if the controller was not able to determine it
|
|
39
|
+
* @param {object} options - (Optional) options to be passed to file adapter (S3 File Adapter Only)
|
|
40
|
+
* - tags: object containing key value pairs that will be stored with file
|
|
41
|
+
* - metadata: object containing key value pairs that will be sotred with file (https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html)
|
|
42
|
+
* @discussion options are not supported by all file adapters. Check the your adapter's documentation for compatibility
|
|
14
43
|
*
|
|
15
44
|
* @return {Promise} a promise that should fail if the storage didn't succeed
|
|
16
45
|
*/
|
|
17
|
-
createFile(filename, data, contentType) {}
|
|
46
|
+
createFile(filename, data, contentType, options) {}
|
|
18
47
|
|
|
19
|
-
|
|
48
|
+
/** Responsible for deleting the specified file
|
|
20
49
|
*
|
|
21
50
|
* @param {string} filename - the filename to delete
|
|
22
51
|
*
|
|
@@ -24,7 +53,7 @@ class FilesAdapter {
|
|
|
24
53
|
*/
|
|
25
54
|
deleteFile(filename) {}
|
|
26
55
|
|
|
27
|
-
|
|
56
|
+
/** Responsible for retrieving the data of the specified file
|
|
28
57
|
*
|
|
29
58
|
* @param {string} filename - the name of file to retrieve
|
|
30
59
|
*
|
|
@@ -32,30 +61,59 @@ class FilesAdapter {
|
|
|
32
61
|
*/
|
|
33
62
|
getFileData(filename) {}
|
|
34
63
|
|
|
35
|
-
|
|
64
|
+
/** Returns an absolute URL where the file can be accessed
|
|
36
65
|
*
|
|
37
66
|
* @param {Config} config - server configuration
|
|
38
67
|
* @param {string} filename
|
|
39
68
|
*
|
|
40
|
-
* @return {string} Absolute URL
|
|
69
|
+
* @return {string | Promise<string>} Absolute URL
|
|
41
70
|
*/
|
|
42
71
|
getFileLocation(config, filename) {}
|
|
43
|
-
}
|
|
44
72
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
//
|
|
52
|
-
// * deleteFile(filename)
|
|
53
|
-
// * getFileData(filename)
|
|
54
|
-
// * getFileLocation(config, filename)
|
|
55
|
-
//
|
|
56
|
-
// Default is GridStoreAdapter, which requires mongo
|
|
57
|
-
// and for the API server to be using the DatabaseController with Mongo
|
|
58
|
-
// database adapter.
|
|
73
|
+
/** Validate a filename for this adapter type
|
|
74
|
+
*
|
|
75
|
+
* @param {string} filename
|
|
76
|
+
*
|
|
77
|
+
* @returns {null|Parse.Error} null if there are no errors
|
|
78
|
+
*/
|
|
79
|
+
// validateFilename(filename: string): ?Parse.Error {}
|
|
59
80
|
|
|
60
|
-
|
|
61
|
-
|
|
81
|
+
/** Handles Byte-Range Requests for Streaming
|
|
82
|
+
*
|
|
83
|
+
* @param {string} filename
|
|
84
|
+
* @param {object} req
|
|
85
|
+
* @param {object} res
|
|
86
|
+
* @param {string} contentType
|
|
87
|
+
*
|
|
88
|
+
* @returns {Promise} Data for byte range
|
|
89
|
+
*/
|
|
90
|
+
// handleFileStream(filename: string, res: any, req: any, contentType: string): Promise
|
|
91
|
+
|
|
92
|
+
/** Responsible for retrieving metadata and tags
|
|
93
|
+
*
|
|
94
|
+
* @param {string} filename - the filename to retrieve metadata
|
|
95
|
+
*
|
|
96
|
+
* @return {Promise} a promise that should pass with metadata
|
|
97
|
+
*/
|
|
98
|
+
// getMetadata(filename: string): Promise<any> {}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Simple filename validation
|
|
103
|
+
*
|
|
104
|
+
* @param filename
|
|
105
|
+
* @returns {null|Parse.Error}
|
|
106
|
+
*/
|
|
107
|
+
exports.FilesAdapter = FilesAdapter;
|
|
108
|
+
function validateFilename(filename) {
|
|
109
|
+
if (filename.length > 128) {
|
|
110
|
+
return new _node.default.Error(_node.default.Error.INVALID_FILE_NAME, 'Filename too long.');
|
|
111
|
+
}
|
|
112
|
+
const regx = /^[_a-zA-Z0-9][a-zA-Z0-9@. ~_-]*$/;
|
|
113
|
+
if (!filename.match(regx)) {
|
|
114
|
+
return new _node.default.Error(_node.default.Error.INVALID_FILE_NAME, 'Filename contains invalid characters.');
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
var _default = exports.default = FilesAdapter;
|
|
119
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiRmlsZXNBZGFwdGVyIiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwib3B0aW9ucyIsImRlbGV0ZUZpbGUiLCJnZXRGaWxlRGF0YSIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsImV4cG9ydHMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwibGVuZ3RoIiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwicmVneCIsIm1hdGNoIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvRmlsZXMvRmlsZXNBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHVudXNlZC1pbXBvcnRzL25vLXVudXNlZC12YXJzICovXG4vLyBGaWxlcyBBZGFwdGVyXG4vL1xuLy8gQWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGZpbGUgc3RvcmFnZSBtZWNoYW5pc20uXG4vL1xuLy8gQWRhcHRlciBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiBjcmVhdGVGaWxlKGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSlcbi8vICogZGVsZXRlRmlsZShmaWxlbmFtZSlcbi8vICogZ2V0RmlsZURhdGEoZmlsZW5hbWUpXG4vLyAqIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKVxuLy8gQWRhcHRlciBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG4vLyAqIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpXG4vLyAqIGhhbmRsZUZpbGVTdHJlYW0oZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSlcbi8vXG4vLyBEZWZhdWx0IGlzIEdyaWRGU0J1Y2tldEFkYXB0ZXIsIHdoaWNoIHJlcXVpcmVzIG1vbmdvXG4vLyBhbmQgZm9yIHRoZSBBUEkgc2VydmVyIHRvIGJlIHVzaW5nIHRoZSBEYXRhYmFzZUNvbnRyb2xsZXIgd2l0aCBNb25nb1xuLy8gZGF0YWJhc2UgYWRhcHRlci5cblxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tICcuLi8uLi9Db25maWcnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOkFkYXB0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlc0FkYXB0ZXIge1xuICAvKiogUmVzcG9uc2libGUgZm9yIHN0b3JpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8gYmUgcmV0cmlldmVkIGxhdGVyIGJ5IGl0cyBmaWxlbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgdG8gc2F2ZVxuICAgKiBAcGFyYW0geyp9IGRhdGEgLSB0aGUgYnVmZmVyIG9mIGRhdGEgZnJvbSB0aGUgZmlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGUgLSB0aGUgc3VwcG9zZWQgY29udGVudFR5cGVcbiAgICogQGRpc2N1c3Npb24gdGhlIGNvbnRlbnRUeXBlIGNhbiBiZSB1bmRlZmluZWQgaWYgdGhlIGNvbnRyb2xsZXIgd2FzIG5vdCBhYmxlIHRvIGRldGVybWluZSBpdFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIChPcHRpb25hbCkgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gZmlsZSBhZGFwdGVyIChTMyBGaWxlIEFkYXB0ZXIgT25seSlcbiAgICogLSB0YWdzOiBvYmplY3QgY29udGFpbmluZyBrZXkgdmFsdWUgcGFpcnMgdGhhdCB3aWxsIGJlIHN0b3JlZCB3aXRoIGZpbGVcbiAgICogLSBtZXRhZGF0YTogb2JqZWN0IGNvbnRhaW5pbmcga2V5IHZhbHVlIHBhaXJzIHRoYXQgd2lsbCBiZSBzb3RyZWQgd2l0aCBmaWxlIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXItZ3VpZGUvYWRkLW9iamVjdC1tZXRhZGF0YS5odG1sKVxuICAgKiBAZGlzY3Vzc2lvbiBvcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBmaWxlIGFkYXB0ZXJzLiBDaGVjayB0aGUgeW91ciBhZGFwdGVyJ3MgZG9jdW1lbnRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eVxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCBzaG91bGQgZmFpbCBpZiB0aGUgc3RvcmFnZSBkaWRuJ3Qgc3VjY2VlZFxuICAgKi9cbiAgY3JlYXRlRmlsZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjb250ZW50VHlwZTogc3RyaW5nLCBvcHRpb25zOiBPYmplY3QpOiBQcm9taXNlIHt9XG5cbiAgLyoqIFJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWVkIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIHRvIGRlbGV0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCBzaG91bGQgZmFpbCBpZiB0aGUgZGVsZXRpb24gZGlkbid0IHN1Y2NlZWRcbiAgICovXG4gIGRlbGV0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2Uge31cblxuICAvKiogUmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgdGhlIGRhdGEgb2YgdGhlIHNwZWNpZmllZCBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIHRoZSBuYW1lIG9mIGZpbGUgdG8gcmV0cmlldmVcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgc2hvdWxkIHBhc3Mgd2l0aCB0aGUgZmlsZSBkYXRhIG9yIGZhaWwgb24gZXJyb3JcbiAgICovXG4gIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge31cblxuICAvKiogUmV0dXJucyBhbiBhYnNvbHV0ZSBVUkwgd2hlcmUgdGhlIGZpbGUgY2FuIGJlIGFjY2Vzc2VkXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZmlnfSBjb25maWcgLSBzZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+fSBBYnNvbHV0ZSBVUkxcbiAgICovXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWc6IENvbmZpZywgZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB7fVxuXG4gIC8qKiBWYWxpZGF0ZSBhIGZpbGVuYW1lIGZvciB0aGlzIGFkYXB0ZXIgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICpcbiAgICogQHJldHVybnMge251bGx8UGFyc2UuRXJyb3J9IG51bGwgaWYgdGhlcmUgYXJlIG5vIGVycm9yc1xuICAgKi9cbiAgLy8gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogP1BhcnNlLkVycm9yIHt9XG5cbiAgLyoqIEhhbmRsZXMgQnl0ZS1SYW5nZSBSZXF1ZXN0cyBmb3IgU3RyZWFtaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRUeXBlXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBEYXRhIGZvciBieXRlIHJhbmdlXG4gICAqL1xuICAvLyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlczogYW55LCByZXE6IGFueSwgY29udGVudFR5cGU6IHN0cmluZyk6IFByb21pc2VcblxuICAvKiogUmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgbWV0YWRhdGEgYW5kIHRhZ3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIHRvIHJldHJpZXZlIG1ldGFkYXRhXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHNob3VsZCBwYXNzIHdpdGggbWV0YWRhdGFcbiAgICovXG4gIC8vIGdldE1ldGFkYXRhKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge31cbn1cblxuLyoqXG4gKiBTaW1wbGUgZmlsZW5hbWUgdmFsaWRhdGlvblxuICpcbiAqIEBwYXJhbSBmaWxlbmFtZVxuICogQHJldHVybnMge251bGx8UGFyc2UuRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTogP1BhcnNlLkVycm9yIHtcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSB0b28gbG9uZy4nKTtcbiAgfVxuXG4gIGNvbnN0IHJlZ3ggPSAvXltfYS16QS1aMC05XVthLXpBLVowLTlALiB+Xy1dKiQvO1xuICBpZiAoIWZpbGVuYW1lLm1hdGNoKHJlZ3gpKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZXNBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBbUJBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUErQixTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQW5CL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1HLFlBQVksQ0FBQztFQUN4QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxVQUFVQSxDQUFDQyxRQUFnQixFQUFFQyxJQUFJLEVBQUVDLFdBQW1CLEVBQUVDLE9BQWUsRUFBVyxDQUFDOztFQUVuRjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsVUFBVUEsQ0FBQ0osUUFBZ0IsRUFBVyxDQUFDOztFQUV2QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUssV0FBV0EsQ0FBQ0wsUUFBZ0IsRUFBZ0IsQ0FBQzs7RUFFN0M7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRU0sZUFBZUEsQ0FBQ0MsTUFBYyxFQUFFUCxRQUFnQixFQUE0QixDQUFDOztFQUU3RTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRTs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRTs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBUSxPQUFBLENBQUFWLFlBQUEsR0FBQUEsWUFBQTtBQU1PLFNBQVNXLGdCQUFnQkEsQ0FBQ1QsUUFBUSxFQUFnQjtFQUN2RCxJQUFJQSxRQUFRLENBQUNVLE1BQU0sR0FBRyxHQUFHLEVBQUU7SUFDekIsT0FBTyxJQUFJQyxhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDO0VBQzdFO0VBRUEsTUFBTUMsSUFBSSxHQUFHLGtDQUFrQztFQUMvQyxJQUFJLENBQUNkLFFBQVEsQ0FBQ2UsS0FBSyxDQUFDRCxJQUFJLENBQUMsRUFBRTtJQUN6QixPQUFPLElBQUlILGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsaUJBQWlCLEVBQUUsdUNBQXVDLENBQUM7RUFDaEc7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUFDLElBQUFHLFFBQUEsR0FBQVIsT0FBQSxDQUFBWCxPQUFBLEdBRWNDLFlBQVkiLCJpZ25vcmVMaXN0IjpbXX0=
|