@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
184 lines • 23.5 kB
JavaScript
import { Injectable } from '@angular/core';
import { FetchClient, InventoryService, TenantOptionsService } from '@c8y/client';
import { AppStateService, gettext } from '@c8y/ngx-components';
import { TranslateService } from '@ngx-translate/core';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/client";
import * as i2 from "@ngx-translate/core";
import * as i3 from "@c8y/ngx-components";
export var SigfoxErrorName;
(function (SigfoxErrorName) {
SigfoxErrorName["NoDeviceProtocolsError"] = "NoDeviceProtocolsError";
SigfoxErrorName["NoConnectivitySettingsError"] = "NoConnectivitySettingsError";
SigfoxErrorName["ConnectivitySettingsError"] = "ConnectivitySettingsError";
SigfoxErrorName["ContractError"] = "ContractError";
SigfoxErrorName["NoContractsError"] = "NoContractsError";
SigfoxErrorName["RegistrationError"] = "RegistrationError";
SigfoxErrorName["DeviceProtocolsFetchError"] = "DeviceProtocolsFetchError";
})(SigfoxErrorName || (SigfoxErrorName = {}));
export class SigfoxProviderService {
constructor(client, inventoryService, tenantOptions, translateService, appState) {
this.client = client;
this.inventoryService = inventoryService;
this.tenantOptions = tenantOptions;
this.translateService = translateService;
this.appState = appState;
this.baseUrl = '/service/sigfox-agent/';
this.registrationUrl = `${this.baseUrl}newDeviceRequest`;
this.contractsUrl = `${this.baseUrl}contract`;
this.header = { 'Content-Type': 'application/json' };
}
async getConnections() {
const options = {
method: 'GET',
headers: this.header
};
const res = await this.client.fetch(`${this.baseUrl}lns-connection`, options);
const data = await res.json();
if (res.status === 200) {
if (data.length === 0) {
await this.throwNoConnectivitySettingsError();
}
}
else {
await this.throwConnectivitySettingsError(data);
}
return { res, data };
}
/**
* Gets contracts from Sigfox platform.
* @param connectionName The name of connection for which contracts will be retrieved
* @returns The result list with contract, or throws an error with exception.
*/
async getContracts(connectionName) {
const options = {
method: 'GET',
headers: this.header,
params: {
sigfoxConnectionName: connectionName
}
};
const res = await this.client.fetch(this.contractsUrl, options);
const data = await res.json();
if (res.status === 200) {
if (data.length === 0) {
this.throwNoContractsError();
}
}
else {
this.throwContractError(data);
}
return { res, data };
}
async createDevice(device) {
const options = {
method: 'POST',
headers: this.header,
body: JSON.stringify(device)
};
const res = await this.client.fetch(this.registrationUrl, options);
const data = await res.json();
if (res.status !== 201) {
this.throwRegistrationError(data);
}
return { res, data };
}
async getAvailableProtocols(filter = { withTotalPages: true }) {
const query = {
__filter: {
__and: [
{ __has: 'c8y_IsDeviceType' },
{
type: { __in: ['c8y_SigfoxDeviceType', 'c8y_LpwanDeviceType'] }
}
]
},
__orderby: [{ name: 1 }]
};
const deviceProtocolsList = await this.inventoryService.listQuery(query, filter);
const { res, data } = deviceProtocolsList;
if (res.status === 200) {
if (data.length === 0) {
this.throwNoDeviceProtocolsError();
}
}
else {
this.throwDeviceProtocolsFetchError();
}
return deviceProtocolsList;
}
async hasConnectivitySettings() {
const option = {
category: 'sigfox-agent',
key: 'provider.token'
};
try {
await this.tenantOptions.detail(option);
return true;
}
catch (e) {
await this.throwNoConnectivitySettingsError();
}
}
async throwNoConnectivitySettingsError() {
const error = new Error();
error.name = SigfoxErrorName.NoConnectivitySettingsError;
const hasAdminRight = await this.appState.isApplicationAvailable('administration');
if (hasAdminRight) {
error.message = this.translateService.instant(gettext(`Connectivity settings are not configured. Configure them in the Administration application under <a href="{{ link }}">Settings</a>.`), {
link: '/apps/administration/index.html#/connectivitySettings/multiple_lns_connectors_sigfox'
});
}
else {
error.message = gettext('Connectivity settings are not configured. Contact the administrator.');
}
throw error;
}
throwConnectivitySettingsError(data) {
const error = new Error();
error.name = SigfoxErrorName.ConnectivitySettingsError;
error.message = data.message;
throw error;
}
throwRegistrationError(data) {
const error = new Error();
error.name = SigfoxErrorName.RegistrationError;
error.message = data.message;
throw error;
}
throwDeviceProtocolsFetchError() {
const error = new Error();
error.name = SigfoxErrorName.DeviceProtocolsFetchError;
error.message = gettext('Could not load device protocols.');
throw error;
}
throwNoDeviceProtocolsError() {
const error = new Error();
error.name = SigfoxErrorName.NoDeviceProtocolsError;
error.message = this.translateService.instant(gettext(`No device protocols configured. Create a Sigfox device protocol in <a href="{{ link }}">Device protocols</a>.`), {
link: '/apps/devicemanagement/#/deviceprotocols'
});
throw error;
}
throwContractError(data) {
const error = new Error();
error.name = SigfoxErrorName.ContractError;
error.message = data.message;
throw error;
}
throwNoContractsError() {
const error = new Error();
error.name = SigfoxErrorName.NoContractsError;
error.message = gettext('No contracts found. New contracts must be created via the Sigfox platform.');
throw error;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SigfoxProviderService, deps: [{ token: i1.FetchClient }, { token: i1.InventoryService }, { token: i1.TenantOptionsService }, { token: i2.TranslateService }, { token: i3.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SigfoxProviderService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SigfoxProviderService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.FetchClient }, { type: i1.InventoryService }, { type: i1.TenantOptionsService }, { type: i2.TranslateService }, { type: i3.AppStateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnZm94LXByb3ZpZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zaWdmb3gtZGV2aWNlLXJlZ2lzdHJhdGlvbi9zaWdmb3gtcHJvdmlkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxXQUFXLEVBR1gsZ0JBQWdCLEVBSWhCLG9CQUFvQixFQUNyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQUd2RCxNQUFNLENBQU4sSUFBWSxlQVFYO0FBUkQsV0FBWSxlQUFlO0lBQ3pCLG9FQUFpRCxDQUFBO0lBQ2pELDhFQUEyRCxDQUFBO0lBQzNELDBFQUF1RCxDQUFBO0lBQ3ZELGtEQUErQixDQUFBO0lBQy9CLHdEQUFxQyxDQUFBO0lBQ3JDLDBEQUF1QyxDQUFBO0lBQ3ZDLDBFQUF1RCxDQUFBO0FBQ3pELENBQUMsRUFSVyxlQUFlLEtBQWYsZUFBZSxRQVExQjtBQUtELE1BQU0sT0FBTyxxQkFBcUI7SUFNaEMsWUFDVSxNQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsYUFBbUMsRUFDbkMsZ0JBQWtDLEVBQ2xDLFFBQXlCO1FBSnpCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQVZsQixZQUFPLEdBQVcsd0JBQXdCLENBQUM7UUFDM0Msb0JBQWUsR0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLGtCQUFrQixDQUFDO1FBQzVELGlCQUFZ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QUM7SUFDZCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsc0JBQXNCLENBQUM7UUFDcEQsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQyxPQUFPLENBQ0wsK0dBQStHLENBQ2hILEVBQ0Q7WUFDRSxJQUFJLEVBQUUsMENBQTBDO1NBQ2pELENBQ0YsQ0FBQztRQUNGLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQXlCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzNDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5QyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FDckIsNEVBQTRFLENBQzdFLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7K0dBdkxVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGZXRjaENsaWVudCxcbiAgSUZldGNoT3B0aW9ucyxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVGVuYW50T3B0aW9uLFxuICBUZW5hbnRPcHRpb25zU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNpZ2ZveERldmljZSB9IGZyb20gJy4vc2lnZm94LWRldmljZS1yZWdpc3RyYXRpb24ubW9kZWwnO1xuXG5leHBvcnQgZW51bSBTaWdmb3hFcnJvck5hbWUge1xuICBOb0RldmljZVByb3RvY29sc0Vycm9yID0gJ05vRGV2aWNlUHJvdG9jb2xzRXJyb3InLFxuICBOb0Nvbm5lY3Rpdml0eVNldHRpbmdzRXJyb3IgPSAnTm9Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yJyxcbiAgQ29ubmVjdGl2aXR5U2V0dGluZ3NFcnJvciA9ICdDb25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yJyxcbiAgQ29udHJhY3RFcnJvciA9ICdDb250cmFjdEVycm9yJyxcbiAgTm9Db250cmFjdHNFcnJvciA9ICdOb0NvbnRyYWN0c0Vycm9yJyxcbiAgUmVnaXN0cmF0aW9uRXJyb3IgPSAnUmVnaXN0cmF0aW9uRXJyb3InLFxuICBEZXZpY2VQcm90b2NvbHNGZXRjaEVycm9yID0gJ0RldmljZVByb3RvY29sc0ZldGNoRXJyb3InXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNpZ2ZveFByb3ZpZGVyU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZVVybDogc3RyaW5nID0gJy9zZXJ2aWNlL3NpZ2ZveC1hZ2VudC8nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvblVybDogc3RyaW5nID0gYCR7dGhpcy5iYXNlVXJsfW5ld0RldmljZVJlcXVlc3RgO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYWN0c1VybDogc3RyaW5nID0gYCR7dGhpcy5iYXNlVXJsfWNvbnRyYWN0YDtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXI6IGFueSA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRPcHRpb25zOiBUZW5hbnRPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge31cbiAgYXN5bmMgZ2V0Q29ubmVjdGlvbnMoKSB7XG4gICAgY29uc3Qgb3B0aW9uczogSUZldGNoT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlclxuICAgIH07XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQuZmV0Y2goYCR7dGhpcy5iYXNlVXJsfWxucy1jb25uZWN0aW9uYCwgb3B0aW9ucyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYXdhaXQgdGhpcy50aHJvd05vQ29ubmVjdGl2aXR5U2V0dGluZ3NFcnJvcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnRocm93Q29ubmVjdGl2aXR5U2V0dGluZ3NFcnJvcihkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzLCBkYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb250cmFjdHMgZnJvbSBTaWdmb3ggcGxhdGZvcm0uXG4gICAqIEBwYXJhbSBjb25uZWN0aW9uTmFtZSBUaGUgbmFtZSBvZiBjb25uZWN0aW9uIGZvciB3aGljaCBjb250cmFjdHMgd2lsbCBiZSByZXRyaWV2ZWRcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBsaXN0IHdpdGggY29udHJhY3QsIG9yIHRocm93cyBhbiBlcnJvciB3aXRoIGV4Y2VwdGlvbi5cbiAgICovXG4gIGFzeW5jIGdldENvbnRyYWN0cyhjb25uZWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxhbnk+PiB7XG4gICAgY29uc3Qgb3B0aW9uczogSUZldGNoT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcixcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBzaWdmb3hDb25uZWN0aW9uTmFtZTogY29ubmVjdGlvbk5hbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LmZldGNoKHRoaXMuY29udHJhY3RzVXJsLCBvcHRpb25zKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMudGhyb3dOb0NvbnRyYWN0c0Vycm9yKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGhyb3dDb250cmFjdEVycm9yKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4geyByZXMsIGRhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURldmljZShkZXZpY2U6IFNpZ2ZveERldmljZSk6IFByb21pc2U8SVJlc3VsdDxTaWdmb3hEZXZpY2U+PiB7XG4gICAgY29uc3Qgb3B0aW9uczogSUZldGNoT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXIsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkZXZpY2UpXG4gICAgfTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5mZXRjaCh0aGlzLnJlZ2lzdHJhdGlvblVybCwgb3B0aW9ucyk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAxKSB7XG4gICAgICB0aGlzLnRocm93UmVnaXN0cmF0aW9uRXJyb3IoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB7IHJlcywgZGF0YSB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QXZhaWxhYmxlUHJvdG9jb2xzKFxuICAgIGZpbHRlcjogb2JqZWN0ID0geyB3aXRoVG90YWxQYWdlczogdHJ1ZSB9XG4gICk6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgcXVlcnkgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX2FuZDogW1xuICAgICAgICAgIHsgX19oYXM6ICdjOHlfSXNEZXZpY2VUeXBlJyB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHsgX19pbjogWydjOHlfU2lnZm94RGV2aWNlVHlwZScsICdjOHlfTHB3YW5EZXZpY2VUeXBlJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgbmFtZTogMSB9XVxuICAgIH07XG4gICAgY29uc3QgZGV2aWNlUHJvdG9jb2xzTGlzdCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0UXVlcnkocXVlcnksIGZpbHRlcik7XG4gICAgY29uc3QgeyByZXMsIGRhdGEgfSA9IGRldmljZVByb3RvY29sc0xpc3Q7XG5cbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy50aHJvd05vRGV2aWNlUHJvdG9jb2xzRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aHJvd0RldmljZVByb3RvY29sc0ZldGNoRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRldmljZVByb3RvY29sc0xpc3Q7XG4gIH1cblxuICBhc3luYyBoYXNDb25uZWN0aXZpdHlTZXR0aW5ncygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBvcHRpb246IElUZW5hbnRPcHRpb24gPSB7XG4gICAgICBjYXRlZ29yeTogJ3NpZ2ZveC1hZ2VudCcsXG4gICAgICBrZXk6ICdwcm92aWRlci50b2tlbidcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudE9wdGlvbnMuZGV0YWlsKG9wdGlvbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLnRocm93Tm9Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0aHJvd05vQ29ubmVjdGl2aXR5U2V0dGluZ3NFcnJvcigpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLm5hbWUgPSBTaWdmb3hFcnJvck5hbWUuTm9Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yO1xuICAgIGNvbnN0IGhhc0FkbWluUmlnaHQgPSBhd2FpdCB0aGlzLmFwcFN0YXRlLmlzQXBwbGljYXRpb25BdmFpbGFibGUoJ2FkbWluaXN0cmF0aW9uJyk7XG4gICAgaWYgKGhhc0FkbWluUmlnaHQpIHtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICBgQ29ubmVjdGl2aXR5IHNldHRpbmdzIGFyZSBub3QgY29uZmlndXJlZC4gQ29uZmlndXJlIHRoZW0gaW4gdGhlIEFkbWluaXN0cmF0aW9uIGFwcGxpY2F0aW9uIHVuZGVyIDxhIGhyZWY9XCJ7eyBsaW5rIH19XCI+U2V0dGluZ3M8L2E+LmBcbiAgICAgICAgKSxcbiAgICAgICAge1xuICAgICAgICAgIGxpbms6ICcvYXBwcy9hZG1pbmlzdHJhdGlvbi9pbmRleC5odG1sIy9jb25uZWN0aXZpdHlTZXR0aW5ncy9tdWx0aXBsZV9sbnNfY29ubmVjdG9yc19zaWdmb3gnXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgICAnQ29ubmVjdGl2aXR5IHNldHRpbmdzIGFyZSBub3QgY29uZmlndXJlZC4gQ29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd0Nvbm5lY3Rpdml0eVNldHRpbmdzRXJyb3IoZGF0YTogeyBtZXNzYWdlOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3IubmFtZSA9IFNpZ2ZveEVycm9yTmFtZS5Db25uZWN0aXZpdHlTZXR0aW5nc0Vycm9yO1xuICAgIGVycm9yLm1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcHJpdmF0ZSB0aHJvd1JlZ2lzdHJhdGlvbkVycm9yKGRhdGE6IHsgbWVzc2FnZTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLm5hbWUgPSBTaWdmb3hFcnJvck5hbWUuUmVnaXN0cmF0aW9uRXJyb3I7XG4gICAgZXJyb3IubWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdGhyb3dEZXZpY2VQcm90b2NvbHNGZXRjaEVycm9yKCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3IubmFtZSA9IFNpZ2ZveEVycm9yTmFtZS5EZXZpY2VQcm90b2NvbHNGZXRjaEVycm9yO1xuICAgIGVycm9yLm1lc3NhZ2UgPSBnZXR0ZXh0KCdDb3VsZCBub3QgbG9hZCBkZXZpY2UgcHJvdG9jb2xzLicpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd05vRGV2aWNlUHJvdG9jb2xzRXJyb3IoKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5uYW1lID0gU2lnZm94RXJyb3JOYW1lLk5vRGV2aWNlUHJvdG9jb2xzRXJyb3I7XG4gICAgZXJyb3IubWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgYE5vIGRldmljZSBwcm90b2NvbHMgY29uZmlndXJlZC4gQ3JlYXRlIGEgU2lnZm94IGRldmljZSBwcm90b2NvbCBpbiA8YSBocmVmPVwie3sgbGluayB9fVwiPkRldmljZSBwcm90b2NvbHM8L2E+LmBcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGxpbms6ICcvYXBwcy9kZXZpY2VtYW5hZ2VtZW50LyMvZGV2aWNlcHJvdG9jb2xzJ1xuICAgICAgfVxuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBwcml2YXRlIHRocm93Q29udHJhY3RFcnJvcihkYXRhOiB7IG1lc3NhZ2U6IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5uYW1lID0gU2lnZm94RXJyb3JOYW1lLkNvbnRyYWN0RXJyb3I7XG4gICAgZXJyb3IubWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgdGhyb3dOb0NvbnRyYWN0c0Vycm9yKCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3IubmFtZSA9IFNpZ2ZveEVycm9yTmFtZS5Ob0NvbnRyYWN0c0Vycm9yO1xuICAgIGVycm9yLm1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgJ05vIGNvbnRyYWN0cyBmb3VuZC4gTmV3IGNvbnRyYWN0cyBtdXN0IGJlIGNyZWF0ZWQgdmlhIHRoZSBTaWdmb3ggcGxhdGZvcm0uJ1xuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdfQ==