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,25 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.ParseServerRESTController = ParseServerRESTController;
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _RESTController = _interopRequireDefault(require("parse/lib/node/RESTController"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
10
|
const Config = require('./Config');
|
|
7
11
|
const Auth = require('./Auth');
|
|
8
|
-
const RESTController = require('parse/lib/node/RESTController');
|
|
9
|
-
const URL = require('url');
|
|
10
12
|
const Parse = require('parse/node');
|
|
11
|
-
|
|
12
13
|
function getSessionToken(options) {
|
|
13
14
|
if (options && typeof options.sessionToken === 'string') {
|
|
14
|
-
return
|
|
15
|
+
return Promise.resolve(options.sessionToken);
|
|
15
16
|
}
|
|
16
|
-
return
|
|
17
|
+
return Promise.resolve(null);
|
|
17
18
|
}
|
|
18
|
-
|
|
19
19
|
function getAuth(options = {}, config) {
|
|
20
20
|
const installationId = options.installationId || 'cloud';
|
|
21
21
|
if (options.useMasterKey) {
|
|
22
|
-
return
|
|
22
|
+
return Promise.resolve(new Auth.Auth({
|
|
23
|
+
config,
|
|
24
|
+
isMaster: true,
|
|
25
|
+
installationId
|
|
26
|
+
}));
|
|
23
27
|
}
|
|
24
28
|
return getSessionToken(options).then(sessionToken => {
|
|
25
29
|
if (sessionToken) {
|
|
@@ -30,43 +34,88 @@ function getAuth(options = {}, config) {
|
|
|
30
34
|
installationId
|
|
31
35
|
});
|
|
32
36
|
} else {
|
|
33
|
-
return
|
|
37
|
+
return Promise.resolve(new Auth.Auth({
|
|
38
|
+
config,
|
|
39
|
+
installationId
|
|
40
|
+
}));
|
|
34
41
|
}
|
|
35
42
|
});
|
|
36
43
|
}
|
|
37
|
-
|
|
38
44
|
function ParseServerRESTController(applicationId, router) {
|
|
39
|
-
function handleRequest(method, path, data = {}, options = {}) {
|
|
45
|
+
function handleRequest(method, path, data = {}, options = {}, config) {
|
|
40
46
|
// Store the arguments, for later use if internal fails
|
|
41
47
|
const args = arguments;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const serverURL = URL.parse(config.serverURL);
|
|
45
|
-
if (path.indexOf(serverURL.path) === 0) {
|
|
46
|
-
path = path.slice(serverURL.path.length, path.length);
|
|
48
|
+
if (!config) {
|
|
49
|
+
config = Config.get(applicationId);
|
|
47
50
|
}
|
|
48
|
-
|
|
49
|
-
if (path
|
|
50
|
-
path =
|
|
51
|
+
const serverURL = new URL(config.serverURL);
|
|
52
|
+
if (path.indexOf(serverURL.pathname) === 0) {
|
|
53
|
+
path = path.slice(serverURL.pathname.length, path.length);
|
|
54
|
+
}
|
|
55
|
+
if (path[0] !== '/') {
|
|
56
|
+
path = '/' + path;
|
|
51
57
|
}
|
|
52
|
-
|
|
53
58
|
if (path === '/batch') {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
const batch = transactionRetries => {
|
|
60
|
+
let initialPromise = Promise.resolve();
|
|
61
|
+
if (data.transaction === true) {
|
|
62
|
+
initialPromise = config.database.createTransactionalSession();
|
|
63
|
+
}
|
|
64
|
+
return initialPromise.then(() => {
|
|
65
|
+
const promises = data.requests.map(request => {
|
|
66
|
+
return handleRequest(request.method, request.path, request.body, options, config).then(response => {
|
|
67
|
+
if (options.returnStatus) {
|
|
68
|
+
const status = response._status;
|
|
69
|
+
const headers = response._headers;
|
|
70
|
+
delete response._status;
|
|
71
|
+
delete response._headers;
|
|
72
|
+
return {
|
|
73
|
+
success: response,
|
|
74
|
+
_status: status,
|
|
75
|
+
_headers: headers
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
success: response
|
|
80
|
+
};
|
|
81
|
+
}, error => {
|
|
82
|
+
return {
|
|
83
|
+
error: {
|
|
84
|
+
code: error.code,
|
|
85
|
+
error: error.message
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
return Promise.all(promises).then(result => {
|
|
91
|
+
if (data.transaction === true) {
|
|
92
|
+
if (result.find(resultItem => typeof resultItem.error === 'object')) {
|
|
93
|
+
return config.database.abortTransactionalSession().then(() => {
|
|
94
|
+
return Promise.reject(result);
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
return config.database.commitTransactionalSession().then(() => {
|
|
98
|
+
return result;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
}).catch(error => {
|
|
105
|
+
if (error && error.find(errorItem => typeof errorItem.error === 'object' && errorItem.error.code === 251) && transactionRetries > 0) {
|
|
106
|
+
return batch(transactionRetries - 1);
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
});
|
|
59
110
|
});
|
|
60
|
-
}
|
|
61
|
-
return
|
|
111
|
+
};
|
|
112
|
+
return batch(5);
|
|
62
113
|
}
|
|
63
|
-
|
|
64
114
|
let query;
|
|
65
115
|
if (method === 'GET') {
|
|
66
116
|
query = data;
|
|
67
117
|
}
|
|
68
|
-
|
|
69
|
-
return new Parse.Promise((resolve, reject) => {
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
70
119
|
getAuth(options, config).then(auth => {
|
|
71
120
|
const request = {
|
|
72
121
|
body: data,
|
|
@@ -74,17 +123,32 @@ function ParseServerRESTController(applicationId, router) {
|
|
|
74
123
|
auth,
|
|
75
124
|
info: {
|
|
76
125
|
applicationId: applicationId,
|
|
77
|
-
sessionToken: options.sessionToken
|
|
126
|
+
sessionToken: options.sessionToken,
|
|
127
|
+
installationId: options.installationId,
|
|
128
|
+
context: options.context || {}
|
|
78
129
|
},
|
|
79
130
|
query
|
|
80
131
|
};
|
|
81
132
|
return Promise.resolve().then(() => {
|
|
82
133
|
return router.tryRouteRequest(method, path, request);
|
|
83
|
-
}).then(
|
|
84
|
-
|
|
134
|
+
}).then(resp => {
|
|
135
|
+
const {
|
|
136
|
+
response,
|
|
137
|
+
status,
|
|
138
|
+
headers = {}
|
|
139
|
+
} = resp;
|
|
140
|
+
if (options.returnStatus) {
|
|
141
|
+
resolve({
|
|
142
|
+
...response,
|
|
143
|
+
_status: status,
|
|
144
|
+
_headers: headers
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
resolve(response);
|
|
148
|
+
}
|
|
85
149
|
}, err => {
|
|
86
150
|
if (err instanceof Parse.Error && err.code == Parse.Error.INVALID_JSON && err.message == `cannot route ${method} ${path}`) {
|
|
87
|
-
|
|
151
|
+
_RESTController.default.request.apply(null, args).then(resolve, reject);
|
|
88
152
|
} else {
|
|
89
153
|
reject(err);
|
|
90
154
|
}
|
|
@@ -92,13 +156,11 @@ function ParseServerRESTController(applicationId, router) {
|
|
|
92
156
|
}, reject);
|
|
93
157
|
});
|
|
94
158
|
}
|
|
95
|
-
|
|
96
159
|
return {
|
|
97
160
|
request: handleRequest,
|
|
98
|
-
ajax:
|
|
161
|
+
ajax: _RESTController.default.ajax,
|
|
162
|
+
handleError: _RESTController.default.handleError
|
|
99
163
|
};
|
|
100
164
|
}
|
|
101
|
-
|
|
102
|
-
exports.default = ParseServerRESTController;
|
|
103
|
-
exports.ParseServerRESTController = ParseServerRESTController;
|
|
104
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9QYXJzZVNlcnZlclJFU1RDb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbmZpZyIsInJlcXVpcmUiLCJBdXRoIiwiUkVTVENvbnRyb2xsZXIiLCJVUkwiLCJQYXJzZSIsImdldFNlc3Npb25Ub2tlbiIsIm9wdGlvbnMiLCJzZXNzaW9uVG9rZW4iLCJQcm9taXNlIiwiYXMiLCJnZXRBdXRoIiwiY29uZmlnIiwiaW5zdGFsbGF0aW9uSWQiLCJ1c2VNYXN0ZXJLZXkiLCJpc01hc3RlciIsInRoZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlciIsImFwcGxpY2F0aW9uSWQiLCJyb3V0ZXIiLCJoYW5kbGVSZXF1ZXN0IiwibWV0aG9kIiwicGF0aCIsImRhdGEiLCJhcmdzIiwiYXJndW1lbnRzIiwiZ2V0Iiwic2VydmVyVVJMIiwicGFyc2UiLCJpbmRleE9mIiwic2xpY2UiLCJsZW5ndGgiLCJwcm9taXNlcyIsInJlcXVlc3RzIiwibWFwIiwicmVxdWVzdCIsImJvZHkiLCJyZXNwb25zZSIsInN1Y2Nlc3MiLCJlcnJvciIsImNvZGUiLCJtZXNzYWdlIiwiYWxsIiwicXVlcnkiLCJyZXNvbHZlIiwicmVqZWN0IiwiYXV0aCIsImluZm8iLCJ0cnlSb3V0ZVJlcXVlc3QiLCJzdGF0dXMiLCJlcnIiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsImFwcGx5IiwiYWpheCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFNQSxTQUFTQyxRQUFRLFVBQVIsQ0FBZjtBQUNBLE1BQU1DLE9BQU9ELFFBQVEsUUFBUixDQUFiO0FBQ0EsTUFBTUUsaUJBQWlCRixRQUFRLCtCQUFSLENBQXZCO0FBQ0EsTUFBTUcsTUFBTUgsUUFBUSxLQUFSLENBQVo7QUFDQSxNQUFNSSxRQUFRSixRQUFRLFlBQVIsQ0FBZDs7QUFFQSxTQUFTSyxlQUFULENBQXlCQyxPQUF6QixFQUFrQztBQUNoQyxNQUFJQSxXQUFXLE9BQU9BLFFBQVFD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eUIsR0FBQUEseUIiLCJmaWxlIjoiUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENvbmZpZyA9IHJlcXVpcmUoJy4vQ29uZmlnJyk7XG5jb25zdCBBdXRoID0gcmVxdWlyZSgnLi9BdXRoJyk7XG5jb25zdCBSRVNUQ29udHJvbGxlciA9IHJlcXVpcmUoJ3BhcnNlL2xpYi9ub2RlL1JFU1RDb250cm9sbGVyJyk7XG5jb25zdCBVUkwgPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuXG5mdW5jdGlvbiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFBhcnNlLlByb21pc2UuYXMob3B0aW9ucy5zZXNzaW9uVG9rZW4pO1xuICB9XG4gIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKG51bGwpO1xufVxuXG5mdW5jdGlvbiBnZXRBdXRoKG9wdGlvbnMgPSB7fSwgY29uZmlnKSB7XG4gIGNvbnN0IGluc3RhbGxhdGlvbklkID0gb3B0aW9ucy5pbnN0YWxsYXRpb25JZCB8fCAnY2xvdWQnO1xuICBpZiAob3B0aW9ucy51c2VNYXN0ZXJLZXkpIHtcbiAgICByZXR1cm4gUGFyc2UuUHJvbWlzZS5hcyhuZXcgQXV0aC5BdXRoKHtjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpbnN0YWxsYXRpb25JZCB9KSk7XG4gIH1cbiAgcmV0dXJuIGdldFNlc3Npb25Ub2tlbihvcHRpb25zKS50aGVuKChzZXNzaW9uVG9rZW4pID0+IHtcbiAgICBpZiAoc2Vzc2lvblRva2VuKSB7XG4gICAgICBvcHRpb25zLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlbjtcbiAgICAgIHJldHVybiBBdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogc2Vzc2lvblRva2VuLFxuICAgICAgICBpbnN0YWxsYXRpb25JZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKG5ldyBBdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkIH0pKTtcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIoYXBwbGljYXRpb25JZCwgcm91dGVyKSB7XG4gIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QobWV0aG9kLCBwYXRoLCBkYXRhID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFN0b3JlIHRoZSBhcmd1bWVudHMsIGZvciBsYXRlciB1c2UgaWYgaW50ZXJuYWwgZmFpbHNcbiAgICBjb25zdCBhcmdzID0gYXJndW1lbnRzO1xuXG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBzZXJ2ZXJVUkwgPSBVUkwucGFyc2UoY29uZmlnLnNlcnZlclVSTCk7XG4gICAgaWYgKHBhdGguaW5kZXhPZihzZXJ2ZXJVUkwucGF0aCkgPT09IDApIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHNlcnZlclVSTC5wYXRoLmxlbmd0aCwgcGF0aC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChwYXRoWzBdICE9PSBcIi9cIikge1xuICAgICAgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICB9XG5cbiAgICBpZiAocGF0aCA9PT0gJy9iYXRjaCcpIHtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gZGF0YS5yZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlcXVlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgcmVxdWVzdC5ib2R5LCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFzKHtzdWNjZXNzOiByZXNwb25zZX0pO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gUGFyc2UuUHJvbWlzZS5hcyh7ZXJyb3I6IHtjb2RlOiBlcnJvci5jb2RlLCBlcnJvcjogZXJyb3IubWVzc2FnZX19KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQYXJzZS5Qcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgbGV0IHF1ZXJ5O1xuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICBxdWVyeSA9IGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQYXJzZS5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGdldEF1dGgob3B0aW9ucywgY29uZmlnKS50aGVuKChhdXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbklkOiBhcHBsaWNhdGlvbklkLFxuICAgICAgICAgICAgc2Vzc2lvblRva2VuOiBvcHRpb25zLnNlc3Npb25Ub2tlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgcXVlcnlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3V0ZXIudHJ5Um91dGVSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgcmVxdWVzdCk7XG4gICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5yZXNwb25zZSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IgJiZcbiAgICAgICAgICAgICAgZXJyLmNvZGUgPT0gUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OICYmXG4gICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IGBjYW5ub3Qgcm91dGUgJHttZXRob2R9ICR7cGF0aH1gKSB7XG4gICAgICAgICAgICBSRVNUQ29udHJvbGxlci5yZXF1ZXN0LmFwcGx5KG51bGwsIGFyZ3MpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gIHtcbiAgICByZXF1ZXN0OiBoYW5kbGVSZXF1ZXN0LFxuICAgIGFqYXg6IFJFU1RDb250cm9sbGVyLmFqYXhcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlcjtcbmV4cG9ydCB7IFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIgfTtcbiJdfQ==
|
|
165
|
+
var _default = exports.default = ParseServerRESTController;
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUkVTVENvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkNvbmZpZyIsIkF1dGgiLCJQYXJzZSIsImdldFNlc3Npb25Ub2tlbiIsIm9wdGlvbnMiLCJzZXNzaW9uVG9rZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldEF1dGgiLCJjb25maWciLCJpbnN0YWxsYXRpb25JZCIsInVzZU1hc3RlcktleSIsImlzTWFzdGVyIiwidGhlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJQYXJzZVNlcnZlclJFU1RDb250cm9sbGVyIiwiYXBwbGljYXRpb25JZCIsInJvdXRlciIsImhhbmRsZVJlcXVlc3QiLCJtZXRob2QiLCJwYXRoIiwiZGF0YSIsImFyZ3MiLCJhcmd1bWVudHMiLCJnZXQiLCJzZXJ2ZXJVUkwiLCJVUkwiLCJpbmRleE9mIiwicGF0aG5hbWUiLCJzbGljZSIsImxlbmd0aCIsImJhdGNoIiwidHJhbnNhY3Rpb25SZXRyaWVzIiwiaW5pdGlhbFByb21pc2UiLCJ0cmFuc2FjdGlvbiIsImRhdGFiYXNlIiwiY3JlYXRlVHJhbnNhY3Rpb25hbFNlc3Npb24iLCJwcm9taXNlcyIsInJlcXVlc3RzIiwibWFwIiwicmVxdWVzdCIsImJvZHkiLCJyZXNwb25zZSIsInJldHVyblN0YXR1cyIsInN0YXR1cyIsIl9zdGF0dXMiLCJoZWFkZXJzIiwiX2hlYWRlcnMiLCJzdWNjZXNzIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImFsbCIsInJlc3VsdCIsImZpbmQiLCJyZXN1bHRJdGVtIiwiYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbiIsInJlamVjdCIsImNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uIiwiY2F0Y2giLCJlcnJvckl0ZW0iLCJxdWVyeSIsImF1dGgiLCJpbmZvIiwiY29udGV4dCIsInRyeVJvdXRlUmVxdWVzdCIsInJlc3AiLCJlcnIiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsIlJFU1RDb250cm9sbGVyIiwiYXBwbHkiLCJhamF4IiwiaGFuZGxlRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDb25maWcgPSByZXF1aXJlKCcuL0NvbmZpZycpO1xuY29uc3QgQXV0aCA9IHJlcXVpcmUoJy4vQXV0aCcpO1xuaW1wb3J0IFJFU1RDb250cm9sbGVyIGZyb20gJ3BhcnNlL2xpYi9ub2RlL1JFU1RDb250cm9sbGVyJztcbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuXG5mdW5jdGlvbiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvcHRpb25zLnNlc3Npb25Ub2tlbik7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXV0aChvcHRpb25zID0ge30sIGNvbmZpZykge1xuICBjb25zdCBpbnN0YWxsYXRpb25JZCA9IG9wdGlvbnMuaW5zdGFsbGF0aW9uSWQgfHwgJ2Nsb3VkJztcbiAgaWYgKG9wdGlvbnMudXNlTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQXV0aC5BdXRoKHsgY29uZmlnLCBpc01hc3RlcjogdHJ1ZSwgaW5zdGFsbGF0aW9uSWQgfSkpO1xuICB9XG4gIHJldHVybiBnZXRTZXNzaW9uVG9rZW4ob3B0aW9ucykudGhlbihzZXNzaW9uVG9rZW4gPT4ge1xuICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcbiAgICAgIG9wdGlvbnMuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuICAgICAgcmV0dXJuIEF1dGguZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBzZXNzaW9uVG9rZW4sXG4gICAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQgfSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIoYXBwbGljYXRpb25JZCwgcm91dGVyKSB7XG4gIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QobWV0aG9kLCBwYXRoLCBkYXRhID0ge30sIG9wdGlvbnMgPSB7fSwgY29uZmlnKSB7XG4gICAgLy8gU3RvcmUgdGhlIGFyZ3VtZW50cywgZm9yIGxhdGVyIHVzZSBpZiBpbnRlcm5hbCBmYWlsc1xuICAgIGNvbnN0IGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmVyVVJMID0gbmV3IFVSTChjb25maWcuc2VydmVyVVJMKTtcbiAgICBpZiAocGF0aC5pbmRleE9mKHNlcnZlclVSTC5wYXRobmFtZSkgPT09IDApIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHNlcnZlclVSTC5wYXRobmFtZS5sZW5ndGgsIHBhdGgubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAocGF0aFswXSAhPT0gJy8nKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICBpZiAocGF0aCA9PT0gJy9iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gdHJhbnNhY3Rpb25SZXRyaWVzID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChkYXRhLnRyYW5zYWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgaW5pdGlhbFByb21pc2UgPSBjb25maWcuZGF0YWJhc2UuY3JlYXRlVHJhbnNhY3Rpb25hbFNlc3Npb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhLnJlcXVlc3RzLm1hcChyZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVSZXF1ZXN0KHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnBhdGgsIHJlcXVlc3QuYm9keSwgb3B0aW9ucywgY29uZmlnKS50aGVuKFxuICAgICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5fc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlLl9oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3BvbnNlLl9zdGF0dXM7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgcmVzcG9uc2UuX2hlYWRlcnM7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiByZXNwb25zZSwgX3N0YXR1czogc3RhdHVzLCBfaGVhZGVyczogaGVhZGVycyB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiByZXNwb25zZSB9O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yOiB7IGNvZGU6IGVycm9yLmNvZGUsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGF0YS50cmFuc2FjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZmluZChyZXN1bHRJdGVtID0+IHR5cGVvZiByZXN1bHRJdGVtLmVycm9yID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmRhdGFiYXNlLmNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnJvciAmJlxuICAgICAgICAgICAgICAgIGVycm9yLmZpbmQoXG4gICAgICAgICAgICAgICAgICBlcnJvckl0ZW0gPT4gdHlwZW9mIGVycm9ySXRlbS5lcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3JJdGVtLmVycm9yLmNvZGUgPT09IDI1MVxuICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblJldHJpZXMgPiAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXRjaCh0cmFuc2FjdGlvblJldHJpZXMgLSAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gYmF0Y2goNSk7XG4gICAgfVxuXG4gICAgbGV0IHF1ZXJ5O1xuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICBxdWVyeSA9IGRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGdldEF1dGgob3B0aW9ucywgY29uZmlnKS50aGVuKGF1dGggPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgaW5mbzoge1xuICAgICAgICAgICAgYXBwbGljYXRpb25JZDogYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHNlc3Npb25Ub2tlbjogb3B0aW9ucy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgICBpbnN0YWxsYXRpb25JZDogb3B0aW9ucy5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCB8fCB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcm91dGVyLnRyeVJvdXRlUmVxdWVzdChtZXRob2QsIHBhdGgsIHJlcXVlc3QpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICByZXNwID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyByZXNwb25zZSwgc3RhdHVzLCBoZWFkZXJzID0ge30gfSA9IHJlc3A7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnJldHVyblN0YXR1cykge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyAuLi5yZXNwb25zZSwgX3N0YXR1czogc3RhdHVzLCBfaGVhZGVyczogaGVhZGVycyB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvciAmJlxuICAgICAgICAgICAgICAgIGVyci5jb2RlID09IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiAmJlxuICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IGBjYW5ub3Qgcm91dGUgJHttZXRob2R9ICR7cGF0aH1gXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIFJFU1RDb250cm9sbGVyLnJlcXVlc3QuYXBwbHkobnVsbCwgYXJncykudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH0sIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlcXVlc3Q6IGhhbmRsZVJlcXVlc3QsXG4gICAgYWpheDogUkVTVENvbnRyb2xsZXIuYWpheCxcbiAgICBoYW5kbGVFcnJvcjogUkVTVENvbnRyb2xsZXIuaGFuZGxlRXJyb3IsXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXI7XG5leHBvcnQgeyBQYXJzZVNlcnZlclJFU1RDb250cm9sbGVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxJQUFBQSxlQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBMkQsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFGM0QsTUFBTUcsTUFBTSxHQUFHSixPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ2xDLE1BQU1LLElBQUksR0FBR0wsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUU5QixNQUFNTSxLQUFLLEdBQUdOLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFFbkMsU0FBU08sZUFBZUEsQ0FBQ0MsT0FBTyxFQUFFO0VBQ2hDLElBQUlBLE9BQU8sSUFBSSxPQUFPQSxPQUFPLENBQUNDLFlBQVksS0FBSyxRQUFRLEVBQUU7SUFDdkQsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUNILE9BQU8sQ0FBQ0MsWUFBWSxDQUFDO0VBQzlDO0VBQ0EsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzlCO0FBRUEsU0FBU0MsT0FBT0EsQ0FBQ0osT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFSyxNQUFNLEVBQUU7RUFDckMsTUFBTUMsY0FBYyxHQUFHTixPQUFPLENBQUNNLGNBQWMsSUFBSSxPQUFPO0VBQ3hELElBQUlOLE9BQU8sQ0FBQ08sWUFBWSxFQUFFO0lBQ3hCLE9BQU9MLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUlOLElBQUksQ0FBQ0EsSUFBSSxDQUFDO01BQUVRLE1BQU07TUFBRUcsUUFBUSxFQUFFLElBQUk7TUFBRUY7SUFBZSxDQUFDLENBQUMsQ0FBQztFQUNuRjtFQUNBLE9BQU9QLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDLENBQUNTLElBQUksQ0FBQ1IsWUFBWSxJQUFJO0lBQ25ELElBQUlBLFlBQVksRUFBRTtNQUNoQkQsT0FBTyxDQUFDQyxZQUFZLEdBQUdBLFlBQVk7TUFDbkMsT0FBT0osSUFBSSxDQUFDYSxzQkFBc0IsQ0FBQztRQUNqQ0wsTUFBTTtRQUNOSixZQUFZLEVBQUVBLFlBQVk7UUFDMUJLO01BQ0YsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ0wsT0FBT0osT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSU4sSUFBSSxDQUFDQSxJQUFJLENBQUM7UUFBRVEsTUFBTTtRQUFFQztNQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ25FO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTSyx5QkFBeUJBLENBQUNDLGFBQWEsRUFBRUMsTUFBTSxFQUFFO0VBQ3hELFNBQVNDLGFBQWFBLENBQUNDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVqQixPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUVLLE1BQU0sRUFBRTtJQUNwRTtJQUNBLE1BQU1hLElBQUksR0FBR0MsU0FBUztJQUV0QixJQUFJLENBQUNkLE1BQU0sRUFBRTtNQUNYQSxNQUFNLEdBQUdULE1BQU0sQ0FBQ3dCLEdBQUcsQ0FBQ1IsYUFBYSxDQUFDO0lBQ3BDO0lBQ0EsTUFBTVMsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBQ2pCLE1BQU0sQ0FBQ2dCLFNBQVMsQ0FBQztJQUMzQyxJQUFJTCxJQUFJLENBQUNPLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDRyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDMUNSLElBQUksR0FBR0EsSUFBSSxDQUFDUyxLQUFLLENBQUNKLFNBQVMsQ0FBQ0csUUFBUSxDQUFDRSxNQUFNLEVBQUVWLElBQUksQ0FBQ1UsTUFBTSxDQUFDO0lBQzNEO0lBRUEsSUFBSVYsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtNQUNuQkEsSUFBSSxHQUFHLEdBQUcsR0FBR0EsSUFBSTtJQUNuQjtJQUVBLElBQUlBLElBQUksS0FBSyxRQUFRLEVBQUU7TUFDckIsTUFBTVcsS0FBSyxHQUFHQyxrQkFBa0IsSUFBSTtRQUNsQyxJQUFJQyxjQUFjLEdBQUczQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUljLElBQUksQ0FBQ2EsV0FBVyxLQUFLLElBQUksRUFBRTtVQUM3QkQsY0FBYyxHQUFHeEIsTUFBTSxDQUFDMEIsUUFBUSxDQUFDQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9EO1FBQ0EsT0FBT0gsY0FBYyxDQUFDcEIsSUFBSSxDQUFDLE1BQU07VUFDL0IsTUFBTXdCLFFBQVEsR0FBR2hCLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDQyxPQUFPLElBQUk7WUFDNUMsT0FBT3RCLGFBQWEsQ0FBQ3NCLE9BQU8sQ0FBQ3JCLE1BQU0sRUFBRXFCLE9BQU8sQ0FBQ3BCLElBQUksRUFBRW9CLE9BQU8sQ0FBQ0MsSUFBSSxFQUFFckMsT0FBTyxFQUFFSyxNQUFNLENBQUMsQ0FBQ0ksSUFBSSxDQUNwRjZCLFFBQVEsSUFBSTtjQUNWLElBQUl0QyxPQUFPLENBQUN1QyxZQUFZLEVBQUU7Z0JBQ3hCLE1BQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFDRyxPQUFPO2dCQUMvQixNQUFNQyxPQUFPLEdBQUdKLFFBQVEsQ0FBQ0ssUUFBUTtnQkFDakMsT0FBT0wsUUFBUSxDQUFDRyxPQUFPO2dCQUN2QixPQUFPSCxRQUFRLENBQUNLLFFBQVE7Z0JBQ3hCLE9BQU87a0JBQUVDLE9BQU8sRUFBRU4sUUFBUTtrQkFBRUcsT0FBTyxFQUFFRCxNQUFNO2tCQUFFRyxRQUFRLEVBQUVEO2dCQUFRLENBQUM7Y0FDbEU7Y0FDQSxPQUFPO2dCQUFFRSxPQUFPLEVBQUVOO2NBQVMsQ0FBQztZQUM5QixDQUFDLEVBQ0RPLEtBQUssSUFBSTtjQUNQLE9BQU87Z0JBQ0xBLEtBQUssRUFBRTtrQkFBRUMsSUFBSSxFQUFFRCxLQUFLLENBQUNDLElBQUk7a0JBQUVELEtBQUssRUFBRUEsS0FBSyxDQUFDRTtnQkFBUTtjQUNsRCxDQUFDO1lBQ0gsQ0FDRixDQUFDO1VBQ0gsQ0FBQyxDQUFDO1VBQ0YsT0FBTzdDLE9BQU8sQ0FBQzhDLEdBQUcsQ0FBQ2YsUUFBUSxDQUFDLENBQ3pCeEIsSUFBSSxDQUFDd0MsTUFBTSxJQUFJO1lBQ2QsSUFBSWhDLElBQUksQ0FBQ2EsV0FBVyxLQUFLLElBQUksRUFBRTtjQUM3QixJQUFJbUIsTUFBTSxDQUFDQyxJQUFJLENBQUNDLFVBQVUsSUFBSSxPQUFPQSxVQUFVLENBQUNOLEtBQUssS0FBSyxRQUFRLENBQUMsRUFBRTtnQkFDbkUsT0FBT3hDLE1BQU0sQ0FBQzBCLFFBQVEsQ0FBQ3FCLHlCQUF5QixDQUFDLENBQUMsQ0FBQzNDLElBQUksQ0FBQyxNQUFNO2tCQUM1RCxPQUFPUCxPQUFPLENBQUNtRCxNQUFNLENBQUNKLE1BQU0sQ0FBQztnQkFDL0IsQ0FBQyxDQUFDO2NBQ0osQ0FBQyxNQUFNO2dCQUNMLE9BQU81QyxNQUFNLENBQUMwQixRQUFRLENBQUN1QiwwQkFBMEIsQ0FBQyxDQUFDLENBQUM3QyxJQUFJLENBQUMsTUFBTTtrQkFDN0QsT0FBT3dDLE1BQU07Z0JBQ2YsQ0FBQyxDQUFDO2NBQ0o7WUFDRixDQUFDLE1BQU07Y0FDTCxPQUFPQSxNQUFNO1lBQ2Y7VUFDRixDQUFDLENBQUMsQ0FDRE0sS0FBSyxDQUFDVixLQUFLLElBQUk7WUFDZCxJQUNFQSxLQUFLLElBQ0xBLEtBQUssQ0FBQ0ssSUFBSSxDQUNSTSxTQUFTLElBQUksT0FBT0EsU0FBUyxDQUFDWCxLQUFLLEtBQUssUUFBUSxJQUFJVyxTQUFTLENBQUNYLEtBQUssQ0FBQ0MsSUFBSSxLQUFLLEdBQy9FLENBQUMsSUFDRGxCLGtCQUFrQixHQUFHLENBQUMsRUFDdEI7Y0FDQSxPQUFPRCxLQUFLLENBQUNDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUN0QztZQUNBLE1BQU1pQixLQUFLO1VBQ2IsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO01BQ0osQ0FBQztNQUNELE9BQU9sQixLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pCO0lBRUEsSUFBSThCLEtBQUs7SUFDVCxJQUFJMUMsTUFBTSxLQUFLLEtBQUssRUFBRTtNQUNwQjBDLEtBQUssR0FBR3hDLElBQUk7SUFDZDtJQUVBLE9BQU8sSUFBSWYsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRWtELE1BQU0sS0FBSztNQUN0Q2pELE9BQU8sQ0FBQ0osT0FBTyxFQUFFSyxNQUFNLENBQUMsQ0FBQ0ksSUFBSSxDQUFDaUQsSUFBSSxJQUFJO1FBQ3BDLE1BQU10QixPQUFPLEdBQUc7VUFDZEMsSUFBSSxFQUFFcEIsSUFBSTtVQUNWWixNQUFNO1VBQ05xRCxJQUFJO1VBQ0pDLElBQUksRUFBRTtZQUNKL0MsYUFBYSxFQUFFQSxhQUFhO1lBQzVCWCxZQUFZLEVBQUVELE9BQU8sQ0FBQ0MsWUFBWTtZQUNsQ0ssY0FBYyxFQUFFTixPQUFPLENBQUNNLGNBQWM7WUFDdENzRCxPQUFPLEVBQUU1RCxPQUFPLENBQUM0RCxPQUFPLElBQUksQ0FBQztVQUMvQixDQUFDO1VBQ0RIO1FBQ0YsQ0FBQztRQUNELE9BQU92RCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQ3JCTSxJQUFJLENBQUMsTUFBTTtVQUNWLE9BQU9JLE1BQU0sQ0FBQ2dELGVBQWUsQ0FBQzlDLE1BQU0sRUFBRUMsSUFBSSxFQUFFb0IsT0FBTyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUNEM0IsSUFBSSxDQUNIcUQsSUFBSSxJQUFJO1VBQ04sTUFBTTtZQUFFeEIsUUFBUTtZQUFFRSxNQUFNO1lBQUVFLE9BQU8sR0FBRyxDQUFDO1VBQUUsQ0FBQyxHQUFHb0IsSUFBSTtVQUMvQyxJQUFJOUQsT0FBTyxDQUFDdUMsWUFBWSxFQUFFO1lBQ3hCcEMsT0FBTyxDQUFDO2NBQUUsR0FBR21DLFFBQVE7Y0FBRUcsT0FBTyxFQUFFRCxNQUFNO2NBQUVHLFFBQVEsRUFBRUQ7WUFBUSxDQUFDLENBQUM7VUFDOUQsQ0FBQyxNQUFNO1lBQ0x2QyxPQUFPLENBQUNtQyxRQUFRLENBQUM7VUFDbkI7UUFDRixDQUFDLEVBQ0R5QixHQUFHLElBQUk7VUFDTCxJQUNFQSxHQUFHLFlBQVlqRSxLQUFLLENBQUNrRSxLQUFLLElBQzFCRCxHQUFHLENBQUNqQixJQUFJLElBQUloRCxLQUFLLENBQUNrRSxLQUFLLENBQUNDLFlBQVksSUFDcENGLEdBQUcsQ0FBQ2hCLE9BQU8sSUFBSSxnQkFBZ0JoQyxNQUFNLElBQUlDLElBQUksRUFBRSxFQUMvQztZQUNBa0QsdUJBQWMsQ0FBQzlCLE9BQU8sQ0FBQytCLEtBQUssQ0FBQyxJQUFJLEVBQUVqRCxJQUFJLENBQUMsQ0FBQ1QsSUFBSSxDQUFDTixPQUFPLEVBQUVrRCxNQUFNLENBQUM7VUFDaEUsQ0FBQyxNQUFNO1lBQ0xBLE1BQU0sQ0FBQ1UsR0FBRyxDQUFDO1VBQ2I7UUFDRixDQUNGLENBQUM7TUFDTCxDQUFDLEVBQUVWLE1BQU0sQ0FBQztJQUNaLENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBTztJQUNMakIsT0FBTyxFQUFFdEIsYUFBYTtJQUN0QnNELElBQUksRUFBRUYsdUJBQWMsQ0FBQ0UsSUFBSTtJQUN6QkMsV0FBVyxFQUFFSCx1QkFBYyxDQUFDRztFQUM5QixDQUFDO0FBQ0g7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQTVFLE9BQUEsR0FFY2dCLHlCQUF5QiIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/PromiseRouter.js
CHANGED
|
@@ -1,25 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
var _node = require(
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _express2 = _interopRequireDefault(_express);
|
|
14
|
-
|
|
15
|
-
var _logger = require('./logger');
|
|
16
|
-
|
|
17
|
-
var _logger2 = _interopRequireDefault(_logger);
|
|
18
|
-
|
|
19
|
-
var _util = require('util');
|
|
20
|
-
|
|
21
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
-
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
8
|
+
var _express = _interopRequireDefault(require("express"));
|
|
9
|
+
var _logger = _interopRequireDefault(require("./logger"));
|
|
10
|
+
var _util = require("util");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
12
|
// A router that is based on promises rather than req/res/next.
|
|
24
13
|
// This is intended to replace the use of express.Router to handle
|
|
25
14
|
// subsections of the API surface.
|
|
@@ -27,8 +16,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
27
16
|
// themselves use our routing information, without disturbing express
|
|
28
17
|
// components that external developers may be modifying.
|
|
29
18
|
|
|
30
|
-
const Layer = require('
|
|
31
|
-
|
|
19
|
+
const Layer = require('router/lib/layer');
|
|
32
20
|
function validateParameter(key, value) {
|
|
33
21
|
if (key == 'className') {
|
|
34
22
|
if (value.match(/_?[A-Za-z][A-Za-z_0-9]*/)) {
|
|
@@ -42,7 +30,6 @@ function validateParameter(key, value) {
|
|
|
42
30
|
return value;
|
|
43
31
|
}
|
|
44
32
|
}
|
|
45
|
-
|
|
46
33
|
class PromiseRouter {
|
|
47
34
|
// Each entry should be an object with:
|
|
48
35
|
// path: the path to route, in express format
|
|
@@ -69,7 +56,6 @@ class PromiseRouter {
|
|
|
69
56
|
this.routes.push(route);
|
|
70
57
|
}
|
|
71
58
|
}
|
|
72
|
-
|
|
73
59
|
route(method, path, ...handlers) {
|
|
74
60
|
switch (method) {
|
|
75
61
|
case 'POST':
|
|
@@ -80,9 +66,7 @@ class PromiseRouter {
|
|
|
80
66
|
default:
|
|
81
67
|
throw 'cannot route method: ' + method;
|
|
82
68
|
}
|
|
83
|
-
|
|
84
69
|
let handler = handlers[0];
|
|
85
|
-
|
|
86
70
|
if (handlers.length > 1) {
|
|
87
71
|
handler = function (req) {
|
|
88
72
|
return handlers.reduce((promise, handler) => {
|
|
@@ -92,7 +76,6 @@ class PromiseRouter {
|
|
|
92
76
|
}, Promise.resolve());
|
|
93
77
|
};
|
|
94
78
|
}
|
|
95
|
-
|
|
96
79
|
this.routes.push({
|
|
97
80
|
path: path,
|
|
98
81
|
method: method,
|
|
@@ -117,7 +100,10 @@ class PromiseRouter {
|
|
|
117
100
|
Object.keys(params).forEach(key => {
|
|
118
101
|
params[key] = validateParameter(key, params[key]);
|
|
119
102
|
});
|
|
120
|
-
return {
|
|
103
|
+
return {
|
|
104
|
+
params: params,
|
|
105
|
+
handler: route.handler
|
|
106
|
+
};
|
|
121
107
|
}
|
|
122
108
|
}
|
|
123
109
|
}
|
|
@@ -131,15 +117,13 @@ class PromiseRouter {
|
|
|
131
117
|
});
|
|
132
118
|
return expressApp;
|
|
133
119
|
}
|
|
134
|
-
|
|
135
120
|
expressRouter() {
|
|
136
|
-
return this.mountOnto(
|
|
121
|
+
return this.mountOnto(_express.default.Router());
|
|
137
122
|
}
|
|
138
|
-
|
|
139
123
|
tryRouteRequest(method, path, request) {
|
|
140
124
|
var match = this.match(method, path);
|
|
141
125
|
if (!match) {
|
|
142
|
-
throw new
|
|
126
|
+
throw new _node.default.Error(_node.default.Error.INVALID_JSON, 'cannot route ' + method + ' ' + path);
|
|
143
127
|
}
|
|
144
128
|
request.params = match.params;
|
|
145
129
|
return new Promise((resolve, reject) => {
|
|
@@ -148,11 +132,11 @@ class PromiseRouter {
|
|
|
148
132
|
}
|
|
149
133
|
}
|
|
150
134
|
|
|
151
|
-
|
|
135
|
+
// A helper function to make an express handler out of a a promise
|
|
152
136
|
// handler.
|
|
153
137
|
// Express handlers should never throw; if a promise handler throws we
|
|
154
138
|
// just treat it like it resolved to an error.
|
|
155
|
-
|
|
139
|
+
exports.default = PromiseRouter;
|
|
156
140
|
function makeExpressHandler(appId, promiseHandler) {
|
|
157
141
|
return function (req, res, next) {
|
|
158
142
|
try {
|
|
@@ -160,7 +144,7 @@ function makeExpressHandler(appId, promiseHandler) {
|
|
|
160
144
|
const body = Object.assign({}, req.body);
|
|
161
145
|
const method = req.method;
|
|
162
146
|
const headers = req.headers;
|
|
163
|
-
|
|
147
|
+
_logger.default.logRequest({
|
|
164
148
|
method,
|
|
165
149
|
url,
|
|
166
150
|
headers,
|
|
@@ -168,20 +152,25 @@ function makeExpressHandler(appId, promiseHandler) {
|
|
|
168
152
|
});
|
|
169
153
|
promiseHandler(req).then(result => {
|
|
170
154
|
if (!result.response && !result.location && !result.text) {
|
|
171
|
-
|
|
155
|
+
_logger.default.error('the handler did not include a "response" or a "location" field');
|
|
172
156
|
throw 'control should not get here';
|
|
173
157
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
158
|
+
_logger.default.logResponse({
|
|
159
|
+
method,
|
|
160
|
+
url,
|
|
161
|
+
result
|
|
162
|
+
});
|
|
177
163
|
var status = result.status || 200;
|
|
178
164
|
res.status(status);
|
|
179
|
-
|
|
165
|
+
if (result.headers) {
|
|
166
|
+
Object.keys(result.headers).forEach(header => {
|
|
167
|
+
res.set(header, result.headers[header]);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
180
170
|
if (result.text) {
|
|
181
171
|
res.send(result.text);
|
|
182
172
|
return;
|
|
183
173
|
}
|
|
184
|
-
|
|
185
174
|
if (result.location) {
|
|
186
175
|
res.set('Location', result.location);
|
|
187
176
|
// Override the default expressjs response
|
|
@@ -191,29 +180,29 @@ function makeExpressHandler(appId, promiseHandler) {
|
|
|
191
180
|
return;
|
|
192
181
|
}
|
|
193
182
|
}
|
|
194
|
-
if (result.headers) {
|
|
195
|
-
Object.keys(result.headers).forEach(header => {
|
|
196
|
-
res.set(header, result.headers[header]);
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
183
|
res.json(result.response);
|
|
200
|
-
},
|
|
201
|
-
|
|
184
|
+
}, error => {
|
|
185
|
+
next(error);
|
|
186
|
+
}).catch(e => {
|
|
187
|
+
_logger.default.error(`Error generating response. ${(0, _util.inspect)(e)}`, {
|
|
188
|
+
error: e
|
|
189
|
+
});
|
|
202
190
|
next(e);
|
|
203
191
|
});
|
|
204
192
|
} catch (e) {
|
|
205
|
-
|
|
193
|
+
_logger.default.error(`Error handling request: ${(0, _util.inspect)(e)}`, {
|
|
194
|
+
error: e
|
|
195
|
+
});
|
|
206
196
|
next(e);
|
|
207
197
|
}
|
|
208
198
|
};
|
|
209
199
|
}
|
|
210
|
-
|
|
211
200
|
function maskSensitiveUrl(req) {
|
|
212
201
|
let maskUrl = req.originalUrl.toString();
|
|
213
202
|
const shouldMaskUrl = req.method === 'GET' && req.originalUrl.includes('/login') && !req.originalUrl.includes('classes');
|
|
214
203
|
if (shouldMaskUrl) {
|
|
215
|
-
maskUrl =
|
|
204
|
+
maskUrl = _logger.default.maskSensitiveUrl(maskUrl);
|
|
216
205
|
}
|
|
217
206
|
return maskUrl;
|
|
218
207
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Qcm9taXNlUm91dGVyLmpzIl0sIm5hbWVzIjpbIkxheWVyIiwicmVxdWlyZSIsInZhbGlkYXRlUGFyYW1ldGVyIiwia2V5IiwidmFsdWUiLCJtYXRjaCIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInJvdXRlcyIsImFwcElkIiwibW91bnRSb3V0ZXMiLCJtZXJnZSIsInJvdXRlciIsInJvdXRlIiwicHVzaCIsIm1ldGhvZCIsInBhdGgiLCJoYW5kbGVycyIsImhhbmRsZXIiLCJsZW5ndGgiLCJyZXEiLCJyZWR1Y2UiLCJwcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwibGF5ZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsIm1vdW50T250byIsImV4cHJlc3NBcHAiLCJ0b0xvd2VyQ2FzZSIsIm1ha2VFeHByZXNzSGFuZGxlciIsImNhbGwiLCJleHByZXNzUm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsInRyeVJvdXRlUmVxdWVzdCIsInJlcXVlc3QiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwicmVqZWN0IiwicHJvbWlzZUhhbmRsZXIiLCJyZXMiLCJuZXh0IiwidXJsIiwibWFza1NlbnNpdGl2ZVVybCIsImJvZHkiLCJhc3NpZ24iLCJoZWFkZXJzIiwibG9nIiwibG9nUmVxdWVzdCIsInJlc3VsdCIsInJlc3BvbnNlIiwibG9jYXRpb24iLCJ0ZXh0IiwiZXJyb3IiLCJsb2dSZXNwb25zZSIsInN0YXR1cyIsInNlbmQiLCJzZXQiLCJoZWFkZXIiLCJqc29uIiwiZSIsIm1hc2tVcmwiLCJvcmlnaW5hbFVybCIsInRvU3RyaW5nIiwic2hvdWxkTWFza1VybCIsImluY2x1ZGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQSxNQUFNQSxRQUFRQyxRQUFRLDBCQUFSLENB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YmFzZWQgb24gcHJvbWlzZXMgcmF0aGVyIHRoYW4gcmVxL3Jlcy9uZXh0LlxuLy8gVGhpcyBpcyBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSB1c2Ugb2YgZXhwcmVzcy5Sb3V0ZXIgdG8gaGFuZGxlXG4vLyBzdWJzZWN0aW9ucyBvZiB0aGUgQVBJIHN1cmZhY2UuXG4vLyBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gaGF2ZSBtZXRob2RzIGxpa2UgJ2JhdGNoJyB0aGF0XG4vLyB0aGVtc2VsdmVzIHVzZSBvdXIgcm91dGluZyBpbmZvcm1hdGlvbiwgd2l0aG91dCBkaXN0dXJiaW5nIGV4cHJlc3Ncbi8vIGNvbXBvbmVudHMgdGhhdCBleHRlcm5hbCBkZXZlbG9wZXJzIG1heSBiZSBtb2RpZnlpbmcuXG5cbmltcG9ydCBQYXJzZSAgICAgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgZXhwcmVzcyAgIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGxvZyAgICAgICBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge2luc3BlY3R9IGZyb20gJ3V0aWwnO1xuY29uc3QgTGF5ZXIgPSByZXF1aXJlKCdleHByZXNzL2xpYi9yb3V0ZXIvbGF5ZXInKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdjbGFzc05hbWUnKSB7XG4gICAgaWYgKHZhbHVlLm1hdGNoKC9fP1tBLVphLXpdW0EtWmEtel8wLTldKi8pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleSA9PSAnb2JqZWN0SWQnKSB7XG4gICAgaWYgKHZhbHVlLm1hdGNoKC9bQS1aYS16MC05XSsvKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlUm91dGVyIHtcbiAgLy8gRWFjaCBlbnRyeSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGg6XG4gIC8vIHBhdGg6IHRoZSBwYXRoIHRvIHJvdXRlLCBpbiBleHByZXNzIGZvcm1hdFxuICAvLyBtZXRob2Q6IHRoZSBIVFRQIG1ldGhvZCB0aGF0IHRoaXMgcm91dGUgaGFuZGxlcy5cbiAgLy8gICBNdXN0IGJlIG9uZSBvZjogUE9TVCwgR0VULCBQVVQsIERFTEVURVxuICAvLyBoYW5kbGVyOiBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgcmVxdWVzdCwgYW5kIHJldHVybnMgYSBwcm9taXNlLlxuICAvLyAgIFN1Y2Nlc3NmdWwgaGFuZGxlcnMgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0IHdpdGggZmllbGRzOlxuICAvLyAgICAgc3RhdHVzOiBvcHRpb25hbC4gdGhlIGh0dHAgc3RhdHVzIGNvZGUuIGRlZmF1bHRzIHRvIDIwMFxuICAvLyAgICAgcmVzcG9uc2U6IGEganNvbiBvYmplY3Qgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgcmVzcG9uc2VcbiAgLy8gICAgIGxvY2F0aW9uOiBvcHRpb25hbC4gYSBsb2NhdGlvbiBoZWFkZXJcbiAgY29uc3RydWN0b3Iocm91dGVzID0gW10sIGFwcElkKSB7XG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5hcHBJZCA9IGFwcElkO1xuICAgIHRoaXMubW91bnRSb3V0ZXMoKTtcbiAgfVxuXG4gIC8vIExlYXZlIHRoZSBvcHBvcnR1bml0eSB0b1xuICAvLyBzdWJjbGFzc2VzIHRvIG1vdW50IHRoZWlyIHJvdXRlcyBieSBvdmVycmlkaW5nXG4gIG1vdW50Um91dGVzKCkge31cblxuICAvLyBNZXJnZSB0aGUgcm91dGVzIGludG8gdGhpcyBvbmVcbiAgbWVyZ2Uocm91dGVyKSB7XG4gICAgZm9yICh2YXIgcm91dGUgb2Ygcm91dGVyLnJvdXRlcykge1xuICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgfVxuICB9XG5cbiAgcm91dGUobWV0aG9kLCBwYXRoLCAuLi5oYW5kbGVycykge1xuICAgIHN3aXRjaChtZXRob2QpIHtcbiAgICBjYXNlICdQT1NUJzpcbiAgICBjYXNlICdHRVQnOlxuICAgIGNhc2UgJ1BVVCc6XG4gICAgY2FzZSAnREVMRVRFJzpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyAnY2Fubm90IHJvdXRlIG1ldGhvZDogJyArIG1ldGhvZDtcbiAgICB9XG5cbiAgICBsZXQgaGFuZGxlciA9IGhhbmRsZXJzWzBdO1xuXG4gICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihyZXEpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXJzLnJlZHVjZSgocHJvbWlzZSwgaGFuZGxlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIocmVxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgIGxheWVyOiBuZXcgTGF5ZXIocGF0aCwgbnVsbCwgaGFuZGxlcilcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGg6XG4gIC8vICAgaGFuZGxlcjogdGhlIGhhbmRsZXIgdGhhdCBzaG91bGQgZGVhbCB3aXRoIHRoaXMgcmVxdWVzdFxuICAvLyAgIHBhcmFtczogYW55IDotcGFyYW1zIHRoYXQgZ290IHBhcnNlZCBmcm9tIHRoZSBwYXRoXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICBtYXRjaChtZXRob2QsIHBhdGgpIHtcbiAgICBmb3IgKHZhciByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLm1ldGhvZCAhPSBtZXRob2QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllciA9IHJvdXRlLmxheWVyIHx8IG5ldyBMYXllcihyb3V0ZS5wYXRoLCBudWxsLCByb3V0ZS5oYW5kbGVyKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gbGF5ZXIubWF0Y2gocGF0aCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbGF5ZXIucGFyYW1zO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsaWRhdGVQYXJhbWV0ZXIoa2V5LCBwYXJhbXNba2V5XSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge3BhcmFtczogcGFyYW1zLCBoYW5kbGVyOiByb3V0ZS5oYW5kbGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3VudCB0aGUgcm91dGVzIG9uIHRoaXMgcm91dGVyIG9udG8gYW4gZXhwcmVzcyBhcHAgKG9yIGV4cHJlc3Mgcm91dGVyKVxuICBtb3VudE9udG8oZXhwcmVzc0FwcCkge1xuICAgIHRoaXMucm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBtZXRob2QgPSByb3V0ZS5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBtYWtlRXhwcmVzc0hhbmRsZXIodGhpcy5hcHBJZCwgcm91dGUuaGFuZGxlcik7XG4gICAgICBleHByZXNzQXBwW21ldGhvZF0uY2FsbChleHByZXNzQXBwLCByb3V0ZS5wYXRoLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXhwcmVzc0FwcDtcbiAgfVxuXG4gIGV4cHJlc3NSb3V0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubW91bnRPbnRvKGV4cHJlc3MuUm91dGVyKCkpO1xuICB9XG5cbiAgdHJ5Um91dGVSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgcmVxdWVzdCkge1xuICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2gobWV0aG9kLCBwYXRoKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfSlNPTixcbiAgICAgICAgJ2Nhbm5vdCByb3V0ZSAnICsgbWV0aG9kICsgJyAnICsgcGF0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QucGFyYW1zID0gbWF0Y2gucGFyYW1zO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXRjaC5oYW5kbGVyKHJlcXVlc3QpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBBIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGFuIGV4cHJlc3MgaGFuZGxlciBvdXQgb2YgYSBhIHByb21pc2Vcbi8vIGhhbmRsZXIuXG4vLyBFeHByZXNzIGhhbmRsZXJzIHNob3VsZCBuZXZlciB0aHJvdzsgaWYgYSBwcm9taXNlIGhhbmRsZXIgdGhyb3dzIHdlXG4vLyBqdXN0IHRyZWF0IGl0IGxpa2UgaXQgcmVzb2x2ZWQgdG8gYW4gZXJyb3IuXG5mdW5jdGlvbiBtYWtlRXhwcmVzc0hhbmRsZXIoYXBwSWQsIHByb21pc2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBtYXNrU2Vuc2l0aXZlVXJsKHJlcSk7XG4gICAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxLmJvZHkpO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycztcbiAgICAgIGxvZy5sb2dSZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHlcbiAgICAgIH0pO1xuICAgICAgcHJvbWlzZUhhbmRsZXIocmVxKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKCFyZXN1bHQucmVzcG9uc2UgJiYgIXJlc3VsdC5sb2NhdGlvbiAmJiAhcmVzdWx0LnRleHQpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ3RoZSBoYW5kbGVyIGRpZCBub3QgaW5jbHVkZSBhIFwicmVzcG9uc2VcIiBvciBhIFwibG9jYXRpb25cIiBmaWVsZCcpO1xuICAgICAgICAgIHRocm93ICdjb250cm9sIHNob3VsZCBub3QgZ2V0IGhlcmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nLmxvZ1Jlc3BvbnNlKHsgbWV0aG9kLCB1cmwsIHJlc3VsdCB9KTtcblxuICAgICAgICB2YXIgc3RhdHVzID0gcmVzdWx0LnN0YXR1cyB8fCAyMDA7XG4gICAgICAgIHJlcy5zdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAocmVzdWx0LnRleHQpIHtcbiAgICAgICAgICByZXMuc2VuZChyZXN1bHQudGV4dCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5sb2NhdGlvbikge1xuICAgICAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBleHByZXNzanMgcmVzcG9uc2VcbiAgICAgICAgICAvLyBhcyBpdCBkb3VibGUgZW5jb2RlcyAlZW5jb2RlZCBjaGFycyBpbiBVUkxcbiAgICAgICAgICBpZiAoIXJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICAgICAgcmVzLnNlbmQoJ0ZvdW5kLiBSZWRpcmVjdGluZyB0byAnICsgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgcmVzLnNldChoZWFkZXIsIHJlc3VsdC5oZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmVzLmpzb24ocmVzdWx0LnJlc3BvbnNlKTtcbiAgICAgIH0sIChlKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgRXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZS4gJHtpbnNwZWN0KGUpfWAsIHtlcnJvcjogZX0pO1xuICAgICAgICBuZXh0KGUpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBoYW5kbGluZyByZXF1ZXN0OiAke2luc3BlY3QoZSl9YCwge2Vycm9yOiBlfSk7XG4gICAgICBuZXh0KGUpO1xuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIG1hc2tTZW5zaXRpdmVVcmwocmVxKSB7XG4gIGxldCBtYXNrVXJsID0gcmVxLm9yaWdpbmFsVXJsLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHNob3VsZE1hc2tVcmwgPSByZXEubWV0aG9kID09PSAnR0VUJyAmJiByZXEub3JpZ2luYWxVcmwuaW5jbHVkZXMoJy9sb2dpbicpXG4gICAgICAgICAgICAgICAgICAgICAgJiYgIXJlcS5vcmlnaW5hbFVybC5pbmNsdWRlcygnY2xhc3NlcycpO1xuICBpZiAoc2hvdWxkTWFza1VybCkge1xuICAgIG1hc2tVcmwgPSBsb2cubWFza1NlbnNpdGl2ZVVybChtYXNrVXJsKTtcbiAgfVxuICByZXR1cm4gbWFza1VybDtcbn1cbiJdfQ==
|
|
208
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2V4cHJlc3MiLCJfbG9nZ2VyIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJMYXllciIsInZhbGlkYXRlUGFyYW1ldGVyIiwia2V5IiwidmFsdWUiLCJtYXRjaCIsIlByb21pc2VSb3V0ZXIiLCJjb25zdHJ1Y3RvciIsInJvdXRlcyIsImFwcElkIiwibW91bnRSb3V0ZXMiLCJtZXJnZSIsInJvdXRlciIsInJvdXRlIiwicHVzaCIsIm1ldGhvZCIsInBhdGgiLCJoYW5kbGVycyIsImhhbmRsZXIiLCJsZW5ndGgiLCJyZXEiLCJyZWR1Y2UiLCJwcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwibGF5ZXIiLCJwYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsIm1vdW50T250byIsImV4cHJlc3NBcHAiLCJ0b0xvd2VyQ2FzZSIsIm1ha2VFeHByZXNzSGFuZGxlciIsImNhbGwiLCJleHByZXNzUm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsInRyeVJvdXRlUmVxdWVzdCIsInJlcXVlc3QiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwicmVqZWN0IiwiZXhwb3J0cyIsInByb21pc2VIYW5kbGVyIiwicmVzIiwibmV4dCIsInVybCIsIm1hc2tTZW5zaXRpdmVVcmwiLCJib2R5IiwiYXNzaWduIiwiaGVhZGVycyIsImxvZyIsImxvZ1JlcXVlc3QiLCJyZXN1bHQiLCJyZXNwb25zZSIsImxvY2F0aW9uIiwidGV4dCIsImVycm9yIiwibG9nUmVzcG9uc2UiLCJzdGF0dXMiLCJoZWFkZXIiLCJzZXQiLCJzZW5kIiwianNvbiIsImNhdGNoIiwiaW5zcGVjdCIsIm1hc2tVcmwiLCJvcmlnaW5hbFVybCIsInRvU3RyaW5nIiwic2hvdWxkTWFza1VybCIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Byb21pc2VSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQSByb3V0ZXIgdGhhdCBpcyBiYXNlZCBvbiBwcm9taXNlcyByYXRoZXIgdGhhbiByZXEvcmVzL25leHQuXG4vLyBUaGlzIGlzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIHVzZSBvZiBleHByZXNzLlJvdXRlciB0byBoYW5kbGVcbi8vIHN1YnNlY3Rpb25zIG9mIHRoZSBBUEkgc3VyZmFjZS5cbi8vIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBoYXZlIG1ldGhvZHMgbGlrZSAnYmF0Y2gnIHRoYXRcbi8vIHRoZW1zZWx2ZXMgdXNlIG91ciByb3V0aW5nIGluZm9ybWF0aW9uLCB3aXRob3V0IGRpc3R1cmJpbmcgZXhwcmVzc1xuLy8gY29tcG9uZW50cyB0aGF0IGV4dGVybmFsIGRldmVsb3BlcnMgbWF5IGJlIG1vZGlmeWluZy5cblxuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICd1dGlsJztcbmNvbnN0IExheWVyID0gcmVxdWlyZSgncm91dGVyL2xpYi9sYXllcicpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcihrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ2NsYXNzTmFtZScpIHtcbiAgICBpZiAodmFsdWUubWF0Y2goL18/W0EtWmEtel1bQS1aYS16XzAtOV0qLykpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoa2V5ID09ICdvYmplY3RJZCcpIHtcbiAgICBpZiAodmFsdWUubWF0Y2goL1tBLVphLXowLTldKy8pKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlUm91dGVyIHtcbiAgLy8gRWFjaCBlbnRyeSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGg6XG4gIC8vIHBhdGg6IHRoZSBwYXRoIHRvIHJvdXRlLCBpbiBleHByZXNzIGZvcm1hdFxuICAvLyBtZXRob2Q6IHRoZSBIVFRQIG1ldGhvZCB0aGF0IHRoaXMgcm91dGUgaGFuZGxlcy5cbiAgLy8gICBNdXN0IGJlIG9uZSBvZjogUE9TVCwgR0VULCBQVVQsIERFTEVURVxuICAvLyBoYW5kbGVyOiBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgcmVxdWVzdCwgYW5kIHJldHVybnMgYSBwcm9taXNlLlxuICAvLyAgIFN1Y2Nlc3NmdWwgaGFuZGxlcnMgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0IHdpdGggZmllbGRzOlxuICAvLyAgICAgc3RhdHVzOiBvcHRpb25hbC4gdGhlIGh0dHAgc3RhdHVzIGNvZGUuIGRlZmF1bHRzIHRvIDIwMFxuICAvLyAgICAgcmVzcG9uc2U6IGEganNvbiBvYmplY3Qgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgcmVzcG9uc2VcbiAgLy8gICAgIGxvY2F0aW9uOiBvcHRpb25hbC4gYSBsb2NhdGlvbiBoZWFkZXJcbiAgY29uc3RydWN0b3Iocm91dGVzID0gW10sIGFwcElkKSB7XG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5hcHBJZCA9IGFwcElkO1xuICAgIHRoaXMubW91bnRSb3V0ZXMoKTtcbiAgfVxuXG4gIC8vIExlYXZlIHRoZSBvcHBvcnR1bml0eSB0b1xuICAvLyBzdWJjbGFzc2VzIHRvIG1vdW50IHRoZWlyIHJvdXRlcyBieSBvdmVycmlkaW5nXG4gIG1vdW50Um91dGVzKCkge31cblxuICAvLyBNZXJnZSB0aGUgcm91dGVzIGludG8gdGhpcyBvbmVcbiAgbWVyZ2Uocm91dGVyKSB7XG4gICAgZm9yICh2YXIgcm91dGUgb2Ygcm91dGVyLnJvdXRlcykge1xuICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgfVxuICB9XG5cbiAgcm91dGUobWV0aG9kLCBwYXRoLCAuLi5oYW5kbGVycykge1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQT1NUJzpcbiAgICAgIGNhc2UgJ0dFVCc6XG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyAnY2Fubm90IHJvdXRlIG1ldGhvZDogJyArIG1ldGhvZDtcbiAgICB9XG5cbiAgICBsZXQgaGFuZGxlciA9IGhhbmRsZXJzWzBdO1xuXG4gICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiAocmVxKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVycy5yZWR1Y2UoKHByb21pc2UsIGhhbmRsZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyKHJlcSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiBwYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgbGF5ZXI6IG5ldyBMYXllcihwYXRoLCBudWxsLCBoYW5kbGVyKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYW4gb2JqZWN0IHdpdGg6XG4gIC8vICAgaGFuZGxlcjogdGhlIGhhbmRsZXIgdGhhdCBzaG91bGQgZGVhbCB3aXRoIHRoaXMgcmVxdWVzdFxuICAvLyAgIHBhcmFtczogYW55IDotcGFyYW1zIHRoYXQgZ290IHBhcnNlZCBmcm9tIHRoZSBwYXRoXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICBtYXRjaChtZXRob2QsIHBhdGgpIHtcbiAgICBmb3IgKHZhciByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgaWYgKHJvdXRlLm1ldGhvZCAhPSBtZXRob2QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllciA9IHJvdXRlLmxheWVyIHx8IG5ldyBMYXllcihyb3V0ZS5wYXRoLCBudWxsLCByb3V0ZS5oYW5kbGVyKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gbGF5ZXIubWF0Y2gocGF0aCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbGF5ZXIucGFyYW1zO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IHZhbGlkYXRlUGFyYW1ldGVyKGtleSwgcGFyYW1zW2tleV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXMsIGhhbmRsZXI6IHJvdXRlLmhhbmRsZXIgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3VudCB0aGUgcm91dGVzIG9uIHRoaXMgcm91dGVyIG9udG8gYW4gZXhwcmVzcyBhcHAgKG9yIGV4cHJlc3Mgcm91dGVyKVxuICBtb3VudE9udG8oZXhwcmVzc0FwcCkge1xuICAgIHRoaXMucm91dGVzLmZvckVhY2gocm91dGUgPT4ge1xuICAgICAgY29uc3QgbWV0aG9kID0gcm91dGUubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gbWFrZUV4cHJlc3NIYW5kbGVyKHRoaXMuYXBwSWQsIHJvdXRlLmhhbmRsZXIpO1xuICAgICAgZXhwcmVzc0FwcFttZXRob2RdLmNhbGwoZXhwcmVzc0FwcCwgcm91dGUucGF0aCwgaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cHJlc3NBcHA7XG4gIH1cblxuICBleHByZXNzUm91dGVyKCkge1xuICAgIHJldHVybiB0aGlzLm1vdW50T250byhleHByZXNzLlJvdXRlcigpKTtcbiAgfVxuXG4gIHRyeVJvdXRlUmVxdWVzdChtZXRob2QsIHBhdGgsIHJlcXVlc3QpIHtcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoKG1ldGhvZCwgcGF0aCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ2Nhbm5vdCByb3V0ZSAnICsgbWV0aG9kICsgJyAnICsgcGF0aCk7XG4gICAgfVxuICAgIHJlcXVlc3QucGFyYW1zID0gbWF0Y2gucGFyYW1zO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXRjaC5oYW5kbGVyKHJlcXVlc3QpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBBIGhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGFuIGV4cHJlc3MgaGFuZGxlciBvdXQgb2YgYSBhIHByb21pc2Vcbi8vIGhhbmRsZXIuXG4vLyBFeHByZXNzIGhhbmRsZXJzIHNob3VsZCBuZXZlciB0aHJvdzsgaWYgYSBwcm9taXNlIGhhbmRsZXIgdGhyb3dzIHdlXG4vLyBqdXN0IHRyZWF0IGl0IGxpa2UgaXQgcmVzb2x2ZWQgdG8gYW4gZXJyb3IuXG5mdW5jdGlvbiBtYWtlRXhwcmVzc0hhbmRsZXIoYXBwSWQsIHByb21pc2VIYW5kbGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbWFza1NlbnNpdGl2ZVVybChyZXEpO1xuICAgICAgY29uc3QgYm9keSA9IE9iamVjdC5hc3NpZ24oe30sIHJlcS5ib2R5KTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgICBjb25zdCBoZWFkZXJzID0gcmVxLmhlYWRlcnM7XG4gICAgICBsb2cubG9nUmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICBwcm9taXNlSGFuZGxlcihyZXEpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXNwb25zZSAmJiAhcmVzdWx0LmxvY2F0aW9uICYmICFyZXN1bHQudGV4dCkge1xuICAgICAgICAgICAgICBsb2cuZXJyb3IoJ3RoZSBoYW5kbGVyIGRpZCBub3QgaW5jbHVkZSBhIFwicmVzcG9uc2VcIiBvciBhIFwibG9jYXRpb25cIiBmaWVsZCcpO1xuICAgICAgICAgICAgICB0aHJvdyAnY29udHJvbCBzaG91bGQgbm90IGdldCBoZXJlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9nLmxvZ1Jlc3BvbnNlKHsgbWV0aG9kLCB1cmwsIHJlc3VsdCB9KTtcblxuICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHJlc3VsdC5zdGF0dXMgfHwgMjAwO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICAgICAgICAgICAgICByZXMuc2V0KGhlYWRlciwgcmVzdWx0LmhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQpIHtcbiAgICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LnRleHQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCByZXN1bHQubG9jYXRpb24pO1xuICAgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBleHByZXNzanMgcmVzcG9uc2VcbiAgICAgICAgICAgICAgLy8gYXMgaXQgZG91YmxlIGVuY29kZXMgJWVuY29kZWQgY2hhcnMgaW4gVVJMXG4gICAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmVzLnNlbmQoJ0ZvdW5kLiBSZWRpcmVjdGluZyB0byAnICsgcmVzdWx0LmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdC5yZXNwb25zZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihgRXJyb3IgZ2VuZXJhdGluZyByZXNwb25zZS4gJHtpbnNwZWN0KGUpfWAsIHsgZXJyb3I6IGUgfSk7XG4gICAgICAgICAgbmV4dChlKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBoYW5kbGluZyByZXF1ZXN0OiAke2luc3BlY3QoZSl9YCwgeyBlcnJvcjogZSB9KTtcbiAgICAgIG5leHQoZSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXNrU2Vuc2l0aXZlVXJsKHJlcSkge1xuICBsZXQgbWFza1VybCA9IHJlcS5vcmlnaW5hbFVybC50b1N0cmluZygpO1xuICBjb25zdCBzaG91bGRNYXNrVXJsID1cbiAgICByZXEubWV0aG9kID09PSAnR0VUJyAmJlxuICAgIHJlcS5vcmlnaW5hbFVybC5pbmNsdWRlcygnL2xvZ2luJykgJiZcbiAgICAhcmVxLm9yaWdpbmFsVXJsLmluY2x1ZGVzKCdjbGFzc2VzJyk7XG4gIGlmIChzaG91bGRNYXNrVXJsKSB7XG4gICAgbWFza1VybCA9IGxvZy5tYXNr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QUVBLElBQUlILE1BQU0sQ0FBQ0UsUUFBUSxFQUFFO1VBQ25CWCxHQUFHLENBQUNpQixHQUFHLENBQUMsVUFBVSxFQUFFUixNQUFNLENBQUNFLFFBQVEsQ0FBQztVQUNwQztVQUNBO1VBQ0EsSUFBSSxDQUFDRixNQUFNLENBQUNDLFFBQVEsRUFBRTtZQUNwQlYsR0FBRyxDQUFDa0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHVCxNQUFNLENBQUNFLFFBQVEsQ0FBQztZQUNwRDtVQUNGO1FBQ0Y7UUFDQVgsR0FBRyxDQUFDbUIsSUFBSSxDQUFDVixNQUFNLENBQUNDLFFBQVEsQ0FBQztNQUMzQixDQUFDLEVBQ0RHLEtBQUssSUFBSTtRQUNQWixJQUFJLENBQUNZLEtBQUssQ0FBQztNQUNiLENBQ0YsQ0FBQyxDQUNBTyxLQUFLLENBQUNyRSxDQUFDLElBQUk7UUFDVndELGVBQUcsQ0FBQ00sS0FBSyxDQUFDLDhCQUE4QixJQUFBUSxhQUFPLEVBQUN0RSxDQUFDLENBQUMsRUFBRSxFQUFFO1VBQUU4RCxLQUFLLEVBQUU5RDtRQUFFLENBQUMsQ0FBQztRQUNuRWtELElBQUksQ0FBQ2xELENBQUMsQ0FBQztNQUNULENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEVBQUU7TUFDVndELGVBQUcsQ0FBQ00sS0FBSyxDQUFDLDJCQUEyQixJQUFBUSxhQUFPLEVBQUN0RSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQUU4RCxLQUFLLEVBQUU5RDtNQUFFLENBQUMsQ0FBQztNQUNoRWtELElBQUksQ0FBQ2xELENBQUMsQ0FBQztJQUNUO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU29ELGdCQUFnQkEsQ0FBQzlCLEdBQUcsRUFBRTtFQUM3QixJQUFJaUQsT0FBTyxHQUFHakQsR0FBRyxDQUFDa0QsV0FBVyxDQUFDQyxRQUFRLENBQUMsQ0FBQztFQUN4QyxNQUFNQyxhQUFhLEdBQ2pCcEQsR0FBRyxDQUFDTCxNQUFNLEtBQUssS0FBSyxJQUNwQkssR0FBRyxDQUFDa0QsV0FBVyxDQUFDRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQ2xDLENBQUNyRCxHQUFHLENBQUNrRCxXQUFXLENBQUNHLFFBQVEsQ0FBQyxTQUFTLENBQUM7RUFDdEMsSUFBSUQsYUFBYSxFQUFFO0lBQ2pCSCxPQUFPLEdBQUdmLGVBQUcsQ0FBQ0osZ0JBQWdCLENBQUNtQixPQUFPLENBQUM7RUFDekM7RUFDQSxPQUFPQSxPQUFPO0FBQ2hCIiwiaWdub3JlTGlzdCI6W119
|
package/lib/Push/PushQueue.js
CHANGED
|
@@ -1,29 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.PushQueue =
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _rest2 = _interopRequireDefault(_rest);
|
|
13
|
-
|
|
14
|
-
var _utils = require('./utils');
|
|
15
|
-
|
|
16
|
-
var _node = require('parse/node');
|
|
17
|
-
|
|
18
|
-
var _node2 = _interopRequireDefault(_node);
|
|
19
|
-
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
6
|
+
exports.PushQueue = void 0;
|
|
7
|
+
var _ParseMessageQueue = require("../ParseMessageQueue");
|
|
8
|
+
var _rest = _interopRequireDefault(require("../rest"));
|
|
9
|
+
var _utils = require("./utils");
|
|
10
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
12
|
const PUSH_CHANNEL = 'parse-server-push';
|
|
23
13
|
const DEFAULT_BATCH_SIZE = 100;
|
|
24
|
-
|
|
25
14
|
class PushQueue {
|
|
26
|
-
|
|
27
15
|
// config object of the publisher, right now it only contains the redisURL,
|
|
28
16
|
// but we may extend it later.
|
|
29
17
|
constructor(config = {}) {
|
|
@@ -31,36 +19,42 @@ class PushQueue {
|
|
|
31
19
|
this.batchSize = config.batchSize || DEFAULT_BATCH_SIZE;
|
|
32
20
|
this.parsePublisher = _ParseMessageQueue.ParseMessageQueue.createPublisher(config);
|
|
33
21
|
}
|
|
34
|
-
|
|
35
22
|
static defaultPushChannel() {
|
|
36
|
-
return `${
|
|
23
|
+
return `${_node.default.applicationId}-${PUSH_CHANNEL}`;
|
|
37
24
|
}
|
|
38
|
-
|
|
39
25
|
enqueue(body, where, config, auth, pushStatus) {
|
|
40
26
|
const limit = this.batchSize;
|
|
41
|
-
|
|
42
27
|
where = (0, _utils.applyDeviceTokenExists)(where);
|
|
43
28
|
|
|
44
29
|
// Order by objectId so no impact on the DB
|
|
45
30
|
const order = 'objectId';
|
|
46
31
|
return Promise.resolve().then(() => {
|
|
47
|
-
return
|
|
48
|
-
|
|
32
|
+
return _rest.default.find(config, auth, '_Installation', where, {
|
|
33
|
+
limit: 0,
|
|
34
|
+
count: true
|
|
35
|
+
});
|
|
36
|
+
}).then(({
|
|
37
|
+
results,
|
|
38
|
+
count
|
|
39
|
+
}) => {
|
|
49
40
|
if (!results || count == 0) {
|
|
50
41
|
return pushStatus.complete();
|
|
51
42
|
}
|
|
52
43
|
pushStatus.setRunning(Math.ceil(count / limit));
|
|
53
44
|
let skip = 0;
|
|
54
45
|
while (skip < count) {
|
|
55
|
-
const query = {
|
|
46
|
+
const query = {
|
|
47
|
+
where,
|
|
56
48
|
limit,
|
|
57
49
|
skip,
|
|
58
|
-
order
|
|
59
|
-
|
|
50
|
+
order
|
|
51
|
+
};
|
|
60
52
|
const pushWorkItem = {
|
|
61
53
|
body,
|
|
62
54
|
query,
|
|
63
|
-
pushStatus: {
|
|
55
|
+
pushStatus: {
|
|
56
|
+
objectId: pushStatus.objectId
|
|
57
|
+
},
|
|
64
58
|
applicationId: config.applicationId
|
|
65
59
|
};
|
|
66
60
|
this.parsePublisher.publish(this.channel, JSON.stringify(pushWorkItem));
|
|
@@ -70,4 +64,4 @@ class PushQueue {
|
|
|
70
64
|
}
|
|
71
65
|
}
|
|
72
66
|
exports.PushQueue = PushQueue;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUGFyc2VNZXNzYWdlUXVldWUiLCJyZXF1aXJlIiwiX3Jlc3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3V0aWxzIiwiX25vZGUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQVVNIX0NIQU5ORUwiLCJERUZBVUxUX0JBVENIX1NJWkUiLCJQdXNoUXVldWUiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImNoYW5uZWwiLCJkZWZhdWx0UHVzaENoYW5uZWwiLCJiYXRjaFNpemUiLCJwYXJzZVB1Ymxpc2hlciIsIlBhcnNlTWVzc2FnZVF1ZXVlIiwiY3JlYXRlUHVibGlzaGVyIiwiUGFyc2UiLCJhcHBsaWNhdGlvbklkIiwiZW5xdWV1ZSIsImJvZHkiLCJ3aGVyZSIsImF1dGgiLCJwdXNoU3RhdHVzIiwibGltaXQiLCJhcHBseURldmljZVRva2VuRXhpc3RzIiwib3JkZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJyZXN0IiwiZmluZCIsImNvdW50IiwicmVzdWx0cyIsImNvbXBsZXRlIiwic2V0UnVubmluZyIsIk1hdGgiLCJjZWlsIiwic2tpcCIsInF1ZXJ5IiwicHVzaFdvcmtJdGVtIiwib2JqZWN0SWQiLCJwdWJsaXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC9QdXNoUXVldWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCB7IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcblxuY29uc3QgUFVTSF9DSEFOTkVMID0gJ3BhcnNlLXNlcnZlci1wdXNoJztcbmNvbnN0IERFRkFVTFRfQkFUQ0hfU0laRSA9IDEwMDtcblxuZXhwb3J0IGNsYXNzIFB1c2hRdWV1ZSB7XG4gIHBhcnNlUHVibGlzaGVyOiBPYmplY3Q7XG4gIGNoYW5uZWw6IFN0cmluZztcbiAgYmF0Y2hTaXplOiBOdW1iZXI7XG5cbiAgLy8gY29uZmlnIG9iamVjdCBvZiB0aGUgcHVibGlzaGVyLCByaWdodCBub3cgaXQgb25seSBjb250YWlucyB0aGUgcmVkaXNVUkwsXG4gIC8vIGJ1dCB3ZSBtYXkgZXh0ZW5kIGl0IGxhdGVyLlxuICBjb25zdHJ1Y3Rvcihjb25maWc6IGFueSA9IHt9KSB7XG4gICAgdGhpcy5jaGFubmVsID0gY29uZmlnLmNoYW5uZWwgfHwgUHVzaFF1ZXVlLmRlZmF1bHRQdXNoQ2hhbm5lbCgpO1xuICAgIHRoaXMuYmF0Y2hTaXplID0gY29uZmlnLmJhdGNoU2l6ZSB8fCBERUZBVUxUX0JBVENIX1NJWkU7XG4gICAgdGhpcy5wYXJzZVB1Ymxpc2hlciA9IFBhcnNlTWVzc2FnZVF1ZXVlLmNyZWF0ZVB1Ymxpc2hlcihjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQdXNoQ2hhbm5lbCgpIHtcbiAgICByZXR1cm4gYCR7UGFyc2UuYXBwbGljYXRpb25JZH0tJHtQVVNIX0NIQU5ORUx9YDtcbiAgfVxuXG4gIGVucXVldWUoYm9keSwgd2hlcmUsIGNvbmZpZywgYXV0aCwgcHVzaFN0YXR1cykge1xuICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5iYXRjaFNpemU7XG5cbiAgICB3aGVyZSA9IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMod2hlcmUpO1xuXG4gICAgLy8gT3JkZXIgYnkgb2JqZWN0SWQgc28gbm8gaW1wYWN0IG9uIHRoZSBEQlxuICAgIGNvbnN0IG9yZGVyID0gJ29iamVjdElkJztcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHtcbiAgICAgICAgICBsaW1pdDogMCxcbiAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHsgcmVzdWx0cywgY291bnQgfSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdHMgfHwgY291bnQgPT0gMCkge1xuICAgICAgICAgIHJldHVybiBwdXNoU3RhdHVzLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFN0YXR1cy5zZXRSdW5uaW5nKE1hdGguY2VpbChjb3VudCAvIGxpbWl0KSk7XG4gICAgICAgIGxldCBza2lwID0gMDtcbiAgICAgICAgd2hpbGUgKHNraXAgPCBjb3VudCkge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0ge1xuICAgICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIHNraXAsXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgcHVzaFdvcmtJdGVtID0ge1xuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgcHVzaFN0YXR1czogeyBvYmplY3RJZDogcHVzaFN0YXR1cy5vYmplY3RJZCB9LFxuICAgICAgICAgICAgYXBwbGljYXRpb25JZDogY29uZmlnLmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnBhcnNlUHVibGlzaGVyLnB1Ymxpc2godGhpcy5jaGFubmVsLCBKU09OLnN0cmluZ2lmeShwdXNoV29ya0l0ZW0pKTtcbiAgICAgICAgICBza2lwICs9IGxpbWl0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQStCLFNBQUFFLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRS9CLE1BQU1HLFlBQVksR0FBRyxtQkFBbUI7QUFDeEMsTUFBTUMsa0JBQWtCLEdBQUcsR0FBRztBQUV2QixNQUFNQyxTQUFTLENBQUM7RUFLckI7RUFDQTtFQUNBQyxXQUFXQSxDQUFDQyxNQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDQyxPQUFPLEdBQUdELE1BQU0sQ0FBQ0MsT0FBTyxJQUFJSCxTQUFTLENBQUNJLGtCQUFrQixDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDQyxTQUFTLEdBQUdILE1BQU0sQ0FBQ0csU0FBUyxJQUFJTixrQkFBa0I7SUFDdkQsSUFBSSxDQUFDTyxjQUFjLEdBQUdDLG9DQUFpQixDQUFDQyxlQUFlLENBQUNOLE1BQU0sQ0FBQztFQUNqRTtFQUVBLE9BQU9FLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQzFCLE9BQU8sR0FBR0ssYUFBSyxDQUFDQyxhQUFhLElBQUlaLFlBQVksRUFBRTtFQUNqRDtFQUVBYSxPQUFPQSxDQUFDQyxJQUFJLEVBQUVDLEtBQUssRUFBRVgsTUFBTSxFQUFFWSxJQUFJLEVBQUVDLFVBQVUsRUFBRTtJQUM3QyxNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDWCxTQUFTO0lBRTVCUSxLQUFLLEdBQUcsSUFBQUksNkJBQXNCLEVBQUNKLEtBQUssQ0FBQzs7SUFFckM7SUFDQSxNQUFNSyxLQUFLLEdBQUcsVUFBVTtJQUN4QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQ3JCQyxJQUFJLENBQUMsTUFBTTtNQUNWLE9BQU9DLGFBQUksQ0FBQ0MsSUFBSSxDQUFDckIsTUFBTSxFQUFFWSxJQUFJLEVBQUUsZUFBZSxFQUFFRCxLQUFLLEVBQUU7UUFDckRHLEtBQUssRUFBRSxDQUFDO1FBQ1JRLEtBQUssRUFBRTtNQUNULENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNESCxJQUFJLENBQUMsQ0FBQztNQUFFSSxPQUFPO01BQUVEO0lBQU0sQ0FBQyxLQUFLO01BQzVCLElBQUksQ0FBQ0MsT0FBTyxJQUFJRCxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQzFCLE9BQU9ULFVBQVUsQ0FBQ1csUUFBUSxDQUFDLENBQUM7TUFDOUI7TUFDQVgsVUFBVSxDQUFDWSxVQUFVLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDTCxLQUFLLEdBQUdSLEtBQUssQ0FBQyxDQUFDO01BQy9DLElBQUljLElBQUksR0FBRyxDQUFDO01BQ1osT0FBT0EsSUFBSSxHQUFHTixLQUFLLEVBQUU7UUFDbkIsTUFBTU8sS0FBSyxHQUFHO1VBQ1psQixLQUFLO1VBQ0xHLEtBQUs7VUFDTGMsSUFBSTtVQUNKWjtRQUNGLENBQUM7UUFFRCxNQUFNYyxZQUFZLEdBQUc7VUFDbkJwQixJQUFJO1VBQ0ptQixLQUFLO1VBQ0xoQixVQUFVLEVBQUU7WUFBRWtCLFFBQVEsRUFBRWxCLFVBQVUsQ0FBQ2tCO1VBQVMsQ0FBQztVQUM3Q3ZCLGFBQWEsRUFBRVIsTUFBTSxDQUFDUTtRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDSixjQUFjLENBQUM0QixPQUFPLENBQUMsSUFBSSxDQUFDL0IsT0FBTyxFQUFFZ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNKLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFRixJQUFJLElBQUlkLEtBQUs7TUFDZjtJQUNGLENBQUMsQ0FBQztFQUNOO0FBQ0Y7QUFBQ3FCLE9BQUEsQ0FBQXJDLFNBQUEsR0FBQUEsU0FBQSIsImlnbm9yZUxpc3QiOltdfQ==
|