@bhayward93/web3modal-angular
Version:
Web3Modal implementation for Angular
184 lines • 25.2 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViM21vZGFsL3NyYy9saWIvd2ViM21vZGFsLXRzL3NyYy9jb250cm9sbGVycy9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckcsT0FBTyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBTW5CLFFBQVEsRUFDUixXQUFXLEVBQ1gsUUFBUSxHQUNULE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0MsTUFBTSxPQUFPLGtCQUFrQjtJQVc3QixZQUFZLElBQWdDO1FBVnJDLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUNyQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFFeEMsb0JBQWUsR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBeUIsSUFBSSxDQUFDO1FBQzlDLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBRWhELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFzRnRCLG1CQUFjLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvRCxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztZQUMzRCxNQUFNLFlBQVksR0FBRyxlQUFlLElBQUksTUFBTSxDQUFDO1lBRS9DLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFFRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxFQUFFLEtBQUssb0JBQW9CLEVBQUUsQ0FBQzt3QkFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QyxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3hCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1lBRS9DLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztvQkFFN0MscUVBQXFFO29CQUNyRSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO29CQUNqRCxXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNmLElBQUk7d0JBQ0osSUFBSTt3QkFDSixXQUFXLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDO3dCQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDO3FCQUM3QyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDO1FBNEJLLGNBQVMsR0FBRyxLQUFLLEVBQ3RCLEVBQVUsRUFDVixTQUE0RCxFQUM1RCxFQUFFO1lBQ0YsSUFBSSxDQUFDO2dCQUNILE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7Z0JBQ3hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBN0tBLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFO1lBQy9ELElBQUksWUFBMkIsQ0FBQztZQUNoQyxJQUFJLEVBQUUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNoQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQ2xFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELCtCQUErQjtZQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQzNDLFlBQVksR0FBRzt3QkFDYixHQUFHLFlBQVk7d0JBQ2YsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU87cUJBQ3BDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPO2dCQUNMLEdBQUcsWUFBWTtnQkFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTzthQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCx5QkFBeUI7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDeEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxJQUNFLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxXQUFXO29CQUN0QyxPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUN4QyxDQUFDO29CQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUNsQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTt3QkFDMUIsRUFBRTt3QkFDRixHQUFHLE9BQU8sQ0FBQyxPQUFPO3dCQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7cUJBQzdCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEVBQVU7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BELElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU87d0JBQ3RDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVE7d0JBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2QsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUM5QyxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLENBQUM7d0JBQ3ZELElBQUksZUFBZSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQzNELE1BQU0sT0FBTyxHQUFHLDJCQUEyQixDQUN6QyxlQUFlLEVBQ2YsZUFBZSxDQUNoQixDQUFDOzRCQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQzlDLE9BQU8sSUFBSSxDQUFDOzRCQUNkLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFrRE0sV0FBVyxDQUFDLEVBQVU7UUFDM0IsT0FBTyxhQUFhLENBQ2xCLElBQUksQ0FBQyxTQUFTLEVBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFDaEIsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDOUMsT0FBTyxJQUFJLENBQUMsZUFBZTtZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDL0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQVU7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFvQk0sS0FBSyxDQUFDLHVCQUF1QjtRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsUUFBK0I7UUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdEIsS0FBSztZQUNMLFFBQVE7U0FDVCxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsRUFBRSxDQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLEtBQUs7WUFDTCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsUUFBZ0M7UUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDdkIsS0FBSztZQUNMLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsaXN0IGZyb20gJy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBDQUNIRURfUFJPVklERVJfS0VZLCBDT05ORUNUX0VWRU5ULCBFUlJPUl9FVkVOVCwgSU5KRUNURURfUFJPVklERVJfSUQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZmlsdGVyTWF0Y2hlcyxcbiAgZmluZE1hdGNoaW5nUmVxdWlyZWRPcHRpb25zLFxuICBnZXRJbmplY3RlZFByb3ZpZGVyLFxuICBnZXRMb2NhbCxcbiAgZ2V0UHJvdmlkZXJEZXNjcmlwdGlvbixcbiAgZ2V0UHJvdmlkZXJJbmZvQnlJZCxcbiAgSVByb3ZpZGVyQ29udHJvbGxlck9wdGlvbnMsXG4gIElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yLFxuICBJUHJvdmlkZXJJbmZvLFxuICBJUHJvdmlkZXJPcHRpb25zLFxuICBJUHJvdmlkZXJVc2VyT3B0aW9ucyxcbiAgaXNNb2JpbGUsXG4gIHJlbW92ZUxvY2FsLFxuICBzZXRMb2NhbCxcbn0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBFdmVudENvbnRyb2xsZXIgfSBmcm9tICcuL2V2ZW50cyc7XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnRyb2xsZXIge1xuICBwdWJsaWMgY2FjaGVkUHJvdmlkZXI6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgc2hvdWxkQ2FjaGVQcm92aWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGlzYWJsZUluamVjdGVkUHJvdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGV2ZW50Q29udHJvbGxlcjogRXZlbnRDb250cm9sbGVyID0gbmV3IEV2ZW50Q29udHJvbGxlcigpO1xuICBwcml2YXRlIGluamVjdGVkUHJvdmlkZXI6IElQcm92aWRlckluZm8gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm92aWRlcnM6IElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm92aWRlck9wdGlvbnM6IElQcm92aWRlck9wdGlvbnM7XG4gIHByaXZhdGUgbmV0d29yazogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3Iob3B0czogSVByb3ZpZGVyQ29udHJvbGxlck9wdGlvbnMpIHtcbiAgICB0aGlzLmNhY2hlZFByb3ZpZGVyID0gZ2V0TG9jYWwoQ0FDSEVEX1BST1ZJREVSX0tFWSkgfHwgJyc7XG5cbiAgICB0aGlzLmRpc2FibGVJbmplY3RlZFByb3ZpZGVyID0gb3B0cy5kaXNhYmxlSW5qZWN0ZWRQcm92aWRlcjtcbiAgICB0aGlzLnNob3VsZENhY2hlUHJvdmlkZXIgPSBvcHRzLmNhY2hlUHJvdmlkZXI7XG4gICAgdGhpcy5wcm92aWRlck9wdGlvbnMgPSBvcHRzLnByb3ZpZGVyT3B0aW9ucztcbiAgICB0aGlzLm5ldHdvcmsgPSBvcHRzLm5ldHdvcms7XG5cbiAgICB0aGlzLmluamVjdGVkUHJvdmlkZXIgPSBnZXRJbmplY3RlZFByb3ZpZGVyKCk7XG5cbiAgICB0aGlzLnByb3ZpZGVycyA9IE9iamVjdC5rZXlzKGxpc3QuY29ubmVjdG9ycykubWFwKChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgcHJvdmlkZXJJbmZvOiBJUHJvdmlkZXJJbmZvO1xuICAgICAgaWYgKGlkID09PSBJTkpFQ1RFRF9QUk9WSURFUl9JRCkge1xuICAgICAgICBwcm92aWRlckluZm8gPSB0aGlzLmluamVjdGVkUHJvdmlkZXIgfHwgbGlzdC5wcm92aWRlcnMuRkFMTEJBQ0s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm92aWRlckluZm8gPSBnZXRQcm92aWRlckluZm9CeUlkKGlkKTtcbiAgICAgIH1cbiAgICAgIC8vIHBhcnNlIGN1c3RvbSBkaXNwbGF5IG9wdGlvbnNcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVyT3B0aW9uc1tpZF0pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRpc3BsYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgICAgICAgLi4ucHJvdmlkZXJJbmZvLFxuICAgICAgICAgICAgLi4udGhpcy5wcm92aWRlck9wdGlvbnNbaWRdLmRpc3BsYXksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJvdmlkZXJJbmZvLFxuICAgICAgICBjb25uZWN0b3I6IGxpc3QuY29ubmVjdG9yc1tpZF0sXG4gICAgICAgIHBhY2thZ2U6IHByb3ZpZGVySW5mby5wYWNrYWdlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBwYXJzZSBjdXN0b20gcHJvdmlkZXJzXG4gICAgT2JqZWN0LmtleXModGhpcy5wcm92aWRlck9wdGlvbnMpXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnY3VzdG9tLScpKVxuICAgICAgLm1hcChpZCA9PiB7XG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnByb3ZpZGVyT3B0aW9uc1tpZF0pIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmRpc3BsYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5jb25uZWN0b3IgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4ubGlzdC5wcm92aWRlcnMuRkFMTEJBQ0ssXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAuLi5vcHRpb25zLmRpc3BsYXksXG4gICAgICAgICAgICAgIGNvbm5lY3Rvcjogb3B0aW9ucy5jb25uZWN0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3VsZERpc3BsYXlQcm92aWRlcihpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKGlkKTtcbiAgICBpZiAodHlwZW9mIHByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgcHJvdmlkZXJQYWNrYWdlT3B0aW9ucyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXTtcbiAgICAgIGlmIChwcm92aWRlclBhY2thZ2VPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlzUHJvdmlkZWQgPSAhIXByb3ZpZGVyUGFja2FnZU9wdGlvbnMucGFja2FnZTtcbiAgICAgICAgaWYgKGlzUHJvdmlkZWQpIHtcbiAgICAgICAgICBjb25zdCByZXF1aXJlZE9wdGlvbnMgPSBwcm92aWRlci5wYWNrYWdlXG4gICAgICAgICAgICA/IHByb3ZpZGVyLnBhY2thZ2UucmVxdWlyZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChyZXF1aXJlZE9wdGlvbnMgJiYgcmVxdWlyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcHJvdmlkZWRPcHRpb25zID0gcHJvdmlkZXJQYWNrYWdlT3B0aW9ucy5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVkT3B0aW9ucyAmJiBPYmplY3Qua2V5cyhwcm92aWRlZE9wdGlvbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZmluZE1hdGNoaW5nUmVxdWlyZWRPcHRpb25zKFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBwcm92aWRlZE9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkT3B0aW9ucy5sZW5ndGggPT09IG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyT3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBtb2JpbGUgPSBpc01vYmlsZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRQcm92aWRlckxpc3QgPSB0aGlzLnByb3ZpZGVycy5tYXAoKHsgaWQgfSkgPT4gaWQpO1xuXG4gICAgY29uc3QgZGlzcGxheUluamVjdGVkID1cbiAgICAgICEhdGhpcy5pbmplY3RlZFByb3ZpZGVyICYmICF0aGlzLmRpc2FibGVJbmplY3RlZFByb3ZpZGVyO1xuICAgIGNvbnN0IG9ubHlJbmplY3RlZCA9IGRpc3BsYXlJbmplY3RlZCAmJiBtb2JpbGU7XG5cbiAgICBjb25zdCBwcm92aWRlckxpc3QgPSBbXTtcblxuICAgIGlmIChvbmx5SW5qZWN0ZWQpIHtcbiAgICAgIHByb3ZpZGVyTGlzdC5wdXNoKElOSkVDVEVEX1BST1ZJREVSX0lEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRpc3BsYXlJbmplY3RlZCkge1xuICAgICAgICBwcm92aWRlckxpc3QucHVzaChJTkpFQ1RFRF9QUk9WSURFUl9JRCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRQcm92aWRlckxpc3QuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaWQgIT09IElOSkVDVEVEX1BST1ZJREVSX0lEKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zaG91bGREaXNwbGF5UHJvdmlkZXIoaWQpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHByb3ZpZGVyTGlzdC5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJPcHRpb25zOiBJUHJvdmlkZXJVc2VyT3B0aW9uc1tdID0gW107XG5cbiAgICBwcm92aWRlckxpc3QuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihpZCk7XG4gICAgICBpZiAodHlwZW9mIHByb3ZpZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgeyBpZCwgbmFtZSwgbG9nbywgY29ubmVjdG9yIH0gPSBwcm92aWRlcjtcblxuICAgICAgICAvLyByZXBsYWNlIGxvZ28gd2l0aCBjb25maWd1cmF0aW9uIHNldCBsb2dvLCB1c2UgZGVmYXVsdCBhcyBmYWxsYmFjay5cbiAgICAgICAgbG9nbyA9IHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXT8ubG9nb1VybCA/PyBsb2dvO1xuICAgICAgICB1c2VyT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGxvZ28sXG4gICAgICAgICAgZGVzY3JpcHRpb246IGdldFByb3ZpZGVyRGVzY3JpcHRpb24ocHJvdmlkZXIpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuY29ubmVjdFRvKGlkLCBjb25uZWN0b3IpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1c2VyT3B0aW9ucztcbiAgfTtcblxuICBwdWJsaWMgZ2V0UHJvdmlkZXIoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGVzPElQcm92aWRlckRpc3BsYXlXaXRoQ29ubmVjdG9yPihcbiAgICAgIHRoaXMucHJvdmlkZXJzLFxuICAgICAgeCA9PiB4LmlkID09PSBpZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvdmlkZXJPcHRpb24oaWQ6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlck9wdGlvbnMgJiZcbiAgICAgIHRoaXMucHJvdmlkZXJPcHRpb25zW2lkXSAmJlxuICAgICAgdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdW2tleV1cbiAgICAgID8gdGhpcy5wcm92aWRlck9wdGlvbnNbaWRdW2tleV1cbiAgICAgIDoge307XG4gIH1cblxuICBwdWJsaWMgY2xlYXJDYWNoZWRQcm92aWRlcigpIHtcbiAgICB0aGlzLmNhY2hlZFByb3ZpZGVyID0gJyc7XG4gICAgcmVtb3ZlTG9jYWwoQ0FDSEVEX1BST1ZJREVSX0tFWSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2FjaGVkUHJvdmlkZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuY2FjaGVkUHJvdmlkZXIgPSBpZDtcbiAgICBzZXRMb2NhbChDQUNIRURfUFJPVklERVJfS0VZLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgY29ubmVjdFRvID0gYXN5bmMgKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29ubmVjdG9yOiAocHJvdmlkZXJQYWNrYWdlOiBhbnksIG9wdHM6IGFueSkgPT4gUHJvbWlzZTxhbnk+XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlclBhY2thZ2UgPSB0aGlzLmdldFByb3ZpZGVyT3B0aW9uKGlkLCAncGFja2FnZScpO1xuICAgICAgY29uc3QgcHJvdmlkZXJPcHRpb25zID0gdGhpcy5nZXRQcm92aWRlck9wdGlvbihpZCwgJ29wdGlvbnMnKTtcbiAgICAgIGNvbnN0IG9wdHMgPSB7IG5ldHdvcms6IHRoaXMubmV0d29yayB8fCB1bmRlZmluZWQsIC4uLnByb3ZpZGVyT3B0aW9ucyB9O1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBjb25uZWN0b3IocHJvdmlkZXJQYWNrYWdlLCBvcHRzKTtcbiAgICAgIHRoaXMuZXZlbnRDb250cm9sbGVyLnRyaWdnZXIoQ09OTkVDVF9FVkVOVCwgcHJvdmlkZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvdWxkQ2FjaGVQcm92aWRlciAmJiB0aGlzLmNhY2hlZFByb3ZpZGVyICE9PSBpZCkge1xuICAgICAgICB0aGlzLnNldENhY2hlZFByb3ZpZGVyKGlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ldmVudENvbnRyb2xsZXIudHJpZ2dlcihFUlJPUl9FVkVOVCk7XG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0VG9DYWNoZWRQcm92aWRlcigpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIodGhpcy5jYWNoZWRQcm92aWRlcik7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvKHByb3ZpZGVyLmlkLCBwcm92aWRlci5jb25uZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogKHJlc3VsdDogYW55KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5ldmVudENvbnRyb2xsZXIub24oe1xuICAgICAgZXZlbnQsXG4gICAgICBjYWxsYmFjayxcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PlxuICAgICAgdGhpcy5ldmVudENvbnRyb2xsZXIub2ZmKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb2ZmKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrPzogKHJlc3VsdDogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudENvbnRyb2xsZXIub2ZmKHtcbiAgICAgIGV2ZW50LFxuICAgICAgY2FsbGJhY2ssXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==