@c8y/ngx-components 1011.0.22 → 1011.0.25

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.
Files changed (43) hide show
  1. package/bundles/c8y-ngx-components-repository.umd.js +38 -15
  2. package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-search.umd.js +7 -4
  6. package/bundles/c8y-ngx-components-search.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-search.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-search.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
  10. package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +2 -2
  12. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
  13. package/esm2015/repository/configuration/configuration-detail.component.js +7 -2
  14. package/esm2015/repository/configuration-device-tab/device-configuration.component.js +7 -2
  15. package/esm2015/repository/configuration-device-tab/device-configuration.guard.js +4 -2
  16. package/esm2015/repository/firmware-device-tab/firmware-device-tab.component.js +4 -3
  17. package/esm2015/repository/firmware-device-tab/firmware-device-tab.guard.js +4 -5
  18. package/esm2015/repository/software-device-tab/device-software-list.component.js +10 -3
  19. package/esm2015/repository/software-device-tab/installed-software.component.js +10 -2
  20. package/esm2015/repository/software-device-tab/software-device-tab.component.js +2 -2
  21. package/esm2015/repository/software-device-tab/software-device-tab.guard.js +9 -5
  22. package/esm2015/search/search-grid.component.js +2 -2
  23. package/esm2015/search/search.service.js +6 -4
  24. package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
  25. package/fesm2015/c8y-ngx-components-repository.js +43 -16
  26. package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
  27. package/fesm2015/c8y-ngx-components-search.js +6 -4
  28. package/fesm2015/c8y-ngx-components-search.js.map +1 -1
  29. package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
  30. package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
  31. package/locales/locales.pot +13 -6
  32. package/package.json +2 -2
  33. package/repository/c8y-ngx-components-repository.metadata.json +1 -1
  34. package/repository/configuration/configuration-detail.component.d.ts +1 -0
  35. package/repository/configuration-device-tab/device-configuration.guard.d.ts +1 -1
  36. package/repository/firmware-device-tab/firmware-device-tab.component.d.ts +1 -0
  37. package/repository/firmware-device-tab/firmware-device-tab.guard.d.ts +1 -1
  38. package/repository/software-device-tab/device-software-list.component.d.ts +7 -2
  39. package/repository/software-device-tab/installed-software.component.d.ts +4 -0
  40. package/repository/software-device-tab/software-device-tab.guard.d.ts +2 -2
  41. package/search/c8y-ngx-components-search.metadata.json +1 -1
  42. package/search/search.service.d.ts +3 -1
  43. package/sensor-phone/c8y-ngx-components-sensor-phone.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../sensor-phone/sensor-phone.service.ts","../../sensor-phone/sensor-phone-modal.component.ts","../../sensor-phone/connect-smartphone.factory.ts","../../sensor-phone/sensor-phone.module.ts","../../sensor-phone/real-time-mock.service.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","SensorPhoneService","bsModalService","ui","inventoryService","deviceRegistrationService","_this","HTTP_STATUS_CODE","OK","CREATED","PHONE_GROUP_FRAGMENT","PHONE_GROUP_NAME","gettext","currentTenant","subscribe","data","domainName","tenantId","name","prototype","createModal","show","SensorPhoneModalComponent","backdrop","class","getHost","substring","indexOf","getTenantName","split","getTenantId","checkPhoneGroupExists","list","fragmentType","_a","_b","res","status","head","addPhoneGroup","group","createPhoneGroup","c8y_Global","c8y_IsDeviceGroup","type","newPhoneGroup","create","_c","generateRegistrationData","deviceId","createPhoneRegistrationRequest","device","id","groupId","acceptPhoneReqistrationRequest","accept","Injectable","BsModalService","AppStateService","InventoryService","DeviceRegistrationService","bsModalRef","sensorPhoneService","renderer","router","pendingDeviceBootstrap","errorMessage","registrationData","dashboardLink","ngAfterViewInit","stepper","selectionChange","pipe","throttleTime","onStepperSelectionChange","instance","selectedIndex","registerPhone","generateDeviceId","waitForPhoneToConnect","waitForDeviceAndDashboardMos","deviceMo","dashboardMo","onDeviceAndDashboardMosCreated","onFailure","defer","detail","map","tap","phoneRegistration","DeviceRegistrationStatus","WAITING_FOR_CONNECTION","Error","retryWithDelay","toPromise","owner","mos","find","mo","c8y_IsDevice","c8y_Dashboard","container","setStyle","nativeElement","success","Math","floor","random","openDashboard","navigate","cancel","hide","deleteDeviceRequest","retry","undefined","delete","Component","args","selector","template","BsModalRef","Renderer2","Router","ViewChild","C8yStepper","static","read","ElementRef","ConnectSmartphoneFactory","optionsService","get","of","icon","url","click","OptionsService","NgModule","imports","CoreModule","QRCodeModule","declarations","entryComponents","providers","provide","HOOK_DOCS","useClass","multi","RealTimeMock","channel","callback","bootstrapCallback","managedObjCallback","unsubscribe","triggerBootstrap","triggerManagedObject"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SensorPhoneModalComponent } from './sensor-phone-modal.component';\nimport { AppStateService } from '@c8y/ngx-components';\nimport { DeviceRegistrationService, FetchClient, IFetchOptions, InventoryService } from '@c8y/client';\nimport { head } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class SensorPhoneService {\n readonly HTTP_STATUS_CODE = {\n OK: 200,\n CREATED: 201\n };\n private domainName: string;\n private tenantId: string;\n private PHONE_GROUP_FRAGMENT = 'c8y_IsSensorPhoneGroup';\n private readonly PHONE_GROUP_NAME = gettext('Phones');\n\n constructor(\n private bsModalService: BsModalService,\n private ui: AppStateService,\n private inventoryService: InventoryService,\n private deviceRegistrationService: DeviceRegistrationService\n ) {\n this.ui.currentTenant.subscribe(data => {\n if (data) {\n this.domainName = data.domainName;\n this.tenantId = data.name;\n }\n });\n }\n\n createModal() {\n this.bsModalService.show(SensorPhoneModalComponent, {\n backdrop: 'static',\n class: 'lg'\n });\n }\n\n getHost() {\n return this.domainName.substring(this.domainName.indexOf('.') + 1);\n }\n\n getTenantName() {\n return this.domainName.split('.')[0];\n }\n\n getTenantId() {\n return this.tenantId;\n }\n\n async checkPhoneGroupExists() {\n const { data, res } = await this.inventoryService.list({\n fragmentType: this.PHONE_GROUP_FRAGMENT\n });\n if (data && res && res.status === this.HTTP_STATUS_CODE.OK) {\n return head(data);\n }\n return null;\n }\n\n async addPhoneGroup() {\n const group = await this.checkPhoneGroupExists();\n if (group) {\n return group;\n }\n return await this.createPhoneGroup();\n }\n\n async createPhoneGroup() {\n const newPhoneGroup = {\n c8y_Global: {},\n c8y_IsDeviceGroup: {},\n type: 'c8y_DeviceGroup',\n name: this.PHONE_GROUP_NAME,\n [this.PHONE_GROUP_FRAGMENT]: {}\n };\n\n const { data, res } = await this.inventoryService.create(newPhoneGroup);\n if (data && res && res.status === this.HTTP_STATUS_CODE.CREATED) {\n return data;\n }\n return null;\n }\n\n generateRegistrationData(deviceId) {\n const res = 'c8y://' + this.getTenantName() + '.' + this.getHost() + '/?deviceId=' + deviceId;\n return res;\n }\n\n async createPhoneRegistrationRequest(deviceId) {\n const group = await this.addPhoneGroup();\n const device = { id: deviceId, groupId: group.id };\n\n const { res } = await this.deviceRegistrationService.create(device);\n if (res.status !== this.HTTP_STATUS_CODE.CREATED) {\n throw res;\n }\n }\n\n async acceptPhoneReqistrationRequest(deviceId) {\n const { res } = await this.deviceRegistrationService.accept(deviceId);\n if (res.status !== this.HTTP_STATUS_CODE.OK) {\n throw res;\n }\n }\n}\n","import { Component, ViewChild, AfterViewInit, ElementRef, Renderer2 } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { C8yStepper, gettext, retryWithDelay } from '@c8y/ngx-components';\nimport { SensorPhoneService } from './sensor-phone.service';\nimport { map, tap, throttleTime } from 'rxjs/operators';\nimport { DeviceRegistrationService, DeviceRegistrationStatus, InventoryService } from '@c8y/client';\nimport { Router } from '@angular/router';\nimport { defer } from 'rxjs';\n\n@Component({\n selector: 'c8y-sensor-phone',\n templateUrl: 'sensor-phone-modal.component.html'\n})\nexport class SensorPhoneModalComponent implements AfterViewInit {\n @ViewChild(C8yStepper, { static: false })\n stepper: C8yStepper;\n @ViewChild(C8yStepper, { read: ElementRef, static: false })\n container: ElementRef;\n pendingDeviceBootstrap: boolean = true;\n success;\n errorMessage = gettext('Failed to register a smartphone.');\n registrationData = null;\n tenantId;\n instance;\n deviceId: string;\n dashboardLink: string = '';\n constructor(\n private bsModalRef: BsModalRef,\n private sensorPhoneService: SensorPhoneService,\n private renderer: Renderer2,\n private deviceRegistrationService: DeviceRegistrationService,\n private router: Router,\n private inventoryService: InventoryService\n ) {\n }\n\n ngAfterViewInit() {\n this.stepper.selectionChange\n .pipe(throttleTime(100))\n .subscribe((stepper: Partial<C8yStepper>) => this.onStepperSelectionChange(stepper));\n this.tenantId = this.sensorPhoneService.getTenantName();\n this.instance = this.sensorPhoneService.getHost();\n }\n\n onStepperSelectionChange(stepper: Partial<C8yStepper>) {\n const PHONE_REGISTRATION_STEP_INDEX = 2;\n if (stepper.selectedIndex === PHONE_REGISTRATION_STEP_INDEX) {\n this.registerPhone();\n }\n }\n\n async registerPhone() {\n try {\n this.deviceId = this.generateDeviceId();\n this.registrationData = this.sensorPhoneService.generateRegistrationData(this.deviceId);\n await this.sensorPhoneService.createPhoneRegistrationRequest(this.deviceId);\n await this.waitForPhoneToConnect();\n await this.sensorPhoneService.acceptPhoneReqistrationRequest(this.deviceId);\n const { deviceMo, dashboardMo } = await this.waitForDeviceAndDashboardMos();\n this.onDeviceAndDashboardMosCreated(deviceMo, dashboardMo);\n } catch (error) {\n this.onFailure();\n }\n }\n\n waitForPhoneToConnect() {\n return defer(() => this.deviceRegistrationService.detail(this.deviceId))\n .pipe(\n map(res => res.data),\n tap(phoneRegistration => {\n if (phoneRegistration.status === DeviceRegistrationStatus.WAITING_FOR_CONNECTION) {\n throw new Error('Phone is not connected yet.');\n } else {\n this.pendingDeviceBootstrap = false;\n }\n }),\n retryWithDelay(6000, 4)\n ).toPromise();\n }\n\n waitForDeviceAndDashboardMos() {\n return defer(() => this.inventoryService.list({ owner: `device_${this.deviceId}` }))\n .pipe(\n map(res => res.data),\n map(mos => {\n const deviceMo = mos.find(mo => !!mo.c8y_IsDevice);\n const dashboardMo = mos.find(mo => !!mo.c8y_Dashboard);\n if (!(deviceMo && dashboardMo)) {\n throw new Error('Both device and dashboard MO must be present.');\n } else {\n return { deviceMo, dashboardMo };\n }\n }),\n retryWithDelay(6000, 4)\n ).toPromise();\n }\n\n onDeviceAndDashboardMosCreated(deviceMo, dashboardMo) {\n this.dashboardLink = `/device/${deviceMo.id}/dashboard/${dashboardMo.id}`;\n this.stepper.next();\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'none');\n this.success = true;\n }\n }\n\n generateDeviceId() {\n return 'phone' + Math.floor(Math.random() * 100000);\n }\n\n openDashboard() {\n if (this.dashboardLink) {\n this.router.navigate([this.dashboardLink]);\n this.cancel();\n }\n }\n\n cancel() {\n this.bsModalRef.hide();\n this.deleteDeviceRequest();\n }\n\n retry() {\n this.success = undefined;\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'block');\n }\n this.deleteDeviceRequest();\n this.stepper.selectedIndex = 2;\n }\n\n onFailure() {\n this.success = false;\n this.stepper.next();\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'none');\n }\n }\n\n async deleteDeviceRequest() {\n if (this.deviceId) {\n try {\n await this.deviceRegistrationService.delete(this.deviceId);\n } catch (error) {\n //\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DocLinkFactory, OptionsService, gettext, DocLink } from '@c8y/ngx-components';\nimport { of } from 'rxjs';\nimport { SensorPhoneService } from './sensor-phone.service';\n\n@Injectable()\nexport class ConnectSmartphoneFactory implements DocLinkFactory {\n constructor(\n private optionsService: OptionsService,\n private sensorPhoneService: SensorPhoneService\n ) {}\n get() {\n if (this.optionsService.get('sensorPhone', false)) {\n return of([\n {\n icon: 'c8y-icon c8y-icon-mobile-add',\n type: 'quicklink',\n label: gettext('Connect smartphone'),\n url: undefined,\n click: () => this.sensorPhoneService.createModal()\n } as DocLink\n ]);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, HOOK_DOCS } from '@c8y/ngx-components';\nimport { ConnectSmartphoneFactory } from './connect-smartphone.factory';\nimport { SensorPhoneModalComponent } from './sensor-phone-modal.component';\nimport { QRCodeModule } from 'angularx-qrcode';\nimport { SensorPhoneService } from './sensor-phone.service';\n\n@NgModule({\n imports: [CoreModule, QRCodeModule],\n declarations: [SensorPhoneModalComponent],\n entryComponents: [SensorPhoneModalComponent],\n providers: [\n {\n provide: HOOK_DOCS,\n useClass: ConnectSmartphoneFactory,\n multi: true\n },\n SensorPhoneService\n ]\n})\nexport class SensorPhoneModule {}\n","export class RealTimeMock {\n deviceId;\n bootstrapCallback;\n managedObjCallback;\n subscribe(channel, callback) {\n if (channel === '/bootstrap') {\n this.bootstrapCallback = callback;\n } else {\n this.managedObjCallback = callback;\n }\n }\n unsubscribe() {\n /* empty */\n }\n\n triggerBootstrap(res) {\n this.bootstrapCallback({ data: res });\n }\n triggerManagedObject(res) {\n this.managedObjCallback({ data: res });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../sensor-phone/sensor-phone.service.ts","../../sensor-phone/sensor-phone-modal.component.ts","../../sensor-phone/connect-smartphone.factory.ts","../../sensor-phone/sensor-phone.module.ts","../../sensor-phone/real-time-mock.service.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","SensorPhoneService","bsModalService","ui","inventoryService","deviceRegistrationService","_this","HTTP_STATUS_CODE","OK","CREATED","PHONE_GROUP_FRAGMENT","PHONE_GROUP_NAME","gettext","currentTenant","subscribe","data","domainName","tenantId","name","prototype","createModal","show","SensorPhoneModalComponent","backdrop","class","getHost","substring","indexOf","getTenantName","split","getTenantId","checkPhoneGroupExists","list","fragmentType","_a","_b","res","status","head","addPhoneGroup","group","createPhoneGroup","c8y_Global","c8y_IsDeviceGroup","type","newPhoneGroup","create","_c","generateRegistrationData","deviceId","createPhoneRegistrationRequest","device","id","groupId","acceptPhoneReqistrationRequest","accept","Injectable","BsModalService","AppStateService","InventoryService","DeviceRegistrationService","bsModalRef","sensorPhoneService","renderer","router","pendingDeviceBootstrap","errorMessage","registrationData","dashboardLink","ngAfterViewInit","stepper","selectionChange","pipe","throttleTime","onStepperSelectionChange","instance","selectedIndex","registerPhone","generateDeviceId","waitForPhoneToConnect","waitForDeviceAndDashboardMos","deviceMo","dashboardMo","onDeviceAndDashboardMosCreated","onFailure","defer","detail","map","tap","phoneRegistration","DeviceRegistrationStatus","WAITING_FOR_CONNECTION","Error","retryWithDelay","toPromise","owner","mos","find","mo","c8y_IsDevice","c8y_Dashboard","container","setStyle","nativeElement","success","Math","floor","random","openDashboard","navigate","cancel","hide","deleteDeviceRequest","retry","undefined","delete","Component","args","selector","template","BsModalRef","Renderer2","Router","ViewChild","C8yStepper","static","read","ElementRef","ConnectSmartphoneFactory","optionsService","get","of","icon","url","click","OptionsService","NgModule","imports","CoreModule","QRCodeModule","declarations","entryComponents","providers","provide","HOOK_DOCS","useClass","multi","RealTimeMock","channel","callback","bootstrapCallback","managedObjCallback","unsubscribe","triggerBootstrap","triggerManagedObject"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SensorPhoneModalComponent } from './sensor-phone-modal.component';\nimport { AppStateService } from '@c8y/ngx-components';\nimport { DeviceRegistrationService, FetchClient, IFetchOptions, InventoryService } from '@c8y/client';\nimport { head } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class SensorPhoneService {\n readonly HTTP_STATUS_CODE = {\n OK: 200,\n CREATED: 201\n };\n private domainName: string;\n private tenantId: string;\n private PHONE_GROUP_FRAGMENT = 'c8y_IsSensorPhoneGroup';\n private readonly PHONE_GROUP_NAME = gettext('Phones');\n\n constructor(\n private bsModalService: BsModalService,\n private ui: AppStateService,\n private inventoryService: InventoryService,\n private deviceRegistrationService: DeviceRegistrationService\n ) {\n this.ui.currentTenant.subscribe(data => {\n if (data) {\n this.domainName = data.domainName;\n this.tenantId = data.name;\n }\n });\n }\n\n createModal() {\n this.bsModalService.show(SensorPhoneModalComponent, {\n backdrop: 'static',\n class: 'lg'\n });\n }\n\n getHost() {\n return this.domainName.substring(this.domainName.indexOf('.') + 1);\n }\n\n getTenantName() {\n return this.domainName.split('.')[0];\n }\n\n getTenantId() {\n return this.tenantId;\n }\n\n async checkPhoneGroupExists() {\n const { data, res } = await this.inventoryService.list({\n fragmentType: this.PHONE_GROUP_FRAGMENT\n });\n if (data && res && res.status === this.HTTP_STATUS_CODE.OK) {\n return head(data);\n }\n return null;\n }\n\n async addPhoneGroup() {\n const group = await this.checkPhoneGroupExists();\n if (group) {\n return group;\n }\n return await this.createPhoneGroup();\n }\n\n async createPhoneGroup() {\n const newPhoneGroup = {\n c8y_Global: {},\n c8y_IsDeviceGroup: {},\n type: 'c8y_DeviceGroup',\n name: this.PHONE_GROUP_NAME,\n [this.PHONE_GROUP_FRAGMENT]: {}\n };\n\n const { data, res } = await this.inventoryService.create(newPhoneGroup);\n if (data && res && res.status === this.HTTP_STATUS_CODE.CREATED) {\n return data;\n }\n return null;\n }\n\n generateRegistrationData(deviceId) {\n const res = 'c8y://' + this.getTenantName() + '.' + this.getHost() + '/?deviceId=' + deviceId;\n return res;\n }\n\n async createPhoneRegistrationRequest(deviceId) {\n const group = await this.addPhoneGroup();\n const device = { id: deviceId, groupId: group.id };\n\n const { res } = await this.deviceRegistrationService.create(device);\n if (res.status !== this.HTTP_STATUS_CODE.CREATED) {\n throw res;\n }\n }\n\n async acceptPhoneReqistrationRequest(deviceId) {\n const { res } = await this.deviceRegistrationService.accept(deviceId);\n if (res.status !== this.HTTP_STATUS_CODE.OK) {\n throw res;\n }\n }\n}\n","import { Component, ViewChild, AfterViewInit, ElementRef, Renderer2 } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { C8yStepper, gettext, retryWithDelay } from '@c8y/ngx-components';\nimport { SensorPhoneService } from './sensor-phone.service';\nimport { map, tap, throttleTime } from 'rxjs/operators';\nimport { DeviceRegistrationService, DeviceRegistrationStatus, InventoryService } from '@c8y/client';\nimport { Router } from '@angular/router';\nimport { defer } from 'rxjs';\n\n@Component({\n selector: 'c8y-sensor-phone',\n templateUrl: 'sensor-phone-modal.component.html'\n})\nexport class SensorPhoneModalComponent implements AfterViewInit {\n @ViewChild(C8yStepper, { static: false })\n stepper: C8yStepper;\n @ViewChild(C8yStepper, { read: ElementRef, static: false })\n container: ElementRef;\n pendingDeviceBootstrap: boolean = true;\n success;\n errorMessage = gettext('Failed to register a smartphone.');\n registrationData = null;\n tenantId;\n instance;\n deviceId: string;\n dashboardLink: string = '';\n constructor(\n private bsModalRef: BsModalRef,\n private sensorPhoneService: SensorPhoneService,\n private renderer: Renderer2,\n private deviceRegistrationService: DeviceRegistrationService,\n private router: Router,\n private inventoryService: InventoryService\n ) {\n }\n\n ngAfterViewInit() {\n this.stepper.selectionChange\n .pipe(throttleTime(100))\n .subscribe((stepper: Partial<C8yStepper>) => this.onStepperSelectionChange(stepper));\n this.tenantId = this.sensorPhoneService.getTenantName();\n this.instance = this.sensorPhoneService.getHost();\n }\n\n onStepperSelectionChange(stepper: Partial<C8yStepper>) {\n const PHONE_REGISTRATION_STEP_INDEX = 2;\n if (stepper.selectedIndex === PHONE_REGISTRATION_STEP_INDEX) {\n this.registerPhone();\n }\n }\n\n async registerPhone() {\n try {\n this.deviceId = this.generateDeviceId();\n this.registrationData = this.sensorPhoneService.generateRegistrationData(this.deviceId);\n await this.sensorPhoneService.createPhoneRegistrationRequest(this.deviceId);\n await this.waitForPhoneToConnect();\n await this.sensorPhoneService.acceptPhoneReqistrationRequest(this.deviceId);\n const { deviceMo, dashboardMo } = await this.waitForDeviceAndDashboardMos();\n this.onDeviceAndDashboardMosCreated(deviceMo, dashboardMo);\n } catch (error) {\n this.onFailure();\n }\n }\n\n waitForPhoneToConnect() {\n return defer(() => this.deviceRegistrationService.detail(this.deviceId))\n .pipe(\n map(res => res.data),\n tap(phoneRegistration => {\n if (phoneRegistration.status === DeviceRegistrationStatus.WAITING_FOR_CONNECTION) {\n throw new Error('Phone is not connected yet.');\n } else {\n this.pendingDeviceBootstrap = false;\n }\n }),\n retryWithDelay(6000, 4)\n ).toPromise();\n }\n\n waitForDeviceAndDashboardMos() {\n return defer(() => this.inventoryService.list({ owner: `device_${this.deviceId}` }))\n .pipe(\n map(res => res.data),\n map(mos => {\n const deviceMo = mos.find(mo => !!mo.c8y_IsDevice);\n const dashboardMo = mos.find(mo => !!mo.c8y_Dashboard);\n if (!(deviceMo && dashboardMo)) {\n throw new Error('Both device and dashboard MO must be present.');\n } else {\n return { deviceMo, dashboardMo };\n }\n }),\n retryWithDelay(6000, 4)\n ).toPromise();\n }\n\n onDeviceAndDashboardMosCreated(deviceMo, dashboardMo) {\n this.dashboardLink = `/device/${deviceMo.id}/dashboard/${dashboardMo.id}`;\n this.stepper.next();\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'none');\n this.success = true;\n }\n }\n\n generateDeviceId() {\n return 'phone' + Math.floor(Math.random() * 100000);\n }\n\n openDashboard() {\n if (this.dashboardLink) {\n this.router.navigate([this.dashboardLink]);\n this.cancel();\n }\n }\n\n cancel() {\n this.bsModalRef.hide();\n this.deleteDeviceRequest();\n }\n\n retry() {\n this.success = undefined;\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'block');\n }\n this.deleteDeviceRequest();\n this.stepper.selectedIndex = 2;\n }\n\n onFailure() {\n this.success = false;\n this.stepper.next();\n if (this.container) {\n this.renderer.setStyle(this.container.nativeElement, 'display', 'none');\n }\n }\n\n async deleteDeviceRequest() {\n if (this.deviceId) {\n try {\n await this.deviceRegistrationService.delete(this.deviceId);\n } catch (error) {\n //\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DocLinkFactory, OptionsService, gettext, DocLink } from '@c8y/ngx-components';\nimport { of } from 'rxjs';\nimport { SensorPhoneService } from './sensor-phone.service';\n\n@Injectable()\nexport class ConnectSmartphoneFactory implements DocLinkFactory {\n constructor(\n private optionsService: OptionsService,\n private sensorPhoneService: SensorPhoneService\n ) {}\n get() {\n if (this.optionsService.get('sensorPhone', false)) {\n return of([\n {\n icon: 'c8y-icon c8y-icon-mobile-add',\n type: 'quicklink',\n label: gettext('Connect smartphone'),\n url: undefined,\n click: () => this.sensorPhoneService.createModal()\n } as DocLink\n ]);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, HOOK_DOCS } from '@c8y/ngx-components';\nimport { ConnectSmartphoneFactory } from './connect-smartphone.factory';\nimport { SensorPhoneModalComponent } from './sensor-phone-modal.component';\nimport { QRCodeModule } from 'angularx-qrcode';\nimport { SensorPhoneService } from './sensor-phone.service';\n\n@NgModule({\n imports: [CoreModule, QRCodeModule],\n declarations: [SensorPhoneModalComponent],\n entryComponents: [SensorPhoneModalComponent],\n providers: [\n {\n provide: HOOK_DOCS,\n useClass: ConnectSmartphoneFactory,\n multi: true\n },\n SensorPhoneService\n ]\n})\nexport class SensorPhoneModule {}\n","export class RealTimeMock {\n deviceId;\n bootstrapCallback;\n managedObjCallback;\n subscribe(channel, callback) {\n if (channel === '/bootstrap') {\n this.bootstrapCallback = callback;\n } else {\n this.managedObjCallback = callback;\n }\n }\n unsubscribe() {\n /* empty */\n }\n\n triggerBootstrap(res) {\n this.bootstrapCallback({ data: res });\n }\n triggerManagedObject(res) {\n this.managedObjCallback({ data: res });\n }\n}\n"]}
@@ -20,6 +20,11 @@ export class ConfigurationDetailComponent {
20
20
  this.mo = {};
21
21
  this.saving = false;
22
22
  this.uploadChoice = 'uploadBinary';
23
+ this.textForConfigurationUrlPopover = gettext(`Path for binaries can vary depending on device agent implementation, e.g.:
24
+ /configuration/binaries/configuration1.bin
25
+ https://configuration/binary/123
26
+ ftp://configuration/binary/123.tar.gz
27
+ `);
23
28
  this.result = new Promise((resolve, reject) => {
24
29
  this._save = resolve;
25
30
  this._cancel = reject;
@@ -96,7 +101,7 @@ export class ConfigurationDetailComponent {
96
101
  ConfigurationDetailComponent.decorators = [
97
102
  { type: Component, args: [{
98
103
  selector: 'c8y-configuration-detail',
99
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
104
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n [fileUrlPopover]=\"textForConfigurationUrlPopover\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
100
105
  },] }
101
106
  ];
102
107
  ConfigurationDetailComponent.ctorParameters = () => [
@@ -107,4 +112,4 @@ ConfigurationDetailComponent.ctorParameters = () => [
107
112
  ConfigurationDetailComponent.propDecorators = {
108
113
  configurationForm: [{ type: ViewChild, args: ['configurationForm', { static: true },] }]
109
114
  };
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUTFELE1BQU0sT0FBTyw0QkFBNEI7SUE0QnZDLFlBQ1UsaUJBQW9DLEVBQ3BDLFVBQXNCLEVBQ3RCLEtBQW1CO1FBRm5CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBMUI3QixXQUFNLEdBQWtDO1lBQ3RDLElBQUksRUFBRSxTQUFTO1lBQ2YsR0FBRyxFQUFFLFNBQVM7U0FDZixDQUFDO1FBR0YsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUdyQixPQUFFLEdBQTRCLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsaUJBQVksR0FBaUMsY0FBYyxDQUFDO1FBSTVELFdBQU0sR0FBa0IsSUFBSSxPQUFP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TUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7aUJBQ3pCO2dCQUNELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDL0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQ3RELGNBQWMsQ0FBQyxhQUFhLEVBQzVCLElBQUksQ0FBQyxFQUFFLENBQ1IsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FDbkYsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDZDtZQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNoQjtvQkFBUztnQkFDUixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUNyQjtRQUNILENBQUM7S0FBQTs7O1lBaEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyx5bUlBQW9EO2FBQ3JEOzs7WUFQUSxpQkFBaUI7WUFKakIsVUFBVTtZQUZWLFlBQVk7OztnQ0FlbEIsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgdW5pcUJ5LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RhbE1vZGVsLCBSZXBvc2l0b3J5VHlwZSB9IGZyb20gJy4uL3JlcG9zaXRvcnkubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9yZXBvc2l0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGlja2VkRmlsZXMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbmZpZ3VyYXRpb24tZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgTW9kYWxNb2RlbCB7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpZ3VyYXRpb25Gb3JtJywgeyBzdGF0aWM6IHRydWUgfSkgY29uZmlndXJhdGlvbkZvcm06IE5nRm9ybTtcbiAgc2VsZWN0ZWQ6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYmluYXJ5OiB7IGZpbGU/OiBGaWxlOyB1cmw/OiBzdHJpbmcgfSA9IHtcbiAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgdXJsOiB1bmRlZmluZWRcbiAgfTtcbiAgZGV2aWNlVHlwZTogc3RyaW5nO1xuXG4gIHBhdHRlcm46IHN0cmluZyA9ICcnO1xuICBmaWx0ZXJQaXBlO1xuICBjb25maWdzO1xuICBtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgc2F2aW5nID0gZmFsc2U7XG4gIHVwbG9hZENob2ljZTogJ3VwbG9hZEJpbmFyeScgfCAndXBsb2FkVXJsJyA9ICd1cGxvYWRCaW5hcnknO1xuICBleGlzdGluZ0JpbmFyeTogRmlsZTtcbiAgc3VibWl0QnV0dG9uVGl0bGU6IHN0cmluZztcblxuICByZXN1bHQ6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIF9zYXZlO1xuICBwcml2YXRlIF9jYW5jZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWdzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTik7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMudXBsb2FkQ2hvaWNlID0gdGhpcy5iaW5hcnkuZmlsZSA/ICd1cGxvYWRCaW5hcnknIDogJ3VwbG9hZFVybCc7XG4gICAgICB0aGlzLmV4aXN0aW5nQmluYXJ5ID0gdGhpcy5iaW5hcnkuZmlsZTtcbiAgICB9XG4gICAgdGhpcy5zZXRQaXBlKCcnKTtcbiAgICB0aGlzLnN1Ym1pdEJ1dHRvblRpdGxlID0gdGhpcy5tby5pZFxuICAgICAgPyBnZXR0ZXh0KCdVcGRhdGUgY29uZmlndXJhdGlvbicpXG4gICAgICA6IGdldHRleHQoJ0FkZCBjb25maWd1cmF0aW9uJyk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5ic01vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgfVxuXG4gIHNldFBpcGUoZmlsdGVyU3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBmaWx0ZXJTdHI7XG4gICAgdGhpcy5maWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcCgoZGF0YTogW10pID0+IHVuaXFCeShkYXRhLCAnY29uZmlndXJhdGlvblR5cGUnKSksXG4gICAgICBtYXAoKGRhdGE6IFtdKSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihcbiAgICAgICAgICAobW86IGFueSkgPT5cbiAgICAgICAgICAgIG1vLmNvbmZpZ3VyYXRpb25UeXBlICYmXG4gICAgICAgICAgICBtby5jb25maWd1cmF0aW9uVHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyU3RyLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uRmlsZShkcm9wcGVkOiBQaWNrZWRGaWxlcykge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbkZvcm0uZm9ybS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICghaXNVbmRlZmluZWQoZHJvcHBlZC51cmwpKSB7XG4gICAgICB0aGlzLmJpbmFyeSA9IHtcbiAgICAgICAgdXJsOiBkcm9wcGVkLnVybFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChkcm9wcGVkLmRyb3BwZWRGaWxlcykpIHtcbiAgICAgIHRoaXMuYmluYXJ5ID0ge1xuICAgICAgICBmaWxlOiBkcm9wcGVkLmRyb3BwZWRGaWxlc1swXS5maWxlXG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJpbmFyeSA9IHtcbiAgICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgICB1cmw6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICBjb25zdCB7IHNlbGVjdGVkLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbiwgYmluYXJ5LCBkZXZpY2VUeXBlIH0gPSB0aGlzO1xuICAgICAgaWYgKHRoaXMuZXhpc3RpbmdCaW5hcnkgPT09IHRoaXMuYmluYXJ5LmZpbGUpIHtcbiAgICAgICAgYmluYXJ5LmZpbGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLnNhdmUoXG4gICAgICAgIHsgc2VsZWN0ZWQsIHZlcnNpb24sIGRlc2NyaXB0aW9uLCBiaW5hcnksIGRldmljZVR5cGUgfSxcbiAgICAgICAgUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTixcbiAgICAgICAgdGhpcy5tb1xuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhcbiAgICAgICAgdGhpcy5tby5pZCA/IGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gdXBkYXRlZC4nKSA6IGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gY3JlYXRlZC4nKVxuICAgICAgKTtcbiAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgICB0aGlzLl9zYXZlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUTFELE1BQU0sT0FBTyw0QkFBNEI7SUFpQ3ZDLFlBQ1UsaUJBQW9DLEVBQ3BDLFVBQXNCLEVBQ3RCLEtBQW1CO1FBRm5CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBL0I3QixXQUFNLEdBQWtDO1lBQ3RDLElBQUksRUFBRSxTQUFTO1lBQ2YsR0FBRyxFQUFFLFNBQVM7U0FDZixDQUFDO1FBR0YsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUdyQixPQUFFLEdBQTRCLEVBQUUsQ0FBQztRQUNqQyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsaUJBQVksR0FBaUMsY0FBYyxDQUFDO1FBRzVELG1DQUE4QixHQUFXLE9BQU8sQ0FB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QUFjLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7b0JBQzVDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2lCQUN6QjtnQkFDRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQy9CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUN0RCxjQUFjLENBQUMsYUFBYSxFQUM1QixJQUFJLENBQUMsRUFBRSxDQUNSLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQ25GLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2Q7WUFBQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDaEI7b0JBQVM7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDckI7UUFDSCxDQUFDO0tBQUE7OztZQXJIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsMHFJQUFvRDthQUNyRDs7O1lBUFEsaUJBQWlCO1lBSmpCLFVBQVU7WUFGVixZQUFZOzs7Z0NBZWxCLFNBQVMsU0FBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHVuaXFCeSwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9kYWxNb2RlbCwgUmVwb3NpdG9yeVR5cGUgfSBmcm9tICcuLi9yZXBvc2l0b3J5Lm1vZGVsJztcbmltcG9ydCB7IFJlcG9zaXRvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBpY2tlZEZpbGVzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jb25maWd1cmF0aW9uLWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkRldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE1vZGFsTW9kZWwge1xuICBAVmlld0NoaWxkKCdjb25maWd1cmF0aW9uRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIGNvbmZpZ3VyYXRpb25Gb3JtOiBOZ0Zvcm07XG4gIHNlbGVjdGVkOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGJpbmFyeTogeyBmaWxlPzogRmlsZTsgdXJsPzogc3RyaW5nIH0gPSB7XG4gICAgZmlsZTogdW5kZWZpbmVkLFxuICAgIHVybDogdW5kZWZpbmVkXG4gIH07XG4gIGRldmljZVR5cGU6IHN0cmluZztcblxuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgZmlsdGVyUGlwZTtcbiAgY29uZmlncztcbiAgbW86IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge307XG4gIHNhdmluZyA9IGZhbHNlO1xuICB1cGxvYWRDaG9pY2U6ICd1cGxvYWRCaW5hcnknIHwgJ3VwbG9hZFVybCcgPSAndXBsb2FkQmluYXJ5JztcbiAgZXhpc3RpbmdCaW5hcnk6IEZpbGU7XG4gIHN1Ym1pdEJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIHRleHRGb3JDb25maWd1cmF0aW9uVXJsUG9wb3Zlcjogc3RyaW5nID0gZ2V0dGV4dChgUGF0aCBmb3IgYmluYXJpZXMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIGRldmljZSBhZ2VudCBpbXBsZW1lbnRhdGlvbiwgZS5nLjpcbiAgICAvY29uZmlndXJhdGlvbi9iaW5hcmllcy9jb25maWd1cmF0aW9uMS5iaW5cbiAgICBodHRwczovL2NvbmZpZ3VyYXRpb24vYmluYXJ5LzEyM1xuICAgIGZ0cDovL2NvbmZpZ3VyYXRpb24vYmluYXJ5LzEyMy50YXIuZ3pcbiAgYCk7XG5cbiAgcmVzdWx0OiBQcm9taXNlPHZvaWQ+ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuX3NhdmUgPSByZXNvbHZlO1xuICAgIHRoaXMuX2NhbmNlbCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfc2F2ZTtcbiAgcHJpdmF0ZSBfY2FuY2VsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlncyA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnVwbG9hZENob2ljZSA9IHRoaXMuYmluYXJ5LmZpbGUgPyAndXBsb2FkQmluYXJ5JyA6ICd1cGxvYWRVcmwnO1xuICAgICAgdGhpcy5leGlzdGluZ0JpbmFyeSA9IHRoaXMuYmluYXJ5LmZpbGU7XG4gICAgfVxuICAgIHRoaXMuc2V0UGlwZSgnJyk7XG4gICAgdGhpcy5zdWJtaXRCdXR0b25UaXRsZSA9IHRoaXMubW8uaWRcbiAgICAgID8gZ2V0dGV4dCgnVXBkYXRlIGNvbmZpZ3VyYXRpb24nKVxuICAgICAgOiBnZXR0ZXh0KCdBZGQgY29uZmlndXJhdGlvbicpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5fY2FuY2VsKCk7XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gICAgICBtYXAoKGRhdGE6IFtdKSA9PiB1bmlxQnkoZGF0YSwgJ2NvbmZpZ3VyYXRpb25UeXBlJykpLFxuICAgICAgbWFwKChkYXRhOiBbXSkgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoXG4gICAgICAgICAgKG1vOiBhbnkpID0+XG4gICAgICAgICAgICBtby5jb25maWd1cmF0aW9uVHlwZSAmJlxuICAgICAgICAgICAgbW8uY29uZmlndXJhdGlvblR5cGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclN0ci50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvbkZpbGUoZHJvcHBlZDogUGlja2VkRmlsZXMpIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25Gb3JtLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGRyb3BwZWQudXJsKSkge1xuICAgICAgdGhpcy5iaW5hcnkgPSB7XG4gICAgICAgIHVybDogZHJvcHBlZC51cmxcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQoZHJvcHBlZC5kcm9wcGVkRmlsZXMpKSB7XG4gICAgICB0aGlzLmJpbmFyeSA9IHtcbiAgICAgICAgZmlsZTogZHJvcHBlZC5kcm9wcGVkRmlsZXNbMF0uZmlsZVxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaW5hcnkgPSB7XG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgeyBzZWxlY3RlZCwgdmVyc2lvbiwgZGVzY3JpcHRpb24sIGJpbmFyeSwgZGV2aWNlVHlwZSB9ID0gdGhpcztcbiAgICAgIGlmICh0aGlzLmV4aXN0aW5nQmluYXJ5ID09PSB0aGlzLmJpbmFyeS5maWxlKSB7XG4gICAgICAgIGJpbmFyeS5maWxlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5zYXZlKFxuICAgICAgICB7IHNlbGVjdGVkLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbiwgYmluYXJ5LCBkZXZpY2VUeXBlIH0sXG4gICAgICAgIFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04sXG4gICAgICAgIHRoaXMubW9cbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoXG4gICAgICAgIHRoaXMubW8uaWQgPyBnZXR0ZXh0KCdDb25maWd1cmF0aW9uIHVwZGF0ZWQuJykgOiBnZXR0ZXh0KCdDb25maWd1cmF0aW9uIGNyZWF0ZWQuJylcbiAgICAgICk7XG4gICAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgICAgdGhpcy5fc2F2ZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgdGhpcy5fY2FuY2VsKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -5,6 +5,7 @@ import { Realtime } from '@c8y/client';
5
5
  import { DeviceConfigurationService } from './device-configuration.service';
6
6
  import { DeviceConfigurationOperation } from '../repository.model';
7
7
  import { gettext } from '@c8y/ngx-components';
8
+ import { has } from 'lodash-es';
8
9
  import { RepositoryService } from '../repository.service';
9
10
  import { TextBasedConfigurationComponent } from './text-based-configuration.component';
10
11
  export class DeviceConfigurationComponent {
@@ -45,7 +46,11 @@ export class DeviceConfigurationComponent {
45
46
  title: gettext('No configurations available.'),
46
47
  text: gettext('Add configuration to configuration repository')
47
48
  };
48
- this.showTextBasedConfig = this.deviceConfigurationService.hasAnySupportedOperation(this.device, [DeviceConfigurationOperation.CONFIG, DeviceConfigurationOperation.SEND_CONFIG]);
49
+ this.showTextBasedConfig =
50
+ this.deviceConfigurationService.hasAnySupportedOperation(this.device, [
51
+ DeviceConfigurationOperation.CONFIG,
52
+ DeviceConfigurationOperation.SEND_CONFIG
53
+ ]) || has(this.device, 'c8y_Configuration');
49
54
  }
50
55
  onConfigTypeSelected(config) {
51
56
  return __awaiter(this, void 0, void 0, function* () {
@@ -111,4 +116,4 @@ DeviceConfigurationComponent.ctorParameters = () => [
111
116
  DeviceConfigurationComponent.propDecorators = {
112
117
  textBasedConfigurationComponent: [{ type: ViewChild, args: [TextBasedConfigurationComponent,] }]
113
118
  };
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9jb25maWd1cmF0aW9uLWRldmljZS10YWIvZGV2aWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFrQixRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUlMLDRCQUE0QixFQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU12RixNQUFNLE9BQU8sNEJBQTRCO0lBZXZDLFlBQ1UsS0FBcUIsRUFDckIsMEJBQXNELEVBQ3RELFFBQWtCLEVBQ2xCLGlCQUFvQztRQUhwQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxCOUMsNEJBQXVCLEdBQWlDLEVBQUUsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFOUIsbUJBQWMsR0FBbUMsRUFBRSxDQUFDO1FBT3BELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFVekIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixDQUFDLFNB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QUM7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRO29CQUNqQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDbkUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDekY7WUFDRCxJQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRztnQkFDOUIsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0tBQUE7OztZQTlHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsc2tMQUFvRDthQUNyRDs7O1lBaEJRLGNBQWM7WUFFZCwwQkFBMEI7WUFEVixRQUFRO1lBU3hCLGlCQUFpQjs7OzhDQW9CdkIsU0FBUyxTQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBSZWFsdGltZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IERldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9kZXZpY2UtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERldmljZUNvbmZpZ3VyYXRpb25MaXN0RW1wdHlTdGF0ZSxcbiAgQ29uZmlndXJhdGlvblNuYXBzaG90LFxuICBTdXBwb3J0ZWRDb25maWd1cmF0aW9uSXRlbSxcbiAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvblxufSBmcm9tICcuLi9yZXBvc2l0b3J5Lm1vZGVsJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFJlcG9zaXRvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRCYXNlZENvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tICcuL3RleHQtYmFzZWQtY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLWNvbmZpZ3VyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZUNvbmZpZ3VyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzdXBwb3J0ZWRDb25maWd1cmF0aW9uczogU3VwcG9ydGVkQ29uZmlndXJhdGlvbkl0ZW1bXSA9IFtdO1xuICBzaG93QmluYXJ5QmFzZWRDb25maWcgPSBmYWxzZTtcbiAgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZztcbiAgY29uZmlnU25hcHNob3Q6IFBhcnRpYWw8Q29uZmlndXJhdGlvblNuYXBzaG90PiA9IHt9O1xuICByZXBvc2l0b3J5U25hcHNob3RzOiBJTWFuYWdlZE9iamVjdFtdO1xuICByZXBvc2l0b3J5U25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdDtcbiAgcmVwb3NpdG9yeVNuYXBzaG90c0VtcHR5U3RhdGU6IERldmljZUNvbmZpZ3VyYXRpb25MaXN0RW1wdHlTdGF0ZTtcbiAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdDtcbiAgaXNMZWdhY3k6IGJvb2xlYW47XG4gIHNob3dUZXh0QmFzZWRDb25maWc6IGJvb2xlYW47XG4gIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoVGV4dEJhc2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCkgdGV4dEJhc2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudDogVGV4dEJhc2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGRldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBEZXZpY2VDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZSxcbiAgICBwcml2YXRlIHJlcG9zaXRvcnlTZXJ2aWNlOiBSZXBvc2l0b3J5U2VydmljZVxuICApIHtcbiAgICB0aGlzLmRldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZ3VyYXRpb25zVXBkYXRlZC5zdWJzY3JpYmUocmVwb3NpdG9yeVNuYXBzT25seSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNuYXBzaG90cyhyZXBvc2l0b3J5U25hcHNPbmx5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICBpZiAodGhpcy5kZXZpY2UuYzh5X1N1cHBvcnRlZENvbmZpZ3VyYXRpb25zKSB7XG4gICAgICB0aGlzLnN1cHBvcnRlZENvbmZpZ3VyYXRpb25zID0gdGhpcy5kZXZpY2UuYzh5X1N1cHBvcnRlZENvbmZpZ3VyYXRpb25zLm1hcChpdGVtID0+ICh7XG4gICAgICAgIG5hbWU6IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmRldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmhhc0FueVN1cHBvcnRlZE9wZXJhdGlvbih0aGlzLmRldmljZSwgW1xuICAgICAgICBEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uLkRPV05MT0FEX0NPTkZJRyxcbiAgICAgICAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5VUExPQURfQ09ORklHXG4gICAgICBdKVxuICAgICkge1xuICAgICAgdGhpcy5zdXBwb3J0ZWRDb25maWd1cmF0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogZ2V0dGV4dCgnTGVnYWN5IGNvbmZpZ3VyYXRpb24gc25hcHNob3QnKSxcbiAgICAgICAgaXNMZWdhY3k6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXBwb3J0ZWRDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dCaW5hcnlCYXNlZENvbmZpZyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5yZXBvc2l0b3J5U25hcHNob3RzRW1wdHlTdGF0ZSA9IHtcbiAgICAgIGljb246ICdnZWFycycsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnTm8gY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlLicpLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnQWRkIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlndXJhdGlvbiByZXBvc2l0b3J5JylcbiAgICB9O1xuXG4gICAgdGhpcy5zaG93VGV4dEJhc2VkQ29uZmlnID0gdGhpcy5kZXZpY2VDb25maWd1cmF0aW9uU2VydmljZS5oYXNBbnlTdXBwb3J0ZWRPcGVyYXRpb24oXG4gICAgICB0aGlzLmRldmljZSxcbiAgICAgIFtEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uLkNPTkZJRywgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5TRU5EX0NPTkZJR11cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgb25Db25maWdUeXBlU2VsZWN0ZWQoY29uZmlnKSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uVHlwZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuaXNMZWdhY3kgPSBjb25maWcuaXNMZWdhY3k7XG4gICAgdGhpcy51cGRhdGVTbmFwc2hvdHMoKTtcbiAgfVxuXG4gIGFzeW5jIG9uUmVwb3NpdG9yeUNvbmZpZ1NlbGVjdGVkKGNvbmZpZykge1xuICAgIHRoaXMucmVwb3NpdG9yeVNuYXBzaG90ID0ge1xuICAgICAgaWQ6IGNvbmZpZy5pZCxcbiAgICAgIHRpbWU6IGNvbmZpZy5jcmVhdGlvblRpbWUsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIGJpbmFyeVVybDogY29uZmlnLnVybCxcbiAgICAgIGRldmljZVR5cGU6IGNvbmZpZy5kZXZpY2VUeXBlLFxuICAgICAgY29uZmlndXJhdGlvblR5cGU6IGNvbmZpZy5jb25maWd1cmF0aW9uVHlwZVxuICAgIH07XG4gICAgaWYgKGNvbmZpZy51cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJpbmFyeSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZ2V0QmluYXJ5RmlsZShjb25maWcudXJsLCB7XG4gICAgICAgICAgYWxsb3dFeHRlcm5hbDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChiaW5hcnkpIHtcbiAgICAgICAgICB0aGlzLnJlcG9zaXRvcnlTbmFwc2hvdC5iaW5hcnkgPSBhd2FpdCAoYmluYXJ5IGFzIGFueSkudGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlU25hcHNob3RzKHJlcG9zaXRvcnlTbmFwc09ubHk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZWxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVwb3NpdG9yeVNuYXBzaG90ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVwb3NpdG9yeVNuYXBzaG90cyA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZ2V0U25hcHNob3RzRnJvbVJlcG9zaXRvcnkoXG4gICAgICB0aGlzLmRldmljZSxcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvblR5cGVcbiAgICApO1xuICAgIGlmICghcmVwb3NpdG9yeVNuYXBzT25seSkge1xuICAgICAgdGhpcy5jb25maWdTbmFwc2hvdCA9IHRoaXMuaXNMZWdhY3lcbiAgICAgICAgPyBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldExlZ2FjeUNvbmZpZ1NuYXBzaG90KHRoaXMuZGV2aWNlKVxuICAgICAgICA6IGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZ2V0Q29uZmlnU25hcHNob3QodGhpcy5kZXZpY2UsIHRoaXMuY29uZmlndXJhdGlvblR5cGUpO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuc2hvd1RleHRCYXNlZENvbmZpZyApIHtcbiAgICAgIGF3YWl0IHRoaXMudGV4dEJhc2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudC5sb2FkKCk7XG4gICAgfVxuICAgIHRoaXMucmVsb2FkaW5nID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9jb25maWd1cmF0aW9uLWRldmljZS10YWIvZGV2aWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFrQixRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUlMLDRCQUE0QixFQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBTXZGLE1BQU0sT0FBTyw0QkFBNEI7SUFldkMsWUFDVSxLQUFxQixFQUNyQiwwQkFBc0QsRUFDdEQsUUFBa0IsRUFDbEIsaUJBQW9DO1FBSHBDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFDdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbEI5Qyw0QkFBdUIsR0FBaUMsRUFBRSxDQUFDO1FBQzNELDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5QixtQkFBYyxHQUFtQyxFQUFFLENBQUM7UUFPcEQsY0FBUyxHQUFZLEtBQUssQ0FBQztR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b0JBQ1gsYUFBYTtpQkFDZDthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRUssZUFBZSxDQUFDLG1CQUE2Qjs7WUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRO29CQUNqQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDbkUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDekY7WUFDRCxJQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRztnQkFDOUIsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0tBQUE7OztZQS9HRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsc2tMQUFvRDthQUNyRDs7O1lBakJRLGNBQWM7WUFFZCwwQkFBMEI7WUFEVixRQUFRO1lBVXhCLGlCQUFpQjs7OzhDQW9CdkIsU0FBUyxTQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBSZWFsdGltZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IERldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9kZXZpY2UtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERldmljZUNvbmZpZ3VyYXRpb25MaXN0RW1wdHlTdGF0ZSxcbiAgQ29uZmlndXJhdGlvblNuYXBzaG90LFxuICBTdXBwb3J0ZWRDb25maWd1cmF0aW9uSXRlbSxcbiAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvblxufSBmcm9tICcuLi9yZXBvc2l0b3J5Lm1vZGVsJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGhhcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5U2VydmljZSB9IGZyb20gJy4uL3JlcG9zaXRvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0QmFzZWRDb25maWd1cmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90ZXh0LWJhc2VkLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS1jb25maWd1cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldmljZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc3VwcG9ydGVkQ29uZmlndXJhdGlvbnM6IFN1cHBvcnRlZENvbmZpZ3VyYXRpb25JdGVtW10gPSBbXTtcbiAgc2hvd0JpbmFyeUJhc2VkQ29uZmlnID0gZmFsc2U7XG4gIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmc7XG4gIGNvbmZpZ1NuYXBzaG90OiBQYXJ0aWFsPENvbmZpZ3VyYXRpb25TbmFwc2hvdD4gPSB7fTtcbiAgcmVwb3NpdG9yeVNuYXBzaG90czogSU1hbmFnZWRPYmplY3RbXTtcbiAgcmVwb3NpdG9yeVNuYXBzaG90OiBDb25maWd1cmF0aW9uU25hcHNob3Q7XG4gIHJlcG9zaXRvcnlTbmFwc2hvdHNFbXB0eVN0YXRlOiBEZXZpY2VDb25maWd1cmF0aW9uTGlzdEVtcHR5U3RhdGU7XG4gIGRldmljZTogSU1hbmFnZWRPYmplY3Q7XG4gIGlzTGVnYWN5OiBib29sZWFuO1xuICBzaG93VGV4dEJhc2VkQ29uZmlnOiBib29sZWFuO1xuICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKFRleHRCYXNlZENvbmZpZ3VyYXRpb25Db21wb25lbnQpIHRleHRCYXNlZENvbmZpZ3VyYXRpb25Db21wb25lbnQ6IFRleHRCYXNlZENvbmZpZ3VyYXRpb25Db21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBkZXZpY2VDb25maWd1cmF0aW9uU2VydmljZTogRGV2aWNlQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWUsXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5kZXZpY2VDb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmF0aW9uc1VwZGF0ZWQuc3Vic2NyaWJlKHJlcG9zaXRvcnlTbmFwc09ubHkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTbmFwc2hvdHMocmVwb3NpdG9yeVNuYXBzT25seSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRldmljZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGE7XG4gICAgaWYgKHRoaXMuZGV2aWNlLmM4eV9TdXBwb3J0ZWRDb25maWd1cmF0aW9ucykge1xuICAgICAgdGhpcy5zdXBwb3J0ZWRDb25maWd1cmF0aW9ucyA9IHRoaXMuZGV2aWNlLmM4eV9TdXBwb3J0ZWRDb25maWd1cmF0aW9ucy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBuYW1lOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5kZXZpY2VDb25maWd1cmF0aW9uU2VydmljZS5oYXNBbnlTdXBwb3J0ZWRPcGVyYXRpb24odGhpcy5kZXZpY2UsIFtcbiAgICAgICAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5ET1dOTE9BRF9DT05GSUcsXG4gICAgICAgIERldmljZUNvbmZpZ3VyYXRpb25PcGVyYXRpb24uVVBMT0FEX0NPTkZJR1xuICAgICAgXSlcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwcG9ydGVkQ29uZmlndXJhdGlvbnMucHVzaCh7XG4gICAgICAgIG5hbWU6IGdldHRleHQoJ0xlZ2FjeSBjb25maWd1cmF0aW9uIHNuYXBzaG90JyksXG4gICAgICAgIGlzTGVnYWN5OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3VwcG9ydGVkQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93QmluYXJ5QmFzZWRDb25maWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucmVwb3NpdG9yeVNuYXBzaG90c0VtcHR5U3RhdGUgPSB7XG4gICAgICBpY29uOiAnZ2VhcnMnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ05vIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZS4nKSxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0FkZCBjb25maWd1cmF0aW9uIHRvIGNvbmZpZ3VyYXRpb24gcmVwb3NpdG9yeScpXG4gICAgfTtcblxuICAgIHRoaXMuc2hvd1RleHRCYXNlZENvbmZpZyA9XG4gICAgICB0aGlzLmRldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmhhc0FueVN1cHBvcnRlZE9wZXJhdGlvbih0aGlzLmRldmljZSwgW1xuICAgICAgICBEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uLkNPTkZJRyxcbiAgICAgICAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5TRU5EX0NPTkZJR1xuICAgICAgXSkgfHwgaGFzKHRoaXMuZGV2aWNlLCAnYzh5X0NvbmZpZ3VyYXRpb24nKTtcbiAgfVxuXG4gIGFzeW5jIG9uQ29uZmlnVHlwZVNlbGVjdGVkKGNvbmZpZykge1xuICAgIHRoaXMuY29uZmlndXJhdGlvblR5cGUgPSBjb25maWcubmFtZTtcbiAgICB0aGlzLmlzTGVnYWN5ID0gY29uZmlnLmlzTGVnYWN5O1xuICAgIHRoaXMudXBkYXRlU25hcHNob3RzKCk7XG4gIH1cblxuICBhc3luYyBvblJlcG9zaXRvcnlDb25maWdTZWxlY3RlZChjb25maWcpIHtcbiAgICB0aGlzLnJlcG9zaXRvcnlTbmFwc2hvdCA9IHtcbiAgICAgIGlkOiBjb25maWcuaWQsXG4gICAgICB0aW1lOiBjb25maWcuY3JlYXRpb25UaW1lLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBiaW5hcnlVcmw6IGNvbmZpZy51cmwsXG4gICAgICBkZXZpY2VUeXBlOiBjb25maWcuZGV2aWNlVHlwZSxcbiAgICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBjb25maWcuY29uZmlndXJhdGlvblR5cGVcbiAgICB9O1xuICAgIGlmIChjb25maWcudXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldEJpbmFyeUZpbGUoY29uZmlnLnVybCwge1xuICAgICAgICAgIGFsbG93RXh0ZXJuYWw6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYmluYXJ5KSB7XG4gICAgICAgICAgdGhpcy5yZXBvc2l0b3J5U25hcHNob3QuYmluYXJ5ID0gYXdhaXQgKGJpbmFyeSBhcyBhbnkpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNuYXBzaG90cyhyZXBvc2l0b3J5U25hcHNPbmx5PzogYm9vbGVhbikge1xuICAgIHRoaXMucmVsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlcG9zaXRvcnlTbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlcG9zaXRvcnlTbmFwc2hvdHMgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldFNuYXBzaG90c0Zyb21SZXBvc2l0b3J5KFxuICAgICAgdGhpcy5kZXZpY2UsXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25UeXBlXG4gICAgKTtcbiAgICBpZiAoIXJlcG9zaXRvcnlTbmFwc09ubHkpIHtcbiAgICAgIHRoaXMuY29uZmlnU25hcHNob3QgPSB0aGlzLmlzTGVnYWN5XG4gICAgICAgID8gYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5nZXRMZWdhY3lDb25maWdTbmFwc2hvdCh0aGlzLmRldmljZSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldENvbmZpZ1NuYXBzaG90KHRoaXMuZGV2aWNlLCB0aGlzLmNvbmZpZ3VyYXRpb25UeXBlKTtcbiAgICB9XG4gICAgaWYgKCB0aGlzLnNob3dUZXh0QmFzZWRDb25maWcgKSB7XG4gICAgICBhd2FpdCB0aGlzLnRleHRCYXNlZENvbmZpZ3VyYXRpb25Db21wb25lbnQubG9hZCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { has } from 'lodash-es';
2
3
  import { DeviceConfigurationService } from './device-configuration.service';
3
4
  import { DeviceConfigurationOperation } from '../repository.model';
4
5
  export class DeviceConfigurationGuard {
@@ -17,7 +18,8 @@ export class DeviceConfigurationGuard {
17
18
  DeviceConfigurationOperation.UPLOAD_CONFIG,
18
19
  DeviceConfigurationOperation.CONFIG,
19
20
  DeviceConfigurationOperation.SEND_CONFIG
20
- ]));
21
+ ]) ||
22
+ has(contextData, 'c8y_Configuration'));
21
23
  }
22
24
  }
23
25
  DeviceConfigurationGuard.decorators = [
@@ -26,4 +28,4 @@ DeviceConfigurationGuard.decorators = [
26
28
  DeviceConfigurationGuard.ctorParameters = () => [
27
29
  { type: DeviceConfigurationService }
28
30
  ];
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWNvbmZpZ3VyYXRpb24uZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2NvbmZpZ3VyYXRpb24tZGV2aWNlLXRhYi9kZXZpY2UtY29uZmlndXJhdGlvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR25FLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFBb0IsMEJBQXNEO1FBQXRELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7SUFBRyxDQUFDO0lBRTlFLFdBQVcsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ25FLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQ0wsQ0FBQyxXQUFXLENBQUMsMkJBQTJCO1lBQ3RDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BFLDRCQUE0QixDQUFDLGVBQWU7Z0JBQzVDLDRCQUE0QixDQUFDLGFBQWE7Z0JBQzFDLDRCQUE0QixDQUFDLE1BQU07Z0JBQ25DLDRCQUE0QixDQUFDLFdBQVc7YUFDekMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7WUFuQkYsVUFBVTs7O1lBSEYsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2RldmljZS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbiB9IGZyb20gJy4uL3JlcG9zaXRvcnkubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGV2aWNlQ29uZmlndXJhdGlvbkd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBEZXZpY2VDb25maWd1cmF0aW9uU2VydmljZSkge31cblxuICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICBjb25zdCBjb250ZXh0RGF0YSA9IHJvdXRlLmRhdGEuY29udGV4dERhdGEgfHwgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGE7XG4gICAgaWYgKCFjb250ZXh0RGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgKGNvbnRleHREYXRhLmM4eV9TdXBwb3J0ZWRDb25maWd1cmF0aW9ucyAmJlxuICAgICAgICBjb250ZXh0RGF0YS5jOHlfU3VwcG9ydGVkQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHRoaXMuZGV2aWNlQ29uZmlndXJhdGlvblNlcnZpY2UuaGFzQW55U3VwcG9ydGVkT3BlcmF0aW9uKGNvbnRleHREYXRhLCBbXG4gICAgICAgIERldmljZUNvbmZpZ3VyYXRpb25PcGVyYXRpb24uRE9XTkxPQURfQ09ORklHLFxuICAgICAgICBEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uLlVQTE9BRF9DT05GSUcsXG4gICAgICAgIERldmljZUNvbmZpZ3VyYXRpb25PcGVyYXRpb24uQ09ORklHLFxuICAgICAgICBEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uLlNFTkRfQ09ORklHXG4gICAgICBdKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWNvbmZpZ3VyYXRpb24uZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2NvbmZpZ3VyYXRpb24tZGV2aWNlLXRhYi9kZXZpY2UtY29uZmlndXJhdGlvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkUsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFvQiwwQkFBc0Q7UUFBdEQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtJQUFHLENBQUM7SUFFOUUsV0FBVyxDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFDbkUsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FDTCxDQUFDLFdBQVcsQ0FBQywyQkFBMkI7WUFDdEMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRTtnQkFDcEUsNEJBQTRCLENBQUMsZUFBZTtnQkFDNUMsNEJBQTRCLENBQUMsYUFBYTtnQkFDMUMsNEJBQTRCLENBQUMsTUFBTTtnQkFDbkMsNEJBQTRCLENBQUMsV0FBVzthQUN6QyxDQUFDO1lBQ0YsR0FBRyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQzs7O1lBcEJGLFVBQVU7OztZQUhGLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGhhcyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBEZXZpY2VDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VDb25maWd1cmF0aW9uT3BlcmF0aW9uIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXZpY2VDb25maWd1cmF0aW9uR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGV2aWNlQ29uZmlndXJhdGlvblNlcnZpY2U6IERldmljZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKSB7fVxuXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIGNvbnN0IGNvbnRleHREYXRhID0gcm91dGUuZGF0YS5jb250ZXh0RGF0YSB8fCByb3V0ZS5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YTtcbiAgICBpZiAoIWNvbnRleHREYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAoY29udGV4dERhdGEuYzh5X1N1cHBvcnRlZENvbmZpZ3VyYXRpb25zICYmXG4gICAgICAgIGNvbnRleHREYXRhLmM4eV9TdXBwb3J0ZWRDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB8fFxuICAgICAgdGhpcy5kZXZpY2VDb25maWd1cmF0aW9uU2VydmljZS5oYXNBbnlTdXBwb3J0ZWRPcGVyYXRpb24oY29udGV4dERhdGEsIFtcbiAgICAgICAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5ET1dOTE9BRF9DT05GSUcsXG4gICAgICAgIERldmljZUNvbmZpZ3VyYXRpb25PcGVyYXRpb24uVVBMT0FEX0NPTkZJRyxcbiAgICAgICAgRGV2aWNlQ29uZmlndXJhdGlvbk9wZXJhdGlvbi5DT05GSUcsXG4gICAgICAgIERldmljZUNvbmZpZ3VyYXRpb25PcGVyYXRpb24uU0VORF9DT05GSUdcbiAgICAgIF0pIHx8XG4gICAgICBoYXMoY29udGV4dERhdGEsICdjOHlfQ29uZmlndXJhdGlvbicpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
- import { assign, isEmpty } from 'lodash-es';
4
+ import { assign, get, isEmpty } from 'lodash-es';
5
5
  import { BsModalService } from 'ngx-bootstrap/modal';
6
6
  import { BehaviorSubject, combineLatest, from, of } from 'rxjs';
7
7
  import { distinctUntilChanged, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';
@@ -31,6 +31,7 @@ export class FirmwareDeviceTabComponent {
31
31
  return of([]);
32
32
  }
33
33
  }), shareReplay(1));
34
+ this.supportsFirmwareOperations$ = this.device$.pipe(map((device) => get(device, 'c8y_SupportedOperations', []).indexOf('c8y_Firmware') > -1));
34
35
  this.changesOperation$ = new BehaviorSubject(null);
35
36
  this.changesInProgress$ = this.changesOperation$.pipe(map(operation => this.isInProgress(operation)));
36
37
  }
@@ -165,7 +166,7 @@ export class FirmwareDeviceTabComponent {
165
166
  FirmwareDeviceTabComponent.decorators = [
166
167
  { type: Component, args: [{
167
168
  selector: 'c8y-firmware-device-tab',
168
- template: "<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <h4 class=\"card-title\" translate>Current firmware</h4>\n </div>\n <div class=\"inner-scroll\">\n <fieldset *ngIf=\"changesOperation$ | async\" class=\"card-block bg-gray-white\">\n <c8y-single-operation [operation]=\"changesOperation$ | async\"></c8y-single-operation>\n </fieldset>\n <div class=\"card-block p-t-0 p-b-0\">\n \n <!-- EMPTY STATE -->\n <ng-container *ngIf=\"isEmpty(deviceFirmwareFragment$ | async); else firmwareBlock\">\n <div class=\"c8y-empty-state text-center\">\n <h1 c8yIcon=\"c8y-firmware\" class=\"c8y-icon-duocolor\"></h1>\n <p>\n <strong translate>No firmware installed.</strong> <br />\n <small translate>Click below to install firmware into this device.</small>\n </p>\n </div>\n </ng-container>\n\n <!-- FIRMWARE -->\n <ng-template #firmwareBlock>\n <c8y-list-group class=\"no-border-last\">\n <c8y-li>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body *ngIf=\"deviceFirmwareFragment$ | async as deviceFirmwareFragment\">\n <!-- Firmware title -->\n <p class=\"m-b-16 text-medium\">\n {{ deviceFirmwareFragment.name }}\n </p>\n <!-- Firmware description -->\n <div *ngIf=\"repositoryEntry$ | async as repositoryEntry\">\n <p class=\"text-label-small\" translate>\n Description\n </p>\n <p>\n {{ repositoryEntry.description }}\n </p>\n </div>\n\n <!-- BASE/PATCH VERSION -->\n <div class=\"m-b-16\">\n <p class=\"text-label-small\" translate>\n Version\n </p>\n <p *ngIf=\"deviceFirmwareFragment.version; else versionNotSpecified\">\n {{ deviceFirmwareFragment.version }}\n </p>\n <ng-template #versionNotSpecified>\n <p>\n <em class=\"text-muted\"> ({{ 'not specified`version`' | translate }}) </em>\n </p>\n </ng-template>\n </div>\n\n <!-- ADD PATCH -->\n <button\n *ngIf=\"(this.patches$ | async)?.length > 0\"\n (click)=\"addPatch()\"\n class=\"btn btn-xs btn-primary\"\n [disabled]=\"changesInProgress$ | async\"\n title=\"{{ 'Patches available' | translate }}\"\n >\n {{ 'Patches available' | translate }}\n </button>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </ng-template>\n </div>\n </div>\n <div class=\"card-footer separator-top\">\n\n <!-- INSTALL FIRMWARE -->\n <button\n *ngIf=\"isEmpty(deviceFirmwareFragment$ | async)\"\n class=\"btn btn-primary\"\n (click)=\"installFirmware()\"\n title=\"{{ 'Install firmware' | translate }}\"\n >\n {{ 'Install firmware' | translate }}\n </button>\n\n <!-- REPLACE FIRMWARE -->\n <button\n *ngIf=\"!isEmpty(deviceFirmwareFragment$ | async)\"\n class=\"btn btn-primary\"\n (click)=\"installFirmware()\"\n [disabled]=\"changesInProgress$ | async\"\n title=\"{{ 'Replace firmware' | translate }}\"\n >\n {{ 'Replace firmware' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n"
169
+ template: "<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card\">\n <div class=\"card-header separator\">\n <h4 class=\"card-title\" translate>Current firmware</h4>\n </div>\n <div class=\"inner-scroll\">\n <fieldset *ngIf=\"changesOperation$ | async\" class=\"card-block bg-gray-white\">\n <c8y-single-operation [operation]=\"changesOperation$ | async\"></c8y-single-operation>\n </fieldset>\n <div class=\"card-block p-t-0 p-b-0\">\n <!-- EMPTY STATE -->\n <ng-container *ngIf=\"isEmpty(deviceFirmwareFragment$ | async); else firmwareBlock\">\n <div class=\"c8y-empty-state text-center\">\n <h1 c8yIcon=\"c8y-firmware\" class=\"c8y-icon-duocolor\"></h1>\n <p>\n <strong translate>No firmware installed.</strong> <br />\n <small translate>Click below to install firmware into this device.</small>\n </p>\n </div>\n </ng-container>\n\n <!-- FIRMWARE -->\n <ng-template #firmwareBlock>\n <c8y-list-group class=\"no-border-last\">\n <c8y-li>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body *ngIf=\"deviceFirmwareFragment$ | async as deviceFirmwareFragment\">\n <!-- Firmware title -->\n <p class=\"m-b-16 text-medium\">\n {{ deviceFirmwareFragment.name }}\n </p>\n <!-- Firmware description -->\n <div *ngIf=\"repositoryEntry$ | async as repositoryEntry\">\n <p class=\"text-label-small\" translate>Description</p>\n <p>\n {{ repositoryEntry.description }}\n </p>\n </div>\n\n <!-- BASE/PATCH VERSION -->\n <div class=\"m-b-16\">\n <p class=\"text-label-small\" translate>Version</p>\n <p *ngIf=\"deviceFirmwareFragment.version; else versionNotSpecified\">\n {{ deviceFirmwareFragment.version }}\n </p>\n <ng-template #versionNotSpecified>\n <p>\n <em class=\"text-muted\"> ({{ 'not specified`version`' | translate }}) </em>\n </p>\n </ng-template>\n </div>\n\n <!-- ADD PATCH -->\n <button\n *ngIf=\"\n (supportsFirmwareOperations$ | async) && (this.patches$ | async)?.length > 0\n \"\n (click)=\"addPatch()\"\n class=\"btn btn-xs btn-primary\"\n [disabled]=\"changesInProgress$ | async\"\n title=\"{{ 'Patches available' | translate }}\"\n >\n {{ 'Patches available' | translate }}\n </button>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </ng-template>\n </div>\n </div>\n <div *ngIf=\"supportsFirmwareOperations$ | async\" class=\"card-footer separator-top\">\n <!-- INSTALL FIRMWARE -->\n <button\n *ngIf=\"isEmpty(deviceFirmwareFragment$ | async)\"\n class=\"btn btn-primary\"\n (click)=\"installFirmware()\"\n title=\"{{ 'Install firmware' | translate }}\"\n >\n {{ 'Install firmware' | translate }}\n </button>\n\n <!-- REPLACE FIRMWARE -->\n <button\n *ngIf=\"!isEmpty(deviceFirmwareFragment$ | async)\"\n class=\"btn btn-primary\"\n (click)=\"installFirmware()\"\n [disabled]=\"changesInProgress$ | async\"\n title=\"{{ 'Replace firmware' | translate }}\"\n >\n {{ 'Replace firmware' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n"
169
170
  },] }
170
171
  ];
171
172
  FirmwareDeviceTabComponent.ctorParameters = () => [
@@ -174,4 +175,4 @@ FirmwareDeviceTabComponent.ctorParameters = () => [
174
175
  { type: InventoryService },
175
176
  { type: BsModalService }
176
177
  ];
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlLWRldmljZS10YWIvZmlybXdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sRUFBOEIsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBa0MsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFNbkcsTUFBTSxPQUFPLDBCQUEwQjtJQWlEckMsWUFDVSxLQUFxQixFQUNyQixVQUE2QixFQUM3QixTQUEyQixFQUMzQixPQUF1QjtRQUh2QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFt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LENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUNuRCxlQUFlLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLEVBQ0QsZUFBZSxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsU0FBcUI7UUFDeEMsT0FBTyxDQUNMLFNBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQzdGLENBQUM7SUFDSixDQUFDOzs7WUFwT0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLDI5SEFBaUQ7YUFDbEQ7OztZQWhCUSxjQUFjO1lBU2QsaUJBQWlCO1lBRlcsZ0JBQWdCO1lBTDVDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFzc2lnbiwgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNb2RhbFNlbGVjdGlvbk1vZGUsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJT3BlcmF0aW9uLCBJbnZlbnRvcnlTZXJ2aWNlLCBPcGVyYXRpb25TdGF0dXMgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5cbmltcG9ydCB7IFJlcG9zaXRvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZUZpcm13YXJlLCBGaXJtd2FyZUJpbmFyeSwgUmVwb3NpdG9yeVR5cGUgfSBmcm9tICcuLi9yZXBvc2l0b3J5Lm1vZGVsJztcbmltcG9ydCB7IFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1tb2RhbC9yZXBvc2l0b3J5LXNlbGVjdC1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZmlybXdhcmUtZGV2aWNlLXRhYicsXG4gIHRlbXBsYXRlVXJsOiAnZmlybXdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRmlybXdhcmVEZXZpY2VUYWJDb21wb25lbnQge1xuICBpc0VtcHR5ID0gaXNFbXB0eTtcbiAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGRldmljZSQ6IEJlaGF2aW9yU3ViamVjdDxJTWFuYWdlZE9iamVjdD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGFcbiAgKTtcbiAgZGV2aWNlRmlybXdhcmVGcmFnbWVudCQ6IE9ic2VydmFibGU8RGV2aWNlRmlybXdhcmU+ID0gdGhpcy5kZXZpY2UkLnBpcGUoXG4gICAgbWFwKGRldmljZSA9PiBkZXZpY2UuYzh5X0Zpcm13YXJlKVxuICApO1xuICBmaXJtd2FyZUJpbmFyeSQ6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3Q+ID0gdGhpcy5kZXZpY2VGaXJtd2FyZUZyYWdtZW50JC5waXBlKFxuICAgIGZpbHRlcihkZXZpY2VGaXJtd2FyZUZyYWdtZW50ID0+ICFpc0VtcHR5KGRldmljZUZpcm13YXJlRnJhZ21lbnQpKSxcbiAgICBzd2l0Y2hNYXAoZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PlxuICAgICAgZnJvbShcbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmdldFJlcG9zaXRvcnlCaW5hcnlNb0J5VmVyc2lvbihcbiAgICAgICAgICBkZXZpY2VGaXJtd2FyZUZyYWdtZW50LFxuICAgICAgICAgIFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHJlcG9zaXRvcnlFbnRyeSQ6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3Q+ID0gdGhpcy5maXJtd2FyZUJpbmFyeSQucGlwZShcbiAgICBzd2l0Y2hNYXAobW8gPT4gdGhpcy5yZXBvc2l0b3J5LmdldFJlcG9zaXRvcnlFbnRyeU1PJChtbykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHBhdGNoZXMkOiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0W10+ID0gY29tYmluZUxhdGVzdChcbiAgICB0aGlzLmZpcm13YXJlQmluYXJ5JCxcbiAgICB0aGlzLnJlcG9zaXRvcnlFbnRyeSRcbiAgKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2Zpcm13YXJlQmluYXJ5LCByZXBvc2l0b3J5RW50cnldKSA9PiB7XG4gICAgICBpZiAocmVwb3NpdG9yeUVudHJ5ICYmIGZpcm13YXJlQmluYXJ5KSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb246IHN0cmluZyA9IHRoaXMucmVwb3NpdG9yeS5nZXRCYXNlVmVyc2lvbkZyb21NTyhcbiAgICAgICAgICBmaXJtd2FyZUJpbmFyeSBhcyBGaXJtd2FyZUJpbmFyeVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMucmVwb3NpdG9yeS5saXN0UGF0Y2hWZXJzaW9ucyhyZXBvc2l0b3J5RW50cnksIHZlcnNpb24pKS5waXBlKFxuICAgICAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIGNoYW5nZXNPcGVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJT3BlcmF0aW9uPihudWxsKTtcbiAgY2hhbmdlc0luUHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5jaGFuZ2VzT3BlcmF0aW9uJC5waXBlKFxuICAgIG1hcChvcGVyYXRpb24gPT4gdGhpcy5pc0luUHJvZ3Jlc3Mob3BlcmF0aW9uKSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIC8vIFRPRE8gY2hlY2sgcm91dGUgc25hcHNob3QsIHdoeSBpcyBub3QgcmVmcmVzaGluZyBkZXZpY2UuXG4gICAgLy8gU2NlbmFyaW86IG1pc3NpbmcgZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PiBpbnN0YWxsIG5ldyB2ZXJzaW9uID0+IHN3aXRjaCB0YWJzLlxuICAgIC8vIEV4cGVjdGVkOiBkZXZpY2Ugc2hvdWxkIGJlIHNldC5cbiAgICBhd2FpdCB0aGlzLmxvYWREZXZpY2UoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRPcGVyYXRpb24oKTtcbiAgfVxuXG4gIGluc3RhbGxGaXJtd2FyZSgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kOiAobW9kYWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkOiBvZihbXSksXG4gICAgICByZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJDogbW9kYWwgPT5cbiAgICAgICAgdGhpcy5nZXRSZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9ucyQobW9kYWwuY29udGVudC5zZWFyY2hUZXJtKSxcbiAgICAgIHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdJbnN0YWxsIGZpcm13YXJlJyksXG4gICAgICBzdWJUaXRsZTogZ2V0dGV4dCgnQXZhaWxhYmxlIGZpcm13YXJlcyBtYXRjaGluZyB0aGUgZGV2aWNlIHR5cGUnKSxcbiAgICAgIGljb246ICdjOHktZmlybXdhcmUnLFxuICAgICAgbW9kZTogTW9kYWxTZWxlY3Rpb25Nb2RlLlNJTkdMRSxcbiAgICAgIGxhYmVsczogeyBvazogZ2V0dGV4dCgnSW5zdGFsbCcpIH0sXG4gICAgICBkaXNhYmxlU2VsZWN0ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHRoaXMuZGV2aWNlRmlybXdhcmVGcmFnbWVudCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGRldmljZUZpcm13YXJlRnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZGV2aWNlRmlybXdhcmVGcmFnbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gW3sgbmFtZSwgdmVyc2lvbiB9XTtcbiAgICAgICAgICAgIGFzc2lnbihpbml0aWFsU3RhdGUsIHsgc2VsZWN0ZWQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhSZXBvc2l0b3J5U2VsZWN0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgICBpbml0aWFsU3RhdGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpbml0aWFsU3RhdGUucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQpIHtcbiAgICAgICAgICAgIG1vZGFsLmNvbnRlbnQucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkID0gaW5pdGlhbFN0YXRlLnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kKFxuICAgICAgICAgICAgICBtb2RhbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtb2RhbC5jb250ZW50LmxvYWQubmV4dCgpO1xuXG4gICAgICAgICAgcmV0dXJuIG1vZGFsLmNvbnRlbnQucmVzdWx0RW1pdHRlcjtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtzZWxlY3RlZEZpcm13YXJlXSkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZU9wZXJhdGlvbihzZWxlY3RlZEZpcm13YXJlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkKHNlYXJjaFRlcm0kOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPikge1xuICAgIHJldHVybiBzZWFyY2hUZXJtJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChzZWFyY2hUZXJtID0+XG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5yZXBvc2l0b3J5LmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSwgdGhpcy5kZXZpY2UkLnZhbHVlKSxcbiAgICAgICAgICBwYXJ0aWFsTmFtZTogc2VhcmNoVGVybSxcbiAgICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEwMCB9XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSksXG4gICAgICBtYXAobW9zID0+IHRoaXMuZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vcykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vczogSU1hbmFnZWRPYmplY3RbXSkge1xuICAgIG1vcy5mb3JFYWNoKG1vID0+IHtcbiAgICAgIG1vLnZlcnNpb25zID0gdGhpcy5yZXBvc2l0b3J5Lmxpc3RCYXNlVmVyc2lvbnMobW8pO1xuICAgIH0pO1xuICAgIHJldHVybiBtb3M7XG4gIH1cblxuICBhZGRQYXRjaCgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zJDogT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgcmVwb3NpdG9yeVR5cGU6IFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFLFxuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkOiB0aGlzLmdldFJlcG9zaXRvcnlFbnRyeVdpdGhQYXRjaGVzJCgpLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0luc3RhbGwgZmlybXdhcmUnKSxcbiAgICAgIHN1YlRpdGxlOiBnZXR0ZXh0KCdBdmFpbGFibGUgZmlybXdhcmVzIG1hdGNoaW5nIHRoZSBkZXZpY2UgdHlwZScpLFxuICAgICAgaWNvbjogJ2M4eS1maXJtd2FyZScsXG4gICAgICBtb2RlOiBNb2RhbFNlbGVjdGlvbk1vZGUuU0lOR0xFLFxuICAgICAgbGFiZWxzOiB7IG9rOiBnZXR0ZXh0KCdJbnN0YWxsJykgfSxcbiAgICAgIGRpc2FibGVTZWxlY3RlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5kZXZpY2VGaXJtd2FyZUZyYWdtZW50JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChkZXZpY2VGaXJtd2FyZUZyYWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoZGV2aWNlRmlybXdhcmVGcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBkZXZpY2VGaXJtd2FyZUZyYWdtZW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbeyBuYW1lLCB2ZXJzaW9uIH1dO1xuICAgICAgICAgICAgYXNzaWduKGluaXRpYWxTdGF0ZSwgeyBzZWxlY3RlZCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1vZGFsLmNvbnRlbnQubG9hZC5uZXh0KCk7XG5cbiAgICAgICAgICByZXR1cm4gbW9kYWwuY29udGVudC5yZXN1bHRFbWl0dGVyO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzZWxlY3RlZE9wdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlT3BlcmF0aW9uKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeUVudHJ5V2l0aFBhdGNoZXMkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHRoaXMucmVwb3NpdG9yeUVudHJ5JCwgdGhpcy5wYXRjaGVzJCkucGlwZShcbiAgICAgIG1hcCgoW3JlcG9zaXRvcnlFbnRyeSwgcGF0Y2hlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFt7IC4uLnJlcG9zaXRvcnlFbnRyeSwgdmVyc2lvbnM6IHBhdGNoZXMgfV07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsb2FkRGV2aWNlKCkge1xuICAgIHRoaXMucmVsb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBkZXZpY2VJZCA9IHRoaXMuZGV2aWNlJC52YWx1ZS5pZDtcbiAgICBjb25zdCBkZXZpY2UgPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgdGhpcy5kZXZpY2UkLm5leHQoZGV2aWNlKTtcbiAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPcGVyYXRpb24oc2VsZWN0ZWRGaXJtd2FyZSkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5jcmVhdGVGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICAgIHRoaXMuZGV2aWNlJC52YWx1ZSxcbiAgICAgIHNlbGVjdGVkRmlybXdhcmVcbiAgICApO1xuICAgIHRoaXMudHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE9wZXJhdGlvbigpIHtcbiAgICBjb25zdCBkZXZpY2VJZCA9IHRoaXMuZGV2aWNlJC52YWx1ZS5pZDtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZ2V0TGFzdEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkKTtcbiAgICB0aGlzLnRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNJblByb2dyZXNzKG9wZXJhdGlvbikpIHtcbiAgICAgIHRoaXMucmVwb3NpdG9yeS5vYnNlcnZlT3BlcmF0aW9uKG9wZXJhdGlvbikuc3Vic2NyaWJlKFxuICAgICAgICBvcGVyYXRpb25VcGRhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICAgIGlmIChvcGVyYXRpb25VcGRhdGUuc3RhdHVzID09PSBPcGVyYXRpb25TdGF0dXMuU1VDQ0VTU0ZVTCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGV2aWNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVyYXRpb25VcGRhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNJblByb2dyZXNzKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYXRpb24gJiYgW09wZXJhdGlvblN0YXR1cy5QRU5ESU5HLCBPcGVyYXRpb25TdGF0dXMuRVhFQ1VUSU5HXS5pbmNsdWRlcyhvcGVyYXRpb24uc3RhdHVzKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2Zpcm13YXJlLWRldmljZS10YWIvZmlybXdhcmUtZGV2aWNlLXRhYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQWtDLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBTW5HLE1BQU0sT0FBTywwQkFBMEI7SUF1RHJDLFlBQ1UsS0FBcUIsRUFDckIsVUFBNkIsRUFDN0IsU0FBMkIsRUFDM0IsT0FBdUI7UUFIdkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFW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LElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQUE7SUFFTyxjQUFjLENBQUMsU0FBcUI7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQ25ELGVBQWUsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLFVBQVUsRUFBRTtvQkFDekQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUNuQjtZQUNILENBQUMsRUFDRCxlQUFlLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFxQjtRQUN4QyxPQUFPLENBQ0wsU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FDN0YsQ0FBQztJQUNKLENBQUM7OztZQTFPRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMscy9IQUFpRDthQUNsRDs7O1lBaEJRLGNBQWM7WUFTZCxpQkFBaUI7WUFGVyxnQkFBZ0I7WUFMNUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgYXNzaWduLCBnZXQsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTW9kYWxTZWxlY3Rpb25Nb2RlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSU9wZXJhdGlvbiwgSW52ZW50b3J5U2VydmljZSwgT3BlcmF0aW9uU3RhdHVzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5pbXBvcnQgeyBSZXBvc2l0b3J5U2VydmljZSB9IGZyb20gJy4uL3JlcG9zaXRvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VGaXJtd2FyZSwgRmlybXdhcmVCaW5hcnksIFJlcG9zaXRvcnlUeXBlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5U2VsZWN0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QtbW9kYWwvcmVwb3NpdG9yeS1zZWxlY3QtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWZpcm13YXJlLWRldmljZS10YWInLFxuICB0ZW1wbGF0ZVVybDogJ2Zpcm13YXJlLWRldmljZS10YWIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpcm13YXJlRGV2aWNlVGFiQ29tcG9uZW50IHtcbiAgaXNFbXB0eSA9IGlzRW1wdHk7XG4gIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBkZXZpY2UkOiBCZWhhdmlvclN1YmplY3Q8SU1hbmFnZWRPYmplY3Q+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhXG4gICk7XG4gIGRldmljZUZpcm13YXJlRnJhZ21lbnQkOiBPYnNlcnZhYmxlPERldmljZUZpcm13YXJlPiA9IHRoaXMuZGV2aWNlJC5waXBlKFxuICAgIG1hcChkZXZpY2UgPT4gZGV2aWNlLmM4eV9GaXJtd2FyZSlcbiAgKTtcbiAgZmlybXdhcmVCaW5hcnkkOiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0PiA9IHRoaXMuZGV2aWNlRmlybXdhcmVGcmFnbWVudCQucGlwZShcbiAgICBmaWx0ZXIoZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PiAhaXNFbXB0eShkZXZpY2VGaXJtd2FyZUZyYWdtZW50KSksXG4gICAgc3dpdGNoTWFwKGRldmljZUZpcm13YXJlRnJhZ21lbnQgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5nZXRSZXBvc2l0b3J5QmluYXJ5TW9CeVZlcnNpb24oXG4gICAgICAgICAgZGV2aWNlRmlybXdhcmVGcmFnbWVudCxcbiAgICAgICAgICBSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICByZXBvc2l0b3J5RW50cnkkOiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0PiA9IHRoaXMuZmlybXdhcmVCaW5hcnkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKG1vID0+IHRoaXMucmVwb3NpdG9yeS5nZXRSZXBvc2l0b3J5RW50cnlNTyQobW8pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBwYXRjaGVzJDogT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPiA9IGNvbWJpbmVMYXRlc3QoXG4gICAgdGhpcy5maXJtd2FyZUJpbmFyeSQsXG4gICAgdGhpcy5yZXBvc2l0b3J5RW50cnkkXG4gICkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtmaXJtd2FyZUJpbmFyeSwgcmVwb3NpdG9yeUVudHJ5XSkgPT4ge1xuICAgICAgaWYgKHJlcG9zaXRvcnlFbnRyeSAmJiBmaXJtd2FyZUJpbmFyeSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmcgPSB0aGlzLnJlcG9zaXRvcnkuZ2V0QmFzZVZlcnNpb25Gcm9tTU8oXG4gICAgICAgICAgZmlybXdhcmVCaW5hcnkgYXMgRmlybXdhcmVCaW5hcnlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnJlcG9zaXRvcnkubGlzdFBhdGNoVmVyc2lvbnMocmVwb3NpdG9yeUVudHJ5LCB2ZXJzaW9uKSkucGlwZShcbiAgICAgICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBzdXBwb3J0c0Zpcm13YXJlT3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmRldmljZSQucGlwZShcbiAgICBtYXAoXG4gICAgICAoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCkgPT5cbiAgICAgICAgZ2V0KGRldmljZSwgJ2M4eV9TdXBwb3J0ZWRPcGVyYXRpb25zJywgW10pLmluZGV4T2YoJ2M4eV9GaXJtd2FyZScpID4gLTFcbiAgICApXG4gICk7XG4gIGNoYW5nZXNPcGVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJT3BlcmF0aW9uPihudWxsKTtcbiAgY2hhbmdlc0luUHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5jaGFuZ2VzT3BlcmF0aW9uJC5waXBlKFxuICAgIG1hcChvcGVyYXRpb24gPT4gdGhpcy5pc0luUHJvZ3Jlc3Mob3BlcmF0aW9uKSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIC8vIFRPRE8gY2hlY2sgcm91dGUgc25hcHNob3QsIHdoeSBpcyBub3QgcmVmcmVzaGluZyBkZXZpY2UuXG4gICAgLy8gU2NlbmFyaW86IG1pc3NpbmcgZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PiBpbnN0YWxsIG5ldyB2ZXJzaW9uID0+IHN3aXRjaCB0YWJzLlxuICAgIC8vIEV4cGVjdGVkOiBkZXZpY2Ugc2hvdWxkIGJlIHNldC5cbiAgICBhd2FpdCB0aGlzLmxvYWREZXZpY2UoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRPcGVyYXRpb24oKTtcbiAgfVxuXG4gIGluc3RhbGxGaXJtd2FyZSgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kOiAobW9kYWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkOiBvZihbXSksXG4gICAgICByZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9uc0ZuJDogbW9kYWwgPT5cbiAgICAgICAgdGhpcy5nZXRSZXBvc2l0b3J5RW50cmllc1dpdGhWZXJzaW9ucyQobW9kYWwuY29udGVudC5zZWFyY2hUZXJtKSxcbiAgICAgIHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdJbnN0YWxsIGZpcm13YXJlJyksXG4gICAgICBzdWJUaXRsZTogZ2V0dGV4dCgnQXZhaWxhYmxlIGZpcm13YXJlcyBtYXRjaGluZyB0aGUgZGV2aWNlIHR5cGUnKSxcbiAgICAgIGljb246ICdjOHktZmlybXdhcmUnLFxuICAgICAgbW9kZTogTW9kYWxTZWxlY3Rpb25Nb2RlLlNJTkdMRSxcbiAgICAgIGxhYmVsczogeyBvazogZ2V0dGV4dCgnSW5zdGFsbCcpIH0sXG4gICAgICBkaXNhYmxlU2VsZWN0ZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHRoaXMuZGV2aWNlRmlybXdhcmVGcmFnbWVudCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoZGV2aWNlRmlybXdhcmVGcmFnbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGRldmljZUZpcm13YXJlRnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZGV2aWNlRmlybXdhcmVGcmFnbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gW3sgbmFtZSwgdmVyc2lvbiB9XTtcbiAgICAgICAgICAgIGFzc2lnbihpbml0aWFsU3RhdGUsIHsgc2VsZWN0ZWQgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhSZXBvc2l0b3J5U2VsZWN0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgICBpbml0aWFsU3RhdGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpbml0aWFsU3RhdGUucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnNGbiQpIHtcbiAgICAgICAgICAgIG1vZGFsLmNvbnRlbnQucmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkID0gaW5pdGlhbFN0YXRlLnJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zRm4kKFxuICAgICAgICAgICAgICBtb2RhbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtb2RhbC5jb250ZW50LmxvYWQubmV4dCgpO1xuXG4gICAgICAgICAgcmV0dXJuIG1vZGFsLmNvbnRlbnQucmVzdWx0RW1pdHRlcjtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtzZWxlY3RlZEZpcm13YXJlXSkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZU9wZXJhdGlvbihzZWxlY3RlZEZpcm13YXJlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkKHNlYXJjaFRlcm0kOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPikge1xuICAgIHJldHVybiBzZWFyY2hUZXJtJC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChzZWFyY2hUZXJtID0+XG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuRklSTVdBUkUsIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5yZXBvc2l0b3J5LmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5GSVJNV0FSRSwgdGhpcy5kZXZpY2UkLnZhbHVlKSxcbiAgICAgICAgICBwYXJ0aWFsTmFtZTogc2VhcmNoVGVybSxcbiAgICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEwMCB9XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSksXG4gICAgICBtYXAobW9zID0+IHRoaXMuZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vcykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgZ2V0QW5kQXNzaWduUmVwb3NpdG9yeUJpbmFyaWVzKG1vczogSU1hbmFnZWRPYmplY3RbXSkge1xuICAgIG1vcy5mb3JFYWNoKG1vID0+IHtcbiAgICAgIG1vLnZlcnNpb25zID0gdGhpcy5yZXBvc2l0b3J5Lmxpc3RCYXNlVmVyc2lvbnMobW8pO1xuICAgIH0pO1xuICAgIHJldHVybiBtb3M7XG4gIH1cblxuICBhZGRQYXRjaCgpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBhcnRpYWw8UmVwb3NpdG9yeVNlbGVjdE1vZGFsQ29tcG9uZW50PiAmIHtcbiAgICAgIHJlcG9zaXRvcnlFbnRyaWVzV2l0aFZlcnNpb25zJDogT2JzZXJ2YWJsZTxJTWFuYWdlZE9iamVjdFtdPjtcbiAgICB9ID0ge1xuICAgICAgcmVwb3NpdG9yeVR5cGU6IFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFLFxuICAgICAgcmVwb3NpdG9yeUVudHJpZXNXaXRoVmVyc2lvbnMkOiB0aGlzLmdldFJlcG9zaXRvcnlFbnRyeVdpdGhQYXRjaGVzJCgpLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0luc3RhbGwgZmlybXdhcmUnKSxcbiAgICAgIHN1YlRpdGxlOiBnZXR0ZXh0KCdBdmFpbGFibGUgZmlybXdhcmVzIG1hdGNoaW5nIHRoZSBkZXZpY2UgdHlwZScpLFxuICAgICAgaWNvbjogJ2M4eS1maXJtd2FyZScsXG4gICAgICBtb2RlOiBNb2RhbFNlbGVjdGlvbk1vZGUuU0lOR0xFLFxuICAgICAgbGFiZWxzOiB7IG9rOiBnZXR0ZXh0KCdJbnN0YWxsJykgfSxcbiAgICAgIGRpc2FibGVTZWxlY3RlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5kZXZpY2VGaXJtd2FyZUZyYWdtZW50JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChkZXZpY2VGaXJtd2FyZUZyYWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoZGV2aWNlRmlybXdhcmVGcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBkZXZpY2VGaXJtd2FyZUZyYWdtZW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbeyBuYW1lLCB2ZXJzaW9uIH1dO1xuICAgICAgICAgICAgYXNzaWduKGluaXRpYWxTdGF0ZSwgeyBzZWxlY3RlZCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbC5zaG93KFJlcG9zaXRvcnlTZWxlY3RNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1vZGFsLmNvbnRlbnQubG9hZC5uZXh0KCk7XG5cbiAgICAgICAgICByZXR1cm4gbW9kYWwuY29udGVudC5yZXN1bHRFbWl0dGVyO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzZWxlY3RlZE9wdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlT3BlcmF0aW9uKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVwb3NpdG9yeUVudHJ5V2l0aFBhdGNoZXMkKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHRoaXMucmVwb3NpdG9yeUVudHJ5JCwgdGhpcy5wYXRjaGVzJCkucGlwZShcbiAgICAgIG1hcCgoW3JlcG9zaXRvcnlFbnRyeSwgcGF0Y2hlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFt7IC4uLnJlcG9zaXRvcnlFbnRyeSwgdmVyc2lvbnM6IHBhdGNoZXMgfV07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsb2FkRGV2aWNlKCkge1xuICAgIHRoaXMucmVsb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBkZXZpY2VJZCA9IHRoaXMuZGV2aWNlJC52YWx1ZS5pZDtcbiAgICBjb25zdCBkZXZpY2UgPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgdGhpcy5kZXZpY2UkLm5leHQoZGV2aWNlKTtcbiAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVPcGVyYXRpb24oc2VsZWN0ZWRGaXJtd2FyZSkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5jcmVhdGVGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICAgIHRoaXMuZGV2aWNlJC52YWx1ZSxcbiAgICAgIHNlbGVjdGVkRmlybXdhcmVcbiAgICApO1xuICAgIHRoaXMudHJhY2tPcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE9wZXJhdGlvbigpIHtcbiAgICBjb25zdCBkZXZpY2VJZCA9IHRoaXMuZGV2aWNlJC52YWx1ZS5pZDtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZ2V0TGFzdEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkKTtcbiAgICB0aGlzLnRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrT3BlcmF0aW9uKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNJblByb2dyZXNzKG9wZXJhdGlvbikpIHtcbiAgICAgIHRoaXMucmVwb3NpdG9yeS5vYnNlcnZlT3BlcmF0aW9uKG9wZXJhdGlvbikuc3Vic2NyaWJlKFxuICAgICAgICBvcGVyYXRpb25VcGRhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICAgIGlmIChvcGVyYXRpb25VcGRhdGUuc3RhdHVzID09PSBPcGVyYXRpb25TdGF0dXMuU1VDQ0VTU0ZVTCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGV2aWNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvcGVyYXRpb25VcGRhdGUgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlc09wZXJhdGlvbiQubmV4dChvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNJblByb2dyZXNzKG9wZXJhdGlvbjogSU9wZXJhdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYXRpb24gJiYgW09wZXJhdGlvblN0YXR1cy5QRU5ESU5HLCBPcGVyYXRpb25TdGF0dXMuRVhFQ1VUSU5HXS5pbmNsdWRlcyhvcGVyYXRpb24uc3RhdHVzKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,17 +1,16 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { get, indexOf } from 'lodash-es';
2
+ import { get, has, indexOf } from 'lodash-es';
3
3
  const FIRMWARE_FRAGMENT = 'c8y_Firmware';
4
4
  const SUPPORTED_OPERATIONS_FRAGMENT = 'c8y_SupportedOperations';
5
5
  export class FirmwareDeviceTabGuard {
6
6
  canActivate(route) {
7
7
  const contextData = get(route, 'data.contextData') || get(route, 'parent.data.contextData');
8
8
  const supportedOperations = get(contextData, SUPPORTED_OPERATIONS_FRAGMENT);
9
- return !!supportedOperations
10
- ? indexOf(supportedOperations, FIRMWARE_FRAGMENT) >= 0
11
- : false;
9
+ return ((!!supportedOperations ? indexOf(supportedOperations, FIRMWARE_FRAGMENT) >= 0 : false) ||
10
+ has(contextData, 'c8y_Firmware'));
12
11
  }
13
12
  }
14
13
  FirmwareDeviceTabGuard.decorators = [
15
14
  { type: Injectable }
16
15
  ];
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtZGV2aWNlLXRhYi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvZmlybXdhcmUtZGV2aWNlLXRhYi9maXJtd2FyZS1kZXZpY2UtdGFiLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7QUFDekMsTUFBTSw2QkFBNkIsR0FBRyx5QkFBeUIsQ0FBQztBQUdoRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFdBQVcsQ0FBQyxLQUFLO1FBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUM1RixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsQ0FBQyxtQkFBbUI7WUFDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNaLENBQUM7OztZQVJGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnZXQsIGluZGV4T2YgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5jb25zdCBGSVJNV0FSRV9GUkFHTUVOVCA9ICdjOHlfRmlybXdhcmUnO1xuY29uc3QgU1VQUE9SVEVEX09QRVJBVElPTlNfRlJBR01FTlQgPSAnYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmlybXdhcmVEZXZpY2VUYWJHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgY2FuQWN0aXZhdGUocm91dGUpIHtcbiAgICBjb25zdCBjb250ZXh0RGF0YSA9IGdldChyb3V0ZSwgJ2RhdGEuY29udGV4dERhdGEnKSB8fCBnZXQocm91dGUsICdwYXJlbnQuZGF0YS5jb250ZXh0RGF0YScpO1xuICAgIGNvbnN0IHN1cHBvcnRlZE9wZXJhdGlvbnMgPSBnZXQoY29udGV4dERhdGEsIFNVUFBPUlRFRF9PUEVSQVRJT05TX0ZSQUdNRU5UKTtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRPcGVyYXRpb25zXG4gICAgICA/IGluZGV4T2Yoc3VwcG9ydGVkT3BlcmF0aW9ucywgRklSTVdBUkVfRlJBR01FTlQpID49IDBcbiAgICAgIDogZmFsc2U7XG4gIH1cbn1cbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtZGV2aWNlLXRhYi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvZmlybXdhcmUtZGV2aWNlLXRhYi9maXJtd2FyZS1kZXZpY2UtdGFiLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLE1BQU0sNkJBQTZCLEdBQUcseUJBQXlCLENBQUM7QUFHaEUsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxXQUFXLENBQUMsS0FBSztRQUNmLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDNUYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUNMLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN0RixHQUFHLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUNqQyxDQUFDO0lBQ0osQ0FBQzs7O1lBVEYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdldCwgaGFzLCBpbmRleE9mIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuY29uc3QgRklSTVdBUkVfRlJBR01FTlQgPSAnYzh5X0Zpcm13YXJlJztcbmNvbnN0IFNVUFBPUlRFRF9PUEVSQVRJT05TX0ZSQUdNRU5UID0gJ2M4eV9TdXBwb3J0ZWRPcGVyYXRpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpcm13YXJlRGV2aWNlVGFiR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gIGNhbkFjdGl2YXRlKHJvdXRlKSB7XG4gICAgY29uc3QgY29udGV4dERhdGEgPSBnZXQocm91dGUsICdkYXRhLmNvbnRleHREYXRhJykgfHwgZ2V0KHJvdXRlLCAncGFyZW50LmRhdGEuY29udGV4dERhdGEnKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRPcGVyYXRpb25zID0gZ2V0KGNvbnRleHREYXRhLCBTVVBQT1JURURfT1BFUkFUSU9OU19GUkFHTUVOVCk7XG4gICAgcmV0dXJuIChcbiAgICAgICghIXN1cHBvcnRlZE9wZXJhdGlvbnMgPyBpbmRleE9mKHN1cHBvcnRlZE9wZXJhdGlvbnMsIEZJUk1XQVJFX0ZSQUdNRU5UKSA+PSAwIDogZmFsc2UpIHx8XG4gICAgICBoYXMoY29udGV4dERhdGEsICdjOHlfRmlybXdhcmUnKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +1,15 @@
1
1
  import { Component, Output, Input, EventEmitter } from '@angular/core';
2
- import { filter } from 'lodash-es';
2
+ import { filter, get } from 'lodash-es';
3
3
  export class DeviceSoftwareListComponent {
4
4
  constructor() {
5
5
  this.update = new EventEmitter();
6
6
  this.remove = new EventEmitter();
7
+ this.supportsSoftwareOperations = false;
8
+ this.operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];
9
+ }
10
+ ngOnInit() {
11
+ const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);
12
+ this.supportsSoftwareOperations = this.operationTypes.some(operationType => supportedOperations.indexOf(operationType) > -1);
7
13
  }
8
14
  ngAfterContentInit() {
9
15
  this.showUpdate = this.update.observers.length > 0;
@@ -17,13 +23,14 @@ export class DeviceSoftwareListComponent {
17
23
  DeviceSoftwareListComponent.decorators = [
18
24
  { type: Component, args: [{
19
25
  selector: 'c8y-device-software-list',
20
- template: "<c8y-list-group class=\"no-border-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *ngFor=\"let software of softwareList\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-8\">\n <!-- SOFTWARE NAME -->\n <p class=\"text-truncate\">{{ software.name }}</p>\n <!-- SOFTWARE VERSION -->\n <p class=\"text-truncate\">\n <span class=\"text-label-small m-r-4\" translate>\n Version\n </span>\n <span title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n </p>\n </div>\n\n <div *ngIf=\"showUpdate || showRemove\" class=\"col-4 text-right\">\n <!-- UPDATE SOFTWARE -->\n <button\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-default btn-xs showOnHover\"\n (click)=\"update.emit(software)\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n translate\n >\n Update\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n title=\"{{ 'Remove`software`' | translate }}\"\n class=\"showOnHover btn btn-dot pull-right\"\n (click)=\"remove.emit(software)\"\n >\n <i c8yIcon=\"minus-circle\" class=\"text-danger\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n"
26
+ template: "<c8y-list-group class=\"no-border-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *ngFor=\"let software of softwareList\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-8\">\n <!-- SOFTWARE NAME -->\n <p class=\"text-truncate\">{{ software.name }}</p>\n <!-- SOFTWARE VERSION -->\n <p class=\"text-truncate\">\n <span class=\"text-label-small m-r-4\" translate>\n Version\n </span>\n <span title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n </p>\n </div>\n\n <div\n *ngIf=\"supportsSoftwareOperations && (showUpdate || showRemove)\"\n class=\"col-4 text-right\"\n >\n <!-- UPDATE SOFTWARE -->\n <button\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n class=\"btn btn-default btn-xs showOnHover\"\n (click)=\"update.emit(software)\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n translate\n >\n Update\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n title=\"{{ 'Remove`software`' | translate }}\"\n class=\"showOnHover btn btn-dot pull-right\"\n (click)=\"remove.emit(software)\"\n >\n <i c8yIcon=\"minus-circle\" class=\"text-danger\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n"
21
27
  },] }
22
28
  ];
23
29
  DeviceSoftwareListComponent.propDecorators = {
24
30
  softwareList: [{ type: Input }],
31
+ device: [{ type: Input }],
25
32
  deviceSoftwareChanges: [{ type: Input }],
26
33
  update: [{ type: Output }],
27
34
  remove: [{ type: Output }]
28
35
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zb2Z0d2FyZS1kZXZpY2UtdGFiL2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRbkMsTUFBTSxPQUFPLDJCQUEyQjtJQUp4QztRQU9ZLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUM1QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7SUFheEQsQ0FBQztJQVRDLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxRQUF3QjtRQUNqRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7O1lBcEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyw0b0RBQWtEO2FBQ25EOzs7MkJBRUUsS0FBSztvQ0FDTCxLQUFLO3FCQUNMLE1BQU07cUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBJbnB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uU3RhdHVzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgRGV2aWNlU29mdHdhcmUsIERldmljZVNvZnR3YXJlQ2hhbmdlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2Utc29mdHdhcmUtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZVNvZnR3YXJlTGlzdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNvZnR3YXJlTGlzdDogRGV2aWNlU29mdHdhcmVbXTtcbiAgQElucHV0KCkgZGV2aWNlU29mdHdhcmVDaGFuZ2VzOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdO1xuICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXZpY2VTb2Z0d2FyZT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV2aWNlU29mdHdhcmU+KCk7XG4gIHNob3dVcGRhdGU6IGJvb2xlYW47XG4gIHNob3dSZW1vdmU6IGJvb2xlYW47XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuc2hvd1VwZGF0ZSA9IHRoaXMudXBkYXRlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICAgIHRoaXMuc2hvd1JlbW92ZSA9IHRoaXMucmVtb3ZlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaXNTb2Z0d2FyZUdvaW5nVG9CZUNoYW5nZWQoc29mdHdhcmU6IERldmljZVNvZnR3YXJlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVsZXZhbnRDaGFuZ2VzID0gZmlsdGVyKHRoaXMuZGV2aWNlU29mdHdhcmVDaGFuZ2VzLCBzb2Z0d2FyZSk7XG4gICAgcmV0dXJuIHJlbGV2YW50Q2hhbmdlcy5sZW5ndGggPiAwO1xuICB9XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zb2Z0d2FyZS1kZXZpY2UtdGFiL2RldmljZS1zb2Z0d2FyZS1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBT3hDLE1BQU0sT0FBTywyQkFBMkI7SUFKeEM7UUFRWSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDNUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBR3RELCtCQUEwQixHQUFZLEtBQUssQ0FBQztRQUUzQixtQkFBYyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFrQi9GLENBQUM7SUFoQkMsUUFBUTtRQUNOLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN4RCxhQUFhLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsUUFBd0I7UUFDakQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRSxPQUFPLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OztZQS9CRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsc3NEQUFrRDthQUNuRDs7OzJCQUVFLEtBQUs7cUJBQ0wsS0FBSztvQ0FDTCxLQUFLO3FCQUNMLE1BQU07cUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIElucHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmlsdGVyLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgRGV2aWNlU29mdHdhcmUsIERldmljZVNvZnR3YXJlQ2hhbmdlIH0gZnJvbSAnLi4vcmVwb3NpdG9yeS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXZpY2Utc29mdHdhcmUtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnZGV2aWNlLXNvZnR3YXJlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZVNvZnR3YXJlTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNvZnR3YXJlTGlzdDogRGV2aWNlU29mdHdhcmVbXTtcbiAgQElucHV0KCkgZGV2aWNlOiBJTWFuYWdlZE9iamVjdDtcbiAgQElucHV0KCkgZGV2aWNlU29mdHdhcmVDaGFuZ2VzOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdO1xuICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXZpY2VTb2Z0d2FyZT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV2aWNlU29mdHdhcmU+KCk7XG4gIHNob3dVcGRhdGU6IGJvb2xlYW47XG4gIHNob3dSZW1vdmU6IGJvb2xlYW47XG4gIHN1cHBvcnRzU29mdHdhcmVPcGVyYXRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvcGVyYXRpb25UeXBlcyA9IFsnYzh5X1NvZnR3YXJlVXBkYXRlJywgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCAnYzh5X1NvZnR3YXJlJ107XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3BlcmF0aW9ucyA9IGdldCh0aGlzLmRldmljZSwgJ2M4eV9TdXBwb3J0ZWRPcGVyYXRpb25zJywgW10pO1xuICAgIHRoaXMuc3VwcG9ydHNTb2Z0d2FyZU9wZXJhdGlvbnMgPSB0aGlzLm9wZXJhdGlvblR5cGVzLnNvbWUoXG4gICAgICBvcGVyYXRpb25UeXBlID0+IHN1cHBvcnRlZE9wZXJhdGlvbnMuaW5kZXhPZihvcGVyYXRpb25UeXBlKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNob3dVcGRhdGUgPSB0aGlzLnVwZGF0ZS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgICB0aGlzLnNob3dSZW1vdmUgPSB0aGlzLnJlbW92ZS5vYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGlzU29mdHdhcmVHb2luZ1RvQmVDaGFuZ2VkKHNvZnR3YXJlOiBEZXZpY2VTb2Z0d2FyZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlbGV2YW50Q2hhbmdlcyA9IGZpbHRlcih0aGlzLmRldmljZVNvZnR3YXJlQ2hhbmdlcywgc29mdHdhcmUpO1xuICAgIHJldHVybiByZWxldmFudENoYW5nZXMubGVuZ3RoID4gMDtcbiAgfVxufVxuIl19