UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

120 lines 16.6 kB
import { Injectable } from '@angular/core'; import { FetchClient } from '@c8y/client'; import { AlertService, AppStateService } from '@c8y/ngx-components'; import { isActilityConnection, isSigfoxConnection, ConnectionType, isLoriotConnection } from './multiple-lns-connector.model'; import * as i0 from "@angular/core"; import * as i1 from "@c8y/client"; import * as i2 from "@c8y/ngx-components"; export class MultipleLnsConnectorService { constructor(client, appStateService, alertService) { this.client = client; this.appStateService = appStateService; this.alertService = alertService; this.headers = { 'Content-Type': 'application/json' }; } async list(connectionType) { const url = `${this.getBaseUrlByType(connectionType)}/lns-connection`; const options = { method: 'GET', headers: this.headers }; return this.client.fetch(url, options); } /** * Saves the connection. * @param connection The connection to be saved. * @param originalName The original name of the connection, required to perform an update. */ async save(connection, originalName = null) { if (originalName) { return this.update(connection, originalName); } return this.create(connection); } async detail(connectionType, connectionName) { const name = connectionName.toLocaleLowerCase(); const url = `${this.getBaseUrlByType(connectionType)}/lns-connection/${encodeURIComponent(String(name))}`; const options = { method: 'GET', headers: this.headers }; const res = await this.client.fetch(url, options); if (res.status === 200) { return await res.json(); } return null; } async exists(connectionType, connectionName) { const connection = await this.detail(connectionType, connectionName); return connection !== null; } async create(connection) { connection.name = connection.name.toLocaleLowerCase(); const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`; const options = { method: 'POST', headers: this.headers, body: JSON.stringify(connection) }; return this.client.fetch(url, options); } async update(connection, originalName) { connection.name = connection.name.toLocaleLowerCase(); const url = `${this.getBaseUrlByConnection(connection)}/lns-connection/${encodeURIComponent(String(originalName))}`; const options = { method: 'PUT', headers: this.headers, body: JSON.stringify(connection) }; return this.client.fetch(url, options); } getBaseUrlByConnection(connection) { return isSigfoxConnection(connection) ? 'service/sigfox-agent' : isActilityConnection(connection) ? 'service/actility' : isLoriotConnection(connection) ? 'service/loriot' : ''; } getBaseUrlByType(connectionType) { return connectionType === ConnectionType.SIGFOX ? 'service/sigfox-agent' : connectionType === ConnectionType.ACTILITY ? 'service/actility' : connectionType === ConnectionType.LORIOT ? 'service/loriot' : ''; } async delete(connection) { const url = `${this.getBaseUrlByConnection(connection)}/lns-connection`; const options = { method: 'DELETE' }; return this.client.fetch(`${url}/${encodeURIComponent(String(connection.name))}`, options); } getApplication(name) { const { references } = this.appStateService.currentTenant.value.applications; return references.find(({ application }) => application.name === name).application; } async download(url) { try { const options = { method: 'GET' }; return this.client.fetch(url, options); } catch (e) { this.alertService.addServerFailure(e); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultipleLnsConnectorService, deps: [{ token: i1.FetchClient }, { token: i2.AppStateService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultipleLnsConnectorService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultipleLnsConnectorService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i2.AppStateService }, { type: i2.AlertService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtbG5zLWNvbm5lY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvdG9jb2wtbHB3YW4vbXVsdGlwbGUtbG5zLWNvbm5lY3RvcnMvbXVsdGlwbGUtbG5zLWNvbm5lY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBK0MsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBRUwsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUVsQixjQUFjLEVBRWQsa0JBQWtCLEVBQ25CLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFLeEMsTUFBTSxPQUFPLDJCQUEyQjtJQUV0QyxZQUNVLE1BQW1CLEVBQ25CLGVBQWdDLEVBQ2hDLFlBQTBCO1FBRjFCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRWxDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUE4QjtRQUN2QyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQWtCO1lBQzdCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJ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SCxNQUFNLE9BQU8sR0FBa0I7Z0JBQzdCLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQzsrR0EvSFUsMkJBQTJCO21IQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoQ2xpZW50LCBJQXBwbGljYXRpb24sIElGZXRjaE9wdGlvbnMsIElGZXRjaFJlc3BvbnNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFjdGlsaXR5Q29ubmVjdGlvbixcbiAgaXNBY3RpbGl0eUNvbm5lY3Rpb24sXG4gIGlzU2lnZm94Q29ubmVjdGlvbixcbiAgU2lnZm94Q29ubmVjdGlvbixcbiAgQ29ubmVjdGlvblR5cGUsXG4gIExvcmlvdENvbm5lY3Rpb24sXG4gIGlzTG9yaW90Q29ubmVjdGlvblxufSBmcm9tICcuL211bHRpcGxlLWxucy1jb25uZWN0b3IubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZUxuc0Nvbm5lY3RvclNlcnZpY2Uge1xuICBwcml2YXRlIGhlYWRlcnM6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlKSB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYXNlVXJsQnlUeXBlKGNvbm5lY3Rpb25UeXBlKX0vbG5zLWNvbm5lY3Rpb25gO1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZmV0Y2godXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIGNvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24gdG8gYmUgc2F2ZWQuXG4gICAqIEBwYXJhbSBvcmlnaW5hbE5hbWUgVGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb24sIHJlcXVpcmVkIHRvIHBlcmZvcm0gYW4gdXBkYXRlLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShcbiAgICBjb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uIHwgTG9yaW90Q29ubmVjdGlvbixcbiAgICBvcmlnaW5hbE5hbWU6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKG9yaWdpbmFsTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbm5lY3Rpb24sIG9yaWdpbmFsTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZShjb25uZWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChcbiAgICBjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvblR5cGUsXG4gICAgY29ubmVjdGlvbk5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPEFjdGlsaXR5Q29ubmVjdGlvbiB8IFNpZ2ZveENvbm5lY3Rpb24gfCBMb3Jpb3RDb25uZWN0aW9uIHwgbnVsbD4ge1xuICAgIGNvbnN0IG5hbWUgPSBjb25uZWN0aW9uTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybEJ5VHlwZShjb25uZWN0aW9uVHlwZSl9L2xucy1jb25uZWN0aW9uLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgU3RyaW5nKG5hbWUpXG4gICAgKX1gO1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzXG4gICAgfTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5mZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXMuanNvbigpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGV4aXN0cyhjb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvblR5cGUsIGNvbm5lY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgdGhpcy5kZXRhaWwoY29ubmVjdGlvblR5cGUsIGNvbm5lY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gY29ubmVjdGlvbiAhPT0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShjb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uIHwgTG9yaW90Q29ubmVjdGlvbikge1xuICAgIGNvbm5lY3Rpb24ubmFtZSA9IGNvbm5lY3Rpb24ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybEJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKX0vbG5zLWNvbm5lY3Rpb25gO1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGNvbm5lY3Rpb24pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZmV0Y2godXJsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBjb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uIHwgTG9yaW90Q29ubmVjdGlvbixcbiAgICBvcmlnaW5hbE5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBjb25uZWN0aW9uLm5hbWUgPSBjb25uZWN0aW9uLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhc2VVcmxCeUNvbm5lY3Rpb24oY29ubmVjdGlvbil9L2xucy1jb25uZWN0aW9uLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgU3RyaW5nKG9yaWdpbmFsTmFtZSlcbiAgICApfWA7XG4gICAgY29uc3Qgb3B0aW9uczogSUZldGNoT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShjb25uZWN0aW9uKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmZldGNoKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRCYXNlVXJsQnlDb25uZWN0aW9uKGNvbm5lY3Rpb246IEFjdGlsaXR5Q29ubmVjdGlvbiB8IFNpZ2ZveENvbm5lY3Rpb24gfCBMb3Jpb3RDb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIGlzU2lnZm94Q29ubmVjdGlvbihjb25uZWN0aW9uKVxuICAgICAgPyAnc2VydmljZS9zaWdmb3gtYWdlbnQnXG4gICAgICA6IGlzQWN0aWxpdHlDb25uZWN0aW9uKGNvbm5lY3Rpb24pXG4gICAgICA/ICdzZXJ2aWNlL2FjdGlsaXR5J1xuICAgICAgOiBpc0xvcmlvdENvbm5lY3Rpb24oY29ubmVjdGlvbilcbiAgICAgID8gJ3NlcnZpY2UvbG9yaW90J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGdldEJhc2VVcmxCeVR5cGUoY29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuIGNvbm5lY3Rpb25UeXBlID09PSBDb25uZWN0aW9uVHlwZS5TSUdGT1hcbiAgICAgID8gJ3NlcnZpY2Uvc2lnZm94LWFnZW50J1xuICAgICAgOiBjb25uZWN0aW9uVHlwZSA9PT0gQ29ubmVjdGlvblR5cGUuQUNUSUxJVFlcbiAgICAgID8gJ3NlcnZpY2UvYWN0aWxpdHknXG4gICAgICA6IGNvbm5lY3Rpb25UeXBlID09PSBDb25uZWN0aW9uVHlwZS5MT1JJT1RcbiAgICAgID8gJ3NlcnZpY2UvbG9yaW90J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShjb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uIHwgTG9yaW90Q29ubmVjdGlvbikge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVVybEJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKX0vbG5zLWNvbm5lY3Rpb25gO1xuICAgIGNvbnN0IG9wdGlvbnM6IElGZXRjaE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZmV0Y2goYCR7dXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoY29ubmVjdGlvbi5uYW1lKSl9YCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRBcHBsaWNhdGlvbihuYW1lOiBzdHJpbmcpOiBQYXJ0aWFsPElBcHBsaWNhdGlvbj4ge1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlcyB9ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5hcHBsaWNhdGlvbnM7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXMuZmluZCgoeyBhcHBsaWNhdGlvbiB9KSA9PiBhcHBsaWNhdGlvbi5uYW1lID09PSBuYW1lKS5hcHBsaWNhdGlvbjtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKHVybDogc3RyaW5nKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBJRmV0Y2hPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==