@cloudbase/app
Version:
cloudbase javascript sdk core
221 lines • 21.5 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createWebStreamFromNodeReadableStream = exports.parseQueryString = exports.headersInit2Indexable = exports.obj2StrRecord = exports.safeParseJson = exports.validateUid = exports.getCurrRunEnvTag = exports.checkIsInTencentCloud = exports.isNonEmptyString = exports.checkIsInSumeru = exports.checkIsInCBR = exports.checkIsInScf = exports.getEnv = exports.toQueryString = exports.isFormData = void 0;
var utilities_1 = require("@cloudbase/utilities");
var web_streams_polyfill_1 = require("web-streams-polyfill");
var constants_1 = require("./constants");
var metadata_1 = require("./metadata");
exports.isFormData = (_a = utilities_1.utils, _a.isFormData), exports.toQueryString = _a.toQueryString;
function getEnv(key) {
if (typeof process === 'undefined' || !process.env) {
return key !== undefined ? undefined : {};
}
return key !== undefined ? process.env[key] : process.env;
}
exports.getEnv = getEnv;
var checkIsInScf = function () { return getEnv('TENCENTCLOUD_RUNENV') === 'SCF'; };
exports.checkIsInScf = checkIsInScf;
function checkIsInCBR() {
return !!getEnv('CBR_ENV_ID');
}
exports.checkIsInCBR = checkIsInCBR;
var kSumeruEnvSet = new Set(['formal', 'pre', 'test']);
function checkIsInSumeru() {
return kSumeruEnvSet.has(getEnv('SUMERU_ENV') || '');
}
exports.checkIsInSumeru = checkIsInSumeru;
function isNonEmptyString(str) {
return typeof str === 'string' && str !== '';
}
exports.isNonEmptyString = isNonEmptyString;
function checkIsInTencentCloud() {
return __awaiter(this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (getEnv('TENCENTCLOUD') === 'true') {
return [2, true];
}
_a = isNonEmptyString;
return [4, (0, metadata_1.lookupAppId)()];
case 1: return [2, _a.apply(void 0, [_b.sent()])];
}
});
});
}
exports.checkIsInTencentCloud = checkIsInTencentCloud;
var getCurrRunEnvTag = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if ((0, exports.checkIsInScf)()) {
return [2, 'scf'];
}
if (checkIsInCBR()) {
return [2, 'cbr'];
}
if (checkIsInSumeru()) {
return [2, 'sumeru'];
}
return [4, checkIsInTencentCloud()];
case 1:
if (_a.sent()) {
return [2, 'tencentcloud'];
}
return [2, 'unknown'];
}
});
}); };
exports.getCurrRunEnvTag = getCurrRunEnvTag;
var validateUid = function (uid) {
if (typeof uid !== 'string') {
throw __assign(__assign({}, constants_1.ERROR.INVALID_PARAM), { message: 'uid must be a string' });
}
if (!constants_1.checkCustomUserIdRegex.test(uid)) {
throw __assign(__assign({}, constants_1.ERROR.INVALID_PARAM), { message: "Invalid uid: \"".concat(uid, "\"") });
}
};
exports.validateUid = validateUid;
function safeParseJson(text) {
if (!text || !text.trim()) {
return null;
}
try {
return JSON.parse(text);
}
catch (e) {
console.warn('catch an error', { e: e, text: text });
return text;
}
}
exports.safeParseJson = safeParseJson;
function obj2StrRecord(obj) {
return Object.entries(obj).reduce(function (acc, cur) {
var key = cur[0], value = cur[1];
acc[key] = String(value);
return acc;
}, {});
}
exports.obj2StrRecord = obj2StrRecord;
function headersInit2Indexable(h) {
if (isHeaders(h)) {
var ret_1 = {};
h.forEach(function (val, key) {
ret_1[key] = val;
});
return ret_1;
}
return h;
function isHeaders(h) {
try {
return h instanceof Headers;
}
catch (_) {
return false;
}
}
}
exports.headersInit2Indexable = headersInit2Indexable;
function parseQueryString(search) {
var params = {};
var cleanSearch = search.replace(/^[?#]/, '');
if (!cleanSearch) {
return params;
}
var pairs = cleanSearch.split('&');
pairs.forEach(function (item) {
var _a = item.split('='), key = _a[0], value = _a[1];
key = decodeURIComponent(key);
value = decodeURIComponent(value || '');
if (key) {
if (params[key]) {
if (Array.isArray(params[key])) {
params[key].push(value);
}
else {
params[key] = [params[key], value];
}
}
else {
params[key] = value;
}
}
});
return params;
}
exports.parseQueryString = parseQueryString;
function createWebStreamFromNodeReadableStream(stream) {
var asyncIterator = stream[Symbol.asyncIterator]();
return new web_streams_polyfill_1.ReadableStream({
pull: function (controller) {
return __awaiter(this, void 0, void 0, function () {
var next;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, asyncIterator.next()];
case 1:
next = _a.sent();
if (next.done) {
controller.close();
}
else {
controller.enqueue(next.value);
}
return [2];
}
});
});
},
});
}
exports.createWebStreamFromNodeReadableStream = createWebStreamFromNodeReadableStream;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlicy9hZGFwdGVyLW5vZGUvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDZEQUFxRDtBQUNyRCx5Q0FBMkQ7QUFDM0QsdUNBQXdDO0FBR3pCLFFBQUEsVUFBVSxJQUFaLEtBQWdDLGlCQUc1QyxrQkFIMEIsUUFBQSxhQUFhLG9CQUd2QztBQVFELFNBQWdCLE1BQU0sQ0FBQyxHQUFZO0lBQ2pDLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNsRCxPQUFPLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0tBQzFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBO0FBQzNELENBQUM7QUFMRCx3QkFLQztBQUdNLElBQU0sWUFBWSxHQUFHLGNBQU0sT0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxLQUFLLEVBQXZDLENBQXVDLENBQUE7QUFBNUQsUUFBQSxZQUFZLGdCQUFnRDtBQUV6RSxTQUFnQixZQUFZO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUMvQixDQUFDO0FBSEQsb0NBR0M7QUFFRCxJQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUN4RCxTQUFnQixlQUFlO0lBRTdCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENB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QUMsQ0FBQTtpQkFDbkM7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQTVCRCw0Q0E0QkM7QUFNRCxTQUFnQixxQ0FBcUMsQ0FBQyxNQUE2QjtJQUNqRixJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUE7SUFFcEQsT0FBTyxJQUFJLHFDQUFjLENBQUM7UUFDbEIsSUFBSSxZQUFDLFVBQVU7Ozs7O2dDQUNOLFdBQU0sYUFBYSxDQUFDLElBQUksRUFBRSxFQUFBOzs0QkFBakMsSUFBSSxHQUFHLFNBQTBCOzRCQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0NBQ2IsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBOzZCQUNuQjtpQ0FBTTtnQ0FDTCxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTs2QkFDL0I7Ozs7O1NBQ0Y7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBZEQsc0ZBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW0gfSBmcm9tICd3ZWItc3RyZWFtcy1wb2x5ZmlsbCdcbmltcG9ydCB7IEVSUk9SLCBjaGVja0N1c3RvbVVzZXJJZFJlZ2V4IH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBsb29rdXBBcHBJZCB9IGZyb20gJy4vbWV0YWRhdGEnXG5cbi8qKiDku44gQGNsb3VkYmFzZS91dGlsaXRpZXMg5Lit5o+Q5Y+W55qE6KGo5Y2V5ZKM5p+l6K+i5a2X56ym5Liy5bel5YW3ICovXG5leHBvcnQgY29uc3QgeyBpc0Zvcm1EYXRhLCB0b1F1ZXJ5U3RyaW5nIH0gPSB1dGlscyBhcyB7XG4gIGlzRm9ybURhdGE6IChvYmo6IHVua25vd24pID0+IGJvb2xlYW5cbiAgdG9RdWVyeVN0cmluZzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIOi3qOerr+WuieWFqOiOt+WPlueOr+Wig+WPmOmHj1xuICogV2ViIOerr+OAgeWwj+a4uOaIj+err+etieayoeaciSBwcm9jZXNzIOWFqOWxgOWvueixoe+8jOebtOaOpeiuv+mXriBwcm9jZXNzLmVudiDkvJrmiqXplJlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICFwcm9jZXNzLmVudikge1xuICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHt9XG4gIH1cbiAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnZba2V5XSA6IHByb2Nlc3MuZW52XG59XG5cbi8qKiDliKTmlq3lvZPliY3mmK/lkKblnKggU0NG77yI5LqR5Ye95pWw77yJ6L+Q6KGM546v5aKD5LitICovXG5leHBvcnQgY29uc3QgY2hlY2tJc0luU2NmID0gKCkgPT4gZ2V0RW52KCdURU5DRU5UQ0xPVURfUlVORU5WJykgPT09ICdTQ0YnXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzSW5DQlIoKSB7XG4gIC8vIENCUiA9IENMT1VEQkFTRV9SVU5cbiAgcmV0dXJuICEhZ2V0RW52KCdDQlJfRU5WX0lEJylcbn1cblxuY29uc3Qga1N1bWVydUVudlNldCA9IG5ldyBTZXQoWydmb3JtYWwnLCAncHJlJywgJ3Rlc3QnXSlcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzSW5TdW1lcnUoKSB7XG4gIC8vIFNVTUVSVV9FTlY9Zm9ybWFsIHwgdGVzdCB8IHByZVxuICByZXR1cm4ga1N1bWVydUVudlNldC5oYXMoZ2V0RW52KCdTVU1FUlVfRU5WJykgfHwgJycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyAmJiBzdHIgIT09ICcnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0lzSW5UZW5jZW50Q2xvdWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChnZXRFbnYoJ1RFTkNFTlRDTE9VRCcpID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBpc05vbkVtcHR5U3RyaW5nKGF3YWl0IGxvb2t1cEFwcElkKCkpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyUnVuRW52VGFnID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmIChjaGVja0lzSW5TY2YoKSkge1xuICAgIHJldHVybiAnc2NmJ1xuICB9IGlmIChjaGVja0lzSW5DQlIoKSkge1xuICAgIHJldHVybiAnY2JyJ1xuICB9IGlmIChjaGVja0lzSW5TdW1lcnUoKSkge1xuICAgIHJldHVybiAnc3VtZXJ1J1xuICB9IGlmIChhd2FpdCBjaGVja0lzSW5UZW5jZW50Q2xvdWQoKSkge1xuICAgIHJldHVybiAndGVuY2VudGNsb3VkJ1xuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuLyoqXG4gKiDmoKHpqozoh6rlrprkuYnnlKjmiLcgSUQg5qC85byPXG4gKiBAdGhyb3dzIOagvOW8j+S4jeWQiOazleaXtuaKm+WHuiBJTlZBTElEX1BBUkFNIOmUmeivr1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVVaWQgPSAodWlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKHR5cGVvZiB1aWQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgeyAuLi5FUlJPUi5JTlZBTElEX1BBUkFNLCBtZXNzYWdlOiAndWlkIG11c3QgYmUgYSBzdHJpbmcnIH1cbiAgfVxuICBpZiAoIWNoZWNrQ3VzdG9tVXNlcklkUmVnZXgudGVzdCh1aWQpKSB7XG4gICAgdGhyb3cgeyAuLi5FUlJPUi5JTlZBTElEX1BBUkFNLCBtZXNzYWdlOiBgSW52YWxpZCB1aWQ6IFwiJHt1aWR9XCJgIH1cbiAgfVxufVxuXG4vKipcbiAqIOWuieWFqOeahCBKU09OIOino+aekO+8jOino+aekOWksei0peaXtui/lOWbnuWOn+Wni+aWh+acrOiAjOmdnuaKm+W8guW4uFxuICogQHBhcmFtIHRleHQgLSDlvoXop6PmnpDnmoTlrZfnrKbkuLJcbiAqIEByZXR1cm5zIOino+aekOWQjueahOWvueixoe+8jOepuuWtl+espuS4sui/lOWbniBudWxs77yM6Kej5p6Q5aSx6LSl6L+U5Zue5Y6f5aeL5paH5pysXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2VKc29uKHRleHQ6IHN0cmluZyk6IGFueSB7XG4gIGlmICghdGV4dCB8fCAhdGV4dC50cmltKCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignY2F0Y2ggYW4gZXJyb3InLCB7IGUsIHRleHQgfSlcbiAgICByZXR1cm4gdGV4dFxuICB9XG59XG5cbi8qKlxuICog5bCG5a+56LGh55qE5omA5pyJ5YC86L2s5Li65a2X56ym5Liy57G75Z6LXG4gKiDnlKjkuo7lsIYgaGVhZGVycyDnrYnlr7nosaHnu5/kuIDkuLogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqMlN0clJlY29yZChvYmo6IG9iamVjdCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKGFjYywgY3VyOiBbc3RyaW5nLCB1bmtub3duXSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1clxuICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKVxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG59XG5cbi8qKlxuICog5bCGIEhlYWRlcnNJbml0IOi9rOS4uuWPr+e0ouW8leeahOaZrumAmuWvueixoVxuICog5YW85a65IEhlYWRlcnMg5a6e5L6L5ZKM5pmu6YCa5a+56LGh5Lik56eN5b2i5byPXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWFkZXJzSW5pdDJJbmRleGFibGUoaDogSGVhZGVyc0luaXQpIHtcbiAgaWYgKGlzSGVhZGVycyhoKSkge1xuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gICAgaC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgcmV0W2tleV0gPSB2YWxcbiAgICB9KVxuICAgIHJldHVybiByZXRcbiAgfVxuICByZXR1cm4gaFxuXG4gIGZ1bmN0aW9uIGlzSGVhZGVycyhoOiBIZWFkZXJzSW5pdCk6IGggaXMgSGVhZGVycyB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vZGUg5L2O54mI5pys5Y+v6IO95rKh5pyJ5YWo5bGAIEhlYWRlcnNcbiAgICAgIHJldHVybiBoIGluc3RhbmNlb2YgSGVhZGVyc1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOaJi+WKqOino+aekOafpeivouWtl+espuS4su+8jOmBv+WFjSBVUkxTZWFyY2hQYXJhbXMg55qE5YW85a655oCn6Zeu6aKYXG4gKiDmlK/mjIHph43lpI0ga2V5IOiHquWKqOi9rOS4uuaVsOe7hFxuICogQHBhcmFtIHNlYXJjaCAtIOafpeivouWtl+espuS4su+8jOWPr+W4puWJjeWvvCA/IOaIliAjXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHNlYXJjaDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fVxuICBjb25zdCBjbGVhblNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKC9eWz8jXS8sICcnKVxuXG4gIGlmICghY2xlYW5TZWFyY2gpIHtcbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cblxuICBjb25zdCBwYWlycyA9IGNsZWFuU2VhcmNoLnNwbGl0KCcmJylcblxuICBwYWlycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IGl0ZW0uc3BsaXQoJz0nKVxuICAgIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpXG4gICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcmFtc1trZXldKSB7XG4gICAgICAgIC8vIOW3suWtmOWcqOWQjOWQjSBrZXnvvIzovazkuLrmlbDnu4RcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zW2tleV0pKSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0ucHVzaCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IFtwYXJhbXNba2V5XSwgdmFsdWVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBwYXJhbXNcbn1cblxuLyoqXG4gKiDlsIYgTm9kZSBSZWFkYWJsZVN0cmVhbSDovazmjaLkuLogV2ViIFJlYWRhYmxlU3RyZWFtIChwb2x5ZmlsbClcbiAqIOeUqOS6jiBmZXRjaCDmtYHlvI/lk43lupTlnKggTm9kZSDnjq/looPkuIvnmoTpgILphY1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlN0cmVhbUZyb21Ob2RlUmVhZGFibGVTdHJlYW0oc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBSZWFkYWJsZVN0cmVhbSB7XG4gIGNvbnN0IGFzeW5jSXRlcmF0b3IgPSBzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBhd2FpdCBhc3luY0l0ZXJhdG9yLm5leHQoKVxuXG4gICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5leHQudmFsdWUpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cbiJdfQ==