@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
120 lines • 16.6 kB
JavaScript
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==