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,65 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.FunctionsRouter =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _StatusHandler = require('../StatusHandler');
|
|
15
|
-
|
|
16
|
-
var _lodash = require('lodash');
|
|
17
|
-
|
|
18
|
-
var _lodash2 = _interopRequireDefault(_lodash);
|
|
19
|
-
|
|
20
|
-
var _logger = require('../logger');
|
|
21
|
-
|
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
6
|
+
exports.FunctionsRouter = void 0;
|
|
7
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
8
|
+
var _middlewares = require("../middlewares");
|
|
9
|
+
var _StatusHandler = require("../StatusHandler");
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
+
var _logger = require("../logger");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
24
13
|
// FunctionsRouter.js
|
|
25
14
|
|
|
26
15
|
var Parse = require('parse/node').Parse,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function parseObject(obj) {
|
|
16
|
+
triggers = require('../triggers');
|
|
17
|
+
function parseObject(obj, config) {
|
|
30
18
|
if (Array.isArray(obj)) {
|
|
31
19
|
return obj.map(item => {
|
|
32
|
-
return parseObject(item);
|
|
20
|
+
return parseObject(item, config);
|
|
33
21
|
});
|
|
34
22
|
} else if (obj && obj.__type == 'Date') {
|
|
35
23
|
return Object.assign(new Date(obj.iso), obj);
|
|
36
24
|
} else if (obj && obj.__type == 'File') {
|
|
37
25
|
return Parse.File.fromJSON(obj);
|
|
26
|
+
} else if (obj && obj.__type == 'Pointer' && config.encodeParseObjectInCloudFunction) {
|
|
27
|
+
return Parse.Object.fromJSON({
|
|
28
|
+
__type: 'Pointer',
|
|
29
|
+
className: obj.className,
|
|
30
|
+
objectId: obj.objectId
|
|
31
|
+
});
|
|
38
32
|
} else if (obj && typeof obj === 'object') {
|
|
39
|
-
return parseParams(obj);
|
|
33
|
+
return parseParams(obj, config);
|
|
40
34
|
} else {
|
|
41
35
|
return obj;
|
|
42
36
|
}
|
|
43
37
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return _lodash2.default.mapValues(params, parseObject);
|
|
38
|
+
function parseParams(params, config) {
|
|
39
|
+
return _lodash.default.mapValues(params, item => parseObject(item, config));
|
|
47
40
|
}
|
|
48
|
-
|
|
49
|
-
class FunctionsRouter extends _PromiseRouter2.default {
|
|
50
|
-
|
|
41
|
+
class FunctionsRouter extends _PromiseRouter.default {
|
|
51
42
|
mountRoutes() {
|
|
52
|
-
this.route('POST', '/functions/:functionName', FunctionsRouter.handleCloudFunction);
|
|
53
|
-
this.route('POST', '/jobs/:jobName', _middlewares.promiseEnforceMasterKeyAccess, function (req) {
|
|
43
|
+
this.route('POST', '/functions/:functionName', _middlewares.promiseEnsureIdempotency, FunctionsRouter.handleCloudFunction);
|
|
44
|
+
this.route('POST', '/jobs/:jobName', _middlewares.promiseEnsureIdempotency, _middlewares.promiseEnforceMasterKeyAccess, function (req) {
|
|
54
45
|
return FunctionsRouter.handleCloudJob(req);
|
|
55
46
|
});
|
|
56
47
|
this.route('POST', '/jobs', _middlewares.promiseEnforceMasterKeyAccess, function (req) {
|
|
57
48
|
return FunctionsRouter.handleCloudJob(req);
|
|
58
49
|
});
|
|
59
50
|
}
|
|
60
|
-
|
|
61
51
|
static handleCloudJob(req) {
|
|
62
|
-
const jobName = req.params.jobName || req.body
|
|
52
|
+
const jobName = req.params.jobName || req.body?.jobName;
|
|
63
53
|
const applicationId = req.config.applicationId;
|
|
64
54
|
const jobHandler = (0, _StatusHandler.jobStatusHandler)(req.config);
|
|
65
55
|
const jobFunction = triggers.getJob(jobName, applicationId);
|
|
@@ -67,24 +57,27 @@ class FunctionsRouter extends _PromiseRouter2.default {
|
|
|
67
57
|
throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Invalid job.');
|
|
68
58
|
}
|
|
69
59
|
let params = Object.assign({}, req.body, req.query);
|
|
70
|
-
params = parseParams(params);
|
|
60
|
+
params = parseParams(params, req.config);
|
|
71
61
|
const request = {
|
|
72
62
|
params: params,
|
|
73
63
|
log: req.config.loggerController,
|
|
74
64
|
headers: req.config.headers,
|
|
75
65
|
ip: req.config.ip,
|
|
76
|
-
jobName
|
|
77
|
-
|
|
78
|
-
const status = {
|
|
79
|
-
success: jobHandler.setSucceeded.bind(jobHandler),
|
|
80
|
-
error: jobHandler.setFailed.bind(jobHandler),
|
|
66
|
+
jobName,
|
|
67
|
+
config: req.config,
|
|
81
68
|
message: jobHandler.setMessage.bind(jobHandler)
|
|
82
69
|
};
|
|
83
|
-
return jobHandler.setRunning(jobName
|
|
70
|
+
return jobHandler.setRunning(jobName).then(jobStatus => {
|
|
84
71
|
request.jobId = jobStatus.objectId;
|
|
85
72
|
// run the function async
|
|
86
73
|
process.nextTick(() => {
|
|
87
|
-
|
|
74
|
+
Promise.resolve().then(() => {
|
|
75
|
+
return jobFunction(request);
|
|
76
|
+
}).then(result => {
|
|
77
|
+
jobHandler.setSucceeded(result);
|
|
78
|
+
}, error => {
|
|
79
|
+
jobHandler.setFailed(error);
|
|
80
|
+
});
|
|
88
81
|
});
|
|
89
82
|
return {
|
|
90
83
|
headers: {
|
|
@@ -94,8 +87,7 @@ class FunctionsRouter extends _PromiseRouter2.default {
|
|
|
94
87
|
};
|
|
95
88
|
});
|
|
96
89
|
}
|
|
97
|
-
|
|
98
|
-
static createResponseObject(resolve, reject, message) {
|
|
90
|
+
static createResponseObject(resolve, reject) {
|
|
99
91
|
return {
|
|
100
92
|
success: function (result) {
|
|
101
93
|
resolve({
|
|
@@ -104,84 +96,76 @@ class FunctionsRouter extends _PromiseRouter2.default {
|
|
|
104
96
|
}
|
|
105
97
|
});
|
|
106
98
|
},
|
|
107
|
-
error: function (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
message = code;
|
|
113
|
-
code = Parse.Error.SCRIPT_FAILED;
|
|
114
|
-
}
|
|
115
|
-
reject(new Parse.Error(code, message));
|
|
116
|
-
},
|
|
117
|
-
message: message
|
|
99
|
+
error: function (message) {
|
|
100
|
+
const error = triggers.resolveError(message);
|
|
101
|
+
reject(error);
|
|
102
|
+
}
|
|
118
103
|
};
|
|
119
104
|
}
|
|
120
|
-
|
|
121
105
|
static handleCloudFunction(req) {
|
|
122
106
|
const functionName = req.params.functionName;
|
|
123
107
|
const applicationId = req.config.applicationId;
|
|
124
108
|
const theFunction = triggers.getFunction(functionName, applicationId);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
try {
|
|
109
|
+
if (!theFunction) {
|
|
110
|
+
throw new Parse.Error(Parse.Error.SCRIPT_FAILED, `Invalid function: "${functionName}"`);
|
|
111
|
+
}
|
|
112
|
+
let params = Object.assign({}, req.body, req.query);
|
|
113
|
+
params = parseParams(params, req.config);
|
|
114
|
+
const request = {
|
|
115
|
+
params: params,
|
|
116
|
+
config: req.config,
|
|
117
|
+
master: req.auth && req.auth.isMaster,
|
|
118
|
+
user: req.auth && req.auth.user,
|
|
119
|
+
installationId: req.info.installationId,
|
|
120
|
+
log: req.config.loggerController,
|
|
121
|
+
headers: req.config.headers,
|
|
122
|
+
ip: req.config.ip,
|
|
123
|
+
functionName,
|
|
124
|
+
context: req.info.context
|
|
125
|
+
};
|
|
126
|
+
return new Promise(function (resolve, reject) {
|
|
127
|
+
const userString = req.auth && req.auth.user ? req.auth.user.id : undefined;
|
|
128
|
+
const {
|
|
129
|
+
success,
|
|
130
|
+
error
|
|
131
|
+
} = FunctionsRouter.createResponseObject(result => {
|
|
132
|
+
try {
|
|
133
|
+
if (req.config.logLevels.cloudFunctionSuccess !== 'silent') {
|
|
134
|
+
const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
|
|
152
135
|
const cleanResult = _logger.logger.truncateLogMessage(JSON.stringify(result.response.result));
|
|
153
|
-
_logger.logger.
|
|
136
|
+
_logger.logger[req.config.logLevels.cloudFunctionSuccess](`Ran cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Result: ${cleanResult}`, {
|
|
154
137
|
functionName,
|
|
155
138
|
params,
|
|
156
139
|
user: userString
|
|
157
140
|
});
|
|
158
|
-
resolve(result);
|
|
159
|
-
} catch (e) {
|
|
160
|
-
reject(e);
|
|
161
141
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
142
|
+
resolve(result);
|
|
143
|
+
} catch (e) {
|
|
144
|
+
reject(e);
|
|
145
|
+
}
|
|
146
|
+
}, error => {
|
|
147
|
+
try {
|
|
148
|
+
if (req.config.logLevels.cloudFunctionError !== 'silent') {
|
|
149
|
+
const cleanInput = _logger.logger.truncateLogMessage(JSON.stringify(params));
|
|
150
|
+
_logger.logger[req.config.logLevels.cloudFunctionError](`Failed running cloud function ${functionName} for user ${userString} with:\n Input: ${cleanInput}\n Error: ` + JSON.stringify(error), {
|
|
165
151
|
functionName,
|
|
166
152
|
error,
|
|
167
153
|
params,
|
|
168
154
|
user: userString
|
|
169
155
|
});
|
|
170
|
-
reject(error);
|
|
171
|
-
} catch (e) {
|
|
172
|
-
reject(e);
|
|
173
156
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
Parse.masterKey = req.config.masterKey;
|
|
179
|
-
theFunction(request, response);
|
|
157
|
+
reject(error);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
reject(e);
|
|
160
|
+
}
|
|
180
161
|
});
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
162
|
+
return Promise.resolve().then(() => {
|
|
163
|
+
return triggers.maybeRunValidator(request, functionName, req.auth);
|
|
164
|
+
}).then(() => {
|
|
165
|
+
return theFunction(request);
|
|
166
|
+
}).then(success, error);
|
|
167
|
+
});
|
|
184
168
|
}
|
|
185
169
|
}
|
|
186
170
|
exports.FunctionsRouter = FunctionsRouter;
|
|
187
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0Z1bmN0aW9uc1JvdXRlci5qcyJdLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJ0cmlnZ2VycyIsInBhcnNlT2JqZWN0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIl9fdHlwZSIsIk9iamVjdCIsImFzc2lnbiIsIkRhdGUiLCJpc28iLCJGaWxlIiwiZnJvbUpTT04iLCJwYXJzZVBhcmFtcyIsInBhcmFtcyIsIl8iLCJtYXBWYWx1ZXMiLCJGdW5jdGlvbnNSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImhhbmRsZUNsb3VkRnVuY3Rpb24iLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcSIsImhhbmRsZUNsb3VkSm9iIiwiam9iTmFtZSIsImJvZHkiLCJhcHBsaWNhdGlvbklkIiwiY29uZmlnIiwiam9iSGFuZGxlciIsImpvYkZ1bmN0aW9uIiwiZ2V0Sm9iIiwiRXJyb3IiLCJTQ1JJUFRfRkFJTEVEIiwicXVlcnkiLCJyZXF1ZXN0IiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImhlYWRlcnMiLCJpcCIsInN0YXR1cyIsInN1Y2Nlc3MiLCJzZXRTdWNjZWVkZWQiLCJiaW5kIiwiZXJyb3IiLCJzZXRGYWlsZWQiLCJtZXNzYWdlIiwic2V0TWVzc2FnZSIsInNldFJ1bm5pbmciLCJ0aGVuIiwiam9iU3RhdHVzIiwiam9iSWQiLCJvYmplY3RJZCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc3BvbnNlIiwiY3JlYXRlUmVzcG9uc2VPYmplY3QiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzdWx0IiwiX2VuY29kZSIsImNvZGUiLCJmdW5jdGlvbk5hbWUiLCJ0aGVGdW5jdGlvbiIsImdldEZ1bmN0aW9uIiwidGhlVmFsaWRhdG9yIiwiZ2V0VmFsaWRhdG9yIiwibWFzdGVyIiwiYXV0aCIsImlzTWFzdGVyIiwidXNlciIsImluc3RhbGxhdGlvbklkIiwiaW5mbyIsIlZBTElEQVRJT05fRVJST1IiLCJQcm9taXNlIiwidXNlclN0cmluZyIsImlkIiwidW5kZWZpbmVkIiwiY2xlYW5JbnB1dCIsImxvZ2dlciIsInRydW5jYXRlTG9nTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhblJlc3VsdCIsImUiLCJqYXZhc2NyaXB0S2V5IiwibWFzdGVyS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0E7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBVEE7O0FBRUEsSUFBSUEsUUFBUUMsUUFBUSxZQUFSLEVBQXNCRCxLQUFsQztBQUFBLElBQ0VFLFdBQVdELFFBQVEsYUFBUixDQURiOztBQVNBLFNBQVNFLFdBQVQsQ0FBcUJDLEdBQXJCLEVBQTBCO0FBQ3hCLE1BQUlDLE1BQU1DLE9BQU4sQ0FBY0YsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFdBQU9BLElBQUlHLEdBQUosQ0FBU0MsSUFBRCxJQUFVO0FBQ3ZCLGFBQU9MLFlBQVlLLElBQVosQ0FBUDtBQUNELEtBRk0sQ0FBUDtBQUdELEdBSkQsTUFJTyxJQUFJSixPQUFPQSxJQUFJSyxNQUFKLElBQWMsTUFBekIsRUFBaUM7QUFDdEMsV0FBT0MsT0FBT0MsTUFBUCxDQUFjLElBQUlDLElBQUosQ0FBU1IsSUFBSVMsR0FBYixDQUFkLEVBQWlDVCxHQUFqQyxDQUFQO0FBQ0QsR0FGTSxNQUVBLElBQUlBLE9BQU9BLElBQUlLLE1BQUosSUFBYyxNQUF6QixFQUFpQztBQUN0QyxXQUFPVCxNQUFNYyxJQUFOLENBQVdDLFFBQVgsQ0FBb0JYLEdBQXBCLENBQVA7QUFDRCxHQUZNLE1BRUEsSUFBSUEsT0FBTyxPQUFPQSxHQUFQLEtBQWUsUUFBMUIsRUFBb0M7QUFDekMsV0FBT1ksWUFBWVosR0FBWixDQUFQO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsV0FBT0EsR0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU1ksV0FBVCxDQUFxQkMsTUFBckIsRUFBNkI7QUFDM0IsU0FBT0MsaUJBQUVDLFNBQUYsQ0FBWUYsTUFBWixFQUFvQmQsV0FBcEIsQ0FBUDtBQUNEOztBQUVNLE1BQU1pQixlQUFOLFNBQThCQyx1QkFBOUIsQ0FBNEM7O0FBRWpEQyxnQkFBYztBQUNaLFNBQUtDLEtBQUwsQ0FBVyxNQUFYLEVBQW1CLDBCQUFuQixFQUErQ0gsZ0JBQWdCSSxtQkFBL0Q7QUFDQSxTQUFLRCxLQUFMLENBQVcsTUFBWCxFQUFtQixnQkFBbkIsRUFBcUNFLDBDQUFyQyxFQUFvRSxVQUFTQyxHQUFULEVBQWM7QUFDaEYsYUFBT04sZ0JBQWdCTyxjQUFoQixDQUErQkQsR0FBL0IsQ0FBUDtBQUNELEtBRkQ7QUFHQSxTQUFLSCxLQUFMLENBQVcsTUFBWCxFQUFtQixPQUFuQixFQUE0QkUsMENBQTVCLEVBQTJELFVBQVNDLEdBQVQsRUFBYztBQUN2RSxhQUFPTixnQkFBZ0JPLGNBQWhCLENBQStCRCxHQUEvQixDQUFQO0FBQ0QsS0FGRDtBQUdEOztBQUVELFNBQU9DLGNBQVAsQ0FBc0JELEdBQXRCLEVBQTJCO0FBQ3pCLFVBQU1FLFVBQVVGLElBQUlULE1BQUosQ0FBV1csT0FBWCxJQUFzQkYsSUFBSUcsSUFBSixDQUFTRCxPQUEvQztBQUNBLFVBQU1FLGdCQUFnQkosSUFBSUssTUFBSixDQUFXRCxhQUFqQztBQUNBLFVBQU1FLGFBQWEscUNBQWlCTixJQUFJSyxNQUFyQixDQUFuQjtBQUNBLFVBQU1FLGNBQWMvQixTQUFTZ0MsTUFBVCxDQUFnQk4sT0FBaEIsRUFBeUJFLGFBQXpCLENBQXBCO0FBQ0EsUUFBSSxDQUFDRyxXQUFMLEVBQWtCO0FBQ2hCLFlBQU0sSUFBSWpDLE1BQU1tQyxLQUFWLENBQWdCbkMsTUFBTW1DLEtBQU4sQ0FBWUMsYUFBNUIsRUFBMkMsY0FBM0MsQ0FBTjtBQUNEO0FBQ0QsUUFBSW5CLFNBQVNQLE9BQU9DLE1BQVAsQ0FBYyxFQUFkLEVBQWtCZSxJQUFJRyxJQUF0QixFQUE0QkgsSUFBSVcsS0FBaEMsQ0FBYjtBQUNBcEIsYUFBU0QsWUFBWUMsTUFBWixDQUFUO0FBQ0EsVUFBTXFCLFVBQVU7QUFDZHJCLGNBQVFBLE1BRE07QUFFZHNCLFdBQUtiLElBQUlLLE1BQUosQ0FBV1MsZ0JBRkY7QUFHZEMsZUFBU2YsSUFBSUssTUFBSixDQUFXVSxPQUhOO0FBSWRDLFVBQUloQixJQUFJSyxNQUFKLENBQVdXLEVBSkQ7QUFLZGQ7QUFMYyxLQUFoQjtBQU9BLFVBQU1lLFNBQVM7QUFDYkMsZUFBU1osV0FBV2EsWUFBWCxDQUF3QkMsSUFBeEIsQ0FBNkJkLFVBQTdCLENBREk7QUFFYmUsYUFBT2YsV0FBV2dCLFNBQVgsQ0FBcUJGLElBQXJCLENBQTBCZCxVQUExQixDQUZNO0FBR2JpQixlQUFTakIsV0FBV2tCLFVBQVgsQ0FBc0JKLElBQXRCLENBQTJCZCxVQUEzQjtBQUhJLEtBQWY7QUFLQSxXQUFPQSxXQUFXbUIsVUFBWCxDQUFzQnZCLE9BQXRCLEVBQStCWCxNQUEvQixFQUF1Q21DLElBQXZDLENBQTZDQyxTQUFELElBQWU7QUFDaEVmLGNBQVFnQixLQUFSLEdBQWdCRCxVQUFVRSxRQUExQjtBQUNBO0FBQ0FDLGNBQVFDLFFBQVIsQ0FBaUIsTUFBTTtBQUNyQnhCLG9CQUFZSyxPQUFaLEVBQXFCSyxNQUFyQjtBQUNELE9BRkQ7QUFHQSxhQUFPO0FBQ0xGLGlCQUFTO0FBQ1AsbUNBQXlCWSxVQUFVRTtBQUQ1QixTQURKO0FBSUxHLGtCQUFVO0FBSkwsT0FBUDtBQU1ELEtBWk0sQ0FBUDtBQWFEOztBQUVELFNBQU9DLG9CQUFQLENBQTRCQyxPQUE1QixFQUFxQ0MsTUFBckMsRUFBNkNaLE9BQTdDLEVBQXNEO0FBQ3BELFdBQU87QUFDTEwsZUFBUyxVQUFTa0IsTUFBVCxFQUFpQjtBQUN4QkYsZ0JBQVE7QUFDTkYsb0JBQVU7QUFDUkksb0JBQVE5RCxNQUFNK0QsT0FBTixDQUFjRCxNQUFkO0FBREE7QUFESixTQUFSO0FBS0QsT0FQSTtBQVFMZixhQUFPLFVBQVNpQixJQUFULEVBQWVmLE9BQWYsRUFBd0I7QUFDN0IsWUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDWixjQUFJZSxnQkFBZ0JoRSxNQUFNbUMsS0FBMUIsRUFBaUM7QUFDL0IsbUJBQU8wQixPQUFPRyxJQUFQLENBQVA7QUFDRDtBQUNEZixvQkFBVWUsSUFBVjtBQUNBQSxpQkFBT2hFLE1BQU1tQyxLQUFOLENBQVlDLGFBQW5CO0FBQ0Q7QUFDRHlCLGVBQU8sSUFBSTdELE1BQU1tQyxLQUFWLENBQWdCNkIsSUFBaEIsRUFBc0JmLE9BQXRCLENBQVA7QUFDRCxPQWpCSTtBQWtCTEEsZUFBU0E7QUFsQkosS0FBUDtBQW9CRDs7QUFFRCxTQUFPekIsbUJBQVAsQ0FBMkJFLEdBQTNCLEVBQWdDO0FBQzlCLFVBQU11QyxlQUFldkMsSUFBSVQsTUFBSixDQUFXZ0QsWUFBaEM7QUFDQSxVQUFNbkMsZ0JBQWdCSixJQUFJSyxNQUFKLENBQVdELGFBQWpDO0FBQ0EsVUFBTW9DLGNBQWNoRSxTQUFTaUUsV0FBVCxDQUFxQkYsWUFBckIsRUFBbUNuQyxhQUFuQyxDQUFwQjtBQUNBLFVBQU1zQyxlQUFlbEUsU0FBU21FLFlBQVQsQ0FBc0IzQyxJQUFJVCxNQUFKLENBQVdnRCxZQUFqQyxFQUErQ25DLGFBQS9DLENBQXJCO0FBQ0EsUUFBSW9DLFdBQUosRUFBaUI7QUFDZixVQUFJakQsU0FBU1AsT0FBT0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JlLElBQUlHLElBQXRCLEVBQTRCSCxJQUFJVyxLQUFoQyxDQUFiO0FBQ0FwQixlQUFTRCxZQUFZQyxNQUFaLENBQVQ7QUFDQSxVQUFJcUIsVUFBVTtBQUNackIsZ0JBQVFBLE1BREk7QUFFWnFELGdCQUFRNUMsSUFBSTZDLElBQUosSUFBWTdDLElBQUk2QyxJQUFKLENBQVNDLFFBRmpCO0FBR1pDLGNBQU0vQyxJQUFJNkMsSUFBSixJQUFZN0MsSUFBSTZDLElBQUosQ0FBU0UsSUFIZjtBQUlaQyx3QkFBZ0JoRCxJQUFJaUQsSUFBSixDQUFTRCxjQUpiO0FBS1puQyxhQUFLYixJQUFJSyxNQUFKLENBQVdTLGdCQUxKO0FBTVpDLGlCQUFTZixJQUFJSyxNQUFKLENBQVdVLE9BTlI7QUFPWkMsWUFBSWhCLElBQUlLLE1BQUosQ0FBV1csRUFQSDtBQVFadUI7QUFSWSxPQUFkOztBQVdBLFVBQUlHLGdCQUFnQixPQUFPQSxZQUFQLEtBQXdCLFVBQTVDLEVBQXdEO0FBQ3RELFlBQUlOLFNBQVNNLGFBQWE5QixPQUFiLENBQWI7QUFDQSxZQUFJLENBQUN3QixNQUFMLEVBQWE7QUFDWCxnQkFBTSxJQUFJOUQsTUFBTW1DLEtBQVYsQ0FBZ0JuQyxNQUFNbUMsS0FBTixDQUFZeUMsZ0JBQTVCLEVBQThDLG9CQUE5QyxDQUFOO0FBQ0Q7QUFDRjs7QUFFRCxhQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFVakIsT0FBVixFQUFtQkMsTUFBbkIsRUFBMkI7QUFDNUMsY0FBTWlCLGFBQWNwRCxJQUFJNkMsSUFBSixJQUFZN0MsSUFBSTZDLElBQUosQ0FBU0UsSUFBdEIsR0FBOEIvQyxJQUFJNkMsSUFBSixDQUFTRSxJQUFULENBQWNNLEVBQTVDLEdBQWlEQyxTQUFwRTtBQUNBLGNBQU1DLGFBQWFDLGVBQU9DLGtCQUFQLENBQTBCQyxLQUFLQyxTQUFMLENBQWVwRSxNQUFmLENBQTFCLENBQW5CO0FBQ0EsWUFBSXlDLFdBQVd0QyxnQkFBZ0J1QyxvQkFBaEIsQ0FBc0NHLE1BQUQsSUFBWTtBQUM5RCxjQUFJO0FBQ0Ysa0JBQU13QixjQUFjSixlQUFPQyxrQkFBUCxDQUEwQkMsS0FBS0MsU0FBTCxDQUFldkIsT0FBT0osUUFBUCxDQUFnQkksTUFBL0IsQ0FBMUIsQ0FBcEI7QUFDQW9CLDJCQUFPUCxJQUFQLENBQ0csc0JBQXFCVixZQUFhLGFBQVlhLFVBQVcsb0JBQW1CRyxVQUFZLGVBQWNLLFdBQWEsRUFEdEgsRUFFRTtBQUNFckIsMEJBREY7QUFFRWhELG9CQUZGO0FBR0V3RCxvQkFBTUs7QUFIUixhQUZGO0FBUUFsQixvQkFBUUUsTUFBUjtBQUNELFdBWEQsQ0FXRSxPQUFPeUIsQ0FBUCxFQUFVO0FBQ1YxQixtQkFBTzBCLENBQVA7QUFDRDtBQUNGLFNBZmMsRUFlWHhDLEtBQUQsSUFBVztBQUNaLGNBQUk7QUFDRm1DLDJCQUFPbkMsS0FBUCxDQUNHLGlDQUFnQ2tCLFlBQWEsYUFBWWEsVUFBVyxvQkFBbUJHLFVBQVcsYUFBbkcsR0FBa0hHLEtBQUtDLFNBQUwsQ0FBZXRDLEtBQWYsQ0FEcEgsRUFFRTtBQUNFa0IsMEJBREY7QUFFRWxCLG1CQUZGO0FBR0U5QixvQkFIRjtBQUlFd0Qsb0JBQU1LO0FBSlIsYUFGRjtBQVNBakIsbUJBQU9kLEtBQVA7QUFDRCxXQVhELENBV0UsT0FBT3dDLENBQVAsRUFBVTtBQUNWMUIsbUJBQU8wQixDQUFQO0FBQ0Q7QUFDRixTQTlCYyxDQUFmO0FBK0JBO0FBQ0F2RixjQUFNOEIsYUFBTixHQUFzQkosSUFBSUssTUFBSixDQUFXRCxhQUFqQztBQUNBOUIsY0FBTXdGLGFBQU4sR0FBc0I5RCxJQUFJSyxNQUFKLENBQVd5RCxhQUFqQztBQUNBeEYsY0FBTXlGLFNBQU4sR0FBa0IvRCxJQUFJSyxNQUFKLENBQVcwRCxTQUE3QjtBQUNBdkIsb0JBQVk1QixPQUFaLEVBQXFCb0IsUUFBckI7QUFDRCxPQXZDTSxDQUFQO0FBd0NELEtBN0RELE1BNkRPO0FBQ0wsWUFBTSxJQUFJMUQsTUFBTW1DLEtBQVYsQ0FBZ0JuQyxNQUFNbUMsS0FBTixDQUFZQyxhQUE1QixFQUE0QyxzQkFBcUI2QixZQUFhLEdBQTlFLENBQU47QUFDRDtBQUNGO0FBN0lnRDtRQUF0QzdDLGUsR0FBQUEsZSIsImZpbGUiOiJGdW5jdGlvbnNSb3V0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGdW5jdGlvbnNSb3V0ZXIuanNcblxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlLFxuICB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5cbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0IHsgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MgfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBqb2JTdGF0dXNIYW5kbGVyIH0gZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyJztcblxuZnVuY3Rpb24gcGFyc2VPYmplY3Qob2JqKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0KGl0ZW0pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdEYXRlJykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBEYXRlKG9iai5pc28pLCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdGaWxlJykge1xuICAgIHJldHVybiBQYXJzZS5GaWxlLmZyb21KU09OKG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHBhcnNlUGFyYW1zKG9iaik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhwYXJhbXMpIHtcbiAgcmV0dXJuIF8ubWFwVmFsdWVzKHBhcmFtcywgcGFyc2VPYmplY3QpO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvZnVuY3Rpb25zLzpmdW5jdGlvbk5hbWUnLCBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRGdW5jdGlvbik7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvam9icy86am9iTmFtZScsIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCBmdW5jdGlvbihyZXEpIHtcbiAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9qb2JzJywgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIGZ1bmN0aW9uKHJlcSkge1xuICAgICAgcmV0dXJuIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEpvYihyZXEpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUNsb3VkSm9iKHJlcSkge1xuICAgIGNvbnN0IGpvYk5hbWUgPSByZXEucGFyYW1zLmpvYk5hbWUgfHwgcmVxLmJvZHkuam9iTmFtZTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gcmVxLmNvbmZpZy5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IGpvYkhhbmRsZXIgPSBqb2JTdGF0dXNIYW5kbGVyKHJlcS5jb25maWcpO1xuICAgIGNvbnN0IGpvYkZ1bmN0aW9uID0gdHJpZ2dlcnMuZ2V0Sm9iKGpvYk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICgham9iRnVuY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELCAnSW52YWxpZCBqb2IuJyk7XG4gICAgfVxuICAgIGxldCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCByZXEuYm9keSwgcmVxLnF1ZXJ5KTtcbiAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIGxvZzogcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgICAgaGVhZGVyczogcmVxLmNvbmZpZy5oZWFkZXJzLFxuICAgICAgaXA6IHJlcS5jb25maWcuaXAsXG4gICAgICBqb2JOYW1lXG4gICAgfTtcbiAgICBjb25zdCBzdGF0dXMgPSB7XG4gICAgICBzdWNjZXNzOiBqb2JIYW5kbGVyLnNldFN1Y2NlZWRlZC5iaW5kKGpvYkhhbmRsZXIpLFxuICAgICAgZXJyb3I6IGpvYkhhbmRsZXIuc2V0RmFpbGVkLmJpbmQoam9iSGFuZGxlciksXG4gICAgICBtZXNzYWdlOiBqb2JIYW5kbGVyLnNldE1lc3NhZ2UuYmluZChqb2JIYW5kbGVyKVxuICAgIH1cbiAgICByZXR1cm4gam9iSGFuZGxlci5zZXRSdW5uaW5nKGpvYk5hbWUsIHBhcmFtcykudGhlbigoam9iU3RhdHVzKSA9PiB7XG4gICAgICByZXF1ZXN0LmpvYklkID0gam9iU3RhdHVzLm9iamVjdElkXG4gICAgICAvLyBydW4gdGhlIGZ1bmN0aW9uIGFzeW5jXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgam9iRnVuY3Rpb24ocmVxdWVzdCwgc3RhdHVzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdYLVBhcnNlLUpvYi1TdGF0dXMtSWQnOiBqb2JTdGF0dXMub2JqZWN0SWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVzcG9uc2U6IHt9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUmVzcG9uc2VPYmplY3QocmVzb2x2ZSwgcmVqZWN0LCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcmVzdWx0OiBQYXJzZS5fZW5jb2RlKHJlc3VsdClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBmdW5jdGlvbihjb2RlLCBtZXNzYWdlKSB7XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgIGlmIChjb2RlIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoY29kZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZSA9IGNvZGU7XG4gICAgICAgICAgY29kZSA9IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KG5ldyBQYXJzZS5FcnJvcihjb2RlLCBtZXNzYWdlKSk7XG4gICAgICB9LFxuICAgICAgbWVzc2FnZTogbWVzc2FnZVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVDbG91ZEZ1bmN0aW9uKHJlcSkge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlcS5wYXJhbXMuZnVuY3Rpb25OYW1lO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdGhlRnVuY3Rpb24gPSB0cmlnZ2Vycy5nZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpO1xuICAgIGNvbnN0IHRoZVZhbGlkYXRvciA9IHRyaWdnZXJzLmdldFZhbGlkYXRvcihyZXEucGFyYW1zLmZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG4gICAgaWYgKHRoZUZ1bmN0aW9uKSB7XG4gICAgICBsZXQgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxLmJvZHksIHJlcS5xdWVyeSk7XG4gICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcyhwYXJhbXMpO1xuICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICBtYXN0ZXI6IHJlcS5hdXRoICYmIHJlcS5hdXRoLmlzTWFzdGVyLFxuICAgICAgICB1c2VyOiByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIGxvZzogcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgICAgICBoZWFkZXJzOiByZXEuY29uZmlnLmhlYWRlcnMsXG4gICAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgICBmdW5jdGlvbk5hbWVcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGVWYWxpZGF0b3IgJiYgdHlwZW9mIHRoZVZhbGlkYXRvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGVWYWxpZGF0b3IocmVxdWVzdCk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlZBTElEQVRJT05fRVJST1IsICdWYWxpZGF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCB1c2VyU3RyaW5nID0gKHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIpID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XG4gICAgICAgIHZhciByZXNwb25zZSA9IEZ1bmN0aW9uc1JvdXRlci5jcmVhdGVSZXNwb25zZU9iamVjdCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuUmVzdWx0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShyZXN1bHQucmVzcG9uc2UucmVzdWx0KSk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgYFJhbiBjbG91ZCBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoOlxcbiAgSW5wdXQ6ICR7Y2xlYW5JbnB1dCB9XFxuICBSZXN1bHQ6ICR7Y2xlYW5SZXN1bHQgfWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6IGAgKyBKU09OLnN0cmluZ2lmeShlcnJvciksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEZvcmNlIHRoZSBrZXlzIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbHMuXG4gICAgICAgIFBhcnNlLmFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgICAgIFBhcnNlLmphdmFzY3JpcHRLZXkgPSByZXEuY29uZmlnLmphdmFzY3JpcHRLZXk7XG4gICAgICAgIFBhcnNlLm1hc3RlcktleSA9IHJlcS5jb25maWcubWFzdGVyS2V5O1xuICAgICAgICB0aGVGdW5jdGlvbihyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsIGBJbnZhbGlkIGZ1bmN0aW9uOiBcIiR7ZnVuY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX21pZGRsZXdhcmVzIiwiX1N0YXR1c0hhbmRsZXIiLCJfbG9kYXNoIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwidHJpZ2dlcnMiLCJwYXJzZU9iamVjdCIsIm9iaiIsImNvbmZpZyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJfX3R5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJEYXRlIiwiaXNvIiwiRmlsZSIsImZyb21KU09OIiwiZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24iLCJjbGFzc05hbWUiLCJvYmplY3RJZCIsInBhcnNlUGFyYW1zIiwicGFyYW1zIiwiXyIsIm1hcFZhbHVlcyIsIkZ1bmN0aW9uc1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwicHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IiwiaGFuZGxlQ2xvdWRGdW5jdGlvbiIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxIiwiaGFuZGxlQ2xvdWRKb2IiLCJqb2JOYW1lIiwiYm9keSIsImFwcGxpY2F0aW9uSWQiLCJqb2JIYW5kbGVyIiwiam9iU3RhdHVzSGFuZGxlciIsImpvYkZ1bmN0aW9uIiwiZ2V0Sm9iIiwiRXJyb3IiLCJTQ1JJUFRfRkFJTEVEIiwicXVlcnkiLCJyZXF1ZXN0IiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImhlYWRlcnMiLCJpcCIsIm1lc3NhZ2UiLCJzZXRNZXNzYWdlIiwiYmluZCIsInNldFJ1bm5pbmciLCJ0aGVuIiwiam9iU3RhdHVzIiwiam9iSWQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdCIsInNldFN1Y2NlZWRlZCIsImVycm9yIiwic2V0RmFpbGVkIiwicmVzcG9uc2UiLCJjcmVhdGVSZXNwb25zZU9iamVjdCIsInJlamVjdCIsInN1Y2Nlc3MiLCJfZW5jb2RlIiwicmVzb2x2ZUVycm9yIiwiZnVuY3Rpb25OYW1lIiwidGhlRnVuY3Rpb24iLCJnZXRGdW5jdGlvbiIsIm1hc3RlciIsImF1dGgiLCJpc01hc3RlciIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsImluZm8iLCJjb250ZXh0IiwidXNlclN0cmluZyIsImlkIiwidW5kZWZpbmVkIiwibG9nTGV2ZWxzIiwiY2xvdWRGdW5jdGlvblN1Y2Nlc3MiLCJjbGVhbklucHV0IiwibG9nZ2VyIiwidHJ1bmNhdGVMb2dNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuUmVzdWx0IiwiY2xvdWRGdW5jdGlvbkVycm9yIiwibWF5YmVSdW5WYWxpZGF0b3IiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZ1bmN0aW9uc1JvdXRlci5qc1xuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcblxuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgeyBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHsgam9iU3RhdHVzSGFuZGxlciB9IGZyb20gJy4uL1N0YXR1c0hhbmRsZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0KG9iaiwgY29uZmlnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiBwYXJzZU9iamVjdChpdGVtLCBjb25maWcpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdEYXRlJykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBEYXRlKG9iai5pc28pLCBvYmopO1xuICB9IGVsc2UgaWYgKG9iaiAmJiBvYmouX190eXBlID09ICdGaWxlJykge1xuICAgIHJldHVybiBQYXJzZS5GaWxlLmZyb21KU09OKG9iaik7XG4gIH0gZWxzZSBpZiAob2JqICYmIG9iai5fX3R5cGUgPT0gJ1BvaW50ZXInICYmIGNvbmZpZy5lbmNvZGVQYXJzZU9iamVjdEluQ2xvdWRGdW5jdGlvbikge1xuICAgIHJldHVybiBQYXJzZS5PYmplY3QuZnJvbUpTT04oe1xuICAgICAgX190eXBlOiAnUG9pbnRlcicsXG4gICAgICBjbGFzc05hbWU6IG9iai5jbGFzc05hbWUsXG4gICAgICBvYmplY3RJZDogb2JqLm9iamVjdElkLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBwYXJzZVBhcmFtcyhvYmosIGNvbmZpZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhwYXJhbXMsIGNvbmZpZykge1xuICByZXR1cm4gXy5tYXBWYWx1ZXMocGFyYW1zLCBpdGVtID0+IHBhcnNlT2JqZWN0KGl0ZW0sIGNvbmZpZykpO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnUE9TVCcsXG4gICAgICAnL2Z1bmN0aW9ucy86ZnVuY3Rpb25OYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9qb2JzLzpqb2JOYW1lJyxcbiAgICAgIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSxcbiAgICAgIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgZnVuY3Rpb24gKHJlcSkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25zUm91dGVyLmhhbmRsZUNsb3VkSm9iKHJlcSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9qb2JzJywgcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsIGZ1bmN0aW9uIChyZXEpIHtcbiAgICAgIHJldHVybiBGdW5jdGlvbnNSb3V0ZXIuaGFuZGxlQ2xvdWRKb2IocmVxKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVDbG91ZEpvYihyZXEpIHtcbiAgICBjb25zdCBqb2JOYW1lID0gcmVxLnBhcmFtcy5qb2JOYW1lIHx8IHJlcS5ib2R5Py5qb2JOYW1lO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3Qgam9iSGFuZGxlciA9IGpvYlN0YXR1c0hhbmRsZXIocmVxLmNvbmZpZyk7XG4gICAgY29uc3Qgam9iRnVuY3Rpb24gPSB0cmlnZ2Vycy5nZXRKb2Ioam9iTmFtZSwgYXBwbGljYXRpb25JZCk7XG4gICAgaWYgKCFqb2JGdW5jdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsICdJbnZhbGlkIGpvYi4nKTtcbiAgICB9XG4gICAgbGV0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5LCByZXEucXVlcnkpO1xuICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHBhcmFtcywgcmVxLmNvbmZpZyk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgbG9nOiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIsXG4gICAgICBoZWFkZXJzOiByZXEuY29uZmlnLmhlYWRlcnMsXG4gICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgIGpvYk5hbWUsXG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBtZXNzYWdlOiBqb2JIYW5kbGVyLnNldE1lc3NhZ2UuYmluZChqb2JIYW5kbGVyKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpvYkhhbmRsZXIuc2V0UnVubmluZyhqb2JOYW1lKS50aGVuKGpvYlN0YXR1cyA9PiB7XG4gICAgICByZXF1ZXN0LmpvYklkID0gam9iU3RhdHVzLm9iamVjdElkO1xuICAgICAgLy8gcnVuIHRoZSBmdW5jdGlvbiBhc3luY1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGpvYkZ1bmN0aW9uKHJlcXVlc3QpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICBqb2JIYW5kbGVyLnNldFN1Y2NlZWRlZChyZXN1bHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgam9iSGFuZGxlci5zZXRGYWlsZWQoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkJzogam9iU3RhdHVzLm9iamVjdElkLFxuICAgICAgICB9LFxuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVJlc3BvbnNlT2JqZWN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgICByZXN1bHQ6IFBhcnNlLl9lbmNvZGUocmVzdWx0KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGhhbmRsZUNsb3VkRnVuY3Rpb24ocmVxKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVxLnBhcmFtcy5mdW5jdGlvbk5hbWU7XG4gICAgY29uc3QgYXBwbGljYXRpb25JZCA9IHJlcS5jb25maWcuYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB0aGVGdW5jdGlvbiA9IHRyaWdnZXJzLmdldEZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG5cbiAgICBpZiAoIXRoZUZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCwgYEludmFsaWQgZnVuY3Rpb246IFwiJHtmdW5jdGlvbk5hbWV9XCJgKTtcbiAgICB9XG4gICAgbGV0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5LCByZXEucXVlcnkpO1xuICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKHBhcmFtcywgcmVxLmNvbmZpZyk7XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgbWFzdGVyOiByZXEuYXV0aCAmJiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgIHVzZXI6IHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBsb2c6IHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICAgIGhlYWRlcnM6IHJlcS5jb25maWcuaGVhZGVycyxcbiAgICAgIGlwOiByZXEuY29uZmlnLmlwLFxuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgY29udGV4dDogcmVxLmluZm8uY29udGV4dCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IHVzZXJTdHJpbmcgPSByZXEuYXV0aCAmJiByZXEuYXV0aC51c2VyID8gcmVxLmF1dGgudXNlci5pZCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IEZ1bmN0aW9uc1JvdXRlci5jcmVhdGVSZXNwb25zZU9iamVjdChcbiAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25TdWNjZXNzICE9PSAnc2lsZW50Jykge1xuICAgICAgICAgICAgICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICAgICAgICAgICAgY29uc3QgY2xlYW5SZXN1bHQgPSBsb2dnZXIudHJ1bmNhdGVMb2dNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5yZXNwb25zZS5yZXN1bHQpKTtcbiAgICAgICAgICAgICAgbG9nZ2VyW3JlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25TdWNjZXNzXShcbiAgICAgICAgICAgICAgICBgUmFuIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgUmVzdWx0OiAke2NsZWFuUmVzdWx0fWAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVxLmNvbmZpZy5sb2dMZXZlbHMuY2xvdWRGdW5jdGlvbkVycm9yICE9PSAnc2lsZW50Jykge1xuICAgICAgICAgICAgICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICAgICAgICAgICAgbG9nZ2VyW3JlcS5jb25maWcubG9nTGV2ZWxzLmNsb3VkRnVuY3Rpb25FcnJvcl0oXG4gICAgICAgICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGNsb3VkIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBmb3IgdXNlciAke3VzZXJTdHJpbmd9IHdpdGg6XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6IGAgK1xuICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXJyb3IpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgdXNlcjogdXNlclN0cmluZyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBmdW5jdGlvbk5hbWUsIHJlcS5hdXRoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGVGdW5jdGlvbihyZXF1ZXN0KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oc3VjY2VzcywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUtBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUFtQyxTQUFBRCx1QkFBQU0sQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQVRuQzs7QUFFQSxJQUFJRyxLQUFLLEdBQUdSLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ1EsS0FBSztFQUNyQ0MsUUFBUSxHQUFHVCxPQUFPLENBQUMsYUFBYSxDQUFDO0FBUW5DLFNBQVNVLFdBQVdBLENBQUNDLEdBQUcsRUFBRUMsTUFBTSxFQUFFO0VBQ2hDLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxHQUFHLENBQUMsRUFBRTtJQUN0QixP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
|
|
@@ -1,51 +1,114 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.GlobalConfigRouter =
|
|
6
|
+
exports.default = exports.GlobalConfigRouter = void 0;
|
|
7
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
8
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
9
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
10
|
+
var triggers = _interopRequireWildcard(require("../triggers"));
|
|
11
|
+
var _Error = require("../Error");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
// global_config.js
|
|
7
15
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var _middlewares = require('../middlewares');
|
|
17
|
-
|
|
18
|
-
var middleware = _interopRequireWildcard(_middlewares);
|
|
19
|
-
|
|
20
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
21
|
-
|
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
|
-
class GlobalConfigRouter extends _PromiseRouter2.default {
|
|
16
|
+
const getConfigFromParams = params => {
|
|
17
|
+
const config = new _node.default.Config();
|
|
18
|
+
for (const attr in params) {
|
|
19
|
+
config.attributes[attr] = _node.default._decode(undefined, params[attr]);
|
|
20
|
+
}
|
|
21
|
+
return config;
|
|
22
|
+
};
|
|
23
|
+
class GlobalConfigRouter extends _PromiseRouter.default {
|
|
25
24
|
getGlobalConfig(req) {
|
|
26
|
-
return req.config.database.find('_GlobalConfig', {
|
|
25
|
+
return req.config.database.find('_GlobalConfig', {
|
|
26
|
+
objectId: '1'
|
|
27
|
+
}, {
|
|
28
|
+
limit: 1
|
|
29
|
+
}).then(results => {
|
|
27
30
|
if (results.length != 1) {
|
|
28
31
|
// If there is no config in the database - return empty config.
|
|
29
|
-
return {
|
|
32
|
+
return {
|
|
33
|
+
response: {
|
|
34
|
+
params: {}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
30
37
|
}
|
|
31
38
|
const globalConfig = results[0];
|
|
32
|
-
|
|
39
|
+
if (!req.auth.isMaster && globalConfig.masterKeyOnly !== undefined) {
|
|
40
|
+
for (const param in globalConfig.params) {
|
|
41
|
+
if (globalConfig.masterKeyOnly[param]) {
|
|
42
|
+
delete globalConfig.params[param];
|
|
43
|
+
delete globalConfig.masterKeyOnly[param];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
response: {
|
|
49
|
+
params: globalConfig.params,
|
|
50
|
+
masterKeyOnly: globalConfig.masterKeyOnly
|
|
51
|
+
}
|
|
52
|
+
};
|
|
33
53
|
});
|
|
34
54
|
}
|
|
35
|
-
|
|
36
|
-
updateGlobalConfig(req) {
|
|
55
|
+
async updateGlobalConfig(req) {
|
|
37
56
|
if (req.auth.isReadOnly) {
|
|
38
|
-
throw
|
|
57
|
+
throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the config.", req.config);
|
|
39
58
|
}
|
|
40
|
-
const params = req.body.params;
|
|
59
|
+
const params = req.body.params || {};
|
|
60
|
+
const masterKeyOnly = req.body?.masterKeyOnly || {};
|
|
41
61
|
// Transform in dot notation to make sure it works
|
|
42
62
|
const update = Object.keys(params).reduce((acc, key) => {
|
|
43
63
|
acc[`params.${key}`] = params[key];
|
|
64
|
+
acc[`masterKeyOnly.${key}`] = masterKeyOnly[key] || false;
|
|
44
65
|
return acc;
|
|
45
66
|
}, {});
|
|
46
|
-
|
|
67
|
+
const className = triggers.getClassName(_node.default.Config);
|
|
68
|
+
const hasBeforeSaveHook = triggers.triggerExists(className, triggers.Types.beforeSave, req.config.applicationId);
|
|
69
|
+
const hasAfterSaveHook = triggers.triggerExists(className, triggers.Types.afterSave, req.config.applicationId);
|
|
70
|
+
let originalConfigObject;
|
|
71
|
+
let updatedConfigObject;
|
|
72
|
+
const configObject = new _node.default.Config();
|
|
73
|
+
configObject.attributes = params;
|
|
74
|
+
const results = await req.config.database.find('_GlobalConfig', {
|
|
75
|
+
objectId: '1'
|
|
76
|
+
}, {
|
|
77
|
+
limit: 1
|
|
78
|
+
});
|
|
79
|
+
const isNew = results.length !== 1;
|
|
80
|
+
if (!isNew && (hasBeforeSaveHook || hasAfterSaveHook)) {
|
|
81
|
+
originalConfigObject = getConfigFromParams(results[0].params);
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
await triggers.maybeRunGlobalConfigTrigger(triggers.Types.beforeSave, req.auth, configObject, originalConfigObject, req.config, req.context);
|
|
85
|
+
if (isNew) {
|
|
86
|
+
await req.config.database.update('_GlobalConfig', {
|
|
87
|
+
objectId: '1'
|
|
88
|
+
}, update, {
|
|
89
|
+
upsert: true
|
|
90
|
+
}, true);
|
|
91
|
+
updatedConfigObject = configObject;
|
|
92
|
+
} else {
|
|
93
|
+
const result = await req.config.database.update('_GlobalConfig', {
|
|
94
|
+
objectId: '1'
|
|
95
|
+
}, update, {}, true);
|
|
96
|
+
updatedConfigObject = getConfigFromParams(result.params);
|
|
97
|
+
}
|
|
98
|
+
await triggers.maybeRunGlobalConfigTrigger(triggers.Types.afterSave, req.auth, updatedConfigObject, originalConfigObject, req.config, req.context);
|
|
99
|
+
return {
|
|
100
|
+
response: {
|
|
101
|
+
result: true
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
} catch (err) {
|
|
105
|
+
const error = triggers.resolveError(err, {
|
|
106
|
+
code: _node.default.Error.SCRIPT_FAILED,
|
|
107
|
+
message: 'Script failed. Unknown error.'
|
|
108
|
+
});
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
47
111
|
}
|
|
48
|
-
|
|
49
112
|
mountRoutes() {
|
|
50
113
|
this.route('GET', '/config', req => {
|
|
51
114
|
return this.getGlobalConfig(req);
|
|
@@ -55,8 +118,6 @@ class GlobalConfigRouter extends _PromiseRouter2.default {
|
|
|
55
118
|
});
|
|
56
119
|
}
|
|
57
120
|
}
|
|
58
|
-
|
|
59
|
-
exports.
|
|
60
|
-
|
|
61
|
-
exports.default = GlobalConfigRouter;
|
|
62
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dsb2JhbENvbmZpZ1JvdXRlci5qcyJdLCJuYW1lcyI6WyJtaWRkbGV3YXJlIiwiR2xvYmFsQ29uZmlnUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsImdldEdsb2JhbENvbmZpZyIsInJlcSIsImNvbmZpZyIsImRhdGFiYXNlIiwiZmluZCIsIm9iamVjdElkIiwibGltaXQiLCJ0aGVuIiwicmVzdWx0cyIsImxlbmd0aCIsInJlc3BvbnNlIiwicGFyYW1zIiwiZ2xvYmFsQ29uZmlnIiwidXBkYXRlR2xvYmFsQ29uZmlnIiwiYXV0aCIsImlzUmVhZE9ubHkiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImJvZHkiLCJ1cGRhdGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwidXBzZXJ0IiwicmVzdWx0IiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztJQUFZQSxVOzs7Ozs7QUFFTCxNQUFNQyxrQkFBTixTQUFpQ0MsdUJBQWpDLENBQStDO0FBQ3BEQyxrQkFBZ0JDLEdBQWhCLEVBQXFCO0FBQ25CLFdBQU9BLElBQUlDLE1BQUosQ0FBV0MsUUFBWCxDQUFvQkMsSUFBcEIsQ0FBeUIsZUFBekIsRUFBMEMsRUFBRUMsVUFBVSxHQUFaLEVBQTFDLEVBQTZELEVBQUVDLE9BQU8sQ0FBVCxFQUE3RCxFQUEyRUMsSUFBM0UsQ0FBaUZDLE9BQUQsSUFBYTtBQUNsRyxVQUFJQSxRQUFRQyxNQUFSLElBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCO0FBQ0EsZUFBTyxFQUFFQyxVQUFVLEVBQUVDLFFBQVEsRUFBVixFQUFaLEVBQVA7QUFDRDtBQUNELFlBQU1DLGVBQWVKLFFBQVEsQ0FBUixDQUFyQjtBQUNBLGFBQU8sRUFBRUUsVUFBVSxFQUFFQyxRQUFRQyxhQUFhRCxNQUF2QixFQUFaLEVBQVA7QUFDRCxLQVBNLENBQVA7QUFRRDs7QUFFREUscUJBQW1CWixHQUFuQixFQUF3QjtBQUN0QixRQUFJQSxJQUFJYSxJQUFKLENBQVNDLFVBQWIsRUFBeUI7QUFDdkIsWUFBTSxJQUFJQyxlQUFNQyxLQUFWLENBQWdCRCxlQUFNQyxLQUFOLENBQVlDLG1CQUE1QixFQUFpRCwwREFBakQsQ0FBTjtBQUNEO0FBQ0QsVUFBTVAsU0FBU1YsSUFBSWtCLElBQUosQ0FBU1IsTUFBeEI7QUFDQTtBQUNBLFVBQU1TLFNBQVNDLE9BQU9DLElBQVAsQ0FBWVgsTUFBWixFQUFvQlksTUFBcEIsQ0FBMkIsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEtBQWM7QUFDdERELFVBQUssVUFBU0MsR0FBSSxFQUFsQixJQUF1QmQsT0FBT2MsR0FBUCxDQUF2QjtBQUNBLGFBQU9ELEdBQVA7QUFDRCxLQUhjLEVBR1osRUFIWSxDQUFmO0FBSUEsV0FBT3ZCLElBQUlDLE1BQUosQ0FBV0MsUUFBWCxDQUFvQmlCLE1BQXBCLENBQTJCLGVBQTNCLEVBQTRDLEVBQUNmLFVBQVUsR0FBWCxFQUE1QyxFQUE2RGUsTUFBN0QsRUFBcUUsRUFBQ00sUUFBUSxJQUFULEVBQXJFLEVBQXFGbkIsSUFBckYsQ0FBMEYsT0FBTyxFQUFFRyxVQUFVLEVBQUVpQixRQUFRLElBQVYsRUFBWixFQUFQLENBQTFGLENBQVA7QUFDRDs7QUFFREMsZ0JBQWM7QUFDWixTQUFLQyxLQUFMLENBQVcsS0FBWCxFQUFrQixTQUFsQixFQUE2QjVCLE9BQU87QUFBRSxhQUFPLEtBQUtELGVBQUwsQ0FBcUJDLEdBQXJCLENBQVA7QUFBa0MsS0FBeEU7QUFDQSxTQUFLNEIsS0FBTCxDQUFXLEtBQVgsRUFBa0IsU0FBbEIsRUFBNkJoQyxXQUFXaUMsNkJBQXhDLEVBQXVFN0IsT0FBTztBQUFFLGFBQU8sS0FBS1ksa0JBQUwsQ0FBd0JaLEdBQXhCLENBQVA7QUFBcUMsS0FBckg7QUFDRDtBQTVCbUQ7O1FBQXpDSCxrQixHQUFBQSxrQixFQUxiOztrQkFvQ2VBLGtCIiwiZmlsZSI6Ikdsb2JhbENvbmZpZ1JvdXRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGdsb2JhbF9jb25maWcuanNcbmltcG9ydCBQYXJzZSAgICAgICAgICAgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUHJvbWlzZVJvdXRlciAgIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tIFwiLi4vbWlkZGxld2FyZXNcIjtcblxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBnZXRHbG9iYWxDb25maWcocmVxKSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuZmluZCgnX0dsb2JhbENvbmZpZycsIHsgb2JqZWN0SWQ6IFwiMVwiIH0sIHsgbGltaXQ6IDEgfSkudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uZmlnIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybiBlbXB0eSBjb25maWcuXG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczoge30gfSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gcmVzdWx0c1swXTtcbiAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IHBhcmFtczogZ2xvYmFsQ29uZmlnLnBhcmFtcyB9IH07XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVHbG9iYWxDb25maWcocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCAncmVhZC1vbmx5IG1hc3RlcktleSBpc25cXCd0IGFsbG93ZWQgdG8gdXBkYXRlIHRoZSBjb25maWcuJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHJlcS5ib2R5LnBhcmFtcztcbiAgICAvLyBUcmFuc2Zvcm0gaW4gZG90IG5vdGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrc1xuICAgIGNvbnN0IHVwZGF0ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2BwYXJhbXMuJHtrZXl9YF0gPSBwYXJhbXNba2V5XTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX0dsb2JhbENvbmZpZycsIHtvYmplY3RJZDogXCIxXCJ9LCB1cGRhdGUsIHt1cHNlcnQ6IHRydWV9KS50aGVuKCgpID0+ICh7IHJlc3BvbnNlOiB7IHJlc3VsdDogdHJ1ZSB9IH0pKTtcbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY29uZmlnJywgcmVxID0+IHsgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKHJlcSkgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9jb25maWcnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4geyByZXR1cm4gdGhpcy51cGRhdGVHbG9iYWxDb25maWcocmVxKSB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHbG9iYWxDb25maWdSb3V0ZXI7XG4iXX0=
|
|
121
|
+
exports.GlobalConfigRouter = GlobalConfigRouter;
|
|
122
|
+
var _default = exports.default = GlobalConfigRouter;
|
|
123
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Byb21pc2VSb3V0ZXIiLCJtaWRkbGV3YXJlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJ0cmlnZ2VycyIsIl9FcnJvciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldENvbmZpZ0Zyb21QYXJhbXMiLCJwYXJhbXMiLCJjb25maWciLCJQYXJzZSIsIkNvbmZpZyIsImF0dHIiLCJhdHRyaWJ1dGVzIiwiX2RlY29kZSIsInVuZGVmaW5lZCIsIkdsb2JhbENvbmZpZ1JvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJnZXRHbG9iYWxDb25maWciLCJyZXEiLCJkYXRhYmFzZSIsImZpbmQiLCJvYmplY3RJZCIsImxpbWl0IiwidGhlbiIsInJlc3VsdHMiLCJsZW5ndGgiLCJyZXNwb25zZSIsImdsb2JhbENvbmZpZyIsImF1dGgiLCJpc01hc3RlciIsIm1hc3RlcktleU9ubHkiLCJwYXJhbSIsInVwZGF0ZUdsb2JhbENvbmZpZyIsImlzUmVhZE9ubHkiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImJvZHkiLCJ1cGRhdGUiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwia2V5IiwiY2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiaGFzQmVmb3JlU2F2ZUhvb2siLCJ0cmlnZ2VyRXhpc3RzIiwiVHlwZXMiLCJiZWZvcmVTYXZlIiwiYXBwbGljYXRpb25JZCIsImhhc0FmdGVyU2F2ZUhvb2siLCJhZnRlclNhdmUiLCJvcmlnaW5hbENvbmZpZ09iamVjdCIsInVwZGF0ZWRDb25maWdPYmplY3QiLCJjb25maWdPYmplY3QiLCJpc05ldyIsIm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlciIsImNvbnRleHQiLCJ1cHNlcnQiLCJyZXN1bHQiLCJlcnIiLCJlcnJvciIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwibWVzc2FnZSIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dsb2JhbENvbmZpZ1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnbG9iYWxfY29uZmlnLmpzXG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0ICogYXMgdHJpZ2dlcnMgZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmNvbnN0IGdldENvbmZpZ0Zyb21QYXJhbXMgPSBwYXJhbXMgPT4ge1xuICBjb25zdCBjb25maWcgPSBuZXcgUGFyc2UuQ29uZmlnKCk7XG4gIGZvciAoY29uc3QgYXR0ciBpbiBwYXJhbXMpIHtcbiAgICBjb25maWcuYXR0cmlidXRlc1thdHRyXSA9IFBhcnNlLl9kZWNvZGUodW5kZWZpbmVkLCBwYXJhbXNbYXR0cl0pO1xuICB9XG4gIHJldHVybiBjb25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsQ29uZmlnUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIGdldEdsb2JhbENvbmZpZyhyZXEpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgLmZpbmQoJ19HbG9iYWxDb25maWcnLCB7IG9iamVjdElkOiAnMScgfSwgeyBsaW1pdDogMSB9KVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uZmlnIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybiBlbXB0eSBjb25maWcuXG4gICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHsgcGFyYW1zOiB7fSB9IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gcmVzdWx0c1swXTtcbiAgICAgICAgaWYgKCFyZXEuYXV0aC5pc01hc3RlciAmJiBnbG9iYWxDb25maWcubWFzdGVyS2V5T25seSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBnbG9iYWxDb25maWcucGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHlbcGFyYW1dKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBnbG9iYWxDb25maWcucGFyYW1zW3BhcmFtXTtcbiAgICAgICAgICAgICAgZGVsZXRlIGdsb2JhbENvbmZpZy5tYXN0ZXJLZXlPbmx5W3BhcmFtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNwb25zZToge1xuICAgICAgICAgICAgcGFyYW1zOiBnbG9iYWxDb25maWcucGFyYW1zLFxuICAgICAgICAgICAgbWFzdGVyS2V5T25seTogZ2xvYmFsQ29uZmlnLm1hc3RlcktleU9ubHksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlR2xvYmFsQ29uZmlnKHJlcSkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gdXBkYXRlIHRoZSBjb25maWcuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHJlcS5ib2R5LnBhcmFtcyB8fCB7fTtcbiAgICBjb25zdCBtYXN0ZXJLZXlPbmx5ID0gcmVxLmJvZHk/Lm1hc3RlcktleU9ubHkgfHwge307XG4gICAgLy8gVHJhbnNmb3JtIGluIGRvdCBub3RhdGlvbiB0byBtYWtlIHN1cmUgaXQgd29ya3NcbiAgICBjb25zdCB1cGRhdGUgPSBPYmplY3Qua2V5cyhwYXJhbXMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGFjY1tgcGFyYW1zLiR7a2V5fWBdID0gcGFyYW1zW2tleV07XG4gICAgICBhY2NbYG1hc3RlcktleU9ubHkuJHtrZXl9YF0gPSBtYXN0ZXJLZXlPbmx5W2tleV0gfHwgZmFsc2U7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0cmlnZ2Vycy5nZXRDbGFzc05hbWUoUGFyc2UuQ29uZmlnKTtcbiAgICBjb25zdCBoYXNCZWZvcmVTYXZlSG9vayA9IHRyaWdnZXJzLnRyaWdnZXJFeGlzdHMoY2xhc3NOYW1lLCB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLCByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGNvbnN0IGhhc0FmdGVyU2F2ZUhvb2sgPSB0cmlnZ2Vycy50cmlnZ2VyRXhpc3RzKGNsYXNzTmFtZSwgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCByZXEuY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGxldCBvcmlnaW5hbENvbmZpZ09iamVjdDtcbiAgICBsZXQgdXBkYXRlZENvbmZpZ09iamVjdDtcbiAgICBjb25zdCBjb25maWdPYmplY3QgPSBuZXcgUGFyc2UuQ29uZmlnKCk7XG4gICAgY29uZmlnT2JqZWN0LmF0dHJpYnV0ZXMgPSBwYXJhbXM7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHsgbGltaXQ6IDEgfSk7XG4gICAgY29uc3QgaXNOZXcgPSByZXN1bHRzLmxlbmd0aCAhPT0gMTtcbiAgICBpZiAoIWlzTmV3ICYmIChoYXNCZWZvcmVTYXZlSG9vayB8fCBoYXNBZnRlclNhdmVIb29rKSkge1xuICAgICAgb3JpZ2luYWxDb25maWdPYmplY3QgPSBnZXRDb25maWdGcm9tUGFyYW1zKHJlc3VsdHNbMF0ucGFyYW1zKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLCByZXEuYXV0aCwgY29uZmlnT2JqZWN0LCBvcmlnaW5hbENvbmZpZ09iamVjdCwgcmVxLmNvbmZpZywgcmVxLmNvbnRleHQpO1xuICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHVwZGF0ZSwgeyB1cHNlcnQ6IHRydWUgfSwgdHJ1ZSlcbiAgICAgICAgdXBkYXRlZENvbmZpZ09iamVjdCA9IGNvbmZpZ09iamVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfR2xvYmFsQ29uZmlnJywgeyBvYmplY3RJZDogJzEnIH0sIHVwZGF0ZSwge30sIHRydWUpO1xuICAgICAgICB1cGRhdGVkQ29uZmlnT2JqZWN0ID0gZ2V0Q29uZmlnRnJvbVBhcmFtcyhyZXN1bHQucGFyYW1zKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIHJlcS5hdXRoLCB1cGRhdGVkQ29uZmlnT2JqZWN0LCBvcmlnaW5hbENvbmZpZ09iamVjdCwgcmVxLmNvbmZpZywgcmVxLmNvbnRleHQpO1xuICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHsgcmVzdWx0OiB0cnVlIH0gfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZXJyLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdTY3JpcHQgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvY29uZmlnJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdsb2JhbENvbmZpZyhyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BVVCcsICcvY29uZmlnJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdsb2JhbENvbmZpZyhyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdsb2JhbENvbmZpZ1JvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBRCx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQWdELFNBQUFHLHdCQUFBRyxDQUFBLEVBQUFD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RTtRQUFJLENBQUMsRUFBRWlCLE1BQU0sRUFBRTtVQUFFb0IsTUFBTSxFQUFFO1FBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNwR0wsbUJBQW1CLEdBQUdDLFlBQVk7TUFDcEMsQ0FBQyxNQUFNO1FBQ0wsTUFBTUssTUFBTSxHQUFHLE1BQU16QyxHQUFHLENBQUNWLE1BQU0sQ0FBQ1csUUFBUSxDQUFDbUIsTUFBTSxDQUFDLGVBQWUsRUFBRTtVQUFFakIsUUFBUSxFQUFFO1FBQUksQ0FBQyxFQUFFaUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUNyR2UsbUJBQW1CLEdBQUcvQyxtQkFBbUIsQ0FBQ3FELE1BQU0sQ0FBQ3BELE1BQU0sQ0FBQztNQUMxRDtNQUNBLE1BQU10QixRQUFRLENBQUN1RSwyQkFBMkIsQ0FBQ3ZFLFFBQVEsQ0FBQzhELEtBQUssQ0FBQ0ksU0FBUyxFQUFFakMsR0FBRyxDQUFDVSxJQUFJLEVBQUV5QixtQkFBbUIsRUFBRUQsb0JBQW9CLEVBQUVsQyxHQUFHLENBQUNWLE1BQU0sRUFBRVUsR0FBRyxDQUFDdUMsT0FBTyxDQUFDO01BQ2xKLE9BQU87UUFBRS9CLFFBQVEsRUFBRTtVQUFFaUMsTUFBTSxFQUFFO1FBQUs7TUFBRSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7TUFDWixNQUFNQyxLQUFLLEdBQUc1RSxRQUFRLENBQUM2RSxZQUFZLENBQUNGLEdBQUcsRUFBRTtRQUN2Q0csSUFBSSxFQUFFdEQsYUFBSyxDQUFDMEIsS0FBSyxDQUFDNkIsYUFBYTtRQUMvQkMsT0FBTyxFQUFFO01BQ1gsQ0FBQyxDQUFDO01BQ0YsTUFBTUosS0FBSztJQUNiO0VBQ0Y7RUFFQUssV0FBV0EsQ0FBQSxFQUFHO0lBQ1osSUFBSSxDQUFDQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRWpELEdBQUcsSUFBSTtNQUNsQyxPQUFPLElBQUksQ0FBQ0QsZUFBZSxDQUFDQyxHQUFHLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDaUQsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUVwRixVQUFVLENBQUNxRiw2QkFBNkIsRUFBRWxELEdBQUcsSUFBSTtNQUM1RSxPQUFPLElBQUksQ0FBQ2Msa0JBQWtCLENBQUNkLEdBQUcsQ0FBQztJQUNyQyxDQUFDLENBQUM7RUFDSjtBQUNGO0FBQUNtRCxPQUFBLENBQUF0RCxrQkFBQSxHQUFBQSxrQkFBQTtBQUFBLElBQUF1RCxRQUFBLEdBQUFELE9BQUEsQ0FBQXhFLE9BQUEsR0FFY2tCLGtCQUFrQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.GraphQLRouter = void 0;
|
|
7
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
8
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
9
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
10
|
+
var _Error = require("../Error");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const GraphQLConfigPath = '/graphql-config';
|
|
14
|
+
class GraphQLRouter extends _PromiseRouter.default {
|
|
15
|
+
async getGraphQLConfig(req) {
|
|
16
|
+
const result = await req.config.parseGraphQLController.getGraphQLConfig();
|
|
17
|
+
return {
|
|
18
|
+
response: result
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async updateGraphQLConfig(req) {
|
|
22
|
+
if (req.auth.isReadOnly) {
|
|
23
|
+
throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update the GraphQL config.", req.config);
|
|
24
|
+
}
|
|
25
|
+
const data = await req.config.parseGraphQLController.updateGraphQLConfig(req.body?.params || {});
|
|
26
|
+
return {
|
|
27
|
+
response: data
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
mountRoutes() {
|
|
31
|
+
this.route('GET', GraphQLConfigPath, middleware.promiseEnforceMasterKeyAccess, req => {
|
|
32
|
+
return this.getGraphQLConfig(req);
|
|
33
|
+
});
|
|
34
|
+
this.route('PUT', GraphQLConfigPath, middleware.promiseEnforceMasterKeyAccess, req => {
|
|
35
|
+
return this.updateGraphQLConfig(req);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.GraphQLRouter = GraphQLRouter;
|
|
40
|
+
var _default = exports.default = GraphQLRouter;
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Byb21pc2VSb3V0ZXIiLCJtaWRkbGV3YXJlIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJHcmFwaFFMQ29uZmlnUGF0aCIsIkdyYXBoUUxSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwiZ2V0R3JhcGhRTENvbmZpZyIsInJlcSIsInJlc3VsdCIsImNvbmZpZyIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJyZXNwb25zZSIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJhdXRoIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEVycm9yIiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJkYXRhIiwiYm9keSIsInBhcmFtcyIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0dyYXBoUUxSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFByb21pc2VSb3V0ZXIgZnJvbSAnLi4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgKiBhcyBtaWRkbGV3YXJlIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG5jb25zdCBHcmFwaFFMQ29uZmlnUGF0aCA9ICcvZ3JhcGhxbC1jb25maWcnO1xuXG5leHBvcnQgY2xhc3MgR3JhcGhRTFJvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBhc3luYyBnZXRHcmFwaFFMQ29uZmlnKHJlcSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlci5nZXRHcmFwaFFMQ29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiByZXN1bHQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUdyYXBoUUxDb25maWcocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY29uZmlnLlwiLFxuICAgICAgICByZXEuY29uZmlnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcocmVxLmJvZHk/LnBhcmFtcyB8fCB7fSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldEdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCBHcmFwaFFMQ29uZmlnUGF0aCwgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdyYXBoUUxDb25maWcocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmFwaFFMUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFBZ0QsU0FBQUcsd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLENBQUFFLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQVAsdUJBQUFNLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsR0FBQUwsQ0FBQSxLQUFBVSxPQUFBLEVBQUFWLENBQUE7QUFFaEQsTUFBTW1CLGlCQUFpQixHQUFHLGlCQUFpQjtBQUVwQyxNQUFNQyxhQUFhLFNBQVNDLHNCQUFhLENBQUM7RUFDL0MsTUFBTUMsZ0JBQWdCQSxDQUFDQyxHQUFHLEVBQUU7SUFDMUIsTUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsTUFBTSxDQUFDQyxzQkFBc0IsQ0FBQ0osZ0JBQWdCLENBQUMsQ0FBQztJQUN6RSxPQUFPO01BQ0xLLFFBQVEsRUFBRUg7SUFDWixDQUFDO0VBQ0g7RUFFQSxNQUFNSSxtQkFBbUJBLENBQUNMLEdBQUcsRUFBRTtJQUM3QixJQUFJQSxHQUFHLENBQUNNLElBQUksQ0FBQ0MsVUFBVSxFQUFFO01BQ3ZCLE1BQU0sSUFBQUMsMkJBQW9CLEVBQ3hCQyxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLEVBQy9CLGlFQUFpRSxFQUNqRVgsR0FBRyxDQUFDRSxNQUNOLENBQUM7SUFDSDtJQUNBLE1BQU1VLElBQUksR0FBRyxNQUFNWixHQUFHLENBQUNFLE1BQU0sQ0FBQ0Msc0JBQXNCLENBQUNFLG1CQUFtQixDQUFDTCxHQUFHLENBQUNhLElBQUksRUFBRUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE9BQU87TUFDTFYsUUFBUSxFQUFFUTtJQUNaLENBQUM7RUFDSDtFQUVBRyxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssQ0FBQyxLQUFLLEVBQUVwQixpQkFBaUIsRUFBRXRCLFVBQVUsQ0FBQzJDLDZCQUE2QixFQUFFakIsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0MsR0FBRyxDQUFDO0lBQ25DLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ2dCLEtBQUssQ0FBQyxLQUFLLEVBQUVwQixpQkFBaUIsRUFBRXRCLFVBQVUsQ0FBQzJDLDZCQUE2QixFQUFFakIsR0FBRyxJQUFJO01BQ3BGLE9BQU8sSUFBSSxDQUFDSyxtQkFBbUIsQ0FBQ0wsR0FBRyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztFQUNKO0FBQ0Y7QUFBQ2tCLE9BQUEsQ0FBQXJCLGFBQUEsR0FBQUEsYUFBQTtBQUFBLElBQUFzQixRQUFBLEdBQUFELE9BQUEsQ0FBQS9CLE9BQUEsR0FFY1UsYUFBYSIsImlnbm9yZUxpc3QiOltdfQ==
|