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
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
/*eslint no-unused-vars
|
|
8
|
-
// Push Adapter
|
|
6
|
+
exports.default = exports.PushAdapter = void 0;
|
|
7
|
+
/* eslint-disable unused-imports/no-unused-vars */ // Push Adapter
|
|
9
8
|
//
|
|
10
9
|
// Allows you to change the push notification mechanism.
|
|
11
10
|
//
|
|
@@ -15,8 +14,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
15
14
|
//
|
|
16
15
|
// Default is ParsePushAdapter, which uses GCM for
|
|
17
16
|
// android push and APNS for ios push.
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @interface
|
|
19
|
+
* @memberof module:Adapters
|
|
20
|
+
*/
|
|
19
21
|
class PushAdapter {
|
|
22
|
+
/**
|
|
23
|
+
* @param {any} body
|
|
24
|
+
* @param {Parse.Installation[]} installations
|
|
25
|
+
* @param {any} pushStatus
|
|
26
|
+
* @returns {Promise}
|
|
27
|
+
*/
|
|
20
28
|
send(body, installations, pushStatus) {}
|
|
21
29
|
|
|
22
30
|
/**
|
|
@@ -27,7 +35,6 @@ class PushAdapter {
|
|
|
27
35
|
return [];
|
|
28
36
|
}
|
|
29
37
|
}
|
|
30
|
-
|
|
31
38
|
exports.PushAdapter = PushAdapter;
|
|
32
|
-
exports.default = PushAdapter;
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
39
|
+
var _default = exports.default = PushAdapter;
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQdXNoQWRhcHRlciIsInNlbmQiLCJib2R5IiwiaW5zdGFsbGF0aW9ucyIsInB1c2hTdGF0dXMiLCJnZXRWYWxpZFB1c2hUeXBlcyIsImV4cG9ydHMiLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvUHVzaC9QdXNoQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuLy8gQGZsb3dcbi8vIFB1c2ggQWRhcHRlclxuLy9cbi8vIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20uXG4vL1xuLy8gQWRhcHRlciBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiBnZXRWYWxpZFB1c2hUeXBlcygpXG4vLyAqIHNlbmQoZGV2aWNlcywgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cylcbi8vXG4vLyBEZWZhdWx0IGlzIFBhcnNlUHVzaEFkYXB0ZXIsIHdoaWNoIHVzZXMgR0NNIGZvclxuLy8gYW5kcm9pZCBwdXNoIGFuZCBBUE5TIGZvciBpb3MgcHVzaC5cblxuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOkFkYXB0ZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBQdXNoQWRhcHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gYm9keVxuICAgKiBAcGFyYW0ge1BhcnNlLkluc3RhbGxhdGlvbltdfSBpbnN0YWxsYXRpb25zXG4gICAqIEBwYXJhbSB7YW55fSBwdXNoU3RhdHVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgc2VuZChib2R5OiBhbnksIGluc3RhbGxhdGlvbnM6IGFueVtdLCBwdXNoU3RhdHVzOiBhbnkpOiA/UHJvbWlzZTwqPiB7fVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcy5cbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiB2YWxpZCBwdXNoIHR5cGVzXG4gICAqL1xuICBnZXRWYWxpZFB1c2hUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsV0FBVyxDQUFDO0VBQ3ZCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxJQUFJQSxDQUFDQyxJQUFTLEVBQUVDLGFBQW9CLEVBQUVDLFVBQWUsRUFBZSxDQUFDOztFQUVyRTtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxpQkFBaUJBLENBQUEsRUFBYTtJQUM1QixPQUFPLEVBQUU7RUFDWDtBQUNGO0FBQUNDLE9BQUEsQ0FBQU4sV0FBQSxHQUFBQSxXQUFBO0FBQUEsSUFBQU8sUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1IsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
const mongodb = require('mongodb');
|
|
7
8
|
const Collection = mongodb.Collection;
|
|
8
|
-
|
|
9
9
|
class MongoCollection {
|
|
10
|
-
|
|
11
10
|
constructor(mongoCollection) {
|
|
12
11
|
this._mongoCollection = mongoCollection;
|
|
13
12
|
}
|
|
@@ -17,13 +16,37 @@ class MongoCollection {
|
|
|
17
16
|
// none, then build the geoindex.
|
|
18
17
|
// This could be improved a lot but it's not clear if that's a good
|
|
19
18
|
// idea. Or even if this behavior is a good idea.
|
|
20
|
-
find(query, {
|
|
19
|
+
find(query, {
|
|
20
|
+
skip,
|
|
21
|
+
limit,
|
|
22
|
+
sort,
|
|
23
|
+
keys,
|
|
24
|
+
maxTimeMS,
|
|
25
|
+
readPreference,
|
|
26
|
+
hint,
|
|
27
|
+
caseInsensitive,
|
|
28
|
+
explain,
|
|
29
|
+
comment
|
|
30
|
+
} = {}) {
|
|
21
31
|
// Support for Full Text Search - $text
|
|
22
32
|
if (keys && keys.$score) {
|
|
23
33
|
delete keys.$score;
|
|
24
|
-
keys.score = {
|
|
34
|
+
keys.score = {
|
|
35
|
+
$meta: 'textScore'
|
|
36
|
+
};
|
|
25
37
|
}
|
|
26
|
-
return this._rawFind(query, {
|
|
38
|
+
return this._rawFind(query, {
|
|
39
|
+
skip,
|
|
40
|
+
limit,
|
|
41
|
+
sort,
|
|
42
|
+
keys,
|
|
43
|
+
maxTimeMS,
|
|
44
|
+
readPreference,
|
|
45
|
+
hint,
|
|
46
|
+
caseInsensitive,
|
|
47
|
+
explain,
|
|
48
|
+
comment
|
|
49
|
+
}).catch(error => {
|
|
27
50
|
// Check for "no geoindex" error
|
|
28
51
|
if (error.code != 17007 && !error.message.match(/unable to find index for .geoNear/)) {
|
|
29
52
|
throw error;
|
|
@@ -33,81 +56,150 @@ class MongoCollection {
|
|
|
33
56
|
if (!key) {
|
|
34
57
|
throw error;
|
|
35
58
|
}
|
|
36
|
-
|
|
37
59
|
var index = {};
|
|
38
60
|
index[key] = '2d';
|
|
39
61
|
return this._mongoCollection.createIndex(index)
|
|
40
62
|
// Retry, but just once.
|
|
41
|
-
.then(() => this._rawFind(query, {
|
|
63
|
+
.then(() => this._rawFind(query, {
|
|
64
|
+
skip,
|
|
65
|
+
limit,
|
|
66
|
+
sort,
|
|
67
|
+
keys,
|
|
68
|
+
maxTimeMS,
|
|
69
|
+
readPreference,
|
|
70
|
+
hint,
|
|
71
|
+
caseInsensitive,
|
|
72
|
+
explain,
|
|
73
|
+
comment
|
|
74
|
+
}));
|
|
42
75
|
});
|
|
43
76
|
}
|
|
44
77
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Collation to support case insensitive queries
|
|
80
|
+
*/
|
|
81
|
+
static caseInsensitiveCollation() {
|
|
82
|
+
return {
|
|
83
|
+
locale: 'en_US',
|
|
84
|
+
strength: 2
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
_rawFind(query, {
|
|
88
|
+
skip,
|
|
89
|
+
limit,
|
|
90
|
+
sort,
|
|
91
|
+
keys,
|
|
92
|
+
maxTimeMS,
|
|
93
|
+
readPreference,
|
|
94
|
+
hint,
|
|
95
|
+
caseInsensitive,
|
|
96
|
+
explain,
|
|
97
|
+
comment
|
|
98
|
+
} = {}) {
|
|
99
|
+
let findOperation = this._mongoCollection.find(query, {
|
|
100
|
+
skip,
|
|
101
|
+
limit,
|
|
102
|
+
sort,
|
|
103
|
+
readPreference,
|
|
104
|
+
hint,
|
|
105
|
+
comment
|
|
106
|
+
});
|
|
48
107
|
if (keys) {
|
|
49
108
|
findOperation = findOperation.project(keys);
|
|
50
109
|
}
|
|
51
|
-
|
|
110
|
+
if (caseInsensitive) {
|
|
111
|
+
findOperation = findOperation.collation(MongoCollection.caseInsensitiveCollation());
|
|
112
|
+
}
|
|
52
113
|
if (maxTimeMS) {
|
|
53
114
|
findOperation = findOperation.maxTimeMS(maxTimeMS);
|
|
54
115
|
}
|
|
55
|
-
|
|
56
|
-
return findOperation.toArray();
|
|
116
|
+
return explain ? findOperation.explain(explain) : findOperation.toArray();
|
|
57
117
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
118
|
+
count(query, {
|
|
119
|
+
skip,
|
|
120
|
+
limit,
|
|
121
|
+
sort,
|
|
122
|
+
maxTimeMS,
|
|
123
|
+
readPreference,
|
|
124
|
+
hint,
|
|
125
|
+
comment
|
|
126
|
+
} = {}) {
|
|
127
|
+
// If query is empty, then use estimatedDocumentCount instead.
|
|
128
|
+
// This is due to countDocuments performing a scan,
|
|
129
|
+
// which greatly increases execution time when being run on large collections.
|
|
130
|
+
// See https://github.com/Automattic/mongoose/issues/6713 for more info regarding this problem.
|
|
131
|
+
if (typeof query !== 'object' || !Object.keys(query).length) {
|
|
132
|
+
return this._mongoCollection.estimatedDocumentCount({
|
|
133
|
+
maxTimeMS
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const countOperation = this._mongoCollection.countDocuments(query, {
|
|
137
|
+
skip,
|
|
138
|
+
limit,
|
|
139
|
+
sort,
|
|
140
|
+
maxTimeMS,
|
|
141
|
+
readPreference,
|
|
142
|
+
hint,
|
|
143
|
+
comment
|
|
144
|
+
});
|
|
62
145
|
return countOperation;
|
|
63
146
|
}
|
|
64
|
-
|
|
65
147
|
distinct(field, query) {
|
|
66
148
|
return this._mongoCollection.distinct(field, query);
|
|
67
149
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
150
|
+
aggregate(pipeline, {
|
|
151
|
+
maxTimeMS,
|
|
152
|
+
readPreference,
|
|
153
|
+
hint,
|
|
154
|
+
explain,
|
|
155
|
+
comment
|
|
156
|
+
} = {}) {
|
|
157
|
+
return this._mongoCollection.aggregate(pipeline, {
|
|
158
|
+
maxTimeMS,
|
|
159
|
+
readPreference,
|
|
160
|
+
hint,
|
|
161
|
+
explain,
|
|
162
|
+
comment
|
|
163
|
+
}).toArray();
|
|
71
164
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
165
|
+
insertOne(object, session) {
|
|
166
|
+
return this._mongoCollection.insertOne(object, {
|
|
167
|
+
session
|
|
168
|
+
});
|
|
75
169
|
}
|
|
76
170
|
|
|
77
171
|
// Atomically updates data in the database for a single (first) object that matched the query
|
|
78
172
|
// If there is nothing that matches the query - does insert
|
|
79
173
|
// Postgres Note: `INSERT ... ON CONFLICT UPDATE` that is available since 9.5.
|
|
80
|
-
upsertOne(query, update) {
|
|
81
|
-
return this._mongoCollection.
|
|
174
|
+
upsertOne(query, update, session) {
|
|
175
|
+
return this._mongoCollection.updateOne(query, update, {
|
|
176
|
+
upsert: true,
|
|
177
|
+
session
|
|
178
|
+
});
|
|
82
179
|
}
|
|
83
|
-
|
|
84
180
|
updateOne(query, update) {
|
|
85
181
|
return this._mongoCollection.updateOne(query, update);
|
|
86
182
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
183
|
+
updateMany(query, update, session) {
|
|
184
|
+
return this._mongoCollection.updateMany(query, update, {
|
|
185
|
+
session
|
|
186
|
+
});
|
|
90
187
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
188
|
+
deleteMany(query, session) {
|
|
189
|
+
return this._mongoCollection.deleteMany(query, {
|
|
190
|
+
session
|
|
191
|
+
});
|
|
94
192
|
}
|
|
95
|
-
|
|
96
193
|
_ensureSparseUniqueIndexInBackground(indexRequest) {
|
|
97
|
-
return
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
} else {
|
|
102
|
-
resolve();
|
|
103
|
-
}
|
|
104
|
-
});
|
|
194
|
+
return this._mongoCollection.createIndex(indexRequest, {
|
|
195
|
+
unique: true,
|
|
196
|
+
background: true,
|
|
197
|
+
sparse: true
|
|
105
198
|
});
|
|
106
199
|
}
|
|
107
|
-
|
|
108
200
|
drop() {
|
|
109
201
|
return this._mongoCollection.drop();
|
|
110
202
|
}
|
|
111
203
|
}
|
|
112
204
|
exports.default = MongoCollection;
|
|
113
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvQ29sbGVjdGlvbi5qcyJdLCJuYW1lcyI6WyJtb25nb2RiIiwicmVxdWlyZSIsIkNvbGxlY3Rpb24iLCJNb25nb0NvbGxlY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm1vbmdvQ29sbGVjdGlvbiIsIl9tb25nb0NvbGxlY3Rpb24iLCJmaW5kIiwicXVlcnkiLCJza2lwIiwibGltaXQiLCJzb3J0Iiwia2V5cyIsIm1heFRpbWVNUyIsInJlYWRQcmVmZXJlbmNlIiwiJHNjb3JlIiwic2NvcmUiLCIkbWV0YSIsIl9yYXdGaW5kIiwiY2F0Y2giLCJlcnJvciIsImNvZGUiLCJtZXNzYWdlIiwibWF0Y2giLCJrZXkiLCJpbmRleCIsImNyZWF0ZUluZGV4IiwidGhlbiIsImZpbmRPcGVyYXRpb24iLCJwcm9qZWN0IiwidG9BcnJheSIsImNvdW50IiwiY291bnRPcGVyYXRpb24iLCJkaXN0aW5jdCIsImZpZWxkIiwiYWdncmVnYXRlIiwicGlwZWxpbmUiLCJpbnNlcnRPbmUiLCJvYmplY3QiLCJ1cHNlcnRPbmUiLCJ1cGRhdGUiLCJ1cHNlcnQiLCJ1cGRhdGVPbmUiLCJ1cGRhdGVNYW55IiwiZGVsZXRlTWFueSIsIl9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZCIsImluZGV4UmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZW5zdXJlSW5kZXgiLCJ1bmlxdWUiLCJiYWNrZ3JvdW5kIiwic3BhcnNlIiwiZHJvcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFNQSxVQUFVQyxRQUFRLFNBQVIsQ0FBaEI7QUFDQSxNQUFNQyxhQUFhRixRQUFRRSxVQUEzQjs7QUFFZSxNQUFNQyxlQUFOLENBQXNCOztBQUduQ0MsY0FBWUMsZUFBWixFQUF3QztBQUN0QyxTQUFLQyxnQkFBTCxHQUF3QkQsZUFBeEI7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LFNBQU87QUFDTCxXQUFPLEtBQUtoRCxnQkFBTCxDQUFzQmdELElBQXRCLEVBQVA7QUFDRDtBQXhHa0M7a0JBQWhCbkQsZSIsImZpbGUiOiJNb25nb0NvbGxlY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBtb25nb2RiID0gcmVxdWlyZSgnbW9uZ29kYicpO1xuY29uc3QgQ29sbGVjdGlvbiA9IG1vbmdvZGIuQ29sbGVjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9uZ29Db2xsZWN0aW9uIHtcbiAgX21vbmdvQ29sbGVjdGlvbjpDb2xsZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKG1vbmdvQ29sbGVjdGlvbjpDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uID0gbW9uZ29Db2xsZWN0aW9uO1xuICB9XG5cbiAgLy8gRG9lcyBhIGZpbmQgd2l0aCBcInNtYXJ0IGluZGV4aW5nXCIuXG4gIC8vIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnMsIGlmIGl0IG5lZWRzIGEgZ2VvaW5kZXggYW5kIHRoZXJlIGlzXG4gIC8vIG5vbmUsIHRoZW4gYnVpbGQgdGhlIGdlb2luZGV4LlxuICAvLyBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGEgbG90IGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0J3MgYSBnb29kXG4gIC8vIGlkZWEuIE9yIGV2ZW4gaWYgdGhpcyBiZWhhdmlvciBpcyBhIGdvb2QgaWRlYS5cbiAgZmluZChxdWVyeSwgeyBza2lwLCBsaW1pdCwgc29ydCwga2V5cywgbWF4VGltZU1TLCByZWFkUHJlZmVyZW5jZSB9ID0ge30pIHtcbiAgICAvLyBTdXBwb3J0IGZvciBGdWxsIFRleHQgU2VhcmNoIC0gJHRleHRcbiAgICBpZihrZXlzICYmIGtleXMuJHNjb3JlKSB7XG4gICAgICBkZWxldGUga2V5cy4kc2NvcmU7XG4gICAgICBrZXlzLnNjb3JlID0geyRtZXRhOiAndGV4dFNjb3JlJ307XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7IHNraXAsIGxpbWl0LCBzb3J0LCBrZXlzLCBtYXhUaW1lTVMsIHJlYWRQcmVmZXJlbmNlIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAvLyBDaGVjayBmb3IgXCJubyBnZW9pbmRleFwiIGVycm9yXG4gICAgICAgIGlmIChlcnJvci5jb2RlICE9IDE3MDA3ICYmICFlcnJvci5tZXNzYWdlLm1hdGNoKC91bmFibGUgdG8gZmluZCBpbmRleCBmb3IgLmdlb05lYXIvKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBrZXkgbmVlZHMgYW4gaW5kZXhcbiAgICAgICAgY29uc3Qga2V5ID0gZXJyb3IubWVzc2FnZS5tYXRjaCgvZmllbGQ9KFtBLVphLXpfMC05XSspIC8pWzFdO1xuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4ID0ge307XG4gICAgICAgIGluZGV4W2tleV0gPSAnMmQnO1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmNyZWF0ZUluZGV4KGluZGV4KVxuICAgICAgICAgIC8vIFJldHJ5LCBidXQganVzdCBvbmNlLlxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3Jhd0ZpbmQocXVlcnksIHsgc2tpcCwgbGltaXQsIHNvcnQsIGtleXMsIG1heFRpbWVNUywgcmVhZFByZWZlcmVuY2UgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBfcmF3RmluZChxdWVyeSwgeyBza2lwLCBsaW1pdCwgc29ydCwga2V5cywgbWF4VGltZU1TLCByZWFkUHJlZmVyZW5jZSB9ID0ge30pIHtcbiAgICBsZXQgZmluZE9wZXJhdGlvbiA9IHRoaXMuX21vbmdvQ29sbGVjdGlvblxuICAgICAgLmZpbmQocXVlcnksIHsgc2tpcCwgbGltaXQsIHNvcnQsIHJlYWRQcmVmZXJlbmNlIH0pXG5cbiAgICBpZiAoa2V5cykge1xuICAgICAgZmluZE9wZXJhdGlvbiA9IGZpbmRPcGVyYXRpb24ucHJvamVjdChrZXlzKTtcbiAgICB9XG5cbiAgICBpZiAobWF4VGltZU1TKSB7XG4gICAgICBmaW5kT3BlcmF0aW9uID0gZmluZE9wZXJhdGlvbi5tYXhUaW1lTVMobWF4VGltZU1TKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZE9wZXJhdGlvbi50b0FycmF5KCk7XG4gIH1cblxuICBjb3VudChxdWVyeSwgeyBza2lwLCBsaW1pdCwgc29ydCwgbWF4VGltZU1TLCByZWFkUHJlZmVyZW5jZSB9ID0ge30pIHtcbiAgICBjb25zdCBjb3VudE9wZXJhdGlvbiA9IHRoaXMuX21vbmdvQ29sbGVjdGlvbi5jb3VudChxdWVyeSwgeyBza2lwLCBsaW1pdCwgc29ydCwgbWF4VGltZU1TLCByZWFkUHJlZmVyZW5jZSB9KTtcblxuICAgIHJldHVybiBjb3VudE9wZXJhdGlvbjtcbiAgfVxuXG4gIGRpc3RpbmN0KGZpZWxkLCBxdWVyeSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uZGlzdGluY3QoZmllbGQsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFnZ3JlZ2F0ZShwaXBlbGluZSwgeyBtYXhUaW1lTVMsIHJlYWRQcmVmZXJlbmNlIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uYWdncmVnYXRlKHBpcGVsaW5lLCB7IG1heFRpbWVNUywgcmVhZFByZWZlcmVuY2UgfSkudG9BcnJheSgpO1xuICB9XG5cbiAgaW5zZXJ0T25lKG9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uaW5zZXJ0T25lKG9iamVjdCk7XG4gIH1cblxuICAvLyBBdG9taWNhbGx5IHVwZGF0ZXMgZGF0YSBpbiB0aGUgZGF0YWJhc2UgZm9yIGEgc2luZ2xlIChmaXJzdCkgb2JqZWN0IHRoYXQgbWF0Y2hlZCB0aGUgcXVlcnlcbiAgLy8gSWYgdGhlcmUgaXMgbm90aGluZyB0aGF0IG1hdGNoZXMgdGhlIHF1ZXJ5IC0gZG9lcyBpbnNlcnRcbiAgLy8gUG9zdGdyZXMgTm90ZTogYElOU0VSVCAuLi4gT04gQ09ORkxJQ1QgVVBEQVRFYCB0aGF0IGlzIGF2YWlsYWJsZSBzaW5jZSA5LjUuXG4gIHVwc2VydE9uZShxdWVyeSwgdXBkYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi51cGRhdGUocXVlcnksIHVwZGF0ZSwgeyB1cHNlcnQ6IHRydWUgfSlcbiAgfVxuXG4gIHVwZGF0ZU9uZShxdWVyeSwgdXBkYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi51cGRhdGVPbmUocXVlcnksIHVwZGF0ZSk7XG4gIH1cblxuICB1cGRhdGVNYW55KHF1ZXJ5LCB1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLnVwZGF0ZU1hbnkocXVlcnksIHVwZGF0ZSk7XG4gIH1cblxuICBkZWxldGVNYW55KHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5kZWxldGVNYW55KHF1ZXJ5KTtcbiAgfVxuXG4gIF9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZChpbmRleFJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmVuc3VyZUluZGV4KGluZGV4UmVxdWVzdCwgeyB1bmlxdWU6IHRydWUsIGJhY2tncm91bmQ6IHRydWUsIHNwYXJzZTogdHJ1ZSB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRyb3AoKTtcbiAgfVxufVxuIl19
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb25nb2RiIiwicmVxdWlyZSIsIkNvbGxlY3Rpb24iLCJNb25nb0NvbGxlY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm1vbmdvQ29sbGVjdGlvbiIsIl9tb25nb0NvbGxlY3Rpb24iLCJmaW5kIiwicXVlcnkiLCJza2lwIiwibGltaXQiLCJzb3J0Iiwia2V5cyIsIm1heFRpbWVNUyIsInJlYWRQcmVmZXJlbmNlIiwiaGludCIsImNhc2VJbnNlbnNpdGl2ZSIsImV4cGxhaW4iLCJjb21tZW50IiwiJHNjb3JlIiwic2NvcmUiLCIkbWV0YSIsIl9yYXdGaW5kIiwiY2F0Y2giLCJlcnJvciIsImNvZGUiLCJtZXNzYWdlIiwibWF0Y2giLCJrZXkiLCJpbmRleCIsImNyZWF0ZUluZGV4IiwidGhlbiIsImNhc2VJbnNlbnNpdGl2ZUNvbGxhdGlvbiIsImxvY2FsZSIsInN0cmVuZ3RoIiwiZmluZE9wZXJhdGlvbiIsInByb2plY3QiLCJjb2xsYXRpb24iLCJ0b0FycmF5IiwiY291bnQiLCJPYmplY3QiLCJsZW5ndGgiLCJlc3RpbWF0ZWREb2N1bWVudENvdW50IiwiY291bnRPcGVyYXRpb24iLCJjb3VudERvY3VtZW50cyIsImRpc3RpbmN0IiwiZmllbGQiLCJhZ2dyZWdhdGUiLCJwaXBlbGluZSIsImluc2VydE9uZSIsIm9iamVjdCIsInNlc3Npb24iLCJ1cHNlcnRPbmUiLCJ1cGRhdGUiLCJ1cGRhdGVPbmUiLCJ1cHNlcnQiLCJ1cGRhdGVNYW55IiwiZGVsZXRlTWFueSIsIl9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZCIsImluZGV4UmVxdWVzdCIsInVuaXF1ZSIsImJhY2tncm91bmQiLCJzcGFyc2UiLCJkcm9wIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQWRhcHRlcnMvU3RvcmFnZS9Nb25nby9Nb25nb0NvbGxlY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbW9uZ29kYiA9IHJlcXVpcmUoJ21vbmdvZGInKTtcbmNvbnN0IENvbGxlY3Rpb24gPSBtb25nb2RiLkNvbGxlY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vbmdvQ29sbGVjdGlvbiB7XG4gIF9tb25nb0NvbGxlY3Rpb246IENvbGxlY3Rpb247XG5cbiAgY29uc3RydWN0b3IobW9uZ29Db2xsZWN0aW9uOiBDb2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uID0gbW9uZ29Db2xsZWN0aW9uO1xuICB9XG5cbiAgLy8gRG9lcyBhIGZpbmQgd2l0aCBcInNtYXJ0IGluZGV4aW5nXCIuXG4gIC8vIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnMsIGlmIGl0IG5lZWRzIGEgZ2VvaW5kZXggYW5kIHRoZXJlIGlzXG4gIC8vIG5vbmUsIHRoZW4gYnVpbGQgdGhlIGdlb2luZGV4LlxuICAvLyBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGEgbG90IGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0J3MgYSBnb29kXG4gIC8vIGlkZWEuIE9yIGV2ZW4gaWYgdGhpcyBiZWhhdmlvciBpcyBhIGdvb2QgaWRlYS5cbiAgZmluZChcbiAgICBxdWVyeSxcbiAgICB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBTdXBwb3J0IGZvciBGdWxsIFRleHQgU2VhcmNoIC0gJHRleHRcbiAgICBpZiAoa2V5cyAmJiBrZXlzLiRzY29yZSkge1xuICAgICAgZGVsZXRlIGtleXMuJHNjb3JlO1xuICAgICAga2V5cy5zY29yZSA9IHsgJG1ldGE6ICd0ZXh0U2NvcmUnIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICBza2lwLFxuICAgICAgbGltaXQsXG4gICAgICBzb3J0LFxuICAgICAga2V5cyxcbiAgICAgIG1heFRpbWVNUyxcbiAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgaGludCxcbiAgICAgIGNhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIGV4cGxhaW4sXG4gICAgICBjb21tZW50LFxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBcIm5vIGdlb2luZGV4XCIgZXJyb3JcbiAgICAgIGlmIChlcnJvci5jb2RlICE9IDE3MDA3ICYmICFlcnJvci5tZXNzYWdlLm1hdGNoKC91bmFibGUgdG8gZmluZCBpbmRleCBmb3IgLmdlb05lYXIvKSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBrZXkgbmVlZHMgYW4gaW5kZXhcbiAgICAgIGNvbnN0IGtleSA9IGVycm9yLm1lc3NhZ2UubWF0Y2goL2ZpZWxkPShbQS1aYS16XzAtOV0rKSAvKVsxXTtcbiAgICAgIGlmICgha2V5KSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSB7fTtcbiAgICAgIGluZGV4W2tleV0gPSAnMmQnO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fbW9uZ29Db2xsZWN0aW9uXG4gICAgICAgICAgLmNyZWF0ZUluZGV4KGluZGV4KVxuICAgICAgICAgIC8vIFJldHJ5LCBidXQganVzdCBvbmNlLlxuICAgICAgICAgIC50aGVuKCgpID0+XG4gICAgICAgICAgICB0aGlzLl9yYXdGaW5kKHF1ZXJ5LCB7XG4gICAgICAgICAgICAgIHNraXAsXG4gICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICBtYXhUaW1lTVMsXG4gICAgICAgICAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgICAgICAgICBoaW50LFxuICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmUsXG4gICAgICAgICAgICAgIGV4cGxhaW4sXG4gICAgICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGF0aW9uIHRvIHN1cHBvcnQgY2FzZSBpbnNlbnNpdGl2ZSBxdWVyaWVzXG4gICAqL1xuICBzdGF0aWMgY2FzZUluc2Vuc2l0aXZlQ29sbGF0aW9uKCkge1xuICAgIHJldHVybiB7IGxvY2FsZTogJ2VuX1VTJywgc3RyZW5ndGg6IDIgfTtcbiAgfVxuXG4gIF9yYXdGaW5kKFxuICAgIHF1ZXJ5LFxuICAgIHtcbiAgICAgIHNraXAsXG4gICAgICBsaW1pdCxcbiAgICAgIHNvcnQsXG4gICAgICBrZXlzLFxuICAgICAgbWF4VGltZU1TLFxuICAgICAgcmVhZFByZWZlcmVuY2UsXG4gICAgICBoaW50LFxuICAgICAgY2FzZUluc2Vuc2l0aXZlLFxuICAgICAgZXhwbGFpbixcbiAgICAgIGNvbW1lbnQsXG4gICAgfSA9IHt9XG4gICkge1xuICAgIGxldCBmaW5kT3BlcmF0aW9uID0gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmZpbmQocXVlcnksIHtcbiAgICAgIHNraXAsXG4gICAgICBsaW1pdCxcbiAgICAgIHNvcnQsXG4gICAgICByZWFkUHJlZmVyZW5jZSxcbiAgICAgIGhpbnQsXG4gICAgICBjb21tZW50LFxuICAgIH0pO1xuXG4gICAgaWYgKGtleXMpIHtcbiAgICAgIGZpbmRPcGVyYXRpb24gPSBmaW5kT3BlcmF0aW9uLnByb2plY3Qoa2V5cyk7XG4gICAgfVxuXG4gICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkge1xuICAgICAgZmluZE9wZXJhdGlvbiA9IGZpbmRPcGVyYXRpb24uY29sbGF0aW9uKE1vbmdvQ29sbGVjdGlvbi5jYXNlSW5zZW5zaXRpdmVDb2xsYXRpb24oKSk7XG4gICAgfVxuXG4gICAgaWYgKG1heFRpbWVNUykge1xuICAgICAgZmluZE9wZXJhdGlvbiA9IGZpbmRPcGVyYXRpb24ubWF4VGltZU1TKG1heFRpbWVNUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGxhaW4gPyBmaW5kT3BlcmF0aW9uLmV4cGxhaW4oZXhwbGFpbikgOiBmaW5kT3BlcmF0aW9uLnRvQXJyYXkoKTtcbiAgfVxuXG4gIGNvdW50KHF1ZXJ5LCB7IHNraXAsIGxpbWl0LCBzb3J0LCBtYXhUaW1lTVMsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBjb21tZW50IH0gPSB7fSkge1xuICAgIC8vIElmIHF1ZXJ5IGlzIGVtcHR5LCB0aGVuIHVzZSBlc3RpbWF0ZWREb2N1bWVudENvdW50IGluc3RlYWQuXG4gICAgLy8gVGhpcyBpcyBkdWUgdG8gY291bnREb2N1bWVudHMgcGVyZm9ybWluZyBhIHNjYW4sXG4gICAgLy8gd2hpY2ggZ3JlYXRseSBpbmNyZWFzZXMgZXhlY3V0aW9uIHRpbWUgd2hlbiBiZWluZyBydW4gb24gbGFyZ2UgY29sbGVjdGlvbnMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9BdXRvbWF0dGljL21vbmdvb3NlL2lzc3Vlcy82NzEzIGZvciBtb3JlIGluZm8gcmVnYXJkaW5nIHRoaXMgcHJvYmxlbS5cbiAgICBpZiAodHlwZW9mIHF1ZXJ5ICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5lc3RpbWF0ZWREb2N1bWVudENvdW50KHtcbiAgICAgICAgbWF4VGltZU1TLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnRPcGVyYXRpb24gPSB0aGlzLl9tb25nb0NvbGxlY3Rpb24uY291bnREb2N1bWVudHMocXVlcnksIHtcbiAgICAgIHNraXAsXG4gICAgICBsaW1pdCxcbiAgICAgIHNvcnQsXG4gICAgICBtYXhUaW1lTVMsXG4gICAgICByZWFkUHJlZmVyZW5jZSxcbiAgICAgIGhpbnQsXG4gICAgICBjb21tZW50LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvdW50T3BlcmF0aW9uO1xuICB9XG5cbiAgZGlzdGluY3QoZmllbGQsIHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5kaXN0aW5jdChmaWVsZCwgcXVlcnkpO1xuICB9XG5cbiAgYWdncmVnYXRlKHBpcGVsaW5lLCB7IG1heFRpbWVNUywgcmVhZFByZWZlcmVuY2UsIGhpbnQsIGV4cGxhaW4sIGNvbW1lbnQgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvblxuICAgICAgLmFnZ3JlZ2F0ZShwaXBlbGluZSwgeyBtYXhUaW1lTVMsIHJlYWRQcmVmZXJlbmNlLCBoaW50LCBleHBsYWluLCBjb21tZW50IH0pXG4gICAgICAudG9BcnJheSgpO1xuICB9XG5cbiAgaW5zZXJ0T25lKG9iamVjdCwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24uaW5zZXJ0T25lKG9iamVjdCwgeyBzZXNzaW9uIH0pO1xuICB9XG5cbiAgLy8gQXRvbWljYWxseSB1cGRhdGVzIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGZvciBhIHNpbmdsZSAoZmlyc3QpIG9iamVjdCB0aGF0IG1hdGNoZWQgdGhlIHF1ZXJ5XG4gIC8vIElmIHRoZXJlIGlzIG5vdGhpbmcgdGhhdCBtYXRjaGVzIHRoZSBxdWVyeSAtIGRvZXMgaW5zZXJ0XG4gIC8vIFBvc3RncmVzIE5vdGU6IGBJTlNFUlQgLi4uIE9OIENPTkZMSUNUIFVQREFURWAgdGhhdCBpcyBhdmFpbGFibGUgc2luY2UgOS41LlxuICB1cHNlcnRPbmUocXVlcnksIHVwZGF0ZSwgc2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUsIHtcbiAgICAgIHVwc2VydDogdHJ1ZSxcbiAgICAgIHNlc3Npb24sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVPbmUocXVlcnksIHVwZGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9tb25nb0NvbGxlY3Rpb24udXBkYXRlT25lKHF1ZXJ5LCB1cGRhdGUpO1xuICB9XG5cbiAgdXBkYXRlTWFueShxdWVyeSwgdXBkYXRlLCBzZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi51cGRhdGVNYW55KHF1ZXJ5LCB1cGRhdGUsIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1hbnkocXVlcnksIHNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmRlbGV0ZU1hbnkocXVlcnksIHsgc2Vzc2lvbiB9KTtcbiAgfVxuXG4gIF9lbnN1cmVTcGFyc2VVbmlxdWVJbmRleEluQmFja2dyb3VuZChpbmRleFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uZ29Db2xsZWN0aW9uLmNyZWF0ZUluZGV4KGluZGV4UmVxdWVzdCwge1xuICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgIHNwYXJzZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGRyb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vbmdvQ29sbGVjdGlvbi5kcm9wKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1DLFVBQVUsR0FBR0YsT0FBTyxDQUFDRSxVQUFVO0FBRXRCLE1BQU1DLGVBQWUsQ0FBQztFQUduQ0MsV0FBV0EsQ0FBQ0MsZUFBMkIsRUFBRTtJQUN2QyxJQUFJLENBQUNDLGdCQUFnQixHQUFHRCxlQUFlO0VBQ3pDOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQUUsSUFBSUEsQ0FDRkMsS0FBSyxFQUNMO0lBQ0VDLElBQUk7SUFDSkMsS0FBSztJQUNMQyxJQUFJO0lBQ0pDLElBQUk7SUFDSkMsU0FBUztJQUNUQyxjQUFjO0lBQ2RDLElBQUk7SUFD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
|