@beiguancyc/parse-server 9.9.0-ruixiang.1
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 +176 -0
- package/NOTICE +10 -0
- package/README.md +1311 -0
- package/bin/parse-live-query-server +3 -0
- package/bin/parse-server +3 -0
- package/lib/AccountLockout.js +149 -0
- package/lib/Adapters/AdapterLoader.js +60 -0
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
- package/lib/Adapters/Auth/AuthAdapter.js +132 -0
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
- package/lib/Adapters/Auth/OAuth1Client.js +204 -0
- package/lib/Adapters/Auth/apple.js +125 -0
- package/lib/Adapters/Auth/facebook.js +187 -0
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +125 -0
- package/lib/Adapters/Auth/google.js +122 -0
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +41 -0
- package/lib/Adapters/Auth/index.js +248 -0
- package/lib/Adapters/Auth/instagram.js +118 -0
- package/lib/Adapters/Auth/janraincapture.js +85 -0
- package/lib/Adapters/Auth/janrainengage.js +57 -0
- package/lib/Adapters/Auth/keycloak.js +168 -0
- package/lib/Adapters/Auth/ldap.js +193 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +117 -0
- package/lib/Adapters/Auth/meetup.js +44 -0
- package/lib/Adapters/Auth/mfa.js +334 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +115 -0
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +113 -0
- package/lib/Adapters/Auth/spotify.js +115 -0
- package/lib/Adapters/Auth/twitter.js +197 -0
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +55 -0
- package/lib/Adapters/Auth/wechat.js +110 -0
- package/lib/Adapters/Auth/weibo.js +141 -0
- package/lib/Adapters/Cache/CacheAdapter.js +40 -0
- package/lib/Adapters/Cache/InMemoryCache.js +61 -0
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
- package/lib/Adapters/Cache/LRUCache.js +35 -0
- package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
- package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +32 -0
- package/lib/Adapters/Files/FilesAdapter.js +129 -0
- package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
- package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
- package/lib/Adapters/Logger/WinstonLogger.js +107 -0
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
- package/lib/Adapters/Push/PushAdapter.js +40 -0
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
- package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
- package/lib/Adapters/Storage/StorageAdapter.js +2 -0
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +687 -0
- package/lib/AuthDataLock.js +53 -0
- package/lib/ClientSDK.js +39 -0
- package/lib/Config.js +879 -0
- package/lib/Controllers/AdaptableController.js +72 -0
- package/lib/Controllers/AnalyticsController.js +43 -0
- package/lib/Controllers/CacheController.js +71 -0
- package/lib/Controllers/DatabaseController.js +1685 -0
- package/lib/Controllers/FilesController.js +122 -0
- package/lib/Controllers/HooksController.js +254 -0
- package/lib/Controllers/LiveQueryController.js +72 -0
- package/lib/Controllers/LoggerController.js +222 -0
- package/lib/Controllers/ParseGraphQLController.js +294 -0
- package/lib/Controllers/PushController.js +224 -0
- package/lib/Controllers/SchemaController.js +1563 -0
- package/lib/Controllers/UserController.js +364 -0
- package/lib/Controllers/index.js +251 -0
- package/lib/Controllers/types.js +2 -0
- package/lib/Deprecator/Deprecations.js +100 -0
- package/lib/Deprecator/Deprecator.js +140 -0
- package/lib/Error.js +50 -0
- package/lib/FileUrlValidator.js +69 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +241 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/helpers/queryComplexity.js +138 -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 +1099 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +77 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +161 -0
- package/lib/GraphQL/loaders/schemaQueries.js +80 -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 +71 -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 +280 -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/InstallationDedup.js +178 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +90 -0
- package/lib/LiveQuery/Id.js +20 -0
- package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
- package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
- package/lib/LiveQuery/ParsePubSub.js +37 -0
- package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
- package/lib/LiveQuery/QueryTools.js +443 -0
- package/lib/LiveQuery/RequestSchema.js +161 -0
- package/lib/LiveQuery/SessionTokenCache.js +51 -0
- package/lib/LiveQuery/Subscription.js +47 -0
- package/lib/LiveQuery/equalObjects.js +50 -0
- package/lib/Options/Definitions.js +1599 -0
- package/lib/Options/docs.js +389 -0
- package/lib/Options/index.js +12 -0
- package/lib/Options/parsers.js +89 -0
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +24 -0
- package/lib/ParseServer.js +632 -0
- package/lib/ParseServerRESTController.js +173 -0
- package/lib/PromiseRouter.js +208 -0
- package/lib/Push/PushQueue.js +67 -0
- package/lib/Push/PushWorker.js +101 -0
- package/lib/Push/utils.js +129 -0
- package/lib/RestQuery.js +1208 -0
- package/lib/RestWrite.js +1671 -0
- package/lib/Routers/AggregateRouter.js +150 -0
- package/lib/Routers/AnalyticsRouter.js +26 -0
- package/lib/Routers/AudiencesRouter.js +54 -0
- package/lib/Routers/ClassesRouter.js +191 -0
- package/lib/Routers/CloudCodeRouter.js +87 -0
- package/lib/Routers/FeaturesRouter.js +72 -0
- package/lib/Routers/FilesRouter.js +772 -0
- package/lib/Routers/FunctionsRouter.js +341 -0
- package/lib/Routers/GlobalConfigRouter.js +123 -0
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +121 -0
- package/lib/Routers/IAPValidationRouter.js +113 -0
- package/lib/Routers/InstallationsRouter.js +46 -0
- package/lib/Routers/LogsRouter.js +57 -0
- package/lib/Routers/PagesRouter.js +676 -0
- package/lib/Routers/PurgeRouter.js +45 -0
- package/lib/Routers/PushRouter.js +75 -0
- package/lib/Routers/RolesRouter.js +33 -0
- package/lib/Routers/SchemasRouter.js +118 -0
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +126 -0
- package/lib/Routers/UsersRouter.js +733 -0
- 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 +160 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +34 -0
- package/lib/StatusHandler.js +329 -0
- package/lib/TestUtils.js +87 -0
- package/lib/Utils.js +577 -0
- package/lib/batch.js +185 -0
- package/lib/cache.js +12 -0
- package/lib/cli/definitions/parse-live-query-server.js +9 -0
- package/lib/cli/definitions/parse-server.js +9 -0
- package/lib/cli/parse-live-query-server.js +14 -0
- package/lib/cli/parse-server.js +101 -0
- package/lib/cli/utils/commander.js +132 -0
- package/lib/cli/utils/runner.js +53 -0
- package/lib/cloud-code/Parse.Cloud.js +797 -0
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +54 -0
- package/lib/defaults.js +58 -0
- package/lib/deprecated.js +12 -0
- package/lib/index.js +89 -0
- package/lib/logger.js +40 -0
- package/lib/middlewares.js +810 -0
- package/lib/password.js +40 -0
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +11 -0
- package/lib/rest.js +264 -0
- package/lib/triggers.js +949 -0
- package/lib/vendor/README.md +8 -0
- package/lib/vendor/mongodbUrl.js +1012 -0
- package/package.json +172 -0
- package/postinstall.js +38 -0
- package/public/custom_json.html +17 -0
- package/public/custom_json.json +23 -0
- package/public/custom_page.html +15 -0
- package/public/de/email_verification_link_expired.html +24 -0
- package/public/de/email_verification_link_invalid.html +21 -0
- package/public/de/email_verification_send_fail.html +21 -0
- package/public/de/email_verification_send_success.html +19 -0
- package/public/de/email_verification_success.html +18 -0
- package/public/de/password_reset.html +65 -0
- package/public/de/password_reset_link_invalid.html +19 -0
- package/public/de/password_reset_success.html +18 -0
- package/public/de-AT/email_verification_link_expired.html +24 -0
- package/public/de-AT/email_verification_link_invalid.html +21 -0
- package/public/de-AT/email_verification_send_fail.html +21 -0
- package/public/de-AT/email_verification_send_success.html +19 -0
- package/public/de-AT/email_verification_success.html +18 -0
- package/public/de-AT/password_reset.html +65 -0
- package/public/de-AT/password_reset_link_invalid.html +19 -0
- package/public/de-AT/password_reset_success.html +18 -0
- package/public/email_verification_link_expired.html +24 -0
- package/public/email_verification_link_invalid.html +21 -0
- package/public/email_verification_send_fail.html +21 -0
- package/public/email_verification_send_success.html +19 -0
- package/public/email_verification_success.html +18 -0
- package/public/password_reset.html +65 -0
- package/public/password_reset_link_invalid.html +19 -0
- package/public/password_reset_success.html +18 -0
- 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 +320 -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/views/choose_password +215 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.applyDeviceTokenExists = applyDeviceTokenExists;
|
|
7
|
+
exports.bodiesPerLocales = bodiesPerLocales;
|
|
8
|
+
exports.getLocalesFromPush = getLocalesFromPush;
|
|
9
|
+
exports.groupByLocaleIdentifier = groupByLocaleIdentifier;
|
|
10
|
+
exports.isPushIncrementing = isPushIncrementing;
|
|
11
|
+
exports.stripLocalesFromBody = stripLocalesFromBody;
|
|
12
|
+
exports.transformPushBodyForLocale = transformPushBodyForLocale;
|
|
13
|
+
exports.validatePushType = validatePushType;
|
|
14
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
function isPushIncrementing(body) {
|
|
17
|
+
if (!body.data || !body.data.badge) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const badge = body.data.badge;
|
|
21
|
+
if (typeof badge == 'string' && badge.toLowerCase() == 'increment') {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
return typeof badge == 'object' && typeof badge.__op == 'string' && badge.__op.toLowerCase() == 'increment' && Number(badge.amount);
|
|
25
|
+
}
|
|
26
|
+
const localizableKeys = ['alert', 'title'];
|
|
27
|
+
function getLocalesFromPush(body) {
|
|
28
|
+
const data = body.data;
|
|
29
|
+
if (!data) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
return [...new Set(Object.keys(data).reduce((memo, key) => {
|
|
33
|
+
localizableKeys.forEach(localizableKey => {
|
|
34
|
+
if (key.indexOf(`${localizableKey}-`) == 0) {
|
|
35
|
+
memo.push(key.slice(localizableKey.length + 1));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return memo;
|
|
39
|
+
}, []))];
|
|
40
|
+
}
|
|
41
|
+
function transformPushBodyForLocale(body, locale) {
|
|
42
|
+
const data = body.data;
|
|
43
|
+
if (!data) {
|
|
44
|
+
return body;
|
|
45
|
+
}
|
|
46
|
+
body = structuredClone(body);
|
|
47
|
+
localizableKeys.forEach(key => {
|
|
48
|
+
const localeValue = body.data[`${key}-${locale}`];
|
|
49
|
+
if (localeValue) {
|
|
50
|
+
body.data[key] = localeValue;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return stripLocalesFromBody(body);
|
|
54
|
+
}
|
|
55
|
+
function stripLocalesFromBody(body) {
|
|
56
|
+
if (!body.data) {
|
|
57
|
+
return body;
|
|
58
|
+
}
|
|
59
|
+
Object.keys(body.data).forEach(key => {
|
|
60
|
+
localizableKeys.forEach(localizableKey => {
|
|
61
|
+
if (key.indexOf(`${localizableKey}-`) == 0) {
|
|
62
|
+
delete body.data[key];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
return body;
|
|
67
|
+
}
|
|
68
|
+
function bodiesPerLocales(body, locales = []) {
|
|
69
|
+
// Get all tranformed bodies for each locale
|
|
70
|
+
const result = locales.reduce((memo, locale) => {
|
|
71
|
+
memo[locale] = transformPushBodyForLocale(body, locale);
|
|
72
|
+
return memo;
|
|
73
|
+
}, {});
|
|
74
|
+
// Set the default locale, with the stripped body
|
|
75
|
+
result.default = stripLocalesFromBody(body);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
function groupByLocaleIdentifier(installations, locales = []) {
|
|
79
|
+
return installations.reduce((map, installation) => {
|
|
80
|
+
let added = false;
|
|
81
|
+
locales.forEach(locale => {
|
|
82
|
+
if (added) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (installation.localeIdentifier && installation.localeIdentifier.indexOf(locale) === 0) {
|
|
86
|
+
added = true;
|
|
87
|
+
map[locale] = map[locale] || [];
|
|
88
|
+
map[locale].push(installation);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
if (!added) {
|
|
92
|
+
map.default.push(installation);
|
|
93
|
+
}
|
|
94
|
+
return map;
|
|
95
|
+
}, {
|
|
96
|
+
default: []
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Check whether the deviceType parameter in qury condition is valid or not.
|
|
102
|
+
* @param {Object} where A query condition
|
|
103
|
+
* @param {Array} validPushTypes An array of valid push types(string)
|
|
104
|
+
*/
|
|
105
|
+
function validatePushType(where = {}, validPushTypes = []) {
|
|
106
|
+
var deviceTypeField = where.deviceType || {};
|
|
107
|
+
var deviceTypes = [];
|
|
108
|
+
if (typeof deviceTypeField === 'string') {
|
|
109
|
+
deviceTypes.push(deviceTypeField);
|
|
110
|
+
} else if (Array.isArray(deviceTypeField['$in'])) {
|
|
111
|
+
deviceTypes.concat(deviceTypeField['$in']);
|
|
112
|
+
}
|
|
113
|
+
for (var i = 0; i < deviceTypes.length; i++) {
|
|
114
|
+
var deviceType = deviceTypes[i];
|
|
115
|
+
if (validPushTypes.indexOf(deviceType) < 0) {
|
|
116
|
+
throw new _node.default.Error(_node.default.Error.PUSH_MISCONFIGURED, deviceType + ' is not supported push type.');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function applyDeviceTokenExists(where) {
|
|
121
|
+
where = structuredClone(where);
|
|
122
|
+
if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
|
|
123
|
+
where['deviceToken'] = {
|
|
124
|
+
$exists: true
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return where;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaXNQdXNoSW5jcmVtZW50aW5nIiwiYm9keSIsImRhdGEiLCJiYWRnZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsIk51bWJlciIsImFtb3VudCIsImxvY2FsaXphYmxlS2V5cyIsImdldExvY2FsZXNGcm9tUHVzaCIsIlNldCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJtZW1vIiwia2V5IiwiZm9yRWFjaCIsImxvY2FsaXphYmxlS2V5IiwiaW5kZXhPZiIsInB1c2giLCJzbGljZSIsImxlbmd0aCIsInRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlIiwibG9jYWxlIiwic3RydWN0dXJlZENsb25lIiwibG9jYWxlVmFsdWUiLCJzdHJpcExvY2FsZXNGcm9tQm9keSIsImJvZGllc1BlckxvY2FsZXMiLCJsb2NhbGVzIiwicmVzdWx0IiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJpbnN0YWxsYXRpb25zIiwibWFwIiwiaW5zdGFsbGF0aW9uIiwiYWRkZWQiLCJsb2NhbGVJZGVudGlmaWVyIiwidmFsaWRhdGVQdXNoVHlwZSIsIndoZXJlIiwidmFsaWRQdXNoVHlwZXMiLCJkZXZpY2VUeXBlRmllbGQiLCJkZXZpY2VUeXBlIiwiZGV2aWNlVHlwZXMiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJpIiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImFwcGx5RGV2aWNlVG9rZW5FeGlzdHMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCIkZXhpc3RzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1B1c2gvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkge1xuICBpZiAoIWJvZHkuZGF0YSB8fCAhYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYmFkZ2UgPSBib2R5LmRhdGEuYmFkZ2U7XG4gIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgYmFkZ2UgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgYmFkZ2UuX19vcCA9PSAnc3RyaW5nJyAmJlxuICAgIGJhZGdlLl9fb3AudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50JyAmJlxuICAgIE51bWJlcihiYWRnZS5hbW91bnQpXG4gICk7XG59XG5cbmNvbnN0IGxvY2FsaXphYmxlS2V5cyA9IFsnYWxlcnQnLCAndGl0bGUnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZXNGcm9tUHVzaChib2R5KSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgICAgICBsb2NhbGl6YWJsZUtleXMuZm9yRWFjaChsb2NhbGl6YWJsZUtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgICAgICBtZW1vLnB1c2goa2V5LnNsaWNlKGxvY2FsaXphYmxlS2V5Lmxlbmd0aCArIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH0sIFtdKVxuICAgICksXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1QdXNoQm9keUZvckxvY2FsZShib2R5LCBsb2NhbGUpIHtcbiAgY29uc3QgZGF0YSA9IGJvZHkuZGF0YTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgYm9keSA9IHN0cnVjdHVyZWRDbG9uZShib2R5KTtcbiAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgT2JqZWN0LmtleXMoYm9keS5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBib2R5LmRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9kaWVzUGVyTG9jYWxlcyhib2R5LCBsb2NhbGVzID0gW10pIHtcbiAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgY29uc3QgcmVzdWx0ID0gbG9jYWxlcy5yZWR1Y2UoKG1lbW8sIGxvY2FsZSkgPT4ge1xuICAgIG1lbW9bbG9jYWxlXSA9IHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSwgd2l0aCB0aGUgc3RyaXBwZWQgYm9keVxuICByZXN1bHQuZGVmYXVsdCA9IHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyA9IFtdKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZShcbiAgICAobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIgJiYgaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIuaW5kZXhPZihsb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgICAgbWFwW2xvY2FsZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbWFwLmRlZmF1bHQucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIHsgZGVmYXVsdDogW10gfVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBkZXZpY2VUeXBlICsgJyBpcyBub3Qgc3VwcG9ydGVkIHB1c2ggdHlwZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IHN0cnVjdHVyZWRDbG9uZSh3aGVyZSk7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdoZXJlLCAnZGV2aWNlVG9rZW4nKSkge1xuICAgIHdoZXJlWydkZXZpY2VUb2tlbiddID0geyAkZXhpc3RzOiB0cnVlIH07XG4gIH1cbiAgcmV0dXJuIHdoZXJlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7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
|