UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

151 lines (149 loc) 20.5 kB
/* * 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==