UNPKG

@iotize/cli

Version:
215 lines 10.1 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const device_client_js_1 = require("@iotize/device-client.js"); const core_1 = require("@iotize/device-client.js/protocol/core"); const api_1 = require("@iotize/device-client.js/api"); const iotize_studio_1 = require("@iotize/device-client.js/config/iotize-studio"); const iotize_studio_2 = require("@iotize/device-client.js/config/iotize-studio"); const clime_1 = require("clime"); const operators_1 = require("rxjs/operators"); const ui_1 = require("src/lib/ui"); const types_1 = require("src/types"); const ui_2 = require("src/ui"); const inversify_config_1 = require("../../inversify.config"); const file_1 = require("../../utility/file"); const device_registry_1 = require("../util/device-registry"); const option_helper_1 = require("../util/option-helper"); const file_exists_1 = require("../validators/file-exists"); const regex_validator_1 = require("../validators/regex-validator"); const default_1 = require("./default"); class DeviceOptions extends default_1.DefaultOptions { constructor() { super(); } getDevices() { return __awaiter(this, void 0, void 0, function* () { let deviceFactory = yield inversify_config_1.container.get(types_1.TYPES.TAP_DEVICE_FACTORY)(); let deviceUrls = this.device.split(';'); let devices = []; for (let deviceUrl of deviceUrls) { let device = yield deviceFactory.fromUrl(deviceUrl, { connect: false }); devices.push(device); } return devices; }); } getDevice(connect = true, loadConfigIfExists = true, adminRequired = false) { return __awaiter(this, void 0, void 0, function* () { let deviceFactory = yield inversify_config_1.container.get(types_1.TYPES.TAP_DEVICE_FACTORY)(); let tap; if (!this.device) { tap = yield ui_1.input.selectTap(); if (connect) { yield tap.connect(); } } else { tap = yield deviceFactory.fromUrl(this.device, { connect: true }); } if (this.requestDelay) { let requestDelay = this.requestDelay; ui_2.display.info(`Request postpone by ${requestDelay}ms`); tap.client.addInterceptor((req, handler) => { return handler.handle(req).pipe(operators_1.delay(requestDelay) // tapOperator(_ => console.info(`Request postpone by ${requestDelay}ms`)) ); }); } if (this.protocolSendTimeout || this.protocolConnectTimeout) { if (tap.protocol instanceof core_1.AbstractComProtocol) { let abstractProtocol = tap.protocol; if (this.protocolConnectTimeout) { abstractProtocol.options.connect = { timeout: this.protocolConnectTimeout }; abstractProtocol.options.disconnect = { timeout: this.protocolConnectTimeout }; } if (this.protocolSendTimeout) { abstractProtocol.options.send = { timeout: this.protocolSendTimeout }; } } else { ui_2.display.warn(`This communication protocol does not support "--protocol-send-timeout" and "--protocol-connect-timeout" options`); } } if (loadConfigIfExists) { if (this.config) { try { let configurator = new iotize_studio_1.TapConfigConfigurator(this.getConfigModel()); yield tap.configure(configurator); } catch (err) { ui_2.display.error(`Cannot load config from file "${this.config}" (${err.message}). Make sure it's a valid file.`); } } else { try { //Dynamic config let variables = yield tap.variables.getConfiguredVariables(); yield tap.bundles.getConfiguredBundles(variables, tap); } catch (err) { ui_2.display.error(`Cannot load config from Tao (${err.message}).`); } } } // Flush // if (tap.protocol instanceof NobleBLEAdapter){ // console.debug(`Flushing ble`) // let response = await tap.protocol.send(Uint8Array.from([0])); // } if (this.secure) { ui_2.display.infonl(`Setting secure communication required...\n`); yield tap.enableEncryption(true); } if (this.credentials) { yield option_helper_1.OptionHelper.logFromOptions(tap, this); } else { if (adminRequired) { ui_2.display.infonl(`Admin login is required to use this feature (next time use '--credentials' option)`); let credentials = yield ui_1.input.tapCredentials({ username: 'admin', password: 'admin' }); yield tap.logout(); yield tap.login(credentials.username, credentials.password); } } device_registry_1.DeviceRegistry.add(tap); return tap; }); } getConfigModel() { let config = file_1.FileHelper.getContent(this.config, 'string'); return iotize_studio_2.IotizeConfigFactory.fromXML(config); } getApiExplorer() { // if (!this.spec) { // return undefined; // } // let filename = this.spec; // let api = OpenApiFactory.create(jsyaml.load(readFileSync(filename).toString()) as Spec as any); // return api; return new api_1.ApiExplorer(device_client_js_1.Tap.create()); } } __decorate([ clime_1.option(option_helper_1.OptionHelper.OPTION_DEVICE), __metadata("design:type", String) ], DeviceOptions.prototype, "device", void 0); __decorate([ clime_1.option(option_helper_1.OptionHelper.REQUEST_DELAY_OPTIONS), __metadata("design:type", Number) ], DeviceOptions.prototype, "requestDelay", void 0); __decorate([ clime_1.option({ flag: 'c', description: 'Tap configuration file path', default: global.getConfig('default.config'), validator: new file_exists_1.FileExists() }), __metadata("design:type", String) ], DeviceOptions.prototype, "config", void 0); __decorate([ clime_1.option({ description: 'Protocol send timeout in milliseconds', default: global.getConfig('default.protocolSendTimeout', 5000), // validator: new JsonSchemaValidator(), required: false }), __metadata("design:type", Number) ], DeviceOptions.prototype, "protocolSendTimeout", void 0); __decorate([ clime_1.option({ description: 'Protocol connection timeout in milliseconds', default: global.getConfig('default.protocolConnectTimeout', 8000), // validator: new JsonSchemaValidator(), required: false }), __metadata("design:type", Number) ], DeviceOptions.prototype, "protocolConnectTimeout", void 0); __decorate([ clime_1.option({ description: 'Credentials formatted as username:password (it log you in the selected device)', required: false, validator: new regex_validator_1.RegexValidator(/.*:.*/) }), __metadata("design:type", String) ], DeviceOptions.prototype, "credentials", void 0); __decorate([ clime_1.option({ description: 'Use secure communication (enabe encryption for commands and responses)', default: global.getConfig('default.secure'), toggle: true }), __metadata("design:type", Boolean) ], DeviceOptions.prototype, "secure", void 0); exports.DeviceOptions = DeviceOptions; //# sourceMappingURL=device.js.map