New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

redibox-hook-job

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

redibox-hook-job - npm Package Compare versions

Comparing version 1.2.6 to 1.2.8

47

lib/queue.js

@@ -29,2 +29,37 @@ 'use strict';

/**
* TODO move to helpers
* @param errorStack
* @returns {Array}
*/
function trimStack(errorStack) {
const oldStack = errorStack.split('\n');
const stack = [];
for (let i = 0, iLen = oldStack.length || stack.length > 19; i < iLen; i++) {
const row = oldStack[i];
// include private modules
if (row.includes('@')) {
stack.push(row);
continue;
}
// exclude job module
if (row.includes('redibox-hook-job') || row.includes('redibox/job/lib')) continue;
// exclude bluebird
if (row.includes('bluebird')) continue;
// exclude waterline
if (row.includes('waterline/lib')) continue;
// exclude timers.js
if (row.includes('timers.js:')) continue;
stack.push(row);
}
return stack;
}
class Queue extends _eventemitter2.default {

@@ -147,2 +182,4 @@

_logJobFailure(job, jobError) {
const error = typeof jobError === 'string' ? new Error(jobError) : jobError;
const stack = trimStack(error.stack);
if (process.env.KUBERNETES_PORT || process.env.KUBERNETES_SERVICE_HOST) {

@@ -156,3 +193,3 @@ /* eslint no-console: 0 */

queue: this.name,
stack: jobError.stack ? jobError.stack.split('\n').slice(0, 10) : []
stack
}

@@ -164,6 +201,4 @@ }));

this.log.error(`Job: ${ job.data.runs }` || this.name);
if (jobError.stack) {
this.log.error(jobError.stack.split('\n').slice(0, 10));
}
this.log.error(jobError);
error.stack = stack.join('\n');
this.log.error(error);
this.log.error('------------------------------------------------------');

@@ -504,2 +539,2 @@ this.log.error('');

exports.default = Queue;
//# sourceMappingURL=data:application/json;base64,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QUwsQ0FBYSxPQUFkLElBQXlCLEtBQUssTUFBbEMsRUFBMEMsT0FBTyxtQkFBUSxPQUFSLEVBQVA7QUFDMUMsYUFBTyxtQkFBUSxLQUFSLENBQWMsS0FBSyxPQUFMLENBQWEsYUFBM0IsRUFBMEMsSUFBMUMsQ0FBaUQsS0FBSyxnQkFBdEQsTUFBaUQsSUFBakQsRUFBUDtBQUNELEtBVk0sQ0FBUDtBQVdEOztBQUVEOzs7OztBQUtBLFFBQU0sR0FBTixFQUFXO0FBQ1QsUUFBSSxLQUFLLElBQUwsQ0FBVSxPQUFWLENBQWtCLFNBQWxCLEVBQUosRUFBbUM7QUFDakMsYUFBUSxJQUFFLEtBQUssT0FBTCxDQUFhLFNBQVUsT0FBSSxLQUFLLElBQUssT0FBSSxHQUFJLEdBQXZEO0FBQ0Q7QUFDRCxXQUFRLElBQUUsS0FBSyxPQUFMLENBQWEsU0FBVSxNQUFHLEtBQUssSUFBSyxNQUFHLEdBQUksR0FBckQ7QUFDRDs7QUFFRDs7Ozs7QUFyZThDO2tCQUEzQixLIiwiZmlsZSI6InF1ZXVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEpvYiBmcm9tICcuL2pvYic7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHsgZGVlcEdldCwgaXNPYmplY3QsIGdldFRpbWVTdGFtcCwgdHJ5SlNPTlBhcnNlIH0gZnJvbSAncmVkaWJveCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXVlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHBhcmFtIGNvcmVcbiAgICogQHJldHVybnMge1F1ZXVlfVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgY29yZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICB0aGlzLmNsaWVudCA9IGNvcmUuY2xpZW50O1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy50aHJvdHRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvZyA9IHRoaXMuY29yZS5sb2c7XG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgIHRoaXMuaGFuZGxlciA9IG9wdGlvbnMuaGFuZGxlciB8fCBudWxsO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLnF1ZXVlLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmNvcmUuY3JlYXRlQ2xpZW50KCdibG9jaycsIHRoaXMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZShgQmxvY2tpbmcgY2xpZW50IGZvciBxdWV1ZSAnJHt0aGlzLm5hbWV9JyBpcyByZWFkeS4gU3RhcnRpbmcgcXVldWUgcHJvY2Vzc29yLmApO1xuICAgICAgdGhpcy5iZWdpbldvcmtpbmcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICdpZCcsICdqb2JzJywgJ3N0YWxsVGltZScsICdzdGFsbGluZycsICd3YWl0aW5nJywgJ2FjdGl2ZScsICdzdWNjZWVkZWQnLCAnZmFpbGVkJyxcbiAgICBdLm1hcChrZXkgPT4gdGhpcy50b0tleShrZXkpKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKC4uLmtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2hlY2tIZWFsdGgoKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5jbGllbnQubXVsdGkoKVxuICAgICAgLmxsZW4odGhpcy50b0tleSgnd2FpdGluZycpKVxuICAgICAgLmxsZW4odGhpcy50b0tleSgnYWN0aXZlJykpXG4gICAgICAuc2NhcmQodGhpcy50b0tleSgnc3VjY2VlZGVkJykpXG4gICAgICAuc2NhcmQodGhpcy50b0tleSgnZmFpbGVkJykpXG4gICAgICAudGhlbihyZXN1bHRzID0+IHsgLyogZXNsaW50IGFycm93LWJvZHktc3R5bGU6IDAgKi9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YWl0aW5nOiByZXN1bHRzWzBdWzFdLFxuICAgICAgICAgIGFjdGl2ZTogcmVzdWx0c1sxXVsxXSxcbiAgICAgICAgICBzdWNjZWVkZWQ6IHJlc3VsdHNbMl1bMV0sXG4gICAgICAgICAgZmFpbGVkOiByZXN1bHRzWzNdWzFdLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBfZ2V0TmV4dEpvYigpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKGBHZXR0aW5nIG5leHQgam9iIGZvciBxdWV1ZSAnJHt0aGlzLm5hbWV9Jy5gKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRzLmJsb2NrLmJycG9wbHB1c2goXG4gICAgICB0aGlzLnRvS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMFxuICAgICkudGhlbihqb2JJZCA9PlxuICAgICAgSm9iLmZyb21JZCh0aGlzLCBqb2JJZCkudGhlbihqb2IgPT4ge1xuICAgICAgICByZXR1cm4gam9iO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIGpvYkVycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9mYWlsdXJlJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJ1bnM6IGpvYi5kYXRhLnJ1bnMsXG4gICAgICAgICAgcXVldWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBzdGFjazogam9iRXJyb3Iuc3RhY2sgPyBqb2JFcnJvci5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgMTApIDogW10sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCcnKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCctLS0tLS0tLS0tLS0tLS0gUkRCIEpPQiBFUlJPUi9GQUlMVVJFIC0tLS0tLS0tLS0tLS0tLScpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEpvYjogJHtqb2IuZGF0YS5ydW5zfWAgfHwgdGhpcy5uYW1lKTtcbiAgICAgIGlmIChqb2JFcnJvci5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcihqb2JFcnJvci5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgMTApKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmVycm9yKGpvYkVycm9yKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9ydW5Kb2Ioam9iKSB7XG4gICAgaWYgKCFqb2IgfHwgIWpvYi5kYXRhKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgcnVucyA9IGpvYi5kYXRhICYmIGpvYi5kYXRhLnJ1bnMgJiYgQXJyYXkuaXNBcnJheShqb2IuZGF0YS5ydW5zKSA/IGpvYi5kYXRhLnJ1bnNbMF0gOiBqb2IuZGF0YS5ydW5zO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAodHlwZW9mIHRoaXMuaGFuZGxlciA9PT0gJ3N0cmluZycgP1xuICAgICAgICBkZWVwR2V0KGdsb2JhbCwgdGhpcy5oYW5kbGVyKSA6IHRoaXMuaGFuZGxlcikgfHwgZGVlcEdldChnbG9iYWwsIHJ1bnMpO1xuXG4gICAgbGV0IHByZXZlbnRTdGFsbGluZ1RpbWVvdXQ7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcbiAgICBsZXQgcHJvbWlzZU9yUmVzO1xuXG4gICAgLy8gSGFuZGxlIGFuIFwiT0tcIiByZXNwb25zZSBmcm9tIHRoZSBwcm9taXNlXG4gICAgY29uc3QgaGFuZGxlT0sgPSBkYXRhID0+IHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhbnkgbXVsdGlwbGUgY2FsbHNcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm4gdm9pZCAwO1xuXG4gICAgICBjbGVhclRpbWVvdXQocHJldmVudFN0YWxsaW5nVGltZW91dCk7XG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgZGF0YVxuICAgICAgaWYgKGpvYi5faW50ZXJuYWxEYXRhKSB7XG4gICAgICAgIGpvYi5kYXRhID0gam9iLl9pbnRlcm5hbERhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmVsYXkgdG8gbmV4dCBqb2IgaWYgdXNlciBkaWQgbm90IHJlc29sdmUgJ2ZhbHNlJyBvbiBjdXJyZW50IGpvYlxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknICYmIGRhdGEgIT09IGZhbHNlKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hTaW5nbGVKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgcmV0dXJuZWRcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGpvYkVycm9yID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcblxuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlZCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCB0aGUgZGF0YSBiYWNrIHRvIGludGVybmFsIGpvYiBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKTtcblxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2Ioam9iRXJyb3IsIG51bGwsIGpvYik7XG4gICAgICByZXR1cm4gdGhpcy5fZmluaXNoU2luZ2xlSm9iKGpvYkVycm9yLCBudWxsLCBqb2IpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmV2ZW50U3RhbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNsaWVudC5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCwgKCkgPT4ge1xuICAgICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgICBwcmV2ZW50U3RhbGxpbmdUaW1lb3V0ID0gc2V0VGltZW91dChwcmV2ZW50U3RhbGxpbmcsIHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBcIiR7am9iLmRhdGEucnVucyB8fCAnTm8gSm9iIEhhbmRsZXIgU3BlY2lmaWVkJ31cIiB3YXMgbm90IGZvdW5kLiBTa2lwcGluZyBqb2IuIFRvIGZpeCB0aGlzXG4gICAgICAgICAgICAgeW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBoYW5kbGVyIGZ1bmN0aW9uIHZpYSBxdWV1ZS5wcm9jZXNzKCkgb3IgcHJvdmlkZSBhIHZhbGlkIGhhbmRsZXJcbiAgICAgICAgICAgICBub2RlIGdsb2JhbCBwYXRoIGluIHlvdXIgam9iIG9wdGlvbnMgJ2hhbmRsZXInLCBlLmcuIGlmIHlvdSBoYWQgYSBnbG9iYWwgZnVuY3Rpb24gaW5cbiAgICAgICAgICAgICdnbG9iYWwuc2FpbHMuc2VydmljZXMubXlzZXJ2aWNlJyB5b3UnZCBzcGVjaWZ5IHRoZSBoYW5kbGVyIGFzICdzYWlscy5zZXJ2aWNlcy5teXNlcnZpY2UubXlIYW5kbGVyJy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJldmVudFN0YWxsaW5nKCk7IC8vIHN0YXJ0IHN0YWxsaW5nIG1vbml0b3JcblxuICAgIGpvYi5faW50ZXJuYWxEYXRhID0gam9iLmRhdGE7XG4gICAgam9iLmRhdGEgPSBqb2IuZGF0YS5kYXRhIHx8IGpvYi5kYXRhO1xuXG4gICAgaWYgKGpvYi5vcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoaGFuZGxlRXJyb3IuYmluZChudWxsLCBFcnJvcihgSm9iICR7am9iLmlkfSB0aW1lZCBvdXQgKCR7am9iLm9wdGlvbnMudGltZW91dH1tcylgKSksIGpvYi5vcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoam9iLm9wdGlvbnMubm9CaW5kIHx8IHRoaXMub3B0aW9ucy5ub0JpbmQpIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlcihqb2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlci5iaW5kKGpvYiwgam9iKShqb2IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZU9yUmVzLnRoZW4gJiYgdHlwZW9mIHByb21pc2VPclJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZU9yUmVzLnRoZW4oaGFuZGxlT0ssIGhhbmRsZUVycm9yKS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZU9LKHByb21pc2VPclJlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge3tqb2I6IHtpZDogKiwgd29ya2VyX2lkOiAoKnxTdHJpbmd8c3RyaW5nKSwgc3RhdHVzOiBzdHJpbmd9LCBlcnJvcjogKiwgb3V0cHV0OiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBpZDogam9iLmlkLFxuICAgICAgICB3b3JrZXJfaWQ6IHRoaXMuY29yZS5pZCxcbiAgICAgICAgc3RhdHVzOiBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIC4uLmpvYi5kYXRhLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgb3V0cHV0OiBkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIG11bHRpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgbXVsdGkubHJlbSh0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMCwgam9iLmlkKTtcbiAgICBtdWx0aS5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCk7XG5cbiAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgaWYgKGpvYi5vcHRpb25zLnJldHJpZXMgPiAwKSB7XG4gICAgICAgIGpvYi5vcHRpb25zLnJldHJpZXMgPSBqb2Iub3B0aW9ucy5yZXRyaWVzIC0gMTtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdyZXRyeWluZyc7XG4gICAgICAgIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIG11bHRpLmxwdXNoKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSwgam9iLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvYi5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgbXVsdGkuaGRlbCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCk7XG4gICAgICAgIC8vIFRPRE8gdHJhY2sgZmFpbHVyZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgICAvLyBtdWx0aS5oc2V0KHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkLCBqb2IudG9EYXRhKCkpO1xuICAgICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpLCBqb2IuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBqb2Iuc3RhdHVzID0gJ3N1Y2NlZWRlZCc7XG4gICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgIC8vIFRPRE8gdHJhY2sgc3VjY2Vzc2VzIGFuZCB0aGVpciBkYXRhIHNvbWV3aGVyZSBlbHNlIGZvciByZXZpZXdpbmdcbiAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpLCBqb2IuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9maW5pc2hTaW5nbGVKb2IoZXJyb3IsIGRhdGEsIGpvYikge1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGVtaXQgc3VjY2VzcyBvciBmYWlsdXJlIGV2ZW50IGlmIHdlIGhhdmUgbGlzdGVuZXJzXG4gICAgaWYgKGVycm9yICYmIGpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfSBlbHNlIGlmIChqb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyBhIG11bHRpIGpvYiBvciBjb250aW51ZXMgdG8gdGhlIG5leHQgc3RhZ2UuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmlzaFJlbGF5Sm9iKGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICBsZXQgbmV4dFF1ZXVlID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IG5leHRKb2IgPSBqb2IuZGF0YS5ydW5zWzBdO1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBjdXJyZW50Sm9iID0gam9iLmRhdGEucnVucy5zaGlmdCgpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJztcblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2YgdGhlIGZpcnN0IGpvYiBpbiB0aGlzIHJlbGF5IGluc3RhbmNlXG4gICAgaWYgKCFqb2IuZGF0YS5pbml0aWFsSm9iKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsSm9iID0gdHJ5SlNPTlBhcnNlKGpvYi50b0RhdGEoKSk7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgZmlyc3QgcXVldWUgaW4gdGhpcyByZWxheSBpbnN0YW5jZVxuICAgIGlmICgham9iLmRhdGEuaW5pdGlhbFF1ZXVlKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsUXVldWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVsYXkgdG8gYW5vdGhlciBqb2JcbiAgICBpZiAoIShqb2IuZGF0YS5ydW5zLmxlbmd0aCA9PT0gMCB8fCAhIWVycm9yKSkge1xuICAgICAgaWYgKGlzT2JqZWN0KG5leHRKb2IpKSB7XG4gICAgICAgIG5leHRRdWV1ZSA9IG5leHRKb2IucXVldWU7XG4gICAgICAgIGpvYi5kYXRhLnJ1bnNbMF0gPSBuZXh0Sm9iLnJ1bnM7XG4gICAgICB9IGVsc2UgaWYgKGpvYi5kYXRhLmluaXRpYWxRdWV1ZSkge1xuICAgICAgICBuZXh0UXVldWUgPSBqb2IuZGF0YS5pbml0aWFsUXVldWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBzb21lIGRlYnVnIGRhdGEgZm9yIHRoZSBuZXh0IGpvYlxuICAgICAgLy8gc28gaXQgY2FuIHRlbGwgd2hlcmUgdGhlIHJlbGF5IG9yaWdpbmF0ZWQgZnJvbVxuICAgICAgam9iLmRhdGEuZnJvbV9qb2IgPSBjdXJyZW50Sm9iO1xuICAgICAgam9iLmRhdGEuZnJvbV9xdWV1ZSA9IHRoaXMubmFtZTtcbiAgICAgIGpvYi5kYXRhLmZyb21fdGltZXN0YW1wID0gZ2V0VGltZVN0YW1wKCk7XG4gICAgICAvLyByZWxheSByZXNvbHZlZCBkYXRhXG4gICAgICBqb2IuZGF0YS5kYXRhID0gZGF0YTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5ob29rcy5qb2IuY3JlYXRlKG5leHRRdWV1ZSwgam9iLmRhdGEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gd2UndmUganVzdCBmaW5pc2hlZCB0aGUgbGFzdCBqb2IgaW4gdGhlIHJlbGF5XG4gICAgLy8gZW1pdCBzdWNjZXNzIG9yIGZhaWx1cmUgZXZlbnQgaWYgd2UgaGF2ZSBsaXN0ZW5lcnNcbiAgICBpZiAoZXJyb3IgJiYgam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSwgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH0gZWxzZSBpZiAoam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgIGlmIChlcnJNdWx0aSkgcmV0dXJuIHJlamVjdChlcnJNdWx0aSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uTG9jYWxUaWNrQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgdGhpcy5ydW5uaW5nLS07XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdHRsZSkgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRocm90dGxlKFxuICAgICAgdGhpcy50b0tleSgndGhyb3R0bGUnKSxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5saW1pdCxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5zZWNvbmRzXG4gICAgKS50aGVuKHRocm90dGxlID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZFRocm90dGxlID0gdGhyb3R0bGVbMF0gPT09IDE7XG4gICAgICBpZiAoIXNob3VsZFRocm90dGxlKSB7XG4gICAgICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50aHJvdHRsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgdGltZVJlbWFpbmluZyA9ICh0aHJvdHRsZVsyXSA9PT0gMCA/IDEgOiB0aHJvdHRsZVsyXSk7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGAnJHt0aGlzLm5hbWV9JyBxdWV1ZSAgcmVhY2hlZCBpdCdzIHRocm90dGxlIGxpbWl0LCByZXN1bWluZyBpbiAke3RpbWVSZW1haW5pbmd9IHNlY29uZHMuYCk7XG4gICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLl9xdWV1ZVRpY2ssIHRpbWVSZW1haW5pbmcgKiAxMDAwKTtcbiAgICB9KS5jYXRjaCh0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbkxvY2FsVGlja0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICB0aGlzLmxvZy5lcnJvcihlcnJvcik7XG4gICAgc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3F1ZXVlVGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wYXVzZWQgfHwgIXRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICB0aGlzLnF1ZXVlZCsrO1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuX2dldE5leHRKb2IoKVxuICAgICAgLnRoZW4oam9iID0+IHtcbiAgICAgICAgdGhpcy5ydW5uaW5nKys7XG4gICAgICAgIC8vIHF1ZXVlIG1vcmUgam9icyBpZiB3aXRoaW4gbGltaXRcbiAgICAgICAgaWYgKCh0aGlzLnJ1bm5pbmcgKyB0aGlzLnF1ZXVlZCkgPCB0aGlzLm9wdGlvbnMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBhIGxpdHRsZSBwb2ludGxlc3MgcmlnaHQgbm93IGlmIHdlJ3JlIHRocm90dGxpbmcgam9ic1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnRocm90dGxlKSBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Kb2Ioam9iKS50aGVuKHRoaXMuX29uTG9jYWxUaWNrQ29tcGxldGUpLmNhdGNoKHRoaXMuX29uTG9jYWxUaWNrQ29tcGxldGUpO1xuICAgICAgfSkuY2F0Y2godGhpcy5fb25Mb2NhbFRpY2tFcnJvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdGFydFByb2Nlc3NpbmcgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ3JlYWR5JywgdGhpcy5fcXVldWVUaWNrKTtcbiAgfTtcblxuICAvKipcbiAgICogU3RhcnQgdGhlIHF1ZXVlLlxuICAgKi9cbiAgYmVnaW5Xb3JraW5nKCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQgfHwgIXRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBRdWV1ZSAke3RoaXMubmFtZX0gaXMgY3VycmVudGx5IGRpc2FibGVkLmApO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXVlZCA9IDA7XG4gICAgdGhpcy5ydW5uaW5nID0gMDtcbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5sb2cudmVyYm9zZShgUXVldWUgJyR7dGhpcy5uYW1lfScgLSBzdGFydGVkIHdpdGggYSBjb25jdXJyZW5jeSBvZiAke3RoaXMub3B0aW9ucy5jb25jdXJyZW5jeX0uYCk7XG5cbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgnZXJyb3InLCB0aGlzLl9yZXN0YXJ0UHJvY2Vzc2luZyk7XG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ2Nsb3NlJywgdGhpcy5fcmVzdGFydFByb2Nlc3NpbmcpO1xuXG4gICAgdGhpcy5jaGVja1N0YWxsZWRKb2JzKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKCdjaGVja1N0YWxsZWRKb2JzIGNvbXBsZXRlZCcpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9xdWV1ZVRpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNoZWNrU3RhbGxlZEpvYnMoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZShgJHt0aGlzLm5hbWV9OiBjaGVja1N0YWxsZWRKb2JzYCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNoZWNrc3RhbGxlZGpvYnMoXG4gICAgICB0aGlzLnRvS2V5KCdzdGFsbFRpbWUnKSxcbiAgICAgIHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCdhY3RpdmUnKSxcbiAgICAgIGdldFRpbWVTdGFtcCgpLFxuICAgICAgdGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWxcbiAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLnBhdXNlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIFByb21pc2UuZGVsYXkodGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWwpLnRoZW4oOjp0aGlzLmNoZWNrU3RhbGxlZEpvYnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBzdHJcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0b0tleShzdHIpIHtcbiAgICBpZiAodGhpcy5jb3JlLmNsdXN0ZXIuaXNDbHVzdGVyKCkpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnMua2V5UHJlZml4fTp7JHt0aGlzLm5hbWV9fToke3N0cn1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zLmtleVByZWZpeH06JHt0aGlzLm5hbWV9OiR7c3RyfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBldmVudFByZWZpeCB0byBhbiBldmVudCBuYW1lXG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvRXZlbnROYW1lID0gZXZlbnROYW1lID0+IGBxdWV1ZToke3RoaXMubmFtZX06JHtldmVudE5hbWV9YDtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,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SyxNQUFHLEdBQUksR0FBckQ7QUFDRDs7QUFFRDs7Ozs7QUFyZThDO2tCQUEzQixLIiwiZmlsZSI6InF1ZXVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEpvYiBmcm9tICcuL2pvYic7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHsgZGVlcEdldCwgaXNPYmplY3QsIGdldFRpbWVTdGFtcCwgdHJ5SlNPTlBhcnNlIH0gZnJvbSAncmVkaWJveCc7XG5cbi8qKlxuICogVE9ETyBtb3ZlIHRvIGhlbHBlcnNcbiAqIEBwYXJhbSBlcnJvclN0YWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRyaW1TdGFjayhlcnJvclN0YWNrKSB7XG4gIGNvbnN0IG9sZFN0YWNrID0gZXJyb3JTdGFjay5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHN0YWNrID0gW107XG4gIGZvciAobGV0IGkgPSAwLCBpTGVuID0gb2xkU3RhY2subGVuZ3RoIHx8IHN0YWNrLmxlbmd0aCA+IDE5OyBpIDwgaUxlbjsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gb2xkU3RhY2tbaV07XG5cbiAgICAvLyBpbmNsdWRlIHByaXZhdGUgbW9kdWxlc1xuICAgIGlmIChyb3cuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgc3RhY2sucHVzaChyb3cpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gZXhjbHVkZSBqb2IgbW9kdWxlXG4gICAgaWYgKHJvdy5pbmNsdWRlcygncmVkaWJveC1ob29rLWpvYicpIHx8IHJvdy5pbmNsdWRlcygncmVkaWJveC9qb2IvbGliJykpIGNvbnRpbnVlO1xuXG4gICAgLy8gZXhjbHVkZSBibHVlYmlyZFxuICAgIGlmIChyb3cuaW5jbHVkZXMoJ2JsdWViaXJkJykpIGNvbnRpbnVlO1xuXG4gICAgLy8gZXhjbHVkZSB3YXRlcmxpbmVcbiAgICBpZiAocm93LmluY2x1ZGVzKCd3YXRlcmxpbmUvbGliJykpIGNvbnRpbnVlO1xuXG4gICAgLy8gZXhjbHVkZSB0aW1lcnMuanNcbiAgICBpZiAocm93LmluY2x1ZGVzKCd0aW1lcnMuanM6JykpIGNvbnRpbnVlO1xuXG4gICAgc3RhY2sucHVzaChyb3cpO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBjb3JlXG4gICAqIEByZXR1cm5zIHtRdWV1ZX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvcmUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29yZSA9IGNvcmU7XG4gICAgdGhpcy5jbGllbnQgPSBjb3JlLmNsaWVudDtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgdGhpcy5sb2cgPSB0aGlzLmNvcmUubG9nO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBvcHRpb25zLmhhbmRsZXIgfHwgbnVsbDtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cy5xdWV1ZSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5jb3JlLmNyZWF0ZUNsaWVudCgnYmxvY2snLCB0aGlzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYEJsb2NraW5nIGNsaWVudCBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScgaXMgcmVhZHkuIFN0YXJ0aW5nIHF1ZXVlIHByb2Nlc3Nvci5gKTtcbiAgICAgIHRoaXMuYmVnaW5Xb3JraW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAnaWQnLCAnam9icycsICdzdGFsbFRpbWUnLCAnc3RhbGxpbmcnLCAnd2FpdGluZycsICdhY3RpdmUnLCAnc3VjY2VlZGVkJywgJ2ZhaWxlZCcsXG4gICAgXS5tYXAoa2V5ID0+IHRoaXMudG9LZXkoa2V5KSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbCguLi5rZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNoZWNrSGVhbHRoKCkge1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuY2xpZW50Lm11bHRpKClcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSlcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ2FjdGl2ZScpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpKVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7IC8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FpdGluZzogcmVzdWx0c1swXVsxXSxcbiAgICAgICAgICBhY3RpdmU6IHJlc3VsdHNbMV1bMV0sXG4gICAgICAgICAgc3VjY2VlZGVkOiByZXN1bHRzWzJdWzFdLFxuICAgICAgICAgIGZhaWxlZDogcmVzdWx0c1szXVsxXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2dldE5leHRKb2IoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZShgR2V0dGluZyBuZXh0IGpvYiBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScuYCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50cy5ibG9jay5icnBvcGxwdXNoKFxuICAgICAgdGhpcy50b0tleSgnd2FpdGluZycpLFxuICAgICAgdGhpcy50b0tleSgnYWN0aXZlJyksIDBcbiAgICApLnRoZW4oam9iSWQgPT5cbiAgICAgIEpvYi5mcm9tSWQodGhpcywgam9iSWQpLnRoZW4oam9iID0+IHtcbiAgICAgICAgcmV0dXJuIGpvYjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gam9iXG4gICAqIEBwYXJhbSBqb2JFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2xvZ0pvYkZhaWx1cmUoam9iLCBqb2JFcnJvcikge1xuICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIGpvYkVycm9yID09PSAnc3RyaW5nJyA/IG5ldyBFcnJvcihqb2JFcnJvcikgOiBqb2JFcnJvcjtcbiAgICBjb25zdCBzdGFjayA9IHRyaW1TdGFjayhlcnJvci5zdGFjayk7XG4gICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9mYWlsdXJlJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJ1bnM6IGpvYi5kYXRhLnJ1bnMsXG4gICAgICAgICAgcXVldWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJycpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJy0tLS0tLS0tLS0tLS0tLSBSREIgSk9CIEVSUk9SL0ZBSUxVUkUgLS0tLS0tLS0tLS0tLS0tJyk7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgSm9iOiAke2pvYi5kYXRhLnJ1bnN9YCB8fCB0aGlzLm5hbWUpO1xuICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFjay5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9ydW5Kb2Ioam9iKSB7XG4gICAgaWYgKCFqb2IgfHwgIWpvYi5kYXRhKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgcnVucyA9IGpvYi5kYXRhICYmIGpvYi5kYXRhLnJ1bnMgJiYgQXJyYXkuaXNBcnJheShqb2IuZGF0YS5ydW5zKSA/IGpvYi5kYXRhLnJ1bnNbMF0gOiBqb2IuZGF0YS5ydW5zO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAodHlwZW9mIHRoaXMuaGFuZGxlciA9PT0gJ3N0cmluZycgP1xuICAgICAgICBkZWVwR2V0KGdsb2JhbCwgdGhpcy5oYW5kbGVyKSA6IHRoaXMuaGFuZGxlcikgfHwgZGVlcEdldChnbG9iYWwsIHJ1bnMpO1xuXG4gICAgbGV0IHByZXZlbnRTdGFsbGluZ1RpbWVvdXQ7XG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcbiAgICBsZXQgcHJvbWlzZU9yUmVzO1xuXG4gICAgLy8gSGFuZGxlIGFuIFwiT0tcIiByZXNwb25zZSBmcm9tIHRoZSBwcm9taXNlXG4gICAgY29uc3QgaGFuZGxlT0sgPSBkYXRhID0+IHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhbnkgbXVsdGlwbGUgY2FsbHNcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm4gdm9pZCAwO1xuXG4gICAgICBjbGVhclRpbWVvdXQocHJldmVudFN0YWxsaW5nVGltZW91dCk7XG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgZGF0YVxuICAgICAgaWYgKGpvYi5faW50ZXJuYWxEYXRhKSB7XG4gICAgICAgIGpvYi5kYXRhID0gam9iLl9pbnRlcm5hbERhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmVsYXkgdG8gbmV4dCBqb2IgaWYgdXNlciBkaWQgbm90IHJlc29sdmUgJ2ZhbHNlJyBvbiBjdXJyZW50IGpvYlxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknICYmIGRhdGEgIT09IGZhbHNlKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hTaW5nbGVKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgcmV0dXJuZWRcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGpvYkVycm9yID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcblxuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlZCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCB0aGUgZGF0YSBiYWNrIHRvIGludGVybmFsIGpvYiBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKTtcblxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2Ioam9iRXJyb3IsIG51bGwsIGpvYik7XG4gICAgICByZXR1cm4gdGhpcy5fZmluaXNoU2luZ2xlSm9iKGpvYkVycm9yLCBudWxsLCBqb2IpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmV2ZW50U3RhbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNsaWVudC5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCwgKCkgPT4ge1xuICAgICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgICBwcmV2ZW50U3RhbGxpbmdUaW1lb3V0ID0gc2V0VGltZW91dChwcmV2ZW50U3RhbGxpbmcsIHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBcIiR7am9iLmRhdGEucnVucyB8fCAnTm8gSm9iIEhhbmRsZXIgU3BlY2lmaWVkJ31cIiB3YXMgbm90IGZvdW5kLiBTa2lwcGluZyBqb2IuIFRvIGZpeCB0aGlzXG4gICAgICAgICAgICAgeW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBoYW5kbGVyIGZ1bmN0aW9uIHZpYSBxdWV1ZS5wcm9jZXNzKCkgb3IgcHJvdmlkZSBhIHZhbGlkIGhhbmRsZXJcbiAgICAgICAgICAgICBub2RlIGdsb2JhbCBwYXRoIGluIHlvdXIgam9iIG9wdGlvbnMgJ2hhbmRsZXInLCBlLmcuIGlmIHlvdSBoYWQgYSBnbG9iYWwgZnVuY3Rpb24gaW5cbiAgICAgICAgICAgICdnbG9iYWwuc2FpbHMuc2VydmljZXMubXlzZXJ2aWNlJyB5b3UnZCBzcGVjaWZ5IHRoZSBoYW5kbGVyIGFzICdzYWlscy5zZXJ2aWNlcy5teXNlcnZpY2UubXlIYW5kbGVyJy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJldmVudFN0YWxsaW5nKCk7IC8vIHN0YXJ0IHN0YWxsaW5nIG1vbml0b3JcblxuICAgIGpvYi5faW50ZXJuYWxEYXRhID0gam9iLmRhdGE7XG4gICAgam9iLmRhdGEgPSBqb2IuZGF0YS5kYXRhIHx8IGpvYi5kYXRhO1xuXG4gICAgaWYgKGpvYi5vcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoaGFuZGxlRXJyb3IuYmluZChudWxsLCBFcnJvcihgSm9iICR7am9iLmlkfSB0aW1lZCBvdXQgKCR7am9iLm9wdGlvbnMudGltZW91dH1tcylgKSksIGpvYi5vcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoam9iLm9wdGlvbnMubm9CaW5kIHx8IHRoaXMub3B0aW9ucy5ub0JpbmQpIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlcihqb2IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZU9yUmVzID0gaGFuZGxlci5iaW5kKGpvYiwgam9iKShqb2IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZU9yUmVzLnRoZW4gJiYgdHlwZW9mIHByb21pc2VPclJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZU9yUmVzLnRoZW4oaGFuZGxlT0ssIGhhbmRsZUVycm9yKS5jYXRjaChoYW5kbGVFcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZU9LKHByb21pc2VPclJlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge3tqb2I6IHtpZDogKiwgd29ya2VyX2lkOiAoKnxTdHJpbmd8c3RyaW5nKSwgc3RhdHVzOiBzdHJpbmd9LCBlcnJvcjogKiwgb3V0cHV0OiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBpZDogam9iLmlkLFxuICAgICAgICB3b3JrZXJfaWQ6IHRoaXMuY29yZS5pZCxcbiAgICAgICAgc3RhdHVzOiBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIC4uLmpvYi5kYXRhLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgb3V0cHV0OiBkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIG11bHRpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgbXVsdGkubHJlbSh0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMCwgam9iLmlkKTtcbiAgICBtdWx0aS5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCk7XG5cbiAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgaWYgKGpvYi5vcHRpb25zLnJldHJpZXMgPiAwKSB7XG4gICAgICAgIGpvYi5vcHRpb25zLnJldHJpZXMgPSBqb2Iub3B0aW9ucy5yZXRyaWVzIC0gMTtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdyZXRyeWluZyc7XG4gICAgICAgIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIG11bHRpLmxwdXNoKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSwgam9iLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvYi5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgbXVsdGkuaGRlbCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCk7XG4gICAgICAgIC8vIFRPRE8gdHJhY2sgZmFpbHVyZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgICAvLyBtdWx0aS5oc2V0KHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkLCBqb2IudG9EYXRhKCkpO1xuICAgICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpLCBqb2IuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBqb2Iuc3RhdHVzID0gJ3N1Y2NlZWRlZCc7XG4gICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgIC8vIFRPRE8gdHJhY2sgc3VjY2Vzc2VzIGFuZCB0aGVpciBkYXRhIHNvbWV3aGVyZSBlbHNlIGZvciByZXZpZXdpbmdcbiAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpLCBqb2IuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9maW5pc2hTaW5nbGVKb2IoZXJyb3IsIGRhdGEsIGpvYikge1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGVtaXQgc3VjY2VzcyBvciBmYWlsdXJlIGV2ZW50IGlmIHdlIGhhdmUgbGlzdGVuZXJzXG4gICAgaWYgKGVycm9yICYmIGpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfSBlbHNlIGlmIChqb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyBhIG11bHRpIGpvYiBvciBjb250aW51ZXMgdG8gdGhlIG5leHQgc3RhZ2UuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmlzaFJlbGF5Sm9iKGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICBsZXQgbmV4dFF1ZXVlID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IG5leHRKb2IgPSBqb2IuZGF0YS5ydW5zWzBdO1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBjdXJyZW50Sm9iID0gam9iLmRhdGEucnVucy5zaGlmdCgpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJztcblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2YgdGhlIGZpcnN0IGpvYiBpbiB0aGlzIHJlbGF5IGluc3RhbmNlXG4gICAgaWYgKCFqb2IuZGF0YS5pbml0aWFsSm9iKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsSm9iID0gdHJ5SlNPTlBhcnNlKGpvYi50b0RhdGEoKSk7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgZmlyc3QgcXVldWUgaW4gdGhpcyByZWxheSBpbnN0YW5jZVxuICAgIGlmICgham9iLmRhdGEuaW5pdGlhbFF1ZXVlKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsUXVldWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVsYXkgdG8gYW5vdGhlciBqb2JcbiAgICBpZiAoIShqb2IuZGF0YS5ydW5zLmxlbmd0aCA9PT0gMCB8fCAhIWVycm9yKSkge1xuICAgICAgaWYgKGlzT2JqZWN0KG5leHRKb2IpKSB7XG4gICAgICAgIG5leHRRdWV1ZSA9IG5leHRKb2IucXVldWU7XG4gICAgICAgIGpvYi5kYXRhLnJ1bnNbMF0gPSBuZXh0Sm9iLnJ1bnM7XG4gICAgICB9IGVsc2UgaWYgKGpvYi5kYXRhLmluaXRpYWxRdWV1ZSkge1xuICAgICAgICBuZXh0UXVldWUgPSBqb2IuZGF0YS5pbml0aWFsUXVldWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBzb21lIGRlYnVnIGRhdGEgZm9yIHRoZSBuZXh0IGpvYlxuICAgICAgLy8gc28gaXQgY2FuIHRlbGwgd2hlcmUgdGhlIHJlbGF5IG9yaWdpbmF0ZWQgZnJvbVxuICAgICAgam9iLmRhdGEuZnJvbV9qb2IgPSBjdXJyZW50Sm9iO1xuICAgICAgam9iLmRhdGEuZnJvbV9xdWV1ZSA9IHRoaXMubmFtZTtcbiAgICAgIGpvYi5kYXRhLmZyb21fdGltZXN0YW1wID0gZ2V0VGltZVN0YW1wKCk7XG4gICAgICAvLyByZWxheSByZXNvbHZlZCBkYXRhXG4gICAgICBqb2IuZGF0YS5kYXRhID0gZGF0YTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5ob29rcy5qb2IuY3JlYXRlKG5leHRRdWV1ZSwgam9iLmRhdGEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gd2UndmUganVzdCBmaW5pc2hlZCB0aGUgbGFzdCBqb2IgaW4gdGhlIHJlbGF5XG4gICAgLy8gZW1pdCBzdWNjZXNzIG9yIGZhaWx1cmUgZXZlbnQgaWYgd2UgaGF2ZSBsaXN0ZW5lcnNcbiAgICBpZiAoZXJyb3IgJiYgam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSwgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH0gZWxzZSBpZiAoam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgIGlmIChlcnJNdWx0aSkgcmV0dXJuIHJlamVjdChlcnJNdWx0aSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uTG9jYWxUaWNrQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgdGhpcy5ydW5uaW5nLS07XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdHRsZSkgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRocm90dGxlKFxuICAgICAgdGhpcy50b0tleSgndGhyb3R0bGUnKSxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5saW1pdCxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5zZWNvbmRzXG4gICAgKS50aGVuKHRocm90dGxlID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZFRocm90dGxlID0gdGhyb3R0bGVbMF0gPT09IDE7XG4gICAgICBpZiAoIXNob3VsZFRocm90dGxlKSB7XG4gICAgICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50aHJvdHRsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgdGltZVJlbWFpbmluZyA9ICh0aHJvdHRsZVsyXSA9PT0gMCA/IDEgOiB0aHJvdHRsZVsyXSk7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGAnJHt0aGlzLm5hbWV9JyBxdWV1ZSAgcmVhY2hlZCBpdCdzIHRocm90dGxlIGxpbWl0LCByZXN1bWluZyBpbiAke3RpbWVSZW1haW5pbmd9IHNlY29uZHMuYCk7XG4gICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLl9xdWV1ZVRpY2ssIHRpbWVSZW1haW5pbmcgKiAxMDAwKTtcbiAgICB9KS5jYXRjaCh0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbkxvY2FsVGlja0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICB0aGlzLmxvZy5lcnJvcihlcnJvcik7XG4gICAgc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3F1ZXVlVGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wYXVzZWQgfHwgIXRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICB0aGlzLnF1ZXVlZCsrO1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuX2dldE5leHRKb2IoKVxuICAgICAgLnRoZW4oam9iID0+IHtcbiAgICAgICAgdGhpcy5ydW5uaW5nKys7XG4gICAgICAgIC8vIHF1ZXVlIG1vcmUgam9icyBpZiB3aXRoaW4gbGltaXRcbiAgICAgICAgaWYgKCh0aGlzLnJ1bm5pbmcgKyB0aGlzLnF1ZXVlZCkgPCB0aGlzLm9wdGlvbnMuY29uY3VycmVuY3kpIHtcbiAgICAgICAgICAvLyBjb25jdXJyZW5jeSBpcyBhIGxpdHRsZSBwb2ludGxlc3MgcmlnaHQgbm93IGlmIHdlJ3JlIHRocm90dGxpbmcgam9ic1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnRocm90dGxlKSBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Kb2Ioam9iKS50aGVuKHRoaXMuX29uTG9jYWxUaWNrQ29tcGxldGUpLmNhdGNoKHRoaXMuX29uTG9jYWxUaWNrQ29tcGxldGUpO1xuICAgICAgfSkuY2F0Y2godGhpcy5fb25Mb2NhbFRpY2tFcnJvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdGFydFByb2Nlc3NpbmcgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ3JlYWR5JywgdGhpcy5fcXVldWVUaWNrKTtcbiAgfTtcblxuICAvKipcbiAgICogU3RhcnQgdGhlIHF1ZXVlLlxuICAgKi9cbiAgYmVnaW5Xb3JraW5nKCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQgfHwgIXRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBRdWV1ZSAke3RoaXMubmFtZX0gaXMgY3VycmVudGx5IGRpc2FibGVkLmApO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXVlZCA9IDA7XG4gICAgdGhpcy5ydW5uaW5nID0gMDtcbiAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5sb2cudmVyYm9zZShgUXVldWUgJyR7dGhpcy5uYW1lfScgLSBzdGFydGVkIHdpdGggYSBjb25jdXJyZW5jeSBvZiAke3RoaXMub3B0aW9ucy5jb25jdXJyZW5jeX0uYCk7XG5cbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgnZXJyb3InLCB0aGlzLl9yZXN0YXJ0UHJvY2Vzc2luZyk7XG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ2Nsb3NlJywgdGhpcy5fcmVzdGFydFByb2Nlc3NpbmcpO1xuXG4gICAgdGhpcy5jaGVja1N0YWxsZWRKb2JzKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKCdjaGVja1N0YWxsZWRKb2JzIGNvbXBsZXRlZCcpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9xdWV1ZVRpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGNoZWNrU3RhbGxlZEpvYnMoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZShgJHt0aGlzLm5hbWV9OiBjaGVja1N0YWxsZWRKb2JzYCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNoZWNrc3RhbGxlZGpvYnMoXG4gICAgICB0aGlzLnRvS2V5KCdzdGFsbFRpbWUnKSxcbiAgICAgIHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCdhY3RpdmUnKSxcbiAgICAgIGdldFRpbWVTdGFtcCgpLFxuICAgICAgdGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWxcbiAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLnBhdXNlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIFByb21pc2UuZGVsYXkodGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWwpLnRoZW4oOjp0aGlzLmNoZWNrU3RhbGxlZEpvYnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBzdHJcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0b0tleShzdHIpIHtcbiAgICBpZiAodGhpcy5jb3JlLmNsdXN0ZXIuaXNDbHVzdGVyKCkpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnMua2V5UHJlZml4fTp7JHt0aGlzLm5hbWV9fToke3N0cn1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zLmtleVByZWZpeH06JHt0aGlzLm5hbWV9OiR7c3RyfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBldmVudFByZWZpeCB0byBhbiBldmVudCBuYW1lXG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvRXZlbnROYW1lID0gZXZlbnROYW1lID0+IGBxdWV1ZToke3RoaXMubmFtZX06JHtldmVudE5hbWV9YDtcbn1cbiJdfQ==

2

package.json
{
"name": "redibox-hook-job",
"description": "Advanced redibox powered jobs and queues",
"version": "1.2.6",
"version": "1.2.8",
"main": "lib/index.js",

@@ -6,0 +6,0 @@ "author": "Mike Diarmid",

@@ -75,2 +75,3 @@ global.HOOK_NAME = 'job';

console.log('FOO BAR');
console.log(foborh);
return Promise.resolve({ hello: 123 });

@@ -77,0 +78,0 @@ };

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc