@windingtree/org.id-resolver 2.4.0 → 3.0.0-beta.11
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/README.md +13 -221
- package/dist/package.json +59 -0
- package/dist/src/index.d.ts +118 -0
- package/dist/src/index.js +341 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +39 -43
- package/dist/cli.js +0 -5
- package/dist/dns.js +0 -10
- package/dist/http.js +0 -5
- package/dist/index.js +0 -98
- package/dist/linkedIn.js +0 -5
- package/dist/twitter.js +0 -6
- package/dist/utils/cli.js +0 -23
- package/dist/utils/constants.js +0 -2
- package/dist/utils/document.js +0 -2
- package/dist/utils/expect.js +0 -20
- package/dist/utils/vc.js +0 -16
- package/dist/whois.js +0 -3
package/dist/index.js
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
"use strict";require("core-js/modules/es.symbol.js");require("core-js/modules/es.array.filter.js");require("core-js/modules/es.object.get-own-property-descriptor.js");require("core-js/modules/es.array.for-each.js");require("core-js/modules/web.dom-collections.for-each.js");require("core-js/modules/es.object.get-own-property-descriptors.js");require("core-js/modules/es.promise.js");require("core-js/modules/es.array.slice.js");require("core-js/modules/es.array.from.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("regenerator-runtime/runtime.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.object.assign.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.date.to-iso-string.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.regexp.constructor.js");require("core-js/modules/es.regexp.to-string.js");require("core-js/modules/es.string.match.js");require("core-js/modules/es.array.join.js");require("core-js/modules/es.object.keys.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.function.name.js");function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(iter))return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _createForOfIteratorHelper(o,allowArrayLike){var it;if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&typeof o.length==="number"){if(it)o=it;var i=0;var F=function F(){};return{s:F,n:function n(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function e(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var normalCompletion=true,didErr=false,err;return{s:function s(){it=o[Symbol.iterator]()},n:function n(){var step=it.next();normalCompletion=step.done;return step},e:function e(_e2){didErr=true;err=_e2},f:function f(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var packageJson=require("../package.json");var _require=require("./utils/vc"),validateVc=_require.validateVc;var didDocumentSchema=require("org.json-schema-0.3");var didDocumentSchema04=require("org.json-schema-0.4");var _require2=require("@windingtree/org.id"),OrgIdContract=_require2.OrgIdContract;var _require3=require("@windingtree/org.id-lif-deposit"),LifDepositContract=_require3.LifDepositContract;var Ajv=require("ajv");// Utilities
|
2
|
-
var expect=require("./utils/expect");var _require4=require("./utils/document"),makeHash=_require4.makeHash;// Modules
|
3
|
-
var httpFetchMethod=require("./http");var linkedInFetchMethod=require("./linkedIn");var twitterFetchMethod=require("./twitter");var whoisService=require("./whois");var _require5=require("./dns"),getDnsData=_require5.getDnsData,ResourceRecordTypes=_require5.ResourceRecordTypes;var _require6=require("./utils/constants"),zeroAddress=_require6.zeroAddress;// Errors types definitions
|
4
|
-
var checksTypes=["DID_SYNTAX","ORGID","DID_DOCUMENT","TRUST_ASSERTIONS","LIF_STAKE"];/**
|
5
|
-
* ORG.ID resolver class
|
6
|
-
* @class OrgIdResolver
|
7
|
-
*/var OrgIdResolver=/*#__PURE__*/function(){/**
|
8
|
-
* Creates an instance of OrgIdResolver.
|
9
|
-
* @param {Obejct} options Contructor parameters
|
10
|
-
* @memberof OrgIdResolver
|
11
|
-
*/function OrgIdResolver(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};_classCallCheck(this,OrgIdResolver);expect.all(options,{web3:{type:"object"},orgId:{type:"address"},lifDeposit:{type:"address",required:false},authorizedTrustProofsIssuers:{type:"object",required:false}});this.methodName="orgid";this.fetchSocialMethods={};this.fetchMethods={};this.serviceMethods={};this.web3=options.web3;this.orgIdAddress=options.orgId;this.lifDepositAddress=options.lifDeposit;this.authorizedTrustProofsIssuers=options.authorizedTrustProofsIssuers;this.validator=null;this.resolutionStart=null;this.resultTemplate=null;this.cache=null;this.result=null;this.reset()}/**
|
12
|
-
* Sets defaults
|
13
|
-
* @memberof OrgIdResolver
|
14
|
-
*/_createClass(OrgIdResolver,[{key:"reset",value:function reset(){this.validator=new Ajv;this.resolutionStart=null;this.resultTemplate=_objectSpread(_objectSpread({didDocument:null,organization:null,checks:checksTypes.map(function(type){return{type:type,passed:["TRUST_ASSERTIONS","LIF_STAKE"].includes(type)?false:true}}),trust:[]},this.lifDepositAddress?{lifDeposit:null}:{}),{},{resolverMetadata:{retrieved:null,duration:null}});this.cache={};this.result=Object.assign({},this.resultTemplate)}/**
|
15
|
-
* Resolvs DID into its document
|
16
|
-
* and makes proper validations and verifications
|
17
|
-
* @memberof OrgIdResolver
|
18
|
-
* @param {string} did DID
|
19
|
-
* @returns {Promise<{Object}>} Resolving result
|
20
|
-
*/},{key:"resolve",value:function(){var _resolve=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(did){return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:expect.all({did:did},{did:{type:"string"}});this.reset();this.resolutionStart=Date.now();_context.prev=3;_context.next=6;return this.validateDidSyntax(did);case 6:_context.next=8;return this.getOrganization(this.result.id);case 8:_context.next=10;return this.getDidDocument(this.result.organization);case 10:_context.next=12;return this.validateDidDocument(this.result.didDocument);case 12:_context.next=14;return this.verifyTrustRecords(this.result.didDocument);case 14:_context.next=16;return this.verifyLifStake(this.result.id);case 16:_context.next=21;break;case 18:_context.prev=18;_context.t0=_context["catch"](3);throw new Error("Resolving flow has been terminated due to serious error: ".concat(_context.t0.message,"; ").concat(_context.t0.stack));case 21:this.result.resolverMetadata.version=packageJson.version;this.result.resolverMetadata.retrieved=new Date().toISOString();this.result.resolverMetadata.duration=Date.now()-this.resolutionStart;this.result.resolverMetadata.orgIdAddress=this.orgIdAddress;return _context.abrupt("return",this.result);case 26:case"end":return _context.stop();}}},_callee,this,[[3,18]])}));function resolve(_x){return _resolve.apply(this,arguments)}return resolve}()/**
|
21
|
-
* Validates the given DID syntax
|
22
|
-
* @memberof OrgIdResolver
|
23
|
-
* @param {string} did DID
|
24
|
-
* @returns {Promise<{string}>} Organization Id
|
25
|
-
*/},{key:"validateDidSyntax",value:function(){var _validateDidSyntax=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee2(did){var parts,subParts;return regeneratorRuntime.wrap(function _callee2$(_context2){while(1){switch(_context2.prev=_context2.next){case 0:expect.all({did:did},{did:{type:"string"}});parts=did.split(":");if(parts[0]!=="did"){this.addCheckResult({type:"DID_SYNTAX",error:"Invalid DID prefix: ".concat(parts[0]),throw:true})}if(parts[1]!==this.methodName){this.addCheckResult({type:"DID_SYNTAX",error:"Unsupported DID method: ".concat(parts[1]),throw:true})}// Split paths, method parameters and queries
|
26
|
-
subParts=parts[2].split(/(?:#|;|\?)/);if(!new RegExp("^0x[a-fA-F0-9]{64}$").test(subParts[0])){this.addCheckResult({type:"DID_SYNTAX",error:"Invalid method specific Id: ".concat(subParts[0]),throw:true})}this.result.id=subParts[0];return _context2.abrupt("return",this.result.id);case 8:case"end":return _context2.stop();}}},_callee2,this)}));function validateDidSyntax(_x2){return _validateDidSyntax.apply(this,arguments)}return validateDidSyntax}()/**
|
27
|
-
* Validates the given DID document
|
28
|
-
* @memberof OrgIdResolver
|
29
|
-
* @param {Object} didDocument DID document
|
30
|
-
* @returns {Promise<{boolean}>} Validation result
|
31
|
-
*/},{key:"validateDidDocument",value:function(){var _validateDidDocument=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee3(didDocument){var _this=this;var schema,result;return regeneratorRuntime.wrap(function _callee3$(_context3){while(1){switch(_context3.prev=_context3.next){case 0:expect.all({didDocument:didDocument},{didDocument:{type:"object"}});schema=didDocument.schemaVersion&&didDocument.schemaVersion.match(/^0.4/)?didDocumentSchema04:didDocumentSchema;// Use the Ajv validator
|
32
|
-
// didDocumentSchema is obtained from @windingtree/org.json-schema
|
33
|
-
result=this.validator.validate(schema,didDocument);if(this.validator.errors!==null){this.validator.errors.map(function(detail){return _this.addCheckResult({type:"DID_DOCUMENT",warning:detail})})}return _context3.abrupt("return",result);case 5:case"end":return _context3.stop();}}},_callee3,this)}));function validateDidDocument(_x3){return _validateDidDocument.apply(this,arguments)}return validateDidDocument}()/**
|
34
|
-
* Verifies trust objects from the DID document
|
35
|
-
* @memberof OrgIdResolver
|
36
|
-
* @param {Object} didDocument DID document
|
37
|
-
* @returns {Promise}
|
38
|
-
*/},{key:"verifyTrustRecords",value:function(){var _verifyTrustRecords=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee4(didDocument){var trust,id,isProofsFound,i,assertion,assertionContent,proofFound,whoisInfo,_iterator,_step,record,rootDomain;return regeneratorRuntime.wrap(function _callee4$(_context4){while(1){switch(_context4.prev=_context4.next){case 0:if(!(!didDocument.trust||!Array.isArray(didDocument.trust.assertions))){_context4.next=2;break}return _context4.abrupt("return",{});case 2:// Cloned trust section
|
39
|
-
trust=JSON.parse(JSON.stringify(didDocument.trust));// Organization Id part of the DID
|
40
|
-
id=didDocument.id.match(/^did:orgid:(0x[a-fA-F0-9]{64}){1}$/im)[1];// Proofs existence flag
|
41
|
-
isProofsFound=false;// Assertions verification
|
42
|
-
i=0;case 6:if(!(i<trust.assertions.length)){_context4.next=105;break}assertion=trust.assertions[i];assertionContent=void 0;proofFound=false;// WHOIS information about domain
|
43
|
-
whoisInfo=void 0;_context4.t0=assertion.type;_context4.next=_context4.t0==="dns"?14:_context4.t0==="social"?50:_context4.t0==="domain"?50:97;break;case 14:if(ResourceRecordTypes[assertion.proof]){_context4.next=17;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: proof value \"").concat(assertion.proof,"\"\n not in the range of [").concat(Object.keys(ResourceRecordTypes).join(","),"]")});return _context4.abrupt("break",98);case 17:_context4.prev=17;_context4.next=20;return getDnsData(assertion.claim,assertion.proof);case 20:assertionContent=_context4.sent;if(!(assertionContent.length===0)){_context4.next=24;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: claim source is empty")});return _context4.abrupt("break",98);case 24:_iterator=_createForOfIteratorHelper(assertionContent);_context4.prev=25;_iterator.s();case 27:if((_step=_iterator.n()).done){_context4.next=34;break}record=_step.value;if(!RegExp(didDocument.id,"g").test(record.data)){_context4.next=32;break}proofFound=true;return _context4.abrupt("break",34);case 32:_context4.next=27;break;case 34:_context4.next=39;break;case 36:_context4.prev=36;_context4.t1=_context4["catch"](25);_iterator.e(_context4.t1);case 39:_context4.prev=39;_iterator.f();return _context4.finish(39);case 42:if(!proofFound){this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: proof not found")})}_context4.next=49;break;case 45:_context4.prev=45;_context4.t2=_context4["catch"](17);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: cannot get the proof")});return _context4.abrupt("break",98);case 49:return _context4.abrupt("break",98);case 50:_context4.prev=50;if(!(assertion.type==="domain"&&this.serviceMethods.whois)){_context4.next=58;break}rootDomain=assertion.claim.match(/[^.]+\.[^.]+$/)[0];_context4.next=55;return this.serviceMethods.whois.fetch(rootDomain);case 55:whoisInfo=_context4.sent;proofFound=true;return _context4.abrupt("break",98);case 58:_context4.next=63;break;case 60:_context4.prev=60;_context4.t3=_context4["catch"](50);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: unable to fetch whois information")});case 63:if(!assertion.proof.match(/^did.orgid/)){_context4.next=78;break}_context4.prev=64;_context4.next=67;return validateVc(this,assertion.proof,assertion.claim);case 67:proofFound=true;return _context4.abrupt("break",98);case 71:_context4.prev=71;_context4.t4=_context4["catch"](64);console.log("###",_context4.t4);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: VC DID not pass verification")});return _context4.abrupt("break",98);case 76:_context4.next=96;break;case 78:if(RegExp("^(http|https)://(www.){0,1}".concat(assertion.claim.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))).test(assertion.proof)){_context4.next=81;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: claim is not in the domain namespace")});return _context4.abrupt("break",98);case 81:_context4.prev=81;_context4.next=84;return this.fetchFileByUri(assertion.proof);case 84:assertionContent=_context4.sent;assertionContent=_typeof(assertionContent)==="object"?JSON.stringify(assertionContent):assertionContent;_context4.next=92;break;case 88:_context4.prev=88;_context4.t5=_context4["catch"](81);this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: cannot get the proof")});return _context4.abrupt("break",98);case 92:if(RegExp(id,"im").test(assertionContent)){_context4.next=95;break}this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: DID not found in the claim")});return _context4.abrupt("break",98);case 95:proofFound=true;case 96:return _context4.abrupt("break",98);case 97:// For cases where unknown assertion type has been provided
|
44
|
-
this.addCheckResult({type:"TRUST_ASSERTIONS",error:"trust.assertions[".concat(i,"]: unknown assertion type \"").concat(assertion.type,"\"")});case 98:assertion.verified=proofFound;assertion=_objectSpread(_objectSpread({},assertion),whoisInfo?{whois:whoisInfo}:{});trust.assertions[i]=assertion;if(proofFound){isProofsFound=true}case 102:i++;_context4.next=6;break;case 105:if(isProofsFound){// Just mark as passed
|
45
|
-
this.addCheckResult({type:"TRUST_ASSERTIONS"})}this.result.trust=trust;return _context4.abrupt("return",this.result.trust);case 108:case"end":return _context4.stop();}}},_callee4,this,[[17,45],[25,36,39,42],[50,60],[64,71],[81,88]])}));function verifyTrustRecords(_x4){return _verifyTrustRecords.apply(this,arguments)}return verifyTrustRecords}()/**
|
46
|
-
* Get the organization data
|
47
|
-
* @memberof OrgIdResolver
|
48
|
-
* @param {string} id The organization Id
|
49
|
-
* @returns {Promise}
|
50
|
-
*/},{key:"verifyLifStake",value:function(){var _verifyLifStake=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee5(id){var deposit,withdrawalRequest,lifDepositContract,requestSource;return regeneratorRuntime.wrap(function _callee5$(_context5){while(1){switch(_context5.prev=_context5.next){case 0:if(this.lifDepositAddress){_context5.next=2;break}return _context5.abrupt("return");case 2:expect.all({id:id},{id:{type:"string"}});deposit=0;withdrawalRequest=null;lifDepositContract=new this.web3.eth.Contract(LifDepositContract.abi,this.lifDepositAddress);_context5.prev=6;_context5.next=9;return lifDepositContract.methods["balanceOf(bytes32)"](id).call();case 9:deposit=_context5.sent;_context5.next=12;return lifDepositContract.methods["getWithdrawalRequest(bytes32)"](id).call();case 12:requestSource=_context5.sent;if(requestSource.exists){withdrawalRequest={value:requestSource.value.toString(),withdrawTime:requestSource.withdrawTime.toString()}}this.result.lifDeposit={deposit:deposit,withdrawalRequest:withdrawalRequest};if(deposit!=="0"&&!withdrawalRequest){// Just mark as passed
|
51
|
-
this.addCheckResult({type:"LIF_STAKE"})}else if(deposit!=="0"&&withdrawalRequest){this.addCheckResult({type:"LIF_STAKE",warning:"The organization sent a withdrawal request"})}_context5.next=21;break;case 18:_context5.prev=18;_context5.t0=_context5["catch"](6);this.addCheckResult({type:"LIF_STAKE",error:_context5.t0.message});case 21:case"end":return _context5.stop();}}},_callee5,this,[[6,18]])}));function verifyLifStake(_x5){return _verifyLifStake.apply(this,arguments)}return verifyLifStake}()/**
|
52
|
-
* Fetch a file by the given URI
|
53
|
-
* @memberof OrgIdResolver
|
54
|
-
* @param {string} uri The file URI
|
55
|
-
* @returns {Promise<{Object|string}>} Fetched file
|
56
|
-
*/},{key:"fetchFileByUri",value:function(){var _fetchFileByUri=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee6(uri){var fetch,f,_f,document;return regeneratorRuntime.wrap(function _callee6$(_context6){while(1){switch(_context6.prev=_context6.next){case 0:expect.all({uri:uri},{uri:{type:"string"}});if(!(uri==="")){_context6.next=3;break}throw new Error("Fetcher error: empty URI");case 3:if(!(Object.keys(this.fetchMethods).length===0)){_context6.next=5;break}throw new Error("Incomplete configuration: at least one fetching method should be registered");case 5:_context6.t0=regeneratorRuntime.keys(this.fetchSocialMethods);case 6:if((_context6.t1=_context6.t0()).done){_context6.next=13;break}f=_context6.t1.value;if(!RegExp(this.fetchSocialMethods[f].pattern).test(uri)){_context6.next=11;break}fetch=this.fetchSocialMethods[f].fetch;return _context6.abrupt("break",13);case 11:_context6.next=6;break;case 13:if(fetch){_context6.next=22;break}_context6.t2=regeneratorRuntime.keys(this.fetchMethods);case 15:if((_context6.t3=_context6.t2()).done){_context6.next=22;break}_f=_context6.t3.value;if(!RegExp(this.fetchMethods[_f].pattern).test(uri)){_context6.next=20;break}fetch=this.fetchMethods[_f].fetch;return _context6.abrupt("break",22);case 20:_context6.next=15;break;case 22:if(fetch){_context6.next=24;break}throw new Error("Fetcher error: unable to determine the fetching method for URI: ".concat(uri));case 24:_context6.next=26;return fetch(uri);case 26:document=_context6.sent;if(document){_context6.next=29;break}throw new Error("Fetcher error: file not found by the given URI: ".concat(uri));case 29:return _context6.abrupt("return",document);case 30:case"end":return _context6.stop();}}},_callee6,this)}));function fetchFileByUri(_x6){return _fetchFileByUri.apply(this,arguments)}return fetchFileByUri}()/**
|
57
|
-
* Fetch a DID document by the given Id
|
58
|
-
* @memberof OrgIdResolver
|
59
|
-
* @param {Object} organization The organization object
|
60
|
-
* @returns {Promise<{Object}>} DID document
|
61
|
-
*/},{key:"getDidDocument",value:function(){var _getDidDocument=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee8(){var _this2=this;var organization,orgId,orgJsonHash,orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2,firstSettled,didDocument,didObject,_args8=arguments;return regeneratorRuntime.wrap(function _callee8$(_context8){while(1){switch(_context8.prev=_context8.next){case 0:organization=_args8.length>0&&_args8[0]!==undefined?_args8[0]:{};expect.all(organization,{orgId:{type:"hash"},orgJsonUri:{type:"string"},orgJsonUriBackup1:{type:"string",required:false},orgJsonUriBackup2:{type:"string",required:false}});orgId=organization.orgId,orgJsonHash=organization.orgJsonHash,orgJsonUri=organization.orgJsonUri,orgJsonUriBackup1=organization.orgJsonUriBackup1,orgJsonUriBackup2=organization.orgJsonUriBackup2;// Resolve first settled promise
|
62
|
-
firstSettled=/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee7(fetches){var result,errors,_iterator2,_step2,fetchPromise;return regeneratorRuntime.wrap(function _callee7$(_context7){while(1){switch(_context7.prev=_context7.next){case 0:errors=[];_iterator2=_createForOfIteratorHelper(fetches);_context7.prev=2;_iterator2.s();case 4:if((_step2=_iterator2.n()).done){_context7.next=18;break}fetchPromise=_step2.value;_context7.prev=6;_context7.next=9;return fetchPromise();case 9:result=_context7.sent;return _context7.abrupt("return",result);case 13:_context7.prev=13;_context7.t0=_context7["catch"](6);errors.push(_context7.t0.message);case 16:_context7.next=4;break;case 18:_context7.next=23;break;case 20:_context7.prev=20;_context7.t1=_context7["catch"](2);_iterator2.e(_context7.t1);case 23:_context7.prev=23;_iterator2.f();return _context7.finish(23);case 26:throw new Error("Unable to fetch DID Document from given sources.\n ".concat(errors.length?errors.join("; "):""));case 27:case"end":return _context7.stop();}}},_callee7,null,[[2,20,23,26],[6,13]])}));return function firstSettled(_x7){return _ref.apply(this,arguments)}}();_context8.prev=4;_context8.next=7;return firstSettled([orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2].map(function(uri){return function(){return _this2.fetchFileByUri(uri)}}));case 7:didDocument=_context8.sent;_context8.next=13;break;case 10:_context8.prev=10;_context8.t0=_context8["catch"](4);this.addCheckResult({type:"DID_DOCUMENT",error:_context8.t0.message,throw:true});case 13:try{didObject=JSON.parse(didDocument)}catch(error){this.addCheckResult({type:"DID_DOCUMENT",error:"Broken ORG.JSON. Unable to parse"})}// Comparing of the stored and actual hash
|
63
|
-
if(makeHash(didDocument,this.web3)!==orgJsonHash){this.addCheckResult({type:"DID_DOCUMENT",error:"Invalid DID Document hash"})}// DID document should containing a proper DID
|
64
|
-
if("did:".concat(this.methodName,":").concat(orgId)!==didObject.id){this.addCheckResult({type:"DID_DOCUMENT",error:"Invalid DID Document id. Expected to be: ".concat(orgId,",\n but actual is: ").concat(didObject.id)})}this.result.didDocument=didObject;return _context8.abrupt("return",this.result.didDocument);case 18:case"end":return _context8.stop();}}},_callee8,this,[[4,10]])}));function getDidDocument(){return _getDidDocument.apply(this,arguments)}return getDidDocument}()/**
|
65
|
-
* Register a fetching method for social accounts
|
66
|
-
* @memberof OrgIdResolver
|
67
|
-
* @param {Object} methodConfig The fetching method configuration config
|
68
|
-
* @param {Object} methodOptions The fetching method options (API key, etc)
|
69
|
-
*/},{key:"registerSocialFetchMethod",value:function registerSocialFetchMethod(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var methodOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};expect.all(methodConfig,{name:{type:"string"},pattern:{type:"string"},fetch:{type:"function"}});this.fetchSocialMethods[methodConfig.name]=_objectSpread(_objectSpread({},methodConfig),{},{fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee9(uri){var options;return regeneratorRuntime.wrap(function _callee9$(_context9){while(1){switch(_context9.prev=_context9.next){case 0:options=methodOptions;_context9.next=3;return methodConfig.fetch(uri,options);case 3:return _context9.abrupt("return",_context9.sent);case 4:case"end":return _context9.stop();}}},_callee9)}));function fetch(_x8){return _fetch.apply(this,arguments)}return fetch}()})}/**
|
70
|
-
* Register a fetching method
|
71
|
-
* @memberof OrgIdResolver
|
72
|
-
* @param {Object} methodConfig The fetching method configuration config
|
73
|
-
*/},{key:"registerFetchMethod",value:function registerFetchMethod(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};expect.all(methodConfig,{name:{type:"string"},pattern:{type:"string"},fetch:{type:"function"}});this.fetchMethods[methodConfig.name]=methodConfig}/**
|
74
|
-
* Register a service method
|
75
|
-
* @memberof OrgIdResolver
|
76
|
-
* @param {Object} methodConfig The service method configuration config
|
77
|
-
*/},{key:"registerService",value:function registerService(){var methodConfig=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};expect.all(methodConfig,{name:{type:"string"},fetch:{type:"function"}});this.serviceMethods[methodConfig.name]=methodConfig}/**
|
78
|
-
* Get the OrgId contract instance
|
79
|
-
* @memberof OrgIdResolver
|
80
|
-
* @returns {Object} The OrgId contract instance
|
81
|
-
*/},{key:"getOrgIdContract",value:function getOrgIdContract(){if(this.cache.orgIdContract){return this.cache.orgIdContract}this.cache.orgIdContract=new this.web3.eth.Contract(OrgIdContract.abi,this.orgIdAddress);return this.cache.orgIdContract}/**
|
82
|
-
* Get the organization data
|
83
|
-
* @memberof OrgIdResolver
|
84
|
-
* @param {string} id The organization Id
|
85
|
-
* @returns {Promise<Object>} The OrgId contract instance
|
86
|
-
*/},{key:"getOrganization",value:function(){var _getOrganization=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee10(id){var orgIdContract,org,exists,orgId,orgJsonHash,orgJsonUri,orgJsonUriBackup1,orgJsonUriBackup2,parentOrgId,owner,director,isActive,isDirectorshipAccepted;return regeneratorRuntime.wrap(function _callee10$(_context10){while(1){switch(_context10.prev=_context10.next){case 0:expect.all({id:id},{id:{type:"string"}});if(!this.cache.organization){_context10.next=3;break}return _context10.abrupt("return",this.cache.organization);case 3:orgIdContract=this.getOrgIdContract();_context10.next=6;return orgIdContract.methods["getOrganization(bytes32)"](id).call();case 6:org=_context10.sent;exists=org.exists,orgId=org.orgId,orgJsonHash=org.orgJsonHash,orgJsonUri=org.orgJsonUri,orgJsonUriBackup1=org.orgJsonUriBackup1,orgJsonUriBackup2=org.orgJsonUriBackup2,parentOrgId=org.parentOrgId,owner=org.owner,director=org.director,isActive=org.isActive,isDirectorshipAccepted=org.isDirectorshipAccepted;if(!exists){this.addCheckResult({type:"ORGID",error:"Organization ".concat(id," not found"),throw:true})}if(!isActive){this.addCheckResult({type:"ORGID",warning:"Organization ".concat(id," is disabled")})}if(director!==zeroAddress&&!isDirectorshipAccepted){this.addCheckResult({type:"ORGID",warning:"Directorship of the organization ".concat(id," is not accepted")})}// Save normalised origanization object
|
87
|
-
this.cache.organization={orgId:orgId,orgJsonHash:orgJsonHash,orgJsonUri:orgJsonUri,orgJsonUriBackup1:orgJsonUriBackup1,orgJsonUriBackup2:orgJsonUriBackup2,parentOrgId:parentOrgId,owner:owner,director:director,isActive:isActive,isDirectorshipAccepted:isDirectorshipAccepted};this.result.organization=this.cache.organization;return _context10.abrupt("return",this.result.organization);case 14:case"end":return _context10.stop();}}},_callee10,this)}));function getOrganization(_x9){return _getOrganization.apply(this,arguments)}return getOrganization}()/**
|
88
|
-
* Get the list of registered fetching methods names
|
89
|
-
* @memberof OrgIdResolver
|
90
|
-
* @returns {string[]} Registered fetching nethods names
|
91
|
-
*/},{key:"getFetchMethods",value:function getFetchMethods(){return Object.keys(this.fetchMethods)}/**
|
92
|
-
* Adds a specific check result
|
93
|
-
* and throws a error if this behaviour is set in the options
|
94
|
-
* @memberof OrgIdResolver
|
95
|
-
* @returns {string[]} Registered fetching nethods names
|
96
|
-
*/},{key:"addCheckResult",value:function addCheckResult(options){expect.all(options,{type:{type:"enum",values:checksTypes},error:{type:"string",required:false},warning:{type:"string",required:false},throw:{type:"boolean",required:false}});var type=options.type,error=options.error,warning=options.warning;// Extract specific check
|
97
|
-
this.result.checks=this.result.checks.map(function(check){if(check.type===type){check=_objectSpread(_objectSpread(_objectSpread({},check),error?{errors:[].concat(_toConsumableArray(check.errors||[]),[error])}:{}),warning?{warnings:[].concat(_toConsumableArray(check.warning||[]),[warning])}:{});check.passed=!check.errors||check.errors&&check.errors.length===0}return check});if(options.throw){throw new Error("".concat(type,": ").concat(error))}}},{key:"spawnResolver",value:function spawnResolver(){var spawnedResolver=new OrgIdResolver({web3:this.web3,orgId:this.orgIdAddress,lifDeposit:this.lifDepositAddress});spawnedResolver.fetchSocialMethods=this.fetchSocialMethods;spawnedResolver.fetchMethods=this.fetchMethods;spawnedResolver.serviceMethods=this.serviceMethods;return spawnedResolver}}]);return OrgIdResolver}();module.exports.OrgIdResolver=OrgIdResolver;module.exports.httpFetchMethod=httpFetchMethod;module.exports.linkedInFetchMethod=linkedInFetchMethod;module.exports.twitterFetchMethod=twitterFetchMethod;module.exports.whoisService=whoisService;module.exports.checksTypes=Object.assign({},checksTypes);
|
98
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJwYWNrYWdlSnNvbiIsInJlcXVpcmUiLCJ2YWxpZGF0ZVZjIiwiZGlkRG9jdW1lbnRTY2hlbWEiLCJkaWREb2N1bWVudFNjaGVtYTA0IiwiT3JnSWRDb250cmFjdCIsIkxpZkRlcG9zaXRDb250cmFjdCIsIkFqdiIsImV4cGVjdCIsIm1ha2VIYXNoIiwiaHR0cEZldGNoTWV0aG9kIiwibGlua2VkSW5GZXRjaE1ldGhvZCIsInR3aXR0ZXJGZXRjaE1ldGhvZCIsIndob2lzU2VydmljZSIsImdldERuc0RhdGEiLCJSZXNvdXJjZVJlY29yZFR5cGVzIiwiemVyb0FkZHJlc3MiLCJjaGVja3NUeXBlcyIsIk9yZ0lkUmVzb2x2ZXIiLCJvcHRpb25zIiwiYWxsIiwid2ViMyIsInR5cGUiLCJvcmdJZCIsImxpZkRlcG9zaXQiLCJyZXF1aXJlZCIsImF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMiLCJtZXRob2ROYW1lIiwiZmV0Y2hTb2NpYWxNZXRob2RzIiwiZmV0Y2hNZXRob2RzIiwic2VydmljZU1ldGhvZHMiLCJvcmdJZEFkZHJlc3MiLCJsaWZEZXBvc2l0QWRkcmVzcyIsInZhbGlkYXRvciIsInJlc29sdXRpb25TdGFydCIsInJlc3VsdFRlbXBsYXRlIiwiY2FjaGUiLCJyZXN1bHQiLCJyZXNldCIsImRpZERvY3VtZW50Iiwib3JnYW5pemF0aW9uIiwiY2hlY2tzIiwibWFwIiwicGFzc2VkIiwiaW5jbHVkZXMiLCJ0cnVzdCIsInJlc29sdmVyTWV0YWRhdGEiLCJyZXRyaWV2ZWQiLCJkdXJhdGlvbiIsIk9iamVjdCIsImFzc2lnbiIsImRpZCIsIkRhdGUiLCJub3ciLCJ2YWxpZGF0ZURpZFN5bnRheCIsImdldE9yZ2FuaXphdGlvbiIsImlkIiwiZ2V0RGlkRG9jdW1lbnQiLCJ2YWxpZGF0ZURpZERvY3VtZW50IiwidmVyaWZ5VHJ1c3RSZWNvcmRzIiwidmVyaWZ5TGlmU3Rha2UiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsInZlcnNpb24iLCJ0b0lTT1N0cmluZyIsInBhcnRzIiwic3BsaXQiLCJhZGRDaGVja1Jlc3VsdCIsImVycm9yIiwidGhyb3ciLCJzdWJQYXJ0cyIsIlJlZ0V4cCIsInRlc3QiLCJzY2hlbWEiLCJzY2hlbWFWZXJzaW9uIiwibWF0Y2giLCJ2YWxpZGF0ZSIsImVycm9ycyIsImRldGFpbCIsIndhcm5pbmciLCJBcnJheSIsImlzQXJyYXkiLCJhc3NlcnRpb25zIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwiaXNQcm9vZnNGb3VuZCIsImkiLCJsZW5ndGgiLCJhc3NlcnRpb24iLCJhc3NlcnRpb25Db250ZW50IiwicHJvb2ZGb3VuZCIsIndob2lzSW5mbyIsInByb29mIiwia2V5cyIsImpvaW4iLCJjbGFpbSIsInJlY29yZCIsImRhdGEiLCJ3aG9pcyIsInJvb3REb21haW4iLCJmZXRjaCIsImNvbnNvbGUiLCJsb2ciLCJyZXBsYWNlIiwiZmV0Y2hGaWxlQnlVcmkiLCJ2ZXJpZmllZCIsImRlcG9zaXQiLCJ3aXRoZHJhd2FsUmVxdWVzdCIsImxpZkRlcG9zaXRDb250cmFjdCIsImV0aCIsIkNvbnRyYWN0IiwiYWJpIiwibWV0aG9kcyIsImNhbGwiLCJyZXF1ZXN0U291cmNlIiwiZXhpc3RzIiwidmFsdWUiLCJ0b1N0cmluZyIsIndpdGhkcmF3VGltZSIsInVyaSIsImYiLCJwYXR0ZXJuIiwiZG9jdW1lbnQiLCJvcmdKc29uVXJpIiwib3JnSnNvblVyaUJhY2t1cDEiLCJvcmdKc29uVXJpQmFja3VwMiIsIm9yZ0pzb25IYXNoIiwiZmlyc3RTZXR0bGVkIiwiZmV0Y2hlcyIsImZldGNoUHJvbWlzZSIsInB1c2giLCJkaWRPYmplY3QiLCJtZXRob2RDb25maWciLCJtZXRob2RPcHRpb25zIiwibmFtZSIsIm9yZ0lkQ29udHJhY3QiLCJnZXRPcmdJZENvbnRyYWN0Iiwib3JnIiwicGFyZW50T3JnSWQiLCJvd25lciIsImRpcmVjdG9yIiwiaXNBY3RpdmUiLCJpc0RpcmVjdG9yc2hpcEFjY2VwdGVkIiwidmFsdWVzIiwiY2hlY2siLCJ3YXJuaW5ncyIsInNwYXduZWRSZXNvbHZlciIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJzdkxBQUEsR0FBTUEsQ0FBQUEsV0FBVyxDQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBM0IsQyxhQUN1QkEsT0FBTyxDQUFDLFlBQUQsQyxDQUF0QkMsVSxVQUFBQSxVLENBQ1IsR0FBTUMsQ0FBQUEsaUJBQWlCLENBQUdGLE9BQU8sQ0FBQyxxQkFBRCxDQUFqQyxDQUNBLEdBQU1HLENBQUFBLG1CQUFtQixDQUFHSCxPQUFPLENBQUMscUJBQUQsQ0FBbkMsQyxjQUMwQkEsT0FBTyxDQUFDLHFCQUFELEMsQ0FBekJJLGEsV0FBQUEsYSxlQUN1QkosT0FBTyxDQUFDLGlDQUFELEMsQ0FBOUJLLGtCLFdBQUFBLGtCLENBQ1IsR0FBTUMsQ0FBQUEsR0FBRyxDQUFHTixPQUFPLENBQUMsS0FBRCxDQUFuQixDQUVBO0FBQ0EsR0FBTU8sQ0FBQUEsTUFBTSxDQUFHUCxPQUFPLENBQUMsZ0JBQUQsQ0FBdEIsQyxjQUNxQkEsT0FBTyxDQUFDLGtCQUFELEMsQ0FBcEJRLFEsV0FBQUEsUSxDQUVSO0FBQ0EsR0FBTUMsQ0FBQUEsZUFBZSxDQUFHVCxPQUFPLENBQUMsUUFBRCxDQUEvQixDQUNBLEdBQU1VLENBQUFBLG1CQUFtQixDQUFHVixPQUFPLENBQUMsWUFBRCxDQUFuQyxDQUNBLEdBQU1XLENBQUFBLGtCQUFrQixDQUFHWCxPQUFPLENBQUMsV0FBRCxDQUFsQyxDQUNBLEdBQU1ZLENBQUFBLFlBQVksQ0FBR1osT0FBTyxDQUFDLFNBQUQsQ0FBNUIsQyxjQUM0Q0EsT0FBTyxDQUFDLE9BQUQsQyxDQUEzQ2EsVSxXQUFBQSxVLENBQVlDLG1CLFdBQUFBLG1CLGVBQ0lkLE9BQU8sQ0FBQyxtQkFBRCxDLENBQXZCZSxXLFdBQUFBLFcsQ0FFUjtBQUNBLEdBQU1DLENBQUFBLFdBQVcsQ0FBRyxDQUNoQixZQURnQixDQUVoQixPQUZnQixDQUdoQixjQUhnQixD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QUFtQixDQUNmLEtBQU0sSUFBSVQsQ0FBQUEsS0FBSixXQUNDdkMsSUFERCxjQUNVK0MsS0FEVixFQUdULENBQ0osQyw2QkFFRCx3QkFBaUIsQ0FDYixHQUFNK0UsQ0FBQUEsZUFBZSxDQUFHLEdBQUlsSSxDQUFBQSxhQUFKLENBQWtCLENBQ3RDRyxJQUFJLENBQUUsS0FBS0EsSUFEMkIsQ0FFdENFLEtBQUssQ0FBRSxLQUFLUSxZQUYwQixDQUd0Q1AsVUFBVSxDQUFFLEtBQUtRLGlCQUhxQixDQUFsQixDQUF4QixDQU1Bb0gsZUFBZSxDQUFDeEgsa0JBQWhCLENBQXFDLEtBQUtBLGtCQUExQyxDQUNBd0gsZUFBZSxDQUFDdkgsWUFBaEIsQ0FBK0IsS0FBS0EsWUFBcEMsQ0FDQXVILGVBQWUsQ0FBQ3RILGNBQWhCLENBQWlDLEtBQUtBLGNBQXRDLENBQ0EsTUFBT3NILENBQUFBLGVBQ1YsQyw0QkFHTEMsTUFBTSxDQUFDQyxPQUFQLENBQWVwSSxhQUFmLENBQStCQSxhQUEvQixDQUNBbUksTUFBTSxDQUFDQyxPQUFQLENBQWU1SSxlQUFmLENBQWlDQSxlQUFqQyxDQUNBMkksTUFBTSxDQUFDQyxPQUFQLENBQWUzSSxtQkFBZixDQUFxQ0EsbUJBQXJDLENBQ0EwSSxNQUFNLENBQUNDLE9BQVAsQ0FBZTFJLGtCQUFmLENBQW9DQSxrQkFBcEMsQ0FDQXlJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlekksWUFBZixDQUE4QkEsWUFBOUIsQ0FDQXdJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlckksV0FBZixDQUE2QmdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsQ0FBa0JqQyxXQUFsQixDQUE3QiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5jb25zdCB7IHZhbGlkYXRlVmMgfSA9IHJlcXVpcmUoJy4vdXRpbHMvdmMnKTtcbmNvbnN0IGRpZERvY3VtZW50U2NoZW1hID0gcmVxdWlyZSgnb3JnLmpzb24tc2NoZW1hLTAuMycpO1xuY29uc3QgZGlkRG9jdW1lbnRTY2hlbWEwNCA9IHJlcXVpcmUoJ29yZy5qc29uLXNjaGVtYS0wLjQnKTtcbmNvbnN0IHsgT3JnSWRDb250cmFjdCB9ID0gcmVxdWlyZSgnQHdpbmRpbmd0cmVlL29yZy5pZCcpO1xuY29uc3QgeyBMaWZEZXBvc2l0Q29udHJhY3QgfSA9IHJlcXVpcmUoJ0B3aW5kaW5ndHJlZS9vcmcuaWQtbGlmLWRlcG9zaXQnKTtcbmNvbnN0IEFqdiA9IHJlcXVpcmUoJ2FqdicpO1xuXG4vLyBVdGlsaXRpZXNcbmNvbnN0IGV4cGVjdCA9IHJlcXVpcmUoJy4vdXRpbHMvZXhwZWN0Jyk7XG5jb25zdCB7IG1ha2VIYXNoIH0gPSByZXF1aXJlKCcuL3V0aWxzL2RvY3VtZW50Jyk7XG5cbi8vIE1vZHVsZXNcbmNvbnN0IGh0dHBGZXRjaE1ldGhvZCA9IHJlcXVpcmUoJy4vaHR0cCcpO1xuY29uc3QgbGlua2VkSW5GZXRjaE1ldGhvZCA9IHJlcXVpcmUoJy4vbGlua2VkSW4nKTtcbmNvbnN0IHR3aXR0ZXJGZXRjaE1ldGhvZCA9IHJlcXVpcmUoJy4vdHdpdHRlcicpO1xuY29uc3Qgd2hvaXNTZXJ2aWNlID0gcmVxdWlyZSgnLi93aG9pcycpO1xuY29uc3QgeyBnZXREbnNEYXRhLCBSZXNvdXJjZVJlY29yZFR5cGVzIH0gPSByZXF1aXJlKCcuL2RucycpO1xuY29uc3QgeyB6ZXJvQWRkcmVzcyB9ID0gcmVxdWlyZSgnLi91dGlscy9jb25zdGFudHMnKTtcblxuLy8gRXJyb3JzIHR5cGVzIGRlZmluaXRpb25zXG5jb25zdCBjaGVja3NUeXBlcyA9IFtcbiAgICAnRElEX1NZTlRBWCcsXG4gICAgJ09SR0lEJyxcbiAgICAnRElEX0RPQ1VNRU5UJyxcbiAgICAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgJ0xJRl9TVEFLRSdcbl07XG5cbi8qKlxuICogT1JHLklEIHJlc29sdmVyIGNsYXNzXG4gKiBAY2xhc3MgT3JnSWRSZXNvbHZlclxuICovXG5jbGFzcyBPcmdJZFJlc29sdmVyIHtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgT3JnSWRSZXNvbHZlci5cbiAgICAgKiBAcGFyYW0ge09iZWpjdH0gb3B0aW9ucyBDb250cnVjdG9yIHBhcmFtZXRlcnNcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIChvcHRpb25zID0ge30pIHtcbiAgICAgICAgZXhwZWN0LmFsbChvcHRpb25zLCB7XG4gICAgICAgICAgICB3ZWIzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmdJZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdhZGRyZXNzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpZkRlcG9zaXQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm1ldGhvZE5hbWUgPSAnb3JnaWQnO1xuICAgICAgICB0aGlzLmZldGNoU29jaWFsTWV0aG9kcyA9IHt9O1xuICAgICAgICB0aGlzLmZldGNoTWV0aG9kcyA9IHt9O1xuICAgICAgICB0aGlzLnNlcnZpY2VNZXRob2RzID0ge307XG4gICAgICAgIHRoaXMud2ViMyA9IG9wdGlvbnMud2ViMztcbiAgICAgICAgdGhpcy5vcmdJZEFkZHJlc3MgPSBvcHRpb25zLm9yZ0lkO1xuICAgICAgICB0aGlzLmxpZkRlcG9zaXRBZGRyZXNzID0gb3B0aW9ucy5saWZEZXBvc2l0O1xuICAgICAgICB0aGlzLmF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMgPSBvcHRpb25zLmF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnM7XG5cbiAgICAgICAgdGhpcy52YWxpZGF0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc29sdXRpb25TdGFydCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVzdWx0VGVtcGxhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmNhY2hlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSBudWxsO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGRlZmF1bHRzXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKi9cbiAgICByZXNldCAoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdG9yID0gbmV3IEFqdigpO1xuICAgICAgICB0aGlzLnJlc29sdXRpb25TdGFydCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVzdWx0VGVtcGxhdGUgPSB7XG4gICAgICAgICAgICBkaWREb2N1bWVudDogbnVsbCxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGNoZWNrczogY2hlY2tzVHlwZXMubWFwKHR5cGUgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIHBhc3NlZDogWydUUlVTVF9BU1NFUlRJT05TJywgJ0xJRl9TVEFLRSddLmluY2x1ZGVzKHR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB0cnVzdDogW10sXG4gICAgICAgICAgICAuLi4oXG4gICAgICAgICAgICAgICAgdGhpcy5saWZEZXBvc2l0QWRkcmVzc1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZkRlcG9zaXQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVzb2x2ZXJNZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIHJldHJpZXZlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNhY2hlID0ge307XG4gICAgICAgIHRoaXMucmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXN1bHRUZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2cyBESUQgaW50byBpdHMgZG9jdW1lbnRcbiAgICAgKiBhbmQgbWFrZXMgcHJvcGVyIHZhbGlkYXRpb25zIGFuZCB2ZXJpZmljYXRpb25zXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGlkIERJRFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHtPYmplY3R9Pn0gUmVzb2x2aW5nIHJlc3VsdFxuICAgICAqL1xuICAgIGFzeW5jIHJlc29sdmUgKGRpZCkge1xuICAgICAgICBleHBlY3QuYWxsKHsgZGlkIH0sIHtcbiAgICAgICAgICAgIGRpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5yZXNvbHV0aW9uU3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlRGlkU3ludGF4KGRpZCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldE9yZ2FuaXphdGlvbih0aGlzLnJlc3VsdC5pZCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldERpZERvY3VtZW50KHRoaXMucmVzdWx0Lm9yZ2FuaXphdGlvbik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlRGlkRG9jdW1lbnQodGhpcy5yZXN1bHQuZGlkRG9jdW1lbnQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnlUcnVzdFJlY29yZHModGhpcy5yZXN1bHQuZGlkRG9jdW1lbnQpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnlMaWZTdGFrZSh0aGlzLnJlc3VsdC5pZCk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBSZXNvbHZpbmcgZmxvdyBoYXMgYmVlbiB0ZXJtaW5hdGVkIGR1ZSB0byBzZXJpb3VzIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9OyAke2Vycm9yLnN0YWNrfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc3VsdC5yZXNvbHZlck1ldGFkYXRhLnZlcnNpb24gPSBwYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgICAgICB0aGlzLnJlc3VsdC5yZXNvbHZlck1ldGFkYXRhLnJldHJpZXZlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5yZXN1bHQucmVzb2x2ZXJNZXRhZGF0YS5kdXJhdGlvbiA9XG4gICAgICAgICAgICBEYXRlLm5vdygpIC0gdGhpcy5yZXNvbHV0aW9uU3RhcnQ7XG4gICAgICAgIHRoaXMucmVzdWx0LnJlc29sdmVyTWV0YWRhdGEub3JnSWRBZGRyZXNzID0gdGhpcy5vcmdJZEFkZHJlc3M7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIERJRCBzeW50YXhcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaWQgRElEXG4gICAgICogQHJldHVybnMge1Byb21pc2U8e3N0cmluZ30+fSBPcmdhbml6YXRpb24gSWRcbiAgICAgKi9cbiAgICBhc3luYyB2YWxpZGF0ZURpZFN5bnRheCAoZGlkKSB7XG4gICAgICAgIGV4cGVjdC5hbGwoeyBkaWQgfSwge1xuICAgICAgICAgICAgZGlkOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBkaWQuc3BsaXQoJzonKTtcblxuICAgICAgICBpZiAocGFydHNbMF0gIT09ICdkaWQnKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdESURfU1lOVEFYJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEludmFsaWQgRElEIHByZWZpeDogJHtwYXJ0c1swXX1gLFxuICAgICAgICAgICAgICAgIHRocm93OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0c1sxXSAhPT0gdGhpcy5tZXRob2ROYW1lKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdESURfU1lOVEFYJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogYFVuc3VwcG9ydGVkIERJRCBtZXRob2Q6ICR7cGFydHNbMV19YCxcbiAgICAgICAgICAgICAgICB0aHJvdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTcGxpdCBwYXRocywgbWV0aG9kIHBhcmFtZXRlcnMgYW5kIHF1ZXJpZXNcbiAgICAgICAgY29uc3Qgc3ViUGFydHMgPSBwYXJ0c1syXS5zcGxpdCgvKD86I3w7fFxcPykvKTtcblxuICAgICAgICBpZiAoIW5ldyBSZWdFeHAoJ14weFthLWZBLUYwLTldezY0fSQnKS50ZXN0KHN1YlBhcnRzWzBdKSkge1xuXG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRElEX1NZTlRBWCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGBJbnZhbGlkIG1ldGhvZCBzcGVjaWZpYyBJZDogJHtzdWJQYXJ0c1swXX1gLFxuICAgICAgICAgICAgICAgIHRocm93OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzdWx0LmlkID0gc3ViUGFydHNbMF07XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgdGhlIGdpdmVuIERJRCBkb2N1bWVudFxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRpZERvY3VtZW50IERJRCBkb2N1bWVudFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHtib29sZWFufT59IFZhbGlkYXRpb24gcmVzdWx0XG4gICAgICovXG4gICAgYXN5bmMgdmFsaWRhdGVEaWREb2N1bWVudCAoZGlkRG9jdW1lbnQpIHtcbiAgICAgICAgZXhwZWN0LmFsbCh7IGRpZERvY3VtZW50IH0sIHtcbiAgICAgICAgICAgIGRpZERvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NoZW1hID0gZGlkRG9jdW1lbnQuc2NoZW1hVmVyc2lvbiAmJiBkaWREb2N1bWVudC5zY2hlbWFWZXJzaW9uLm1hdGNoKC9eMC40LylcbiAgICAgICAgICAgID8gZGlkRG9jdW1lbnRTY2hlbWEwNFxuICAgICAgICAgICAgOiBkaWREb2N1bWVudFNjaGVtYTtcblxuICAgICAgICAvLyBVc2UgdGhlIEFqdiB2YWxpZGF0b3JcbiAgICAgICAgLy8gZGlkRG9jdW1lbnRTY2hlbWEgaXMgb2J0YWluZWQgZnJvbSBAd2luZGluZ3RyZWUvb3JnLmpzb24tc2NoZW1hXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlKHNjaGVtYSwgZGlkRG9jdW1lbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRvci5lcnJvcnMgIT09IG51bGwpIHtcblxuICAgICAgICAgICAgdGhpcy52YWxpZGF0b3IuZXJyb3JzLm1hcChkZXRhaWwgPT4gdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9ET0NVTUVOVCcsXG4gICAgICAgICAgICAgICAgd2FybmluZzogZGV0YWlsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWVzIHRydXN0IG9iamVjdHMgZnJvbSB0aGUgRElEIGRvY3VtZW50XG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGlkRG9jdW1lbnQgRElEIGRvY3VtZW50XG4gICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICovXG4gICAgYXN5bmMgdmVyaWZ5VHJ1c3RSZWNvcmRzIChkaWREb2N1bWVudCkge1xuXG4gICAgICAgIGlmICghZGlkRG9jdW1lbnQudHJ1c3QgfHwgIUFycmF5LmlzQXJyYXkoZGlkRG9jdW1lbnQudHJ1c3QuYXNzZXJ0aW9ucykpIHtcbiAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gdmVyaWZ5XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbG9uZWQgdHJ1c3Qgc2VjdGlvblxuICAgICAgICBjb25zdCB0cnVzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGlkRG9jdW1lbnQudHJ1c3QpKTtcblxuICAgICAgICAvLyBPcmdhbml6YXRpb24gSWQgcGFydCBvZiB0aGUgRElEXG4gICAgICAgIGNvbnN0IGlkID0gZGlkRG9jdW1lbnQuaWQubWF0Y2goL15kaWQ6b3JnaWQ6KDB4W2EtZkEtRjAtOV17NjR9KXsxfSQvaW0pWzFdO1xuXG4gICAgICAgIC8vIFByb29mcyBleGlzdGVuY2UgZmxhZ1xuICAgICAgICBsZXQgaXNQcm9vZnNGb3VuZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEFzc2VydGlvbnMgdmVyaWZpY2F0aW9uXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJ1c3QuYXNzZXJ0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGFzc2VydGlvbiA9IHRydXN0LmFzc2VydGlvbnNbaV07XG4gICAgICAgICAgICBsZXQgYXNzZXJ0aW9uQ29udGVudDtcbiAgICAgICAgICAgIGxldCBwcm9vZkZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIFdIT0lTIGluZm9ybWF0aW9uIGFib3V0IGRvbWFpblxuICAgICAgICAgICAgbGV0IHdob2lzSW5mbztcblxuICAgICAgICAgICAgc3dpdGNoIChhc3NlcnRpb24udHlwZSkge1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yIHByb29mIHJlY29yZHMgdGhhdCBwbGFjZWQgaW50byBETlMgdGV4dHVhbCByZWNvcmRzXG4gICAgICAgICAgICAgICAgLy8gSElORk8sU1BGLFRYVCByZWNvcmRzIHR5cGVzIGFyZSBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICBjYXNlICdkbnMnOlxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghUmVzb3VyY2VSZWNvcmRUeXBlc1thc3NlcnRpb24ucHJvb2ZdKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IHByb29mIHZhbHVlIFwiJHthc3NlcnRpb24ucHJvb2Z9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGluIHRoZSByYW5nZSBvZiBbJHtPYmplY3Qua2V5cyhSZXNvdXJjZVJlY29yZFR5cGVzKS5qb2luKCcsJyl9XWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uQ29udGVudCA9IGF3YWl0IGdldERuc0RhdGEoYXNzZXJ0aW9uLmNsYWltLCBhc3NlcnRpb24ucHJvb2YpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzZXJ0aW9uQ29udGVudC5sZW5ndGggPT09IDApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogY2xhaW0gc291cmNlIGlzIGVtcHR5YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBhc3NlcnRpb25Db250ZW50KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVnRXhwKGRpZERvY3VtZW50LmlkLCAnZycpLnRlc3QocmVjb3JkLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb29mRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvb2ZGb3VuZCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiBwcm9vZiBub3QgZm91bmRgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdUUlVTVF9BU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IGNhbm5vdCBnZXQgdGhlIHByb29mYFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHVzZWQgZm9yIGhhbmRsZSBwcm9vZnMgdGhhdCByZWxhdGVkIHRvXG4gICAgICAgICAgICAgICAgLy8gd2ViIHNpdGVzIGFuZCBzb2NpYWwgYWNjb3VudHNcbiAgICAgICAgICAgICAgICBjYXNlICdzb2NpYWwnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RvbWFpbic6XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZldGNoIFdIT0lTIGluZm9ybWF0aW9uIGZvciBkb21haW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NlcnRpb24udHlwZSA9PT0gJ2RvbWFpbicgJiYgdGhpcy5zZXJ2aWNlTWV0aG9kcy53aG9pcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3REb21haW4gPSBhc3NlcnRpb24uY2xhaW0ubWF0Y2goL1teLl0rXFwuW14uXSskLylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvaXNJbmZvID0gYXdhaXQgdGhpcy5zZXJ2aWNlTWV0aG9kcy53aG9pcy5mZXRjaChyb290RG9tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9vZkZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiB1bmFibGUgdG8gZmV0Y2ggd2hvaXMgaW5mb3JtYXRpb25gXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGFuIG9iamVjdCBwcm92aWRlZCBhcyBWQyBwcm9vZiB0aGVuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdmFsaWRhdGUgdGhpcyBwcm9vZiBhcyBhIFZlcmlmaWFibGUgY3JlZGVudGlhbFxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNzZXJ0aW9uLnByb29mLm1hdGNoKC9eZGlkLm9yZ2lkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdmFsaWRhdGVWYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uLnByb29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb24uY2xhaW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvb2ZGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnIyMjJywgZXJyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogVkMgRElEIG5vdCBwYXNzIHZlcmlmaWNhdGlvbmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgYXNzZXJ0aW9uLnByb29mIHJlY29yZCBhcyBVUkwgdG8gdGhlIHByb29mXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBpbiB0aGUgYXNzZXJ0aW9uLmNsYWltIG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFSZWdFeHAoYF4oaHR0cHxodHRwcyk6Ly8od3d3Lil7MCwxfSR7YXNzZXJ0aW9uLmNsYWltLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGVzdChhc3NlcnRpb24ucHJvb2YpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYHRydXN0LmFzc2VydGlvbnNbJHtpfV06IGNsYWltIGlzIG5vdCBpbiB0aGUgZG9tYWluIG5hbWVzcGFjZWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggZmlsZSB3aXRoIHByb29mIGJ5IFVSSVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRpb25Db250ZW50ID0gYXdhaXQgdGhpcy5mZXRjaEZpbGVCeVVyaShhc3NlcnRpb24ucHJvb2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbkNvbnRlbnQgPSB0eXBlb2YgYXNzZXJ0aW9uQ29udGVudCA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShhc3NlcnRpb25Db250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2VydGlvbkNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogY2Fubm90IGdldCB0aGUgcHJvb2ZgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgZGlkIGluc2lkZSB0aGUgZmlsZSBvYnRhaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFSZWdFeHAoaWQsICdpbScpLnRlc3QoYXNzZXJ0aW9uQ29udGVudCkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVFJVU1RfQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBgdHJ1c3QuYXNzZXJ0aW9uc1ske2l9XTogRElEIG5vdCBmb3VuZCBpbiB0aGUgY2xhaW1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb29mRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBjYXNlcyB3aGVyZSB1bmtub3duIGFzc2VydGlvbiB0eXBlIGhhcyBiZWVuIHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGB0cnVzdC5hc3NlcnRpb25zWyR7aX1dOiB1bmtub3duIGFzc2VydGlvbiB0eXBlIFwiJHthc3NlcnRpb24udHlwZX1cImBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzc2VydGlvbi52ZXJpZmllZCA9IHByb29mRm91bmQ7XG4gICAgICAgICAgICBhc3NlcnRpb24gPSB7XG4gICAgICAgICAgICAgICAgLi4uYXNzZXJ0aW9uLFxuICAgICAgICAgICAgICAgIC4uLihcbiAgICAgICAgICAgICAgICAgICAgd2hvaXNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aG9pczogd2hvaXNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRydXN0LmFzc2VydGlvbnNbaV0gPSBhc3NlcnRpb247XG5cbiAgICAgICAgICAgIGlmIChwcm9vZkZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaXNQcm9vZnNGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQcm9vZnNGb3VuZCkge1xuICAgICAgICAgICAgLy8gSnVzdCBtYXJrIGFzIHBhc3NlZFxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1RSVVNUX0FTU0VSVElPTlMnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzdWx0LnRydXN0ID0gdHJ1c3Q7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC50cnVzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG9yZ2FuaXphdGlvbiBkYXRhXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIG9yZ2FuaXphdGlvbiBJZFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGFzeW5jIHZlcmlmeUxpZlN0YWtlIChpZCkge1xuICAgICAgICBpZiAoIXRoaXMubGlmRGVwb3NpdEFkZHJlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdC5hbGwoeyBpZCB9LCB7XG4gICAgICAgICAgICBpZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBkZXBvc2l0ID0gMDtcbiAgICAgICAgbGV0IHdpdGhkcmF3YWxSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgbGlmRGVwb3NpdENvbnRyYWN0ID0gbmV3IHRoaXMud2ViMy5ldGguQ29udHJhY3QoXG4gICAgICAgICAgICBMaWZEZXBvc2l0Q29udHJhY3QuYWJpLFxuICAgICAgICAgICAgdGhpcy5saWZEZXBvc2l0QWRkcmVzc1xuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZXBvc2l0ID0gYXdhaXQgbGlmRGVwb3NpdENvbnRyYWN0XG4gICAgICAgICAgICAgICAgLm1ldGhvZHNbJ2JhbGFuY2VPZihieXRlczMyKSddKGlkKS5jYWxsKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RTb3VyY2UgPSBhd2FpdCBsaWZEZXBvc2l0Q29udHJhY3RcbiAgICAgICAgICAgICAgICAubWV0aG9kc1snZ2V0V2l0aGRyYXdhbFJlcXVlc3QoYnl0ZXMzMiknXShpZCkuY2FsbCgpO1xuXG4gICAgICAgICAgICBpZiAocmVxdWVzdFNvdXJjZS5leGlzdHMpIHtcblxuICAgICAgICAgICAgICAgIHdpdGhkcmF3YWxSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVxdWVzdFNvdXJjZS52YWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd1RpbWU6IHJlcXVlc3RTb3VyY2Uud2l0aGRyYXdUaW1lLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlc3VsdC5saWZEZXBvc2l0ID0ge1xuICAgICAgICAgICAgICAgIGRlcG9zaXQsXG4gICAgICAgICAgICAgICAgd2l0aGRyYXdhbFJlcXVlc3RcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChkZXBvc2l0ICE9PSAnMCcgJiYgIXdpdGhkcmF3YWxSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSnVzdCBtYXJrIGFzIHBhc3NlZFxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTElGX1NUQUtFJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZXBvc2l0ICE9PSAnMCcgJiYgd2l0aGRyYXdhbFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENoZWNrUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xJRl9TVEFLRScsXG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmc6ICdUaGUgb3JnYW5pemF0aW9uIHNlbnQgYSB3aXRoZHJhd2FsIHJlcXVlc3QnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdMSUZfU1RBS0UnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoIGEgZmlsZSBieSB0aGUgZ2l2ZW4gVVJJXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJpIFRoZSBmaWxlIFVSSVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHtPYmplY3R8c3RyaW5nfT59IEZldGNoZWQgZmlsZVxuICAgICAqL1xuICAgIGFzeW5jIGZldGNoRmlsZUJ5VXJpICh1cmkpIHtcbiAgICAgICAgZXhwZWN0LmFsbCh7IHVyaSB9LCB7XG4gICAgICAgICAgICB1cmk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodXJpID09PSAnJykge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ZldGNoZXIgZXJyb3I6IGVtcHR5IFVSSSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmV0Y2g7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmV0Y2hNZXRob2RzKS5sZW5ndGggPT09IDApIHtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb246IGF0IGxlYXN0IG9uZSBmZXRjaGluZyBtZXRob2Qgc2hvdWxkIGJlIHJlZ2lzdGVyZWQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGNob29zZSBhIHNvY2lhbCBmZXRjaCBtZXRob2RzXG4gICAgICAgIGZvciAoY29uc3QgZiBpbiB0aGlzLmZldGNoU29jaWFsTWV0aG9kcykge1xuXG4gICAgICAgICAgICBpZiAoUmVnRXhwKHRoaXMuZmV0Y2hTb2NpYWxNZXRob2RzW2ZdLnBhdHRlcm4pLnRlc3QodXJpKSkge1xuICAgICAgICAgICAgICAgIGZldGNoID0gdGhpcy5mZXRjaFNvY2lhbE1ldGhvZHNbZl0uZmV0Y2g7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZldGNoKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gY2hvb3NlIGFub3RoZXIgZmV0Y2hpbmcgbWV0aG9kXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgaW4gdGhpcy5mZXRjaE1ldGhvZHMpIHtcblxuICAgICAgICAgICAgICAgIGlmIChSZWdFeHAodGhpcy5mZXRjaE1ldGhvZHNbZl0ucGF0dGVybikudGVzdCh1cmkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoID0gdGhpcy5mZXRjaE1ldGhvZHNbZl0uZmV0Y2g7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmV0Y2gpIHtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBGZXRjaGVyIGVycm9yOiB1bmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBmZXRjaGluZyBtZXRob2QgZm9yIFVSSTogJHt1cml9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyeWluZyB0byBmZXRjaCB0aGUgZmlsZVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGF3YWl0IGZldGNoKHVyaSk7XG5cbiAgICAgICAgaWYgKCFkb2N1bWVudCkge1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYEZldGNoZXIgZXJyb3I6IGZpbGUgbm90IGZvdW5kIGJ5IHRoZSBnaXZlbiBVUkk6ICR7dXJpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIGRvY3VtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoIGEgRElEIGRvY3VtZW50IGJ5IHRoZSBnaXZlbiBJZFxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9yZ2FuaXphdGlvbiBUaGUgb3JnYW5pemF0aW9uIG9iamVjdFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHtPYmplY3R9Pn0gRElEIGRvY3VtZW50XG4gICAgICovXG4gICAgYXN5bmMgZ2V0RGlkRG9jdW1lbnQgKG9yZ2FuaXphdGlvbiA9IHt9KSB7XG4gICAgICAgIGV4cGVjdC5hbGwob3JnYW5pemF0aW9uLCB7XG4gICAgICAgICAgICBvcmdJZDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdoYXNoJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZ0pzb25Vcmk6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAxOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JnSnNvblVyaUJhY2t1cDI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb3JnSWQsXG4gICAgICAgICAgICBvcmdKc29uSGFzaCxcbiAgICAgICAgICAgIG9yZ0pzb25VcmksXG4gICAgICAgICAgICBvcmdKc29uVXJpQmFja3VwMSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAyXG4gICAgICAgIH0gPSBvcmdhbml6YXRpb247XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBmaXJzdCBzZXR0bGVkIHByb21pc2VcbiAgICAgICAgY29uc3QgZmlyc3RTZXR0bGVkID0gYXN5bmMgZmV0Y2hlcyA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZldGNoUHJvbWlzZSBvZiBmZXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hQcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBmZXRjaCBESUQgRG9jdW1lbnQgZnJvbSBnaXZlbiBzb3VyY2VzLlxuICAgICAgICAgICAgICAgICAgICAke2Vycm9ycy5sZW5ndGggPyBlcnJvcnMuam9pbignOyAnKSA6ICcnfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGRpZERvY3VtZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkaWREb2N1bWVudCA9IGF3YWl0IGZpcnN0U2V0dGxlZChcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG9yZ0pzb25VcmksXG4gICAgICAgICAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAxLFxuICAgICAgICAgICAgICAgICAgICBvcmdKc29uVXJpQmFja3VwMlxuICAgICAgICAgICAgICAgIF0ubWFwKFxuICAgICAgICAgICAgICAgICAgICB1cmkgPT4gKCkgPT4gdGhpcy5mZXRjaEZpbGVCeVVyaSh1cmkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9ET0NVTUVOVCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgdGhyb3c6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpZE9iamVjdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGlkT2JqZWN0ID0gSlNPTi5wYXJzZShkaWREb2N1bWVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdESURfRE9DVU1FTlQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnQnJva2VuIE9SRy5KU09OLiBVbmFibGUgdG8gcGFyc2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbXBhcmluZyBvZiB0aGUgc3RvcmVkIGFuZCBhY3R1YWwgaGFzaFxuICAgICAgICBpZiAobWFrZUhhc2goZGlkRG9jdW1lbnQsIHRoaXMud2ViMykgIT09IG9yZ0pzb25IYXNoKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdESURfRE9DVU1FTlQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnSW52YWxpZCBESUQgRG9jdW1lbnQgaGFzaCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRElEIGRvY3VtZW50IHNob3VsZCBjb250YWluaW5nIGEgcHJvcGVyIERJRFxuICAgICAgICBpZiAoYGRpZDoke3RoaXMubWV0aG9kTmFtZX06JHtvcmdJZH1gICE9PSBkaWRPYmplY3QuaWQpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0RJRF9ET0NVTUVOVCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGBJbnZhbGlkIERJRCBEb2N1bWVudCBpZC4gRXhwZWN0ZWQgdG8gYmU6ICR7b3JnSWR9LFxuICAgICAgICAgICAgICAgICAgICBidXQgYWN0dWFsIGlzOiAke2RpZE9iamVjdC5pZH1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzdWx0LmRpZERvY3VtZW50ID0gZGlkT2JqZWN0O1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQuZGlkRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBmZXRjaGluZyBtZXRob2QgZm9yIHNvY2lhbCBhY2NvdW50c1xuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZENvbmZpZyBUaGUgZmV0Y2hpbmcgbWV0aG9kIGNvbmZpZ3VyYXRpb24gY29uZmlnXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZE9wdGlvbnMgVGhlIGZldGNoaW5nIG1ldGhvZCBvcHRpb25zIChBUEkga2V5LCBldGMpXG4gICAgICovXG4gICAgcmVnaXN0ZXJTb2NpYWxGZXRjaE1ldGhvZCAobWV0aG9kQ29uZmlnID0ge30sIG1ldGhvZE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBleHBlY3QuYWxsKG1ldGhvZENvbmZpZywge1xuICAgICAgICAgICAgbmFtZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmV0Y2hTb2NpYWxNZXRob2RzW21ldGhvZENvbmZpZy5uYW1lXSA9IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZENvbmZpZyxcbiAgICAgICAgICAgIGZldGNoOiBhc3luYyB1cmkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBtZXRob2RPcHRpb25zO1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBtZXRob2RDb25maWcuZmV0Y2godXJpLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhIGZldGNoaW5nIG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZENvbmZpZyBUaGUgZmV0Y2hpbmcgbWV0aG9kIGNvbmZpZ3VyYXRpb24gY29uZmlnXG4gICAgICovXG4gICAgcmVnaXN0ZXJGZXRjaE1ldGhvZCAobWV0aG9kQ29uZmlnID0ge30pIHtcbiAgICAgICAgZXhwZWN0LmFsbChtZXRob2RDb25maWcsIHtcbiAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdHRlcm46IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZldGNoOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZldGNoTWV0aG9kc1ttZXRob2RDb25maWcubmFtZV0gPSBtZXRob2RDb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYSBzZXJ2aWNlIG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1ldGhvZENvbmZpZyBUaGUgc2VydmljZSBtZXRob2QgY29uZmlndXJhdGlvbiBjb25maWdcbiAgICAgKi9cbiAgICByZWdpc3RlclNlcnZpY2UgKG1ldGhvZENvbmZpZyA9IHt9KSB7XG4gICAgICAgIGV4cGVjdC5hbGwobWV0aG9kQ29uZmlnLCB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmZXRjaDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdmdW5jdGlvbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlTWV0aG9kc1ttZXRob2RDb25maWcubmFtZV0gPSBtZXRob2RDb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBPcmdJZCBjb250cmFjdCBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIE9yZ0lkIGNvbnRyYWN0IGluc3RhbmNlXG4gICAgICovXG4gICAgZ2V0T3JnSWRDb250cmFjdCAoKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FjaGUub3JnSWRDb250cmFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUub3JnSWRDb250cmFjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FjaGUub3JnSWRDb250cmFjdCA9IG5ldyB0aGlzLndlYjMuZXRoLkNvbnRyYWN0KFxuICAgICAgICAgICAgT3JnSWRDb250cmFjdC5hYmksXG4gICAgICAgICAgICB0aGlzLm9yZ0lkQWRkcmVzc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZS5vcmdJZENvbnRyYWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3JnYW5pemF0aW9uIGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgT3JnSWRSZXNvbHZlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgb3JnYW5pemF0aW9uIElkXG4gICAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gVGhlIE9yZ0lkIGNvbnRyYWN0IGluc3RhbmNlXG4gICAgICovXG4gICAgYXN5bmMgZ2V0T3JnYW5pemF0aW9uIChpZCkge1xuICAgICAgICBleHBlY3QuYWxsKHsgaWQgfSwge1xuICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZS5vcmdhbml6YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlLm9yZ2FuaXphdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZ0lkQ29udHJhY3QgPSB0aGlzLmdldE9yZ0lkQ29udHJhY3QoKTtcbiAgICAgICAgY29uc3Qgb3JnID0gYXdhaXQgb3JnSWRDb250cmFjdFxuICAgICAgICAgICAgLm1ldGhvZHNbJ2dldE9yZ2FuaXphdGlvbihieXRlczMyKSddKGlkKS5jYWxsKCk7XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZXhpc3RzLFxuICAgICAgICAgICAgb3JnSWQsXG4gICAgICAgICAgICBvcmdKc29uSGFzaCxcbiAgICAgICAgICAgIG9yZ0pzb25VcmksXG4gICAgICAgICAgICBvcmdKc29uVXJpQmFja3VwMSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAyLFxuICAgICAgICAgICAgcGFyZW50T3JnSWQsXG4gICAgICAgICAgICBvd25lcixcbiAgICAgICAgICAgIGRpcmVjdG9yLFxuICAgICAgICAgICAgaXNBY3RpdmUsXG4gICAgICAgICAgICBpc0RpcmVjdG9yc2hpcEFjY2VwdGVkXG4gICAgICAgIH0gPSBvcmc7XG5cbiAgICAgICAgaWYgKCFleGlzdHMpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ09SR0lEJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogYE9yZ2FuaXphdGlvbiAke2lkfSBub3QgZm91bmRgLFxuICAgICAgICAgICAgICAgIHRocm93OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcblxuICAgICAgICAgICAgdGhpcy5hZGRDaGVja1Jlc3VsdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ09SR0lEJyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nOiBgT3JnYW5pemF0aW9uICR7aWR9IGlzIGRpc2FibGVkYFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyZWN0b3IgIT09IHplcm9BZGRyZXNzICYmICFpc0RpcmVjdG9yc2hpcEFjY2VwdGVkKSB7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ2hlY2tSZXN1bHQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdPUkdJRCcsXG4gICAgICAgICAgICAgICAgd2FybmluZzogYERpcmVjdG9yc2hpcCBvZiB0aGUgb3JnYW5pemF0aW9uICR7aWR9IGlzIG5vdCBhY2NlcHRlZGBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSBub3JtYWxpc2VkIG9yaWdhbml6YXRpb24gb2JqZWN0XG4gICAgICAgIHRoaXMuY2FjaGUub3JnYW5pemF0aW9uID0ge1xuICAgICAgICAgICAgb3JnSWQsXG4gICAgICAgICAgICBvcmdKc29uSGFzaCxcbiAgICAgICAgICAgIG9yZ0pzb25VcmksXG4gICAgICAgICAgICBvcmdKc29uVXJpQmFja3VwMSxcbiAgICAgICAgICAgIG9yZ0pzb25VcmlCYWNrdXAyLFxuICAgICAgICAgICAgcGFyZW50T3JnSWQsXG4gICAgICAgICAgICBvd25lcixcbiAgICAgICAgICAgIGRpcmVjdG9yLFxuICAgICAgICAgICAgaXNBY3RpdmUsXG4gICAgICAgICAgICBpc0RpcmVjdG9yc2hpcEFjY2VwdGVkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZXN1bHQub3JnYW5pemF0aW9uID0gdGhpcy5jYWNoZS5vcmdhbml6YXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5vcmdhbml6YXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZmV0Y2hpbmcgbWV0aG9kcyBuYW1lc1xuICAgICAqIEBtZW1iZXJvZiBPcmdJZFJlc29sdmVyXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBSZWdpc3RlcmVkIGZldGNoaW5nIG5ldGhvZHMgbmFtZXNcbiAgICAgKi9cbiAgICBnZXRGZXRjaE1ldGhvZHMgKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mZXRjaE1ldGhvZHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBzcGVjaWZpYyBjaGVjayByZXN1bHRcbiAgICAgKiBhbmQgdGhyb3dzIGEgZXJyb3IgaWYgdGhpcyBiZWhhdmlvdXIgaXMgc2V0IGluIHRoZSBvcHRpb25zXG4gICAgICogQG1lbWJlcm9mIE9yZ0lkUmVzb2x2ZXJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IFJlZ2lzdGVyZWQgZmV0Y2hpbmcgbmV0aG9kcyBuYW1lc1xuICAgICAqL1xuICAgIGFkZENoZWNrUmVzdWx0IChvcHRpb25zKSB7XG4gICAgICAgIGV4cGVjdC5hbGwob3B0aW9ucywge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdlbnVtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGNoZWNrc1R5cGVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3YXJuaW5nOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhyb3c6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZXJyb3IsIHdhcm5pbmcgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgLy8gRXh0cmFjdCBzcGVjaWZpYyBjaGVja1xuICAgICAgICB0aGlzLnJlc3VsdC5jaGVja3MgPSB0aGlzLnJlc3VsdC5jaGVja3MubWFwKFxuICAgICAgICAgICAgY2hlY2sgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGVjay50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY2hlY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oY2hlY2suZXJyb3JzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5bZXJyb3JdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oY2hlY2sud2FybmluZyB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uW3dhcm5pbmddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrLnBhc3NlZCA9ICFjaGVjay5lcnJvcnMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGVjay5lcnJvcnMgJiYgY2hlY2suZXJyb3JzLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnRocm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYCR7dHlwZX06ICR7ZXJyb3J9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNwYXduUmVzb2x2ZXIgKCkge1xuICAgICAgICBjb25zdCBzcGF3bmVkUmVzb2x2ZXIgPSBuZXcgT3JnSWRSZXNvbHZlcih7XG4gICAgICAgICAgICB3ZWIzOiB0aGlzLndlYjMsXG4gICAgICAgICAgICBvcmdJZDogdGhpcy5vcmdJZEFkZHJlc3MsXG4gICAgICAgICAgICBsaWZEZXBvc2l0OiB0aGlzLmxpZkRlcG9zaXRBZGRyZXNzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNwYXduZWRSZXNvbHZlci5mZXRjaFNvY2lhbE1ldGhvZHMgPSB0aGlzLmZldGNoU29jaWFsTWV0aG9kcztcbiAgICAgICAgc3Bhd25lZFJlc29sdmVyLmZldGNoTWV0aG9kcyA9IHRoaXMuZmV0Y2hNZXRob2RzO1xuICAgICAgICBzcGF3bmVkUmVzb2x2ZXIuc2VydmljZU1ldGhvZHMgPSB0aGlzLnNlcnZpY2VNZXRob2RzO1xuICAgICAgICByZXR1cm4gc3Bhd25lZFJlc29sdmVyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuT3JnSWRSZXNvbHZlciA9IE9yZ0lkUmVzb2x2ZXI7XG5tb2R1bGUuZXhwb3J0cy5odHRwRmV0Y2hNZXRob2QgPSBodHRwRmV0Y2hNZXRob2Q7XG5tb2R1bGUuZXhwb3J0cy5saW5rZWRJbkZldGNoTWV0aG9kID0gbGlua2VkSW5GZXRjaE1ldGhvZDtcbm1vZHVsZS5leHBvcnRzLnR3aXR0ZXJGZXRjaE1ldGhvZCA9IHR3aXR0ZXJGZXRjaE1ldGhvZDtcbm1vZHVsZS5leHBvcnRzLndob2lzU2VydmljZSA9IHdob2lzU2VydmljZTtcbm1vZHVsZS5leHBvcnRzLmNoZWNrc1R5cGVzID0gT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tzVHlwZXMpO1xuIl19
|
package/dist/linkedIn.js
DELETED
@@ -1,5 +0,0 @@
|
|
1
|
-
"use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var axios=require("axios");// Configuration of the HTTP fetching method
|
2
|
-
module.exports={name:"linkedin",pattern:"linkedin",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(uri,options){var activityId,source,timeout,response;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:activityId=uri.split(":activity:")[1];source=axios.CancelToken.source();timeout=setTimeout(function(){return source.cancel("Cannot connect to the source: ".concat(uri))},7000);// connection timeout
|
3
|
-
_context.next=5;return axios({method:"get",url:"https://api.linkedin.com/v2/activities?ids=List(".concat(activityId,")"),headers:{"Authorization":"Bearer ".concat(options.key),"cache-control":"no-cache","X-Restli-Protocol-Version":"2.0.0"},transformResponse:[function(data){return data}],// Do not convert JSON to object
|
4
|
-
cancelToken:source.token});case 5:response=_context.sent;clearTimeout(timeout);console.log("@@@@@@@@@@@@@@@@@@@@@",response);return _context.abrupt("return",response.data);case 9:case"end":return _context.stop();}}},_callee)}));function fetch(_x,_x2){return _fetch.apply(this,arguments)}return fetch}()};
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saW5rZWRJbi5qcyJdLCJuYW1lcyI6WyJheGlvcyIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsInBhdHRlcm4iLCJmZXRjaCIsInVyaSIsIm9wdGlvbnMiLCJhY3Rpdml0eUlkIiwic3BsaXQiLCJzb3VyY2UiLCJDYW5jZWxUb2tlbiIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2FuY2VsIiwibWV0aG9kIiwidXJsIiwiaGVhZGVycyIsImtleSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiZGF0YSIsImNhbmNlbFRva2VuIiwidG9rZW4iLCJyZXNwb25zZSIsImNsZWFyVGltZW91dCIsImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJ1eUJBQUEsR0FBTUEsQ0FBQUEsS0FBSyxDQUFHQyxPQUFPLENBQUMsT0FBRCxDQUFyQixDQUVBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsVUFETyxDQUViQyxPQUFPLENBQUUsVUFGSSxDQUdiQyxLQUFLLDhFQUFFLGlCQUFPQyxHQUFQLENBQVlDLE9BQVosd0pBQ0dDLFVBREgsQ0FDZ0JGLEdBQUcsQ0FBQ0csS0FBSixDQUFVLFlBQVYsRUFBd0IsQ0FBeEIsQ0FEaEIsQ0FFR0MsTUFGSCxDQUVZWCxLQUFLLENBQUNZLFdBQU4sQ0FBa0JELE1BQWxCLEVBRlosQ0FHR0UsT0FISCxDQUdhQyxVQUFVLENBQUMsaUJBQU1ILENBQUFBLE1BQU0sQ0FBQ0ksTUFBUCx5Q0FDSVIsR0FESixFQUFOLENBQUQsQ0FFdkIsSUFGdUIsQ0FIdkIsQ0FLTTtBQUxOLHNCQU1vQlAsQ0FBQUEsS0FBSyxDQUN4QixDQUNJZ0IsTUFBTSxDQUFFLEtBRFosQ0FFSUMsR0FBRywyREFBcURSLFVBQXJELEtBRlAsQ0FHSVMsT0FBTyxDQUFFLENBQ0wsaUNBQTJCVixPQUFPLENBQUNXLEdBQW5DLENBREssQ0FFTCxnQkFBaUIsVUFGWixDQUdMLDRCQUE2QixPQUh4QixDQUhiLENBUUlDLGlCQUFpQixDQUFFLENBQUMsU0FBQUMsSUFBSSxRQUFJQSxDQUFBQSxJQUFKLENBQUwsQ0FSdkIsQ0FRdUM7QUFDbkNDLFdBQVcsQ0FBRVgsTUFBTSxDQUFDWSxLQVR4QixDQUR3QixDQU56QixRQU1HQyxRQU5ILGVBbUJIQyxZQUFZLENBQUNaLE9BQUQsQ0FBWixDQUNBYSxPQUFPLENBQUNDLEdBQVIsQ0FBWSx1QkFBWixDQUFxQ0gsUUFBckMsRUFwQkcsZ0NBcUJJQSxRQUFRLENBQUNILElBckJiLHVEQUFGLDZFQUhRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuXG4vLyBDb25maWd1cmF0aW9uIG9mIHRoZSBIVFRQIGZldGNoaW5nIG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmFtZTogJ2xpbmtlZGluJyxcbiAgICBwYXR0ZXJuOiAnbGlua2VkaW4nLFxuICAgIGZldGNoOiBhc3luYyAodXJpLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSB1cmkuc3BsaXQoJzphY3Rpdml0eTonKVsxXTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gYXhpb3MuQ2FuY2VsVG9rZW4uc291cmNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHNvdXJjZS5jYW5jZWwoXG4gICAgICAgICAgICBgQ2Fubm90IGNvbm5lY3QgdG8gdGhlIHNvdXJjZTogJHt1cml9YFxuICAgICAgICApLCA3MDAwKTsvLyBjb25uZWN0aW9uIHRpbWVvdXRcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmxpbmtlZGluLmNvbS92Mi9hY3Rpdml0aWVzP2lkcz1MaXN0KCR7YWN0aXZpdHlJZH0pYCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke29wdGlvbnMua2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUmVzdGxpLVByb3RvY29sLVZlcnNpb24nOiAnMi4wLjAnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2RhdGEgPT4gZGF0YV0sIC8vIERvIG5vdCBjb252ZXJ0IEpTT04gdG8gb2JqZWN0XG4gICAgICAgICAgICAgICAgY2FuY2VsVG9rZW46IHNvdXJjZS50b2tlblxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdAQEBAQEBAQEBAQEBAQEBAQEBAQEAnLCByZXNwb25zZSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH1cbn07XG4iXX0=
|
package/dist/twitter.js
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
"use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var axios=require("axios");// https://twitter.com/mindsaur/status/1263529968690225152
|
2
|
-
// Configuration of the HTTP fetching method
|
3
|
-
module.exports={name:"twitter",pattern:"twitter",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(uri,options){var tweetId,source,timeout,response;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:tweetId=uri.split("/status/")[1];source=axios.CancelToken.source();timeout=setTimeout(function(){return source.cancel("Cannot connect to the source: ".concat(uri))},7000);// connection timeout
|
4
|
-
_context.next=5;return axios({method:"get",url:"https://api.twitter.com/2/tweets/".concat(tweetId),headers:{"Authorization":"Bearer ".concat(options.key),"cache-control":"no-cache"},transformResponse:[function(data){return data}],// Do not convert JSON to object
|
5
|
-
cancelToken:source.token});case 5:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response.data);case 8:case"end":return _context.stop();}}},_callee)}));function fetch(_x,_x2){return _fetch.apply(this,arguments)}return fetch}()};
|
6
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90d2l0dGVyLmpzIl0sIm5hbWVzIjpbImF4aW9zIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJuYW1lIiwicGF0dGVybiIsImZldGNoIiwidXJpIiwib3B0aW9ucyIsInR3ZWV0SWQiLCJzcGxpdCIsInNvdXJjZSIsIkNhbmNlbFRva2VuIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJjYW5jZWwiLCJtZXRob2QiLCJ1cmwiLCJoZWFkZXJzIiwia2V5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJkYXRhIiwiY2FuY2VsVG9rZW4iLCJ0b2tlbiIsInJlc3BvbnNlIiwiY2xlYXJUaW1lb3V0Il0sIm1hcHBpbmdzIjoidXlCQUFBLEdBQU1BLENBQUFBLEtBQUssQ0FBR0MsT0FBTyxDQUFDLE9BQUQsQ0FBckIsQ0FFQTtBQUVBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsU0FETyxDQUViQyxPQUFPLENBQUUsU0FGSSxDQUdiQyxLQUFLLDhFQUFFLGlCQUFPQyxHQUFQLENBQVlDLE9BQVoscUpBQ0dDLE9BREgsQ0FDYUYsR0FBRyxDQUFDRyxLQUFKLENBQVUsVUFBVixFQUFzQixDQUF0QixDQURiLENBRUdDLE1BRkgsQ0FFWVgsS0FBSyxDQUFDWSxXQUFOLENBQWtCRCxNQUFsQixFQUZaLENBR0dFLE9BSEgsQ0FHYUMsVUFBVSxDQUFDLGlCQUFNSCxDQUFBQSxNQUFNLENBQUNJLE1BQVAseUNBQ0lSLEdBREosRUFBTixDQUFELENBRXZCLElBRnVCLENBSHZCLENBS007QUFMTixzQkFNb0JQLENBQUFBLEtBQUssQ0FDeEIsQ0FDSWdCLE1BQU0sQ0FBRSxLQURaLENBRUlDLEdBQUcsNENBQXNDUixPQUF0QyxDQUZQLENBR0lTLE9BQU8sQ0FBRSxDQUNMLGlDQUEyQlYsT0FBTyxDQUFDVyxHQUFuQyxDQURLLENBRUwsZ0JBQWlCLFVBRlosQ0FIYixDQU9JQyxpQkFBaUIsQ0FBRSxDQUFDLFNBQUFDLElBQUksUUFBSUEsQ0FBQUEsSUFBSixDQUFMLENBUHZCLENBT3VDO0FBQ25DQyxXQUFXLENBQUVYLE1BQU0sQ0FBQ1ksS0FSeEIsQ0FEd0IsQ0FOekIsUUFNR0MsUUFOSCxlQWtCSEMsWUFBWSxDQUFDWixPQUFELENBQVosQ0FsQkcsZ0NBbUJJVyxRQUFRLENBQUNILElBbkJiLHVEQUFGLDZFQUhRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xuXG4vLyBodHRwczovL3R3aXR0ZXIuY29tL21pbmRzYXVyL3N0YXR1cy8xMjYzNTI5OTY4NjkwMjI1MTUyXG5cbi8vIENvbmZpZ3VyYXRpb24gb2YgdGhlIEhUVFAgZmV0Y2hpbmcgbWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYW1lOiAndHdpdHRlcicsXG4gICAgcGF0dGVybjogJ3R3aXR0ZXInLFxuICAgIGZldGNoOiBhc3luYyAodXJpLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHR3ZWV0SWQgPSB1cmkuc3BsaXQoJy9zdGF0dXMvJylbMV07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGF4aW9zLkNhbmNlbFRva2VuLnNvdXJjZSgpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBzb3VyY2UuY2FuY2VsKFxuICAgICAgICAgICAgYENhbm5vdCBjb25uZWN0IHRvIHRoZSBzb3VyY2U6ICR7dXJpfWBcbiAgICAgICAgKSwgNzAwMCk7Ly8gY29ubmVjdGlvbiB0aW1lb3V0XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS50d2l0dGVyLmNvbS8yL3R3ZWV0cy8ke3R3ZWV0SWR9YCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke29wdGlvbnMua2V5fWAsXG4gICAgICAgICAgICAgICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IFtkYXRhID0+IGRhdGFdLCAvLyBEbyBub3QgY29udmVydCBKU09OIHRvIG9iamVjdFxuICAgICAgICAgICAgICAgIGNhbmNlbFRva2VuOiBzb3VyY2UudG9rZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9XG59O1xuIl19
|
package/dist/utils/cli.js
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
"use strict";require("core-js/modules/es.symbol.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.array.from.js");require("core-js/modules/es.function.name.js");require("core-js/modules/es.array.slice.js");require("core-js/modules/es.array.for-each.js");require("core-js/modules/web.dom-collections.for-each.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.string.match.js");require("core-js/modules/es.parse-int.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.regexp.to-string.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&Symbol.iterator in Object(iter))return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}/**
|
2
|
-
* Parse argv parameters
|
3
|
-
* @param {String[]} argv Argv array to parce
|
4
|
-
* @param {Number} skip Count of parameters to skip from beginning of the array
|
5
|
-
* @returns {Object} Object with command line arguments
|
6
|
-
*/module.exports.parseArgv=function(argv){var skip=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;if(!Array.isArray(argv)){throw new Error("ERROR_INVALID_ARGV")}argv=argv.slice(skip);var normalised=[];var args={};argv.forEach(function(arg){// Splitting and cleananup
|
7
|
-
normalised=[].concat(_toConsumableArray(normalised),_toConsumableArray(arg.split("=").map(function(a){return a.replace(/^-{1,2}/g,"")})))});for(var i=0;i<normalised.length;i+=2){args[normalised[i]]=normalised[i+1]?normalised[i+1]:""}return args};/**
|
8
|
-
* Parse command parameters
|
9
|
-
* @param {Object} params
|
10
|
-
* @returns {String[]}
|
11
|
-
*/module.exports.parseParams=function(params){if(!params){return[]}return params.split(",").map(function(p){var template=/^number:/g;return p.match(template)?parseInt(p.replace(template,"")):p})};/**
|
12
|
-
* Replace properties in the arguments array
|
13
|
-
* @param {string[]} source Array of arguments
|
14
|
-
* @param {Object} options Replacements object
|
15
|
-
* @returns {string[]}
|
16
|
-
*/module.exports.applyArgs=function(){var source=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return source.map(function(i){return options[i]?options[i]:i})};// Converting result property
|
17
|
-
// Calling recursively on objects and arrays
|
18
|
-
var convertProperty=function convertProperty(prop){if(typeof prop==="string"){return prop}if(typeof prop==="number"){return String(prop)}if(web3.utils.isBN(prop)||web3.utils.isBigNumber(prop)){return prop.toString()}if(Array.isArray(prop)){return prop.map(function(p){return convertProperty(p)})}if(_typeof(prop)==="object"){for(var p in prop){prop[p]=convertProperty(prop[p])}return prop}return prop};/**
|
19
|
-
* Converting web3 result to string value
|
20
|
-
* @param {*} result web3 call result
|
21
|
-
* @returns {*}
|
22
|
-
*/module.exports.parseCallResult=function(result){return convertProperty(result)};
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jbGkuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInBhcnNlQXJndiIsImFyZ3YiLCJza2lwIiwiQXJyYXkiLCJpc0FycmF5IiwiRXJyb3IiLCJzbGljZSIsIm5vcm1hbGlzZWQiLCJhcmdzIiwiZm9yRWFjaCIsImFyZyIsInNwbGl0IiwibWFwIiwiYSIsInJlcGxhY2UiLCJpIiwibGVuZ3RoIiwicGFyc2VQYXJhbXMiLCJwYXJhbXMiLCJwIiwidGVtcGxhdGUiLCJtYXRjaCIsInBhcnNlSW50IiwiYXBwbHlBcmdzIiwic291cmNlIiwib3B0aW9ucyIsImNvbnZlcnRQcm9wZXJ0eSIsInByb3AiLCJTdHJpbmciLCJ3ZWIzIiwidXRpbHMiLCJpc0JOIiwiaXNCaWdOdW1iZXIiLCJ0b1N0cmluZyIsInBhcnNlQ2FsbFJlc3VsdCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6Im16RUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FDQUEsTUFBTSxDQUFDQyxPQUFQLENBQWVDLFNBQWYsQ0FBMkIsU0FBQ0MsSUFBRCxDQUFvQixJQUFiQyxDQUFBQSxJQUFhLDJEQUFOLENBQU0sQ0FFM0MsR0FBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsSUFBZCxDQUFMLENBQTBCLENBQ3RCLEtBQU0sSUFBSUksQ0FBQUEsS0FBSixDQUFVLG9CQUFWLENBQ1QsQ0FFREosSUFBSSxDQUFHQSxJQUFJLENBQUNLLEtBQUwsQ0FBV0osSUFBWCxDQUFQLENBRUEsR0FBSUssQ0FBQUEsVUFBVSxDQUFHLEVBQWpCLENBQ0EsR0FBTUMsQ0FBQUEsSUFBSSxDQUFHLEVBQWIsQ0FFQVAsSUFBSSxDQUFDUSxPQUFMLENBQWEsU0FBQ0MsR0FBRCxDQUFTLENBRWxCO0FBQ0FILFVBQVUsOEJBQU9BLFVBQVAscUJBQXVCRyxHQUFHLENBQUNDLEtBQUosQ0FBVSxHQUFWLENBQUQsQ0FDM0JDLEdBRDJCLENBQ3ZCLFNBQUFDLENBQUMsUUFBSUEs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ZUFBZSxDQUFDUyxNQUFELENBQW5CLENBQXZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBhcmd2IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7U3RyaW5nW119IGFyZ3YgQXJndiBhcnJheSB0byBwYXJjZVxuICogQHBhcmFtIHtOdW1iZXJ9IHNraXAgQ291bnQgb2YgcGFyYW1ldGVycyB0byBza2lwIGZyb20gYmVnaW5uaW5nIG9mICB0aGUgYXJyYXlcbiAqIEByZXR1cm5zIHtPYmplY3R9IE9iamVjdCB3aXRoIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqL1xubW9kdWxlLmV4cG9ydHMucGFyc2VBcmd2ID0gKGFyZ3YsIHNraXAgPSAwKSA9PiB7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJndikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFUlJPUl9JTlZBTElEX0FSR1YnKTtcbiAgICB9XG5cbiAgICBhcmd2ID0gYXJndi5zbGljZShza2lwKTtcblxuICAgIGxldCBub3JtYWxpc2VkID0gW107XG4gICAgY29uc3QgYXJncyA9IHt9O1xuXG4gICAgYXJndi5mb3JFYWNoKChhcmcpID0+IHtcblxuICAgICAgICAvLyBTcGxpdHRpbmcgYW5kIGNsZWFuYW51cFxuICAgICAgICBub3JtYWxpc2VkID0gWy4uLm5vcm1hbGlzZWQsIC4uLihhcmcuc3BsaXQoJz0nKSlcbiAgICAgICAgICAgIC5tYXAoYSA9PiBhLnJlcGxhY2UoL14tezEsMn0vZywgJycpKV07XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1hbGlzZWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgYXJnc1tub3JtYWxpc2VkW2ldXSA9IG5vcm1hbGlzZWRbaSArIDFdID8gbm9ybWFsaXNlZFtpICsgMV0gOiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbn07XG5cbi8qKlxuICogUGFyc2UgY29tbWFuZCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7U3RyaW5nW119XG4gKi9cbm1vZHVsZS5leHBvcnRzLnBhcnNlUGFyYW1zID0gcGFyYW1zID0+IHtcblxuICAgIGlmICghcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLnNwbGl0KCcsJykubWFwKHAgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IC9ebnVtYmVyOi9nO1xuICAgICAgICByZXR1cm4gcC5tYXRjaCh0ZW1wbGF0ZSkgPyBwYXJzZUludChwLnJlcGxhY2UodGVtcGxhdGUsICcnKSkgOiBwO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBSZXBsYWNlIHByb3BlcnRpZXMgaW4gdGhlIGFyZ3VtZW50cyBhcnJheVxuICogQHBhcmFtIHtzdHJpbmdbXX0gc291cmNlIEFycmF5IG9mIGFyZ3VtZW50c1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgUmVwbGFjZW1lbnRzIG9iamVjdFxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICovXG5tb2R1bGUuZXhwb3J0cy5hcHBseUFyZ3MgPSAoc291cmNlID0gW10sIG9wdGlvbnMgPSB7fSkgPT4gc291cmNlLm1hcChcbiAgICBpID0+IG9wdGlvbnNbaV0gPyBvcHRpb25zW2ldIDogaVxuKTtcblxuLy8gQ29udmVydGluZyByZXN1bHQgcHJvcGVydHlcbi8vIENhbGxpbmcgcmVjdXJzaXZlbHkgb24gb2JqZWN0cyBhbmQgYXJyYXlzXG5jb25zdCBjb252ZXJ0UHJvcGVydHkgPSBwcm9wID0+IHtcblxuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHByb3ApO1xuICAgIH1cblxuICAgIGlmICh3ZWIzLnV0aWxzLmlzQk4ocHJvcCkgfHwgd2ViMy51dGlscy5pc0JpZ051bWJlcihwcm9wKSkge1xuICAgICAgICByZXR1cm4gcHJvcC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3ApKSB7XG4gICAgICAgIHJldHVybiBwcm9wLm1hcChwID0+IGNvbnZlcnRQcm9wZXJ0eShwKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcHJvcCkge1xuICAgICAgICAgICAgcHJvcFtwXSA9IGNvbnZlcnRQcm9wZXJ0eShwcm9wW3BdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcDtcbn07XG5cbi8qKlxuICogQ29udmVydGluZyB3ZWIzIHJlc3VsdCB0byBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gcmVzdWx0IHdlYjMgY2FsbCByZXN1bHRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5tb2R1bGUuZXhwb3J0cy5wYXJzZUNhbGxSZXN1bHQgPSByZXN1bHQgPT4gY29udmVydFByb3BlcnR5KHJlc3VsdCk7XG4iXX0=
|
package/dist/utils/constants.js
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
"use strict";module.exports.zeroAddress="0x0000000000000000000000000000000000000000";
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInplcm9BZGRyZXNzIl0sIm1hcHBpbmdzIjoiYUFBQUEsTUFBTSxDQUFDQyxPQUFQLENBQWVDLFdBQWYsQ0FBNkIsNENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMuemVyb0FkZHJlc3MgPSAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiJdfQ==
|
package/dist/utils/document.js
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
"use strict";var makeHash=function makeHash(jsonString,web3){return web3.utils.soliditySha3(jsonString)};module.exports.makeHash=makeHash;
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb2N1bWVudC5qcyJdLCJuYW1lcyI6WyJtYWtlSGFzaCIsImpzb25TdHJpbmciLCJ3ZWIzIiwidXRpbHMiLCJzb2xpZGl0eVNoYTMiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiYUFBQSxHQUFNQSxDQUFBQSxRQUFRLENBQUcsUUFBWEEsQ0FBQUEsUUFBVyxDQUFDQyxVQUFELENBQWFDLElBQWIsUUFBc0JBLENBQUFBLElBQUksQ0FBQ0MsS0FBTCxDQUNsQ0MsWUFEa0MsQ0FDckJILFVBRHFCLENBQXRCLENBQWpCLENBRUFJLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlTixRQUFmLENBQTBCQSxRQUExQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IG1ha2VIYXNoID0gKGpzb25TdHJpbmcsIHdlYjMpID0+IHdlYjMudXRpbHNcbiAgICAuc29saWRpdHlTaGEzKGpzb25TdHJpbmcpO1xubW9kdWxlLmV4cG9ydHMubWFrZUhhc2ggPSBtYWtlSGFzaDtcbiJdfQ==
|
package/dist/utils/expect.js
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
"use strict";require("core-js/modules/es.object.set-prototype-of.js");require("core-js/modules/es.object.get-prototype-of.js");require("core-js/modules/es.array.index-of.js");require("core-js/modules/es.reflect.construct.js");require("core-js/modules/es.map.js");require("core-js/modules/es.string.iterator.js");require("core-js/modules/esnext.map.delete-all.js");require("core-js/modules/esnext.map.every.js");require("core-js/modules/esnext.map.filter.js");require("core-js/modules/esnext.map.find.js");require("core-js/modules/esnext.map.find-key.js");require("core-js/modules/esnext.map.includes.js");require("core-js/modules/esnext.map.key-of.js");require("core-js/modules/esnext.map.map-keys.js");require("core-js/modules/esnext.map.map-values.js");require("core-js/modules/esnext.map.merge.js");require("core-js/modules/esnext.map.reduce.js");require("core-js/modules/esnext.map.some.js");require("core-js/modules/esnext.map.update.js");require("core-js/modules/es.symbol.js");require("core-js/modules/es.symbol.description.js");require("core-js/modules/es.symbol.iterator.js");require("core-js/modules/es.object.keys.js");require("core-js/modules/es.array.reduce.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.array.iterator.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/web.dom-collections.iterator.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.string.includes.js");require("core-js/modules/es.array.concat.js");require("core-js/modules/es.regexp.constructor.js");require("core-js/modules/es.regexp.to-string.js");function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass)}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget)}else{result=Super.apply(this,arguments)}return _possibleConstructorReturn(this,result)}}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call}return _assertThisInitialized(self)}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _wrapNativeSuper(Class){var _cache=typeof Map==="function"?new Map:undefined;_wrapNativeSuper=function _wrapNativeSuper(Class){if(Class===null||!_isNativeFunction(Class))return Class;if(typeof Class!=="function"){throw new TypeError("Super expression must either be null or a function")}if(typeof _cache!=="undefined"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _setPrototypeOf(Wrapper,Class)};return _wrapNativeSuper(Class)}function _construct(Parent,args,Class){if(_isNativeReflectConstruct()){_construct=Reflect.construct}else{_construct=function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_setPrototypeOf(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true}catch(e){return false}}function _isNativeFunction(fn){return Function.toString.call(fn).indexOf("[native code]")!==-1}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o};return _setPrototypeOf(o,p)}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _getPrototypeOf(o)}var _require=require("web3"),web3utils=_require.utils;/**
|
2
|
-
* ExpectError class
|
3
|
-
* @class ExpectError
|
4
|
-
* @extends {Error}
|
5
|
-
*/var ExpectError=/*#__PURE__*/function(_Error){_inherits(ExpectError,_Error);var _super=_createSuper(ExpectError);/**
|
6
|
-
* Creates an instance of ExpectError.
|
7
|
-
* @param {String} message
|
8
|
-
* @memberof ExpectError
|
9
|
-
*/function ExpectError(){var _this;var message=arguments.length>0&&arguments[0]!==undefined?arguments[0]:"Unknown error";_classCallCheck(this,ExpectError);// eslint-disable-line space-before-function-paren
|
10
|
-
_this=_super.call(this,message);for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key]}_this.args=args;return _this}return ExpectError}(/*#__PURE__*/_wrapNativeSuper(Error));;module.exports.ExpectError=ExpectError;/**
|
11
|
-
* Ensuring expected parameters helper
|
12
|
-
* @param {Object} options
|
13
|
-
* @param {Object} model
|
14
|
-
*/var all=function all(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var model=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(_typeof(options)!=="object"||Object.keys(options).length===0){throw new ExpectError("Options for \"expect.all\" must be an object")}if(_typeof(model)!=="object"||Object.keys(model).length===0){throw new ExpectError("Model for \"expect.all\" must be an object")}for(var _i=0,_Object$keys=Object.keys(model);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];if(!model[key].type){throw new ExpectError("Model property must have a \"type\" defined")}var value=key.split(".").reduce(function(acc,part){return acc&&acc[part]!==undefined?acc[part]:null},options);if(options[key]===undefined&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The \"".concat(key,"\" property not found"),{expected:model[key].type,key:key,value:value})}switch(model[key].type){case"enum":if(!model[key].values||!Array.isArray(model[key].values)){throw new ExpectError("Enumerator conditions array not defined in the model",{expected:"enum",values:model[key].values,key:key,value:value})}if(!model[key].values.includes(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The value type of the \"".concat(String(key),"\" property is not valid. Expected type one of ").concat(model[key].values," but got: ").concat(String(value)),{expected:"enum",values:model[key].values,key:key,value:value})}break;case"address":if(!new RegExp("^0x[a-fA-F0-9]{40}$").test(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("Ethereum address is required as value for the property: \"".concat(key,"\""),{expected:"address",key:key,value:value})}break;case"hash":if(!new RegExp("^0x[a-fA-F0-9]{64}$").test(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("Ethereum tx hash is required as value for the property: \"".concat(key,"\""),{expected:"hash",key:key,value:value})}break;case"bn":if(!web3utils.isBN(value)&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("BN instance expected as value for the property \"".concat(key,"\" but got: ").concat(value),{expected:"bn",key:key,value:value})}break;case"functionOrMember":if(typeof value==="function"){// It is OK
|
15
|
-
break}// If not then follow the next rule
|
16
|
-
// eslint-disable-next-line no-fallthrough
|
17
|
-
case"member":if(!model[key].provider||_typeof(model[key].provider)!=="object"){throw new ExpectError("Provider object must be defined as \"provider\" model option for \"".concat(key,"\""))}if(typeof value!=="string"){throw new ExpectError("Property with \"member\" type must be a string but actually, it is a \"".concat(_typeof(value),"\""))}// eslint-disable-next-line no-case-declarations
|
18
|
-
var memberValue=value.split(".").reduce(function(acc,part){return acc&&acc[part]!==undefined?acc[part]:null},model[key].provider);if(!memberValue){throw new ExpectError("Not a member",{expected:model[key].type,provider:model[key].provider,key:key,value:value})}break;default:// eslint-disable-next-line valid-typeof
|
19
|
-
if(_typeof(value)!==model[key].type&&(model[key].required===true||model[key].required===undefined)){throw new ExpectError("The \"".concat(key,"\" property value has a wrong type: ").concat(_typeof(value)),{expected:model[key].type,key:key,value:value})}}}};module.exports.all=all;
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9leHBlY3QuanMiXSwibmFtZXMiOlsicmVxdWlyZSIsIndlYjN1dGlscyIsInV0aWxzIiwiRXhwZWN0RXJyb3IiLCJtZXNzYWdlIiwiYXJncyIsIkVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsImFsbCIsIm9wdGlvbnMiLCJtb2RlbCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJrZXkiLCJ0eXBlIiwidmFsdWUiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsInBhcnQiLCJ1bmRlZmluZWQiLCJyZXF1aXJlZCIsImV4cGVjdGVkIiwidmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJTdHJpbmciLCJSZWdFeHAiLCJ0ZXN0IiwiaXNCTiIsInByb3ZpZGVyIiwibWVtYmVyVmFsdWUiXSwibWFwcGluZ3MiOiIrM0pBQTZCQSxPQUFPLENBQUMsTUFBRCxDLENBQXJCQyxTLFVBQVBDLEssQ0FFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEcsR0FDTUMsQ0FBQUEsVyxrR0FFRjtBQUNKO0FBQ0E7QUFDQTtBQUNBLE9BQ0ksc0JBQWdELGNBQXBDQyxDQUFBQSxPQUFvQywyREFBMUIsZUFBMEIsbUNBQUU7QUFDOUMsdUJBQU1BLE9BQU4sRUFENEMsOEJBQU5DLElBQU0scURBQU5BLElBQU0seUJBRTVDLE1BQUtBLElBQUwsQ0FBWUEsSUFBWixDQUY0QyxZQUcvQyxDLGtEQVZxQkMsSyxHQVd6QixDQUNEQyxNQUFNLENBQUNDLE9BQVAsQ0FBZUwsV0FBZixDQUE2QkEsV0FBN0IsQ0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQ0EsR0FBTU0sQ0FBQUEsR0FBRyxDQUFHLFFBQU5BLENBQUFBLEdBQU0sRUFBOEIsSUFBN0JDLENBQUFBLE9BQTZCLDJEQUFuQixFQUFtQixJQUFmQyxDQUFBQSxLQUFlLDJEQUFQLEVBQU8sQ0FFdEMsR0FBSSxRQUFPRCxPQUFQLElBQW1CLFFBQW5CLEVBQStCRSxNQUFNLENBQUNDLElBQVAsQ0FB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QUVKLFFBRUk7QUFDQSxHQUFJLFFBQU9BLEtBQVAsSUFBaUJOLEtBQUssQ0FBQ0ksR0FBRCxDQUFMLENBQVdDLElBQTVCLEdBQ0NMLEtBQUssQ0FBQ0ksR0FBRCxDQUFMLENBQVdRLFFBQVgsR0FBd0IsSUFBeEIsRUFBZ0NaLEtBQUssQ0FBQ0ksR0FBRCxDQUFMLENBQVdRLFFBQVgsR0FBd0JELFNBRHpELENBQUosQ0FDeUUsQ0FFckUsS0FBTSxJQUFJbkIsQ0FBQUEsV0FBSixpQkFDTVksR0FETix3REFDc0RFLEtBRHRELEdBRUYsQ0FDSU8sUUFBUSxDQUFFYixLQUFLLENBQUNJLEdBQUQsQ0FBTCxDQUFXQyxJQUR6QixDQUVJRCxHQUFHLENBQUhBLEdBRkosQ0FHSUUsS0FBSyxDQUFMQSxLQUhKLENBRkUsQ0FRVCxDQTNJVCxDQTZJSCxDQUNKLENBbExELENBbUxBVixNQUFNLENBQUNDLE9BQVAsQ0FBZUMsR0FBZixDQUFxQkEsR0FBckIiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IHV0aWxzOiB3ZWIzdXRpbHMgfSA9IHJlcXVpcmUoJ3dlYjMnKTtcblxuLyoqXG4gKiBFeHBlY3RFcnJvciBjbGFzc1xuICogQGNsYXNzIEV4cGVjdEVycm9yXG4gKiBAZXh0ZW5kcyB7RXJyb3J9XG4gKi9cbmNsYXNzIEV4cGVjdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFeHBlY3RFcnJvci5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgICAqIEBtZW1iZXJvZiBFeHBlY3RFcnJvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVW5rbm93biBlcnJvcicsIC4uLmFyZ3MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW5cbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxufTtcbm1vZHVsZS5leHBvcnRzLkV4cGVjdEVycm9yID0gRXhwZWN0RXJyb3I7XG5cbi8qKlxuICogRW5zdXJpbmcgZXhwZWN0ZWQgcGFyYW1ldGVycyBoZWxwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gbW9kZWxcbiAqL1xuY29uc3QgYWxsID0gKG9wdGlvbnMgPSB7fSwgbW9kZWwgPSB7fSkgPT4ge1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyB8fCBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcblxuICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoJ09wdGlvbnMgZm9yIFwiZXhwZWN0LmFsbFwiIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtb2RlbCAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmtleXMobW9kZWwpLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcignTW9kZWwgZm9yIFwiZXhwZWN0LmFsbFwiIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG5cbiAgICAgICAgaWYgKCFtb2RlbFtrZXldLnR5cGUpIHtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKCdNb2RlbCBwcm9wZXJ0eSBtdXN0IGhhdmUgYSBcInR5cGVcIiBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGtleS5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkID8gYWNjW3BhcnRdIDogbnVsbDtcbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnNba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAobW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCBtb2RlbFtrZXldLnJlcXVpcmVkID09PSB1bmRlZmluZWQpKSB7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICBgVGhlIFwiJHtrZXl9XCIgcHJvcGVydHkgbm90IGZvdW5kYCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBtb2RlbFtrZXldLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChtb2RlbFtrZXldLnR5cGUpIHtcblxuICAgICAgICAgICAgY2FzZSAnZW51bSc6XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1vZGVsW2tleV0udmFsdWVzIHx8ICFBcnJheS5pc0FycmF5KG1vZGVsW2tleV0udmFsdWVzKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdFbnVtZXJhdG9yIGNvbmRpdGlvbnMgYXJyYXkgbm90IGRlZmluZWQgaW4gdGhlIG1vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogJ2VudW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kZWxba2V5XS52YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFtb2RlbFtrZXldLnZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHRydWUgfHwgbW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUaGUgdmFsdWUgdHlwZSBvZiB0aGUgXCIke1N0cmluZyhrZXkpfVwiIHByb3BlcnR5IGlzIG5vdCB2YWxpZC4gRXhwZWN0ZWQgdHlwZSBvbmUgb2YgJHttb2RlbFtrZXldLnZhbHVlc30gYnV0IGdvdDogJHtTdHJpbmcodmFsdWUpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdlbnVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IG1vZGVsW2tleV0udmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdhZGRyZXNzJzpcblxuICAgICAgICAgICAgICAgIGlmICghbmV3IFJlZ0V4cCgnXjB4W2EtZkEtRjAtOV17NDB9JCcpLnRlc3QodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChtb2RlbFtrZXldLnJlcXVpcmVkID09PSB0cnVlIHx8IG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgRXRoZXJldW0gYWRkcmVzcyBpcyByZXF1aXJlZCBhcyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5OiBcIiR7a2V5fVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogJ2FkZHJlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdoYXNoJzpcblxuICAgICAgICAgICAgICAgIGlmICghbmV3IFJlZ0V4cCgnXjB4W2EtZkEtRjAtOV17NjR9JCcpLnRlc3QodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChtb2RlbFtrZXldLnJlcXVpcmVkID09PSB0cnVlIHx8IG1vZGVsW2tleV0ucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgRXRoZXJldW0gdHggaGFzaCBpcyByZXF1aXJlZCBhcyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5OiBcIiR7a2V5fVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogJ2hhc2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdibic6XG5cbiAgICAgICAgICAgICAgICBpZiAoIXdlYjN1dGlscy5pc0JOKHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAobW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCBtb2RlbFtrZXldLnJlcXVpcmVkID09PSB1bmRlZmluZWQpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYEJOIGluc3RhbmNlIGV4cGVjdGVkIGFzIHZhbHVlIGZvciB0aGUgcHJvcGVydHkgXCIke2tleX1cIiBidXQgZ290OiAke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdibicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uT3JNZW1iZXInOlxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIE9LXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiBub3QgdGhlbiBmb2xsb3cgdGhlIG5leHQgcnVsZVxuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICAgICAgICBjYXNlICdtZW1iZXInOlxuXG4gICAgICAgICAgICAgICAgaWYgKCFtb2RlbFtrZXldLnByb3ZpZGVyIHx8IHR5cGVvZiBtb2RlbFtrZXldLnByb3ZpZGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgUHJvdmlkZXIgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBhcyBcInByb3ZpZGVyXCIgbW9kZWwgb3B0aW9uIGZvciBcIiR7a2V5fVwiYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBQcm9wZXJ0eSB3aXRoIFwibWVtYmVyXCIgdHlwZSBtdXN0IGJlIGEgc3RyaW5nIGJ1dCBhY3R1YWxseSwgaXQgaXMgYSBcIiR7dHlwZW9mIHZhbHVlfVwiYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbWJlclZhbHVlID0gdmFsdWUuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkID8gYWNjW3BhcnRdIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9LCBtb2RlbFtrZXldLnByb3ZpZGVyKTtcblxuICAgICAgICAgICAgICAgIGlmICghbWVtYmVyVmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoJ05vdCBhIG1lbWJlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBtb2RlbFtrZXldLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcjogbW9kZWxba2V5XS5wcm92aWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IG1vZGVsW2tleV0udHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAobW9kZWxba2V5XS5yZXF1aXJlZCA9PT0gdHJ1ZSB8fCBtb2RlbFtrZXldLnJlcXVpcmVkID09PSB1bmRlZmluZWQpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFRoZSBcIiR7a2V5fVwiIHByb3BlcnR5IHZhbHVlIGhhcyBhIHdyb25nIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IG1vZGVsW2tleV0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xubW9kdWxlLmV4cG9ydHMuYWxsID0gYWxsO1xuIl19
|
package/dist/utils/vc.js
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
"use strict";require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");require("regenerator-runtime/runtime.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.array.filter.js");require("core-js/modules/es.array.includes.js");require("core-js/modules/es.string.includes.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var _require=require("@windingtree/vc"),verifyVc=_require.verifyVc;module.exports.validateVc=/*#__PURE__*/function(){var _ref=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(resolver,proof,claim){var proofDid,sourceDid,didResult,proofResolver,didDocumentValid,vc,verificationMethod,verifierDid,verifierDidResult,verifierResolver,verifierDidDocumentValid,verificationKey,verificationResult;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:proofDid=proof.split("#")[0];sourceDid=resolver.result.didDocument.id.toLowerCase();if(proofDid){_context.next=4;break}throw new Error("Unable to find a proof DID in the proof: ".concat(proof));case 4:// Normalize the proof DID
|
2
|
-
proofDid=proofDid.toLowerCase();// Check if the source DID is the same as the proof DID
|
3
|
-
if(!(proofDid===sourceDid)){_context.next=9;break}// Take already resolved DID
|
4
|
-
didResult=resolver.result;_context.next=13;break;case 9:// Make new resolution
|
5
|
-
proofResolver=resolver.spawnResolver();_context.next=12;return proofResolver.resolve(proof);case 12:didResult=_context.sent;case 13:if(didResult){_context.next=15;break}throw new Error("Unable to resolve DID of the proof: ".concat(proof));case 15:// Check if the proof DID document is valid
|
6
|
-
didDocumentValid=didResult.checks.filter(function(c){return c.type==="DID_DOCUMENT"})[0];if(!(!didDocumentValid||!didDocumentValid.passed)){_context.next=18;break}throw new Error("DID document of the proof is not valid: ".concat(proof));case 18:// Get VC from the proof DID document
|
7
|
-
vc=didResult.didDocument.trust.credentials.filter(function(c){return c.id===proof})[0];if(vc){_context.next=21;break}throw new Error("Unable to find VC of the proof: ".concat(proof));case 21:// Fetch verification key
|
8
|
-
verificationMethod=vc.proof.verificationMethod;verifierDid=verificationMethod.split("#")[0];// Check verifier DID existence
|
9
|
-
if(verifierDid){_context.next=25;break}throw new Error("Unable to find a verifier DID in the verificationMethod: ".concat(verificationMethod));case 25:// Normalize the verifier DID
|
10
|
-
verifierDid=verifierDid.toLowerCase();if(!(verifierDid===sourceDid)){_context.next=30;break}verifierDidResult=resolver.result;_context.next=34;break;case 30:verifierResolver=resolver.spawnResolver();_context.next=33;return verifierResolver.resolve(verifierDid);case 33:verifierDidResult=_context.sent;case 34:if(verifierDidResult){_context.next=36;break}throw new Error("Unable to resolve the proof verifier DID: ".concat(verifierDid));case 36:// Check if verifier DID document is valid
|
11
|
-
verifierDidDocumentValid=verifierDidResult.checks.filter(function(c){return c.type==="DID_DOCUMENT"})[0];if(!(!verifierDidDocumentValid||!verifierDidDocumentValid.passed)){_context.next=39;break}throw new Error("DID document of the proof verifier is not valid: ".concat(proof));case 39:// Get verification key from the DID document
|
12
|
-
verificationKey=verifierDidResult.didDocument.publicKey.filter(function(c){return c.id===verificationMethod})[0];if(verificationKey){_context.next=42;break}throw new Error("Unable to find verification key: ".concat(verificationMethod));case 42:// Validate VC integrity
|
13
|
-
verificationResult=verifyVc(vc,vc.proof.type,verificationKey.publicKeyPem);// Check if the issuer DID is defined in the VC data
|
14
|
-
if(verificationResult.issuer){_context.next=45;break}throw new Error("Unable to find issuer DID in the VC data");case 45:// Normalize the issuer DID
|
15
|
-
verificationResult.issuer=verificationResult.issuer.toLowerCase();if(!(resolver.authorizedTrustProofsIssuers&&!resolver.authorizedTrustProofsIssuers.includes(verificationResult.issuer))){_context.next=48;break}throw new Error("Unauthorized trust proof issuer: ".concat(verificationResult.issuer));case 48:if(!(verificationResult.credentialSubject.id!==sourceDid)){_context.next=50;break}throw new Error("Unknown credential subject Id ".concat(verificationResult.credentialSubject.id));case 50:if(!(verificationResult.credentialSubject.claim!==claim)){_context.next=52;break}throw new Error("Unknown credential subject Claim ".concat(verificationResult.credentialSubject.claim));case 52:case"end":return _context.stop();}}},_callee)}));return function(_x,_x2,_x3){return _ref.apply(this,arguments)}}();
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92Yy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwidmVyaWZ5VmMiLCJtb2R1bGUiLCJleHBvcnRzIiwidmFsaWRhdGVWYyIsInJlc29sdmVyIiwicHJvb2YiLCJjbGFpbSIsInByb29mRGlkIiwic3BsaXQiLCJzb3VyY2VEaWQiLCJyZXN1bHQiLCJkaWREb2N1bWVudCIsImlkIiwidG9Mb3dlckNhc2UiLCJFcnJvciIsImRpZFJlc3VsdCIsInByb29mUmVzb2x2ZXIiLCJzcGF3blJlc29sdmVyIiwicmVzb2x2ZSIsImRpZERvY3VtZW50VmFsaWQiLCJjaGVja3MiLCJmaWx0ZXIiLCJjIiwidHlwZSIsInBhc3NlZCIsInZjIiwidHJ1c3QiLCJjcmVkZW50aWFscyIsInZlcmlmaWNhdGlvbk1ldGhvZCIsInZlcmlmaWVyRGlkIiwidmVyaWZpZXJEaWRSZXN1bHQiLCJ2ZXJpZmllclJlc29sdmVyIiwidmVyaWZpZXJEaWREb2N1bWVudFZhbGlkIiwidmVyaWZpY2F0aW9uS2V5IiwicHVibGljS2V5IiwidmVyaWZpY2F0aW9uUmVzdWx0IiwicHVibGljS2V5UGVtIiwiaXNzdWVyIiwiYXV0aG9yaXplZFRydXN0UHJvb2ZzSXNzdWVycyIsImluY2x1ZGVzIiwiY3JlZGVudGlhbFN1YmplY3QiXSwibWFwcGluZ3MiOiJtOEJBQXFCQSxPQUFPLENBQUMsaUJBQUQsQyxDQUFwQkMsUSxVQUFBQSxRLENBRVJDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlQyxVQUFmLHlGQUE0QixpQkFBT0MsUUFBUCxDQUFpQkMsS0FBakIsQ0FBd0JDLEtBQXhCLGtUQUNwQkMsUUFEb0IsQ0FDVEYsS0FBSyxDQUFDRyxLQUFOLENBQVksR0FBWixFQUFpQixDQUFqQixDQURTLENBRXBCQyxTQUZvQixDQUVSTCxRQUFRLENBQUNNLE1BQVQsQ0FBZ0JDLFdBQWhCLENBQTRCQyxFQUE1QixDQUErQkMsV0FBL0IsRUFGUSxJQU1uQk4sUUFObUIsNkJBT2QsSUFBSU8sQ0FB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RSxDQUFDcEIsS0FBSCxDQUFTa0IsSUFGc0IsQ0FHL0JVLGVBQWUsQ0FBQ0csWUFIZSxDQXhFWCxDQThFeEI7QUE5RXdCLEdBK0VuQkQsa0JBQWtCLENBQUNFLE1BL0VBLDhCQWdGZCxJQUFJdkIsQ0FBQUEsS0FBSixDQUFVLDBDQUFWLENBaEZjLFNBa0Z4QjtBQUNBcUIsa0JBQWtCLENBQUNFLE1BQW5CLENBQTRCRixrQkFBa0IsQ0FBQ0UsTUFBbkIsQ0FBMEJ4QixXQUExQixFQUE1QixDQW5Gd0IsS0FxRnBCVCxRQUFRLENBQUNrQyw0QkFBVCxFQUNBLENBQUNsQyxRQUFRLENBQUNrQyw0QkFBVCxDQUFzQ0MsUUFBdEMsQ0FBK0NKLGtCQUFrQixDQUFDRSxNQUFsRSxDQXRGbUIsK0JBdUZkLElBQUl2QixDQUFBQSxLQUFKLDRDQUE4Q3FCLGtCQUFrQixDQUFDRSxNQUFqRSxFQXZGYyxjQTJGcEJGLGtCQUFrQixDQUFDSyxpQkFBbkIsQ0FBcUM1QixFQUFyQyxHQUE0Q0gsU0EzRnhCLCtCQTRGZCxJQUFJSyxDQUFBQSxLQUFKLHlDQUEyQ3FCLGtCQUFrQixDQUFDSyxpQkFBbkIsQ0FBcUM1QixFQUFoRixFQTVGYyxjQWlHcEJ1QixrQkFBa0IsQ0FBQ0ssaUJBQW5CLENBQXFDbEMsS0FBckMsR0FBK0NBLEtBakczQiwrQkFrR2QsSUFBSVEsQ0FBQUEsS0FBSiw0Q0FBOENxQixrQkFBa0IsQ0FBQ0ssaUJBQW5CLENBQXFDbEMsS0FBbkYsRUFsR2MsdURBQTVCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyB2ZXJpZnlWYyB9ID0gcmVxdWlyZSgnQHdpbmRpbmd0cmVlL3ZjJyk7XG5cbm1vZHVsZS5leHBvcnRzLnZhbGlkYXRlVmMgPSBhc3luYyAocmVzb2x2ZXIsIHByb29mLCBjbGFpbSkgPT4ge1xuICAgIGxldCBwcm9vZkRpZCA9IHByb29mLnNwbGl0KCcjJylbMF07XG4gICAgbGV0IHNvdXJjZURpZCA9IHJlc29sdmVyLnJlc3VsdC5kaWREb2N1bWVudC5pZC50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCBkaWRSZXN1bHQ7XG5cbiAgICAvLyBDaGVjayBpZiBwcm9vZiBoYXMgYSBESURcbiAgICBpZiAoIXByb29mRGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgYSBwcm9vZiBESUQgaW4gdGhlIHByb29mOiAke3Byb29mfWApO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdGhlIHByb29mIERJRFxuICAgIHByb29mRGlkID0gcHJvb2ZEaWQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBzb3VyY2UgRElEIGlzIHRoZSBzYW1lIGFzIHRoZSBwcm9vZiBESURcbiAgICBpZiAocHJvb2ZEaWQgPT09IHNvdXJjZURpZCkge1xuICAgICAgICAvLyBUYWtlIGFscmVhZHkgcmVzb2x2ZWQgRElEXG4gICAgICAgIGRpZFJlc3VsdCA9IHJlc29sdmVyLnJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYWtlIG5ldyByZXNvbHV0aW9uXG4gICAgICAgIGNvbnN0IHByb29mUmVzb2x2ZXIgPSByZXNvbHZlci5zcGF3blJlc29sdmVyKCk7XG4gICAgICAgIGRpZFJlc3VsdCA9IGF3YWl0IHByb29mUmVzb2x2ZXIucmVzb2x2ZShwcm9vZik7XG4gICAgfVxuICAgIGlmICghZGlkUmVzdWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgRElEIG9mIHRoZSBwcm9vZjogJHtwcm9vZn1gKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcHJvb2YgRElEIGRvY3VtZW50IGlzIHZhbGlkXG4gICAgY29uc3QgZGlkRG9jdW1lbnRWYWxpZCA9IGRpZFJlc3VsdC5jaGVja3MuZmlsdGVyKGMgPT4gYy50eXBlID09PSAnRElEX0RPQ1VNRU5UJylbMF07XG4gICAgaWYgKCFkaWREb2N1bWVudFZhbGlkIHx8ICFkaWREb2N1bWVudFZhbGlkLnBhc3NlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERJRCBkb2N1bWVudCBvZiB0aGUgcHJvb2YgaXMgbm90IHZhbGlkOiAke3Byb29mfWApO1xuICAgIH1cblxuICAgIC8vIEdldCBWQyBmcm9tIHRoZSBwcm9vZiBESUQgZG9jdW1lbnRcbiAgICBjb25zdCB2YyA9IGRpZFJlc3VsdC5kaWREb2N1bWVudC50cnVzdC5jcmVkZW50aWFscy5maWx0ZXIoYyA9PiBjLmlkID09PSBwcm9vZilbMF07XG4gICAgaWYgKCF2Yykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIFZDIG9mIHRoZSBwcm9vZjogJHtwcm9vZn1gKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCB2ZXJpZmljYXRpb24ga2V5XG4gICAgY29uc3QgdmVyaWZpY2F0aW9uTWV0aG9kID0gdmMucHJvb2YudmVyaWZpY2F0aW9uTWV0aG9kO1xuICAgIGxldCB2ZXJpZmllckRpZCA9IHZlcmlmaWNhdGlvbk1ldGhvZC5zcGxpdCgnIycpWzBdO1xuXG4gICAgLy8gQ2hlY2sgdmVyaWZpZXIgRElEIGV4aXN0ZW5jZVxuICAgIGlmICghdmVyaWZpZXJEaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBhIHZlcmlmaWVyIERJRCBpbiB0aGUgdmVyaWZpY2F0aW9uTWV0aG9kOiAke3ZlcmlmaWNhdGlvbk1ldGhvZH1gKTtcbiAgICB9XG4gICAgLy8gTm9ybWFsaXplIHRoZSB2ZXJpZmllciBESURcbiAgICB2ZXJpZmllckRpZCA9IHZlcmlmaWVyRGlkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBsZXQgdmVyaWZpZXJEaWRSZXN1bHQ7XG4gICAgaWYgKHZlcmlmaWVyRGlkID09PSBzb3VyY2VEaWQpIHtcbiAgICAgICAgdmVyaWZpZXJEaWRSZXN1bHQgPSByZXNvbHZlci5yZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXJSZXNvbHZlciA9IHJlc29sdmVyLnNwYXduUmVzb2x2ZXIoKTtcbiAgICAgICAgdmVyaWZpZXJEaWRSZXN1bHQgPSBhd2FpdCB2ZXJpZmllclJlc29sdmVyLnJlc29sdmUodmVyaWZpZXJEaWQpO1xuICAgIH1cbiAgICBpZiAoIXZlcmlmaWVyRGlkUmVzdWx0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgdGhlIHByb29mIHZlcmlmaWVyIERJRDogJHt2ZXJpZmllckRpZH1gKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB2ZXJpZmllciBESUQgZG9jdW1lbnQgaXMgdmFsaWRcbiAgICBjb25zdCB2ZXJpZmllckRpZERvY3VtZW50VmFsaWQgPSB2ZXJpZmllckRpZFJlc3VsdC5jaGVja3MuZmlsdGVyKGMgPT4gYy50eXBlID09PSAnRElEX0RPQ1VNRU5UJylbMF07XG4gICAgaWYgKCF2ZXJpZmllckRpZERvY3VtZW50VmFsaWQgfHwgIXZlcmlmaWVyRGlkRG9jdW1lbnRWYWxpZC5wYXNzZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBESUQgZG9jdW1lbnQgb2YgdGhlIHByb29mIHZlcmlmaWVyIGlzIG5vdCB2YWxpZDogJHtwcm9vZn1gKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdmVyaWZpY2F0aW9uIGtleSBmcm9tIHRoZSBESUQgZG9jdW1lbnRcbiAgICBjb25zdCB2ZXJpZmljYXRpb25LZXkgPSB2ZXJpZmllckRpZFJlc3VsdC5kaWREb2N1bWVudC5wdWJsaWNLZXkuZmlsdGVyKGMgPT4gYy5pZCA9PT0gdmVyaWZpY2F0aW9uTWV0aG9kKVswXTtcbiAgICBpZiAoIXZlcmlmaWNhdGlvbktleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHZlcmlmaWNhdGlvbiBrZXk6ICR7dmVyaWZpY2F0aW9uTWV0aG9kfWApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIFZDIGludGVncml0eVxuICAgIGNvbnN0IHZlcmlmaWNhdGlvblJlc3VsdCA9IHZlcmlmeVZjKFxuICAgICAgICB2YyxcbiAgICAgICAgdmMucHJvb2YudHlwZSxcbiAgICAgICAgdmVyaWZpY2F0aW9uS2V5LnB1YmxpY0tleVBlbVxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaXNzdWVyIERJRCBpcyBkZWZpbmVkIGluIHRoZSBWQyBkYXRhXG4gICAgaWYgKCF2ZXJpZmljYXRpb25SZXN1bHQuaXNzdWVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgaXNzdWVyIERJRCBpbiB0aGUgVkMgZGF0YScpO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdGhlIGlzc3VlciBESURcbiAgICB2ZXJpZmljYXRpb25SZXN1bHQuaXNzdWVyID0gdmVyaWZpY2F0aW9uUmVzdWx0Lmlzc3Vlci50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKHJlc29sdmVyLmF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMgJiZcbiAgICAgICAgIXJlc29sdmVyLmF1dGhvcml6ZWRUcnVzdFByb29mc0lzc3VlcnMuaW5jbHVkZXModmVyaWZpY2F0aW9uUmVzdWx0Lmlzc3VlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmF1dGhvcml6ZWQgdHJ1c3QgcHJvb2YgaXNzdWVyOiAke3ZlcmlmaWNhdGlvblJlc3VsdC5pc3N1ZXJ9YCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYSBjcmVkZW50aWFsIHN1YmplY3QgSWQuIFNob3VsZCBiZSBhIGNvbXBhbnkgRElEXG4gICAgaWYgKHZlcmlmaWNhdGlvblJlc3VsdC5jcmVkZW50aWFsU3ViamVjdC5pZCAhPT0gc291cmNlRGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjcmVkZW50aWFsIHN1YmplY3QgSWQgJHt2ZXJpZmljYXRpb25SZXN1bHQuY3JlZGVudGlhbFN1YmplY3QuaWR9YCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYSBjcmVkZW50aWFsIHN1YmplY3QgQ2xhaW0uXG4gICAgLy8gU2hvdWxkIGJlIGEgcHJvdmlkZWQgdHJ1c3QgYXNzZXJ0aW9uIGNsYWltXG4gICAgaWYgKHZlcmlmaWNhdGlvblJlc3VsdC5jcmVkZW50aWFsU3ViamVjdC5jbGFpbSAhPT0gY2xhaW0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNyZWRlbnRpYWwgc3ViamVjdCBDbGFpbSAke3ZlcmlmaWNhdGlvblJlc3VsdC5jcmVkZW50aWFsU3ViamVjdC5jbGFpbX1gKTtcbiAgICB9XG59O1xuIl19
|
package/dist/whois.js
DELETED
@@ -1,3 +0,0 @@
|
|
1
|
-
"use strict";require("regenerator-runtime/runtime.js");require("core-js/modules/es.array.reduce.js");require("core-js/modules/es.array.map.js");require("core-js/modules/es.regexp.exec.js");require("core-js/modules/es.string.split.js");require("core-js/modules/es.string.trim.js");require("core-js/modules/es.string.replace.js");require("core-js/modules/es.object.to-string.js");require("core-js/modules/es.promise.js");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}var whois=require("whois-light");var replacements={"Domain Name":"domainName","Registry Domain ID":"registryDomainId","Registrar WHOIS Server":"registrarWhoisServer","Registrar URL":"registrarUrl","Updated Date":"updatedDate","Creation Date":"creationDate","Registry Expiry Date":"expiryDate","Registrar":"registrar","Registrar IANA ID":"registrarIanaId","Registrar Abuse Contact Email":"registrarAbuseContactEmail","Registrar Abuse Contact Phone":"registrarAbuseContactPhone","Domain Status":"domainStatus","Name Server":"nameServer","DNSSEC":"DNSSEC"};// Configuration of the HTTP fetching method
|
2
|
-
module.exports={name:"whois",fetch:function(){var _fetch=_asyncToGenerator(/*#__PURE__*/regeneratorRuntime.mark(function _callee(domainName){var domainResolution;return regeneratorRuntime.wrap(function _callee$(_context){while(1){switch(_context.prev=_context.next){case 0:_context.next=2;return whois.lookup(domainName);case 2:domainResolution=_context.sent;return _context.abrupt("return",domainResolution.split("\r\n").map(function(l){return l.trim()}).reduce(function(a,v){v=v.replace(">>> ","");v=v.replace(" <<<","");if(v!==""){v=v.split(": ");if(v.length>1&&replacements[v[0]]){a[replacements[v[0]]]=v[1]}}return a},{}));case 4:case"end":return _context.stop();}}},_callee)}));function fetch(_x){return _fetch.apply(this,arguments)}return fetch}()};
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93aG9pcy5qcyJdLCJuYW1lcyI6WyJ3aG9pcyIsInJlcXVpcmUiLCJyZXBsYWNlbWVudHMiLCJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImZldGNoIiwiZG9tYWluTmFtZSIsImxvb2t1cCIsImRvbWFpblJlc29sdXRpb24iLCJzcGxpdCIsIm1hcCIsImwiLCJ0cmltIiwicmVkdWNlIiwiYSIsInYiLCJyZXBsYWNlIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiNjlCQUFBLEdBQU1BLENBQUFBLEtBQUssQ0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBckIsQ0FFQSxHQUFNQyxDQUFBQSxZQUFZLENBQUcsQ0FDakIsY0FBZSxZQURFLENBRWpCLHFCQUFzQixrQkFGTCxDQUdqQix5QkFBMEIsc0JBSFQsQ0FJakIsZ0JBQWlCLGNBSkEsQ0FLakIsZUFBZ0IsYUFMQyxDQU1qQixnQkFBaUIsY0FOQSxDQU9qQix1QkFBd0IsWUFQUCxDQVFqQixZQUFhLFdBUkksQ0FTakIsb0JBQXFCLGlCQVRKLENBVWpCLGdDQUFpQyw0QkFWaEIsQ0FXakIsZ0NBQWlDLDRCQVhoQixDQVlqQixnQkFBaUIsY0FaQSxDQWFqQixjQUFlLFlBYkUsQ0FjakIsU0FBVSxRQWRPLENBQXJCLENBaUJBO0FBQ0FDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUNiQyxJQUFJLENBQUUsT0FETyxDQUViQyxLQUFLLDhFQUFFLGlCQUFPQyxVQUFQLDRKQUMwQlAsQ0FBQUEsS0FBSyxDQUFDUSxNQUFOLENBQWFELFVBQWIsQ0FEMUIsUUFDQ0UsZ0JBREQsK0NBRUlBLGdCQUFnQixDQUNsQkMsS0FERSxDQUNJLE1BREosRUFFRkMsR0FGRSxDQUVFLFNBQUFDLENBQUMsUUFBSUEsQ0FBQUEsQ0FBQyxDQUFDQyxJQUFGLEVBQUosQ0FGSCxFQUdGQyxNQUhFLENBSUMsU0FBQ0MsQ0FBRCxDQUFJQyxDQUFKLENBQVUsQ0FDTkEsQ0FBQyxDQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxNQUFWLENBQWtCLEVBQWxCLENBQUosQ0FDQUQsQ0FBQyxDQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxNQUFWLENBQWtCLEVBQWxCLENBQUosQ0FDQSxHQUFJRCxDQUFDLEdBQUssRUFBVixDQUFjLENBQ1ZBLENBQUMsQ0FBR0EsQ0FBQyxDQUFDTixLQUFGLENBQVEsSUFBUixDQUFKLENBQ0EsR0FBSU0sQ0FBQyxDQUFDRSxNQUFGLENBQVcsQ0FBWCxFQUFnQmhCLFlBQVksQ0FBQ2MsQ0FBQyxDQUFDLENBQUQsQ0FBRixDQUFoQyxDQUF3QyxDQUNwQ0QsQ0FBQyxDQUFDYixZQUFZLENBQUNjLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBYixDQUFELENBQXdCQSxDQUFDLENBQUMsQ0FBRCxDQUM1QixDQUNKLENBQ0QsTUFBT0QsQ0FBQUEsQ0FDVixDQWRGLENBZUMsRUFmRCxDQUZKLHVEQUFGLHlFQUZRLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgd2hvaXMgPSByZXF1aXJlKCd3aG9pcy1saWdodCcpO1xuXG5jb25zdCByZXBsYWNlbWVudHMgPSB7XG4gICAgJ0RvbWFpbiBOYW1lJzogJ2RvbWFpbk5hbWUnLFxuICAgICdSZWdpc3RyeSBEb21haW4gSUQnOiAncmVnaXN0cnlEb21haW5JZCcsXG4gICAgJ1JlZ2lzdHJhciBXSE9JUyBTZXJ2ZXInOiAncmVnaXN0cmFyV2hvaXNTZXJ2ZXInLFxuICAgICdSZWdpc3RyYXIgVVJMJzogJ3JlZ2lzdHJhclVybCcsXG4gICAgJ1VwZGF0ZWQgRGF0ZSc6ICd1cGRhdGVkRGF0ZScsXG4gICAgJ0NyZWF0aW9uIERhdGUnOiAnY3JlYXRpb25EYXRlJyxcbiAgICAnUmVnaXN0cnkgRXhwaXJ5IERhdGUnOiAnZXhwaXJ5RGF0ZScsXG4gICAgJ1JlZ2lzdHJhcic6ICdyZWdpc3RyYXInLFxuICAgICdSZWdpc3RyYXIgSUFOQSBJRCc6ICdyZWdpc3RyYXJJYW5hSWQnLFxuICAgICdSZWdpc3RyYXIgQWJ1c2UgQ29udGFjdCBFbWFpbCc6ICdyZWdpc3RyYXJBYnVzZUNvbnRhY3RFbWFpbCcsXG4gICAgJ1JlZ2lzdHJhciBBYnVzZSBDb250YWN0IFBob25lJzogJ3JlZ2lzdHJhckFidXNlQ29udGFjdFBob25lJyxcbiAgICAnRG9tYWluIFN0YXR1cyc6ICdkb21haW5TdGF0dXMnLFxuICAgICdOYW1lIFNlcnZlcic6ICduYW1lU2VydmVyJyxcbiAgICAnRE5TU0VDJzogJ0ROU1NFQydcbn07XG5cbi8vIENvbmZpZ3VyYXRpb24gb2YgdGhlIEhUVFAgZmV0Y2hpbmcgbWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYW1lOiAnd2hvaXMnLFxuICAgIGZldGNoOiBhc3luYyAoZG9tYWluTmFtZSkgPT4ge1xuICAgICAgICBsZXQgZG9tYWluUmVzb2x1dGlvbiA9IGF3YWl0IHdob2lzLmxvb2t1cChkb21haW5OYW1lKTtcbiAgICAgICAgcmV0dXJuIGRvbWFpblJlc29sdXRpb25cbiAgICAgICAgICAgIC5zcGxpdCgnXFxyXFxuJylcbiAgICAgICAgICAgIC5tYXAobCA9PiBsLnRyaW0oKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGEsIHYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnPj4+ICcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnIDw8PCcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdi5zcGxpdCgnOiAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgcmVwbGFjZW1lbnRzW3ZbMF1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtyZXBsYWNlbWVudHNbdlswXV1dID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuICAgIH1cbn07XG4iXX0=
|