UNPKG

@bhayward93/web3modal-angular

Version:

Web3Modal implementation for Angular

184 lines 25.2 kB
import * as list from '../providers'; import { CACHED_PROVIDER_KEY, CONNECT_EVENT, ERROR_EVENT, INJECTED_PROVIDER_ID } from '../constants'; import { filterMatches, findMatchingRequiredOptions, getInjectedProvider, getLocal, getProviderDescription, getProviderInfoById, isMobile, removeLocal, setLocal, } from '../helpers'; import { EventController } from './events'; export class ProviderController { constructor(opts) { this.cachedProvider = ''; this.shouldCacheProvider = false; this.disableInjectedProvider = false; this.eventController = new EventController(); this.injectedProvider = null; this.providers = []; this.network = ''; this.getUserOptions = () => { const mobile = isMobile(); const defaultProviderList = this.providers.map(({ id }) => id); const displayInjected = !!this.injectedProvider && !this.disableInjectedProvider; const onlyInjected = displayInjected && mobile; const providerList = []; if (onlyInjected) { providerList.push(INJECTED_PROVIDER_ID); } else { if (displayInjected) { providerList.push(INJECTED_PROVIDER_ID); } defaultProviderList.forEach((id) => { if (id !== INJECTED_PROVIDER_ID) { const result = this.shouldDisplayProvider(id); if (result) { providerList.push(id); } } }); } const userOptions = []; providerList.forEach((id) => { let provider = this.getProvider(id); if (typeof provider !== 'undefined') { let { id, name, logo, connector } = provider; // replace logo with configuration set logo, use default as fallback. logo = this.providerOptions[id]?.logoUrl ?? logo; userOptions.push({ name, logo, description: getProviderDescription(provider), onClick: () => this.connectTo(id, connector), }); } }); return userOptions; }; this.connectTo = async (id, connector) => { try { const providerPackage = this.getProviderOption(id, 'package'); const providerOptions = this.getProviderOption(id, 'options'); const opts = { network: this.network || undefined, ...providerOptions }; const provider = await connector(providerPackage, opts); this.eventController.trigger(CONNECT_EVENT, provider); if (this.shouldCacheProvider && this.cachedProvider !== id) { this.setCachedProvider(id); } } catch (error) { this.eventController.trigger(ERROR_EVENT); } }; this.cachedProvider = getLocal(CACHED_PROVIDER_KEY) || ''; this.disableInjectedProvider = opts.disableInjectedProvider; this.shouldCacheProvider = opts.cacheProvider; this.providerOptions = opts.providerOptions; this.network = opts.network; this.injectedProvider = getInjectedProvider(); this.providers = Object.keys(list.connectors).map((id) => { let providerInfo; if (id === INJECTED_PROVIDER_ID) { providerInfo = this.injectedProvider || list.providers.FALLBACK; } else { providerInfo = getProviderInfoById(id); } // parse custom display options if (this.providerOptions[id]) { const options = this.providerOptions[id]; if (typeof options.display !== 'undefined') { providerInfo = { ...providerInfo, ...this.providerOptions[id].display, }; } } return { ...providerInfo, connector: list.connectors[id], package: providerInfo.package, }; }); // parse custom providers Object.keys(this.providerOptions) .filter(key => key.startsWith('custom-')) .map(id => { if (id && this.providerOptions[id]) { const options = this.providerOptions[id]; if (typeof options.display !== 'undefined' && typeof options.connector !== 'undefined') { this.providers.push({ ...list.providers.FALLBACK, id, ...options.display, connector: options.connector, }); } } }); } shouldDisplayProvider(id) { const provider = this.getProvider(id); if (typeof provider !== 'undefined') { const providerPackageOptions = this.providerOptions[id]; if (providerPackageOptions) { const isProvided = !!providerPackageOptions.package; if (isProvided) { const requiredOptions = provider.package ? provider.package.required : undefined; if (requiredOptions && requiredOptions.length) { const providedOptions = providerPackageOptions.options; if (providedOptions && Object.keys(providedOptions).length) { const matches = findMatchingRequiredOptions(requiredOptions, providedOptions); if (requiredOptions.length === matches.length) { return true; } } } else { return true; } } } } return false; } getProvider(id) { return filterMatches(this.providers, x => x.id === id, undefined); } getProviderOption(id, key) { return this.providerOptions && this.providerOptions[id] && this.providerOptions[id][key] ? this.providerOptions[id][key] : {}; } clearCachedProvider() { this.cachedProvider = ''; removeLocal(CACHED_PROVIDER_KEY); } setCachedProvider(id) { this.cachedProvider = id; setLocal(CACHED_PROVIDER_KEY, id); } async connectToCachedProvider() { const provider = this.getProvider(this.cachedProvider); if (typeof provider !== 'undefined') { await this.connectTo(provider.id, provider.connector); } } on(event, callback) { this.eventController.on({ event, callback, }); return () => this.eventController.off({ event, callback, }); } off(event, callback) { this.eventController.off({ event, callback, }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViM21vZGFsL3NyYy9saWIvd2ViM21vZGFsLXRzL3NyYy9jb250cm9sbGVycy9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckcsT0FBTyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBTW5CLFFBQVEsRUFDUixXQUFXLEVBQ1gsUUFBUSxHQUNULE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0MsTUFBTSxPQUFPLGtCQUFrQjtJQVc3QixZQUFZLElBQWdDO1FBVnJDLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFFeEMsb0JBQWUsR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBeUIsSUFBSSxDQUFDO1FBQzlDLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBRWhELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFzRnRCLG1CQUFjLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvRCxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxD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aXN0IGZyb20gJy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBDQUNIRURfUFJPVklERVJfS0VZLCBDT05ORUNUX0VWRU5ULCBFUlJPUl9FVkVOVCwgSU5KRUNURURfUFJPVklERVJfSUQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZmlsdGVyTWF0Y2hlcyxcbiAgZmluZE1hdGNoaW5nUmVxdWlyZWRPcHRpb25zLFxuICBnZXRJbmplY3RlZFByb3ZpZGVyLFxuICBnZXRMb2NhbCxcbiAgZ2V0UHJvdmlkZXJEZXNjcmlwdGlvbixcbiAgZ2V0UHJvdmlkZXJJbmZvQnlJZCxcbiAgSVByb3ZpZGVyQ29udHJvbGxlck9wdGlvbnMsXG4gIElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yLFxuICBJUHJvdmlkZXJJbmZvLFxuICBJUHJvdmlkZXJPcHRpb25zLFxuICBJUHJvdmlkZXJVc2VyT3B0aW9ucyxcbiAgaXNNb2JpbGUsXG4gIHJlbW92ZUxvY2FsLFxuICBzZXRMb2NhbCxcbn0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBFdmVudENvbnRyb2xsZXIgfSBmcm9tICcuL2V2ZW50cyc7XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnRyb2xsZXIge1xuICBwdWJsaWMgY2FjaGVkUHJvdmlkZXI6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgc2hvdWxkQ2FjaGVQcm92aWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGlzYWJsZUluamVjdGVkUHJvdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGV2ZW50Q29udHJvbGxlcjogRXZlbnRDb250cm9sbGVyID0gbmV3IEV2ZW50Q29udHJvbGxlcigpO1xuICBwcml2YXRlIGluamVjdGVkUHJvdmlkZXI6IElQcm92aWRlckluZm8gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm92aWRlcnM6IElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm92aWRlck9wdGlvbnM6IElQcm92aWRlck9wdGlvbnM7XG4gIHByaXZhdGUgbmV0d29yazogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3Iob3B0czogSVByb3ZpZGVyQ29udHJvbGxlck9wdGlvbnMpIHtcbiAgICB0aGlzLmNhY2hlZFByb3ZpZGVyID0gZ2V0TG9jYWwoQ0FDSEVEX1BST1ZJREVSX0tFWSkgfHwgJyc7XG5cbiAgICB0aGlzLmRpc2FibGVJbmplY3RlZFByb3ZpZGVyID0gb3B0cy5kaXNhYmxlSW5qZWN0ZWRQcm92aWRlcjtcbiAgICB0aGlzLnNob3VsZENhY2hlUHJvdmlkZXIgPSBvcHRzLmNhY2hlUHJvdmlkZXI7XG4gICAgdGhpcy5wcm92aWRlck9wdGlvbnMgPSBvcHRzLnByb3ZpZGVyT3B0aW9ucztcbiAgICB0aGlzLm5ldHdvcmsgPSBvcHRzLm5ldHdvcms7XG5cbiAgICB0aGlzLmluamVjdGVkUHJvdmlkZXIgPSBnZXRJbmplY3RlZFByb3ZpZGVyKCk7XG5cbiAgICB0aGlzLnByb3ZpZGVycyA9IE9iamVjdC5rZXlzKGxpc3QuY29ubmVjdG9ycykubWFwKChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgcHJvdmlkZXJJbmZvOiBJUHJvdmlkZXJJbmZvO1xuICAgICAgaWYgKGlkID09PSBJTkpFQ1RFRF9QUk9WSURFUl9JRCkge1xuICAgICAgICBwcm92aWRlckluZm8gPSB0aGlzLmluamVjdGVkUHJvdmlkZXIgfHwgbGlzdC5wcm92aWRlcnMuRkFMTEJBQ0s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm92aWRlckluZm8gPSBnZXRQcm92aWRlckluZm9CeUlkKGlkKTtcbiAgICAgIH1cbiAgICAgIC8vIHBhcnNlIGN1c3RvbSBkaXNwbGF5IG9wdGlvbnNcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVyT3B0aW9uc1tpZF0pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRpc3BsYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgICAgICAgLi4ucHJvdmlkZXJJbmZvLFxuICAgICAgICAgICAgLi4udGhpcy5wcm92aWRlck9wdGlvbnNbaWRdLmRpc3BsYXksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJvdmlkZXJJbmZvLFxuICAgICAgICBjb25uZWN0b3I6IGxpc3QuY29ubmVjdG9yc1tpZF0sXG4gICAgICAgIHBhY2thZ2U6IHByb3ZpZGVySW5mby5wYWNrYWdlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBwYXJzZSBjdXN0b20gcHJvdmlkZXJzXG4gICAgT2JqZWN0LmtleXModGhpcy5wcm92aWRlck9wdGlvbnMpXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnY3VzdG9tLScpKVxuICAgICAgLm1hcChpZCA9PiB7XG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnByb3ZpZGVyT3B0aW9uc1tpZF0pIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmRpc3BsYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5jb25uZWN0b3IgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4ubGlzdC5wcm92aWRlcnMuRkFMTEJBQ0ssXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAuLi5vcHRpb25zLmRpc3BsYXksXG4gICAgICAgICAgICAgIGNvbm5lY3Rvcjogb3B0aW9ucy5jb25uZWN0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3VsZERpc3BsYXlQcm92aWRlcihpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKGlkKTtcbiAgICBpZiAodHlwZW9mIHByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgcHJvdmlkZXJQYWNrYWdlT3B0aW9ucyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXTtcbiAgICAgIGlmIChwcm92aWRlclBhY2thZ2VPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlzUHJvdmlkZWQgPSAhIXByb3ZpZGVyUGFja2FnZU9wdGlvbnMucGFja2FnZTtcbiAgICAgICAgaWYgKGlzUHJvdmlkZWQpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZE9wdGlvbnMgPSBwcm92aWRlci5wYWNrYWdlXG4gICAgICAgICAgICA/IHByb3ZpZGVyLnBhY2thZ2UucmVxdWlyZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChyZXF1aXJlZE9wdGlvbnMgJiYgcmVxdWlyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gcHJvdmlkZXJQYWNrYWdlT3B0aW9ucy5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVkT3B0aW9ucyAmJiBPYmplY3Qua2V5cyhwcm92aWRlZE9wdGlvbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZmluZE1hdGNoaW5nUmVxdWlyZWRPcHRpb25zKFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBwcm92aWRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkT3B0aW9ucy5sZW5ndGggPT09IG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBtb2JpbGUgPSBpc01vYmlsZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRQcm92aWRlckxpc3QgPSB0aGlzLnByb3ZpZGVycy5tYXAoKHsgaWQgfSkgPT4gaWQpO1xuXG4gICAgY29uc3QgZGlzcGxheUluamVjdGVkID1cbiAgICAgICEhdGhpcy5pbmplY3RlZFByb3ZpZGVyICYmICF0aGlzLmRpc2FibGVJbmplY3RlZFByb3ZpZGVyO1xuICAgIGNvbnN0IG9ubHlJbmplY3RlZCA9IGRpc3BsYXlJbmplY3RlZCAmJiBtb2JpbGU7XG5cbiAgICBjb25zdCBwcm92aWRlckxpc3QgPSBbXTtcblxuICAgIGlmIChvbmx5SW5qZWN0ZWQpIHtcbiAgICAgIHByb3ZpZGVyTGlzdC5wdXNoKElOSkVDVEVEX1BST1ZJREVSX0lEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRpc3BsYXlJbmplY3RlZCkge1xuICAgICAgICBwcm92aWRlckxpc3QucHVzaChJTkpFQ1RFRF9QUk9WSURFUl9JRCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRQcm92aWRlckxpc3QuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaWQgIT09IElOSkVDVEVEX1BST1ZJREVSX0lEKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zaG91bGREaXNwbGF5UHJvdmlkZXIoaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyTGlzdC5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJPcHRpb25zOiBJUHJvdmlkZXJVc2VyT3B0aW9uc1tdID0gW107XG5cbiAgICBwcm92aWRlckxpc3QuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihpZCk7XG4gICAgICBpZiAodHlwZW9mIHByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgeyBpZCwgbmFtZSwgbG9nbywgY29ubmVjdG9yIH0gPSBwcm92aWRlcjtcblxuICAgICAgICAvLyByZXBsYWNlIGxvZ28gd2l0aCBjb25maWd1cmF0aW9uIHNldCBsb2dvLCB1c2UgZGVmYXVsdCBhcyBmYWxsYmFjay5cbiAgICAgICAgbG9nbyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXT8ubG9nb1VybCA/PyBsb2dvO1xuICAgICAgICB1c2VyT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGxvZ28sXG4gICAgICAgICAgZGVzY3JpcHRpb246IGdldFByb3ZpZGVyRGVzY3JpcHRpb24ocHJvdmlkZXIpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuY29ubmVjdFRvKGlkLCBjb25uZWN0b3IpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1c2VyT3B0aW9ucztcbiAgfTtcblxuICBwdWJsaWMgZ2V0UHJvdmlkZXIoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGVzPElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yPihcbiAgICAgIHRoaXMucHJvdmlkZXJzLFxuICAgICAgeCA9PiB4LmlkID09PSBpZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvdmlkZXJPcHRpb24oaWQ6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlck9wdGlvbnMgJiZcbiAgICAgIHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXSAmJlxuICAgICAgdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdW2tleV1cbiAgICAgID8gdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdW2tleV1cbiAgICAgIDoge307XG4gIH1cblxuICBwdWJsaWMgY2xlYXJDYWNoZWRQcm92aWRlcigpIHtcbiAgICB0aGlzLmNhY2hlZFByb3ZpZGVyID0gJyc7XG4gICAgcmVtb3ZlTG9jYWwoQ0FDSEVEX1BST1ZJREVSX0tFWSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2FjaGVkUHJvdmlkZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuY2FjaGVkUHJvdmlkZXIgPSBpZDtcbiAgICBzZXRMb2NhbChDQUNIRURfUFJPVklERVJfS0VZLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgY29ubmVjdFRvID0gYXN5bmMgKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29ubmVjdG9yOiAocHJvdmlkZXJQYWNrYWdlOiBhbnksIG9wdHM6IGFueSkgPT4gUHJvbWlzZTxhbnk+XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlclBhY2thZ2UgPSB0aGlzLmdldFByb3ZpZGVyT3B0aW9uKGlkLCAncGFja2FnZScpO1xuICAgICAgY29uc3QgcHJvdmlkZXJPcHRpb25zID0gdGhpcy5nZXRQcm92aWRlck9wdGlvbihpZCwgJ29wdGlvbnMnKTtcbiAgICAgIGNvbnN0IG9wdHMgPSB7IG5ldHdvcms6IHRoaXMubmV0d29yayB8fCB1bmRlZmluZWQsIC4uLnByb3ZpZGVyT3B0aW9ucyB9O1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBjb25uZWN0b3IocHJvdmlkZXJQYWNrYWdlLCBvcHRzKTtcbiAgICAgIHRoaXMuZXZlbnRDb250cm9sbGVyLnRyaWdnZXIoQ09OTkVDVF9FVkVOVCwgcHJvdmlkZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvdWxkQ2FjaGVQcm92aWRlciAmJiB0aGlzLmNhY2hlZFByb3ZpZGVyICE9PSBpZCkge1xuICAgICAgICB0aGlzLnNldENhY2hlZFByb3ZpZGVyKGlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ldmVudENvbnRyb2xsZXIudHJpZ2dlcihFUlJPUl9FVkVOVCk7XG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0VG9DYWNoZWRQcm92aWRlcigpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIodGhpcy5jYWNoZWRQcm92aWRlcik7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvKHByb3ZpZGVyLmlkLCBwcm92aWRlci5jb25uZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogKHJlc3VsdDogYW55KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5ldmVudENvbnRyb2xsZXIub24oe1xuICAgICAgZXZlbnQsXG4gICAgICBjYWxsYmFjayxcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PlxuICAgICAgdGhpcy5ldmVudENvbnRyb2xsZXIub2ZmKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb2ZmKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrPzogKHJlc3VsdDogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudENvbnRyb2xsZXIub2ZmKHtcbiAgICAgIGV2ZW50LFxuICAgICAgY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==