filestack-js
Version:
Official JavaScript library for Filestack
151 lines (149 loc) • 20.5 kB
JavaScript
/*
* Copyright (c) 2018 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { __assign } from "tslib";
import { Filelink } from './../filelink';
import { removeEmpty } from '../utils';
import { FilestackError } from './../../filestack_error';
import { getValidator, MetadataParamsSchema, RetrieveParamsSchema } from './../../schema';
import { FsRequest, FsHttpMethod } from '../request';
/**
* Remove given file
*
* @private
* @param session
* @param handle
* @param security
*/
export var remove = function (session, handle, skipStorage, security) {
if (!handle || typeof handle !== 'string') {
throw new FilestackError('A valid Filestack handle is required for remove');
}
if (!(session.policy && session.signature) && (!security || !(security.policy && security.signature))) {
throw new FilestackError('Security policy and signature are required for remove');
}
var fileApiUrl = session.urls.fileApiUrl;
var baseURL = "".concat(fileApiUrl, "/").concat(handle);
var options = {
key: session.apikey,
policy: (security && security.policy) || session.policy,
signature: (security && security.signature) || session.signature,
};
if (skipStorage) {
options.skip_storage = true;
}
return FsRequest.delete(baseURL, {
filestackHeaders: false,
params: removeEmpty(options),
});
};
/**
* Returns file metadata
*
* @private
* @param session
* @param handle
* @param opts
* @param security
*/
export var metadata = function (session, handle, opts, security) {
if (!handle || typeof handle !== 'string') {
throw new FilestackError('A valid Filestack handle is required for metadata');
}
var validateRes = getValidator(MetadataParamsSchema)(opts);
if (validateRes.errors.length) {
throw new FilestackError("Invalid metadata params", validateRes.errors);
}
var options = __assign({}, opts);
options.source_url = options.sourceUrl; // source_url is snake_case
options.policy = (security && security.policy) || session.policy;
options.signature = (security && security.signature) || session.signature;
var baseURL = "".concat(session.urls.fileApiUrl, "/").concat(handle, "/metadata");
return new Promise(function (resolve, reject) {
FsRequest.get(baseURL, { params: removeEmpty(options), filestackHeaders: false })
.then(function (res) { return resolve(__assign(__assign({}, res.data), { handle: handle })); })
.catch(reject);
});
};
/**
* Download file to blob or buffer format
*
* @param session
* @param handle
*/
export var download = function (session, handle, security) {
var fl = new Filelink(handle, session.apikey);
var policy = (security && security.policy) || session.policy;
var signature = (security && security.signature) || session.signature;
if (policy && signature) {
fl.security({ signature: signature, policy: policy });
}
return FsRequest.dispatch(fl.toString(), { method: FsHttpMethod.GET, blobResponse: true });
};
/**
* Returns file information
*
* @private
* @deprecated
* @param session
* @param handle
* @param options
* @param security
*/
export var retrieve = function (session, handle, options, security) {
if (options === void 0) { options = {}; }
if (!handle || handle.length === 0 || typeof handle !== 'string') {
throw new FilestackError('File handle is required');
}
console.info('Retrieve method is deprecated and it will be removed. Please use metadata or download');
var validateRes = getValidator(RetrieveParamsSchema)(options);
if (validateRes.errors.length) {
throw new FilestackError("Invalid retrieve params", validateRes.errors);
}
var requestOptions = __assign({}, options);
requestOptions.key = session.apikey;
requestOptions.policy = (security && security.policy) || session.policy;
requestOptions.signature = (security && security.signature) || session.signature;
var method = FsHttpMethod.GET;
if (requestOptions.head) {
method = FsHttpMethod.HEAD;
delete requestOptions.head;
}
var extension;
if (requestOptions.extension && requestOptions.extension.length) {
extension = requestOptions.extension;
delete requestOptions.extension;
}
var metadata;
if (requestOptions.metadata) {
if (method === FsHttpMethod.HEAD) {
throw new FilestackError('Head and metadata options cannot be used together');
}
metadata = requestOptions.metadata;
delete requestOptions.metadata;
}
var baseURL = "".concat(session.urls.fileApiUrl, "/").concat(handle) + (extension ? "+".concat(extension) : '') + (metadata ? '/metadata' : '');
return new Promise(function (resolve, reject) {
FsRequest.dispatch(baseURL, {
method: method,
filestackHeaders: false,
params: removeEmpty(requestOptions),
})
.then(function (res) { return resolve(method === FsHttpMethod.HEAD ? res.headers : res.data); })
.catch(reject);
});
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXBpL2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsSUFBTSxNQUFNLEdBQUcsVUFBQyxPQUFnQixFQUFFLE1BQWUsRUFBRSxXQUFxQixFQUFFLFFBQW1CO0lBQ2xHLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQ3pDLE1BQU0sSUFBSSxjQUFjLENBQUMsaURBQWlELENBQUMsQ0FBQztLQUM3RTtJQUVELElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDckcsTUFBTSxJQUFJLGNBQWMsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0tBQ25GO0lBRUQsSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0MsSUFBTSxPQUFPLEdBQUcsVUFBRyxVQUFVLGNBQUksTUFBTSxDQUFFLENBQUM7SUFDMUMsSUFBTSxPQUFPLEdBQVE7UUFDbkIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ25CLE1BQU0sRUFBRSxDQUFD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QUcsQ0FBQyxJQUFJLENBQUMsRUFBOUQsQ0FBOEQsQ0FBQzthQUMzRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJmaWxlIjoibGliL2FwaS9maWxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJpdHksIFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgRmlsZWxpbmsgfSBmcm9tICcuLy4uL2ZpbGVsaW5rJztcbmltcG9ydCB7IHJlbW92ZUVtcHR5IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRnNSZXNwb25zZSB9IGZyb20gJy4vLi4vcmVxdWVzdC90eXBlcyc7XG5pbXBvcnQgeyBGaWxlc3RhY2tFcnJvciB9IGZyb20gJy4vLi4vLi4vZmlsZXN0YWNrX2Vycm9yJztcbmltcG9ydCB7IGdldFZhbGlkYXRvciwgTWV0YWRhdGFQYXJhbXNTY2hlbWEsIFJldHJpZXZlUGFyYW1zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgRnNSZXF1ZXN0LCBGc0h0dHBNZXRob2QgfSBmcm9tICcuLi9yZXF1ZXN0JztcblxuLyoqXG4gKiBSZW1vdmUgZ2l2ZW4gZmlsZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIGhhbmRsZVxuICogQHBhcmFtIHNlY3VyaXR5XG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmUgPSAoc2Vzc2lvbjogU2Vzc2lvbiwgaGFuZGxlPzogc3RyaW5nLCBza2lwU3RvcmFnZT86IGJvb2xlYW4sIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPGFueT4gPT4ge1xuICBpZiAoIWhhbmRsZSB8fCB0eXBlb2YgaGFuZGxlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignQSB2YWxpZCBGaWxlc3RhY2sgaGFuZGxlIGlzIHJlcXVpcmVkIGZvciByZW1vdmUnKTtcbiAgfVxuXG4gIGlmICghKHNlc3Npb24ucG9saWN5ICYmIHNlc3Npb24uc2lnbmF0dXJlKSAmJiAoIXNlY3VyaXR5IHx8ICEoc2VjdXJpdHkucG9saWN5ICYmIHNlY3VyaXR5LnNpZ25hdHVyZSkpKSB7XG4gICAgdGhyb3cgbmV3IEZpbGVzdGFja0Vycm9yKCdTZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBhcmUgcmVxdWlyZWQgZm9yIHJlbW92ZScpO1xuICB9XG5cbiAgY29uc3QgZmlsZUFwaVVybCA9IHNlc3Npb24udXJscy5maWxlQXBpVXJsO1xuICBjb25zdCBiYXNlVVJMID0gYCR7ZmlsZUFwaVVybH0vJHtoYW5kbGV9YDtcbiAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgIGtleTogc2Vzc2lvbi5hcGlrZXksXG4gICAgcG9saWN5OiAoc2VjdXJpdHkgJiYgc2VjdXJpdHkucG9saWN5KSB8fCBzZXNzaW9uLnBvbGljeSxcbiAgICBzaWduYXR1cmU6IChzZWN1cml0eSAmJiBzZWN1cml0eS5zaWduYXR1cmUpIHx8IHNlc3Npb24uc2lnbmF0dXJlLFxuICB9O1xuXG4gIGlmIChza2lwU3RvcmFnZSkge1xuICAgIG9wdGlvbnMuc2tpcF9zdG9yYWdlID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBGc1JlcXVlc3QuZGVsZXRlKGJhc2VVUkwsIHtcbiAgICBmaWxlc3RhY2tIZWFkZXJzOiBmYWxzZSxcbiAgICBwYXJhbXM6IHJlbW92ZUVtcHR5KG9wdGlvbnMpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFPcHRpb25zIHtcbiAgc2l6ZT86IGJvb2xlYW47XG4gIG1pbWV0eXBlPzogYm9vbGVhbjtcbiAgZmlsZW5hbWU/OiBib29sZWFuO1xuICB3aWR0aD86IGJvb2xlYW47XG4gIGhlaWdodD86IGJvb2xlYW47XG4gIHVwbG9hZGVkPzogYm9vbGVhbjtcbiAgd3JpdGVhYmxlPzogYm9vbGVhbjtcbiAgY2xvdWQ/OiBib29sZWFuO1xuICBzb3VyY2VVcmw/OiBib29sZWFuO1xuICBtZDU/OiBib29sZWFuO1xuICBzaGExPzogYm9vbGVhbjtcbiAgc2hhMjI0PzogYm9vbGVhbjtcbiAgc2hhMjU2PzogYm9vbGVhbjtcbiAgc2hhMzg0PzogYm9vbGVhbjtcbiAgc2hhNTEyPzogYm9vbGVhbjtcbiAgbG9jYXRpb24/OiBib29sZWFuO1xuICBwYXRoPzogYm9vbGVhbjtcbiAgY29udGFpbmVyPzogYm9vbGVhbjtcbiAgZXhpZj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmV0dXJucyBmaWxlIG1ldGFkYXRhXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzZXNzaW9uXG4gKiBAcGFyYW0gaGFuZGxlXG4gKiBAcGFyYW0gb3B0c1xuICogQHBhcmFtIHNlY3VyaXR5XG4gKi9cbmV4cG9ydCBjb25zdCBtZXRhZGF0YSA9IChzZXNzaW9uOiBTZXNzaW9uLCBoYW5kbGU/OiBzdHJpbmcsIG9wdHM/OiBNZXRhZGF0YU9wdGlvbnMsIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPGFueT4gPT4ge1xuICBpZiAoIWhhbmRsZSB8fCB0eXBlb2YgaGFuZGxlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignQSB2YWxpZCBGaWxlc3RhY2sgaGFuZGxlIGlzIHJlcXVpcmVkIGZvciBtZXRhZGF0YScpO1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVSZXMgPSBnZXRWYWxpZGF0b3IoTWV0YWRhdGFQYXJhbXNTY2hlbWEpKG9wdHMpO1xuXG4gIGlmICh2YWxpZGF0ZVJlcy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEZpbGVzdGFja0Vycm9yKGBJbnZhbGlkIG1ldGFkYXRhIHBhcmFtc2AsIHZhbGlkYXRlUmVzLmVycm9ycyk7XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBhbnkgPSB7IC4uLm9wdHMgfTtcbiAgb3B0aW9ucy5zb3VyY2VfdXJsID0gb3B0aW9ucy5zb3VyY2VVcmw7IC8vIHNvdXJjZV91cmwgaXMgc25ha2VfY2FzZVxuICBvcHRpb25zLnBvbGljeSA9IChzZWN1cml0eSAmJiBzZWN1cml0eS5wb2xpY3kpIHx8IHNlc3Npb24ucG9saWN5O1xuICBvcHRpb25zLnNpZ25hdHVyZSA9IChzZWN1cml0eSAmJiBzZWN1cml0eS5zaWduYXR1cmUpIHx8IHNlc3Npb24uc2lnbmF0dXJlO1xuXG4gIGNvbnN0IGJhc2VVUkwgPSBgJHtzZXNzaW9uLnVybHMuZmlsZUFwaVVybH0vJHtoYW5kbGV9L21ldGFkYXRhYDtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBGc1JlcXVlc3QuZ2V0KGJhc2VVUkwsIHsgcGFyYW1zOiByZW1vdmVFbXB0eShvcHRpb25zKSwgZmlsZXN0YWNrSGVhZGVyczogZmFsc2UgfSlcbiAgICAgIC50aGVuKHJlcyA9PiByZXNvbHZlKHsgLi4ucmVzLmRhdGEsIGhhbmRsZSB9KSlcbiAgICAgIC5jYXRjaChyZWplY3QpO1xuICB9KTtcbn07XG5cbi8qKlxuICogRG93bmxvYWQgZmlsZSB0byBibG9iIG9yIGJ1ZmZlciBmb3JtYXRcbiAqXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIGhhbmRsZVxuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWQgPSAoc2Vzc2lvbjogU2Vzc2lvbiwgaGFuZGxlOiBzdHJpbmcsICBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxGc1Jlc3BvbnNlPiA9PiB7XG4gIGNvbnN0IGZsID0gbmV3IEZpbGVsaW5rKGhhbmRsZSwgc2Vzc2lvbi5hcGlrZXkpO1xuXG4gIGNvbnN0IHBvbGljeSA9IChzZWN1cml0eSAmJiBzZWN1cml0eS5wb2xpY3kpIHx8IHNlc3Npb24ucG9saWN5O1xuICBjb25zdCBzaWduYXR1cmUgPSAoc2VjdXJpdHkgJiYgc2VjdXJpdHkuc2lnbmF0dXJlKSB8fCBzZXNzaW9uLnNpZ25hdHVyZTtcblxuICBpZiAocG9saWN5ICYmIHNpZ25hdHVyZSkge1xuICAgIGZsLnNlY3VyaXR5KHsgc2lnbmF0dXJlLCBwb2xpY3kgfSk7XG4gIH1cblxuICByZXR1cm4gRnNSZXF1ZXN0LmRpc3BhdGNoKGZsLnRvU3RyaW5nKCksIHsgbWV0aG9kOiBGc0h0dHBNZXRob2QuR0VULCBibG9iUmVzcG9uc2U6IHRydWUgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJpZXZlT3B0aW9ucyB7XG4gIG1ldGFkYXRhPzogYm9vbGVhbjtcbiAgaGVhZD86IGJvb2xlYW47XG4gIGRsPzogYm9vbGVhbjtcbiAgZXh0ZW5zaW9uPzogc3RyaW5nO1xuICBjYWNoZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmV0dXJucyBmaWxlIGluZm9ybWF0aW9uXG4gKlxuICogQHByaXZhdGVcbiAqIEBkZXByZWNhdGVkXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIGhhbmRsZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBzZWN1cml0eVxuICovXG5leHBvcnQgY29uc3QgcmV0cmlldmUgPSAoc2Vzc2lvbjogU2Vzc2lvbiwgaGFuZGxlOiBzdHJpbmcsIG9wdGlvbnM6IFJldHJpZXZlT3B0aW9ucyA9IHt9LCBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxPYmplY3QgfCBCbG9iPiA9PiB7XG4gIGlmICghaGFuZGxlIHx8IGhhbmRsZS5sZW5ndGggPT09IDAgfHwgdHlwZW9mIGhhbmRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRmlsZXN0YWNrRXJyb3IoJ0ZpbGUgaGFuZGxlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBjb25zb2xlLmluZm8oJ1JldHJpZXZlIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCBpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSB1c2UgbWV0YWRhdGEgb3IgZG93bmxvYWQnKTtcblxuICBjb25zdCB2YWxpZGF0ZVJlcyA9IGdldFZhbGlkYXRvcihSZXRyaWV2ZVBhcmFtc1NjaGVtYSkob3B0aW9ucyk7XG5cbiAgaWYgKHZhbGlkYXRlUmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRmlsZXN0YWNrRXJyb3IoYEludmFsaWQgcmV0cmlldmUgcGFyYW1zYCwgdmFsaWRhdGVSZXMuZXJyb3JzKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBhbnkgPSB7IC4uLm9wdGlvbnMgfTtcbiAgcmVxdWVzdE9wdGlvbnMua2V5ID0gc2Vzc2lvbi5hcGlrZXk7XG4gIHJlcXVlc3RPcHRpb25zLnBvbGljeSA9IChzZWN1cml0eSAmJiBzZWN1cml0eS5wb2xpY3kpIHx8IHNlc3Npb24ucG9saWN5O1xuICByZXF1ZXN0T3B0aW9ucy5zaWduYXR1cmUgPSAoc2VjdXJpdHkgJiYgc2VjdXJpdHkuc2lnbmF0dXJlKSB8fCBzZXNzaW9uLnNpZ25hdHVyZTtcblxuICBsZXQgbWV0aG9kOiBGc0h0dHBNZXRob2QgPSBGc0h0dHBNZXRob2QuR0VUO1xuXG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5oZWFkKSB7XG4gICAgbWV0aG9kID0gRnNIdHRwTWV0aG9kLkhFQUQ7XG4gICAgZGVsZXRlIHJlcXVlc3RPcHRpb25zLmhlYWQ7XG4gIH1cblxuICBsZXQgZXh0ZW5zaW9uO1xuXG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5leHRlbnNpb24gJiYgcmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9uLmxlbmd0aCkge1xuICAgIGV4dGVuc2lvbiA9IHJlcXVlc3RPcHRpb25zLmV4dGVuc2lvbjtcbiAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9uO1xuICB9XG5cbiAgbGV0IG1ldGFkYXRhO1xuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0YWRhdGEpIHtcbiAgICBpZiAobWV0aG9kID09PSBGc0h0dHBNZXRob2QuSEVBRCkge1xuICAgICAgdGhyb3cgbmV3IEZpbGVzdGFja0Vycm9yKCdIZWFkIGFuZCBtZXRhZGF0YSBvcHRpb25zIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgfVxuXG4gICAgbWV0YWRhdGEgPSByZXF1ZXN0T3B0aW9ucy5tZXRhZGF0YTtcbiAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMubWV0YWRhdGE7XG4gIH1cblxuICBjb25zdCBiYXNlVVJMID0gYCR7c2Vzc2lvbi51cmxzLmZpbGVBcGlVcmx9LyR7aGFuZGxlfWAgKyAoZXh0ZW5zaW9uID8gYCske2V4dGVuc2lvbn1gIDogJycpICsgKG1ldGFkYXRhID8gJy9tZXRhZGF0YScgOiAnJyk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBGc1JlcXVlc3QuZGlzcGF0Y2goYmFzZVVSTCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgZmlsZXN0YWNrSGVhZGVyczogZmFsc2UsXG4gICAgICBwYXJhbXM6IHJlbW92ZUVtcHR5KHJlcXVlc3RPcHRpb25zKSxcbiAgICB9KVxuICAgICAgLnRoZW4ocmVzID0+IHJlc29sdmUobWV0aG9kID09PSBGc0h0dHBNZXRob2QuSEVBRCA/IHJlcy5oZWFkZXJzIDogcmVzLmRhdGEpKVxuICAgICAgLmNhdGNoKHJlamVjdCk7XG4gIH0pO1xufTtcbiJdfQ==