UNPKG

@iotize/cli

Version:
319 lines 13 kB
"use strict"; 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 }); require("@iotize/tap-app-core.node/register/ble"); require("@iotize/tap-app-core.node/register/mqtt"); require("@iotize/tap-app-core.node/register/socket"); require("@iotize/tap-app-core.node/register/websocket"); require("reflect-metadata"); const byte_converter_1 = require("@iotize/common/byte-converter"); const impl_1 = require("@iotize/device-client.js/client/impl"); const configurator_1 = require("@iotize/device-client.js/configurator"); const device_com_socket_node_1 = require("@iotize/device-com-socket.node"); const tap_app_core_node_1 = require("@iotize/tap-app-core.node"); const testing_grammar_js_1 = require("@iotize/testing-grammar.js"); const inversify_1 = require("inversify"); const errors_1 = require("./errors"); const tapnlink_update_service_1 = require("./lib/tapnlink-admin/tapnlink-update.service"); const types_1 = require("./types"); const ui_1 = require("./ui"); const logger_1 = require("./logger"); let NOBLELIB; try { NOBLELIB = require('@iotize/device-com-ble.node'); } catch (err) { console.warn(`@iotize/device-com-ble.node library is not installed. BLE related features will not be available.`); } const container = new inversify_1.Container(); exports.container = container; function pluginExists(path) { try { require.resolve(path); return true; } catch (err) { return false; } } container .bind(types_1.TYPES.TapGatewayProvider) .toProvider(context => { return (type, device, options) => { try { let relativePath = `./plugins/${type}`; let plugin; if (pluginExists(relativePath)) { console.log(`Loading local plugin ${relativePath}`); plugin = require(`./plugins/${type}`).default; } else { console.log(`Loading lib plugin ${type}`); plugin = require(`${type}`); } if (typeof plugin.tapGateway != 'function') { throw new Error(`Invalid plugin definition "${type}". It should export function tapGateway`); } return plugin.tapGateway(device, options); } catch (err) { console.error('Cannot load Tap gateway provider', type, err); return Promise.reject(err); } }; }); container .bind(types_1.TYPES.NobleProvider) .toProvider(context => { return () => __awaiter(void 0, void 0, void 0, function* () { let useUwp = !('NOBLE_UWP' in process.env) || process.env['NOBLE_UWP'] != 'false'; logger_1.debug('NOBLE_UWP SET: ', useUwp); if (!NOBLELIB) { throw new errors_1.BLELibraryNotInstalled(); } let NobleHelper = NOBLELIB.NobleHelper; let noble = yield NobleHelper.getNoble(useUwp); // await NobleHelper.waitForNobleState('poweredOn', 5000, noble); return noble; }); }); container .bind(types_1.TYPES.DeviceScanner) .to(tap_app_core_node_1.MultiProtocolDeviceScanner); container .bind(types_1.TYPES.TAP_BLE_SCANNER) .toProvider(context => { return () => __awaiter(void 0, void 0, void 0, function* () { let noble = yield container.get(types_1.TYPES.NobleProvider)(); if (!NOBLELIB) { throw new errors_1.BLELibraryNotInstalled(); } return new NOBLELIB.NobleBleScanner(noble); }); }); inversify_1.decorate(inversify_1.injectable(), tap_app_core_node_1.TapProtocolFactory); container .bind(types_1.TYPES.TAP_PROTOCOL_FACTORY) .toProvider(context => { return () => __awaiter(void 0, void 0, void 0, function* () { // let scanner = await container.get<DeviceScannerProvider>(TYPES.DeviceScannerProvider)(); // let protocolFactory = new TapProtocolFactory( // scanner // ); // return protocolFactory; return tap_app_core_node_1.tapProtocolFactory; }); }); inversify_1.decorate(inversify_1.injectable(), tap_app_core_node_1.WifiDeviceScanner); container .bind(types_1.TYPES.TAP_WIFI_SCANNER) .to(tap_app_core_node_1.WifiDeviceScanner); container .bind(types_1.TYPES.TAP_DEVICE_FACTORY) .toDynamicValue(context => { return () => __awaiter(void 0, void 0, void 0, function* () { return new tap_app_core_node_1.TapDeviceFactory(yield container.get(types_1.TYPES.TAP_PROTOCOL_FACTORY)()); }); }); container .bind(types_1.TYPES.DeviceScannerProvider) .toProvider(context => { return () => __awaiter(void 0, void 0, void 0, function* () { // let noble: NobleType = await context.container.get<NobleProvider>(TYPES.NobleProvider)() // if (noble.uwp) { // console.info(`USING NOBLE UWP`); // } // console.info('BLE SCANNER', bleScanner); let wifiScanner = container.get(types_1.TYPES.TAP_WIFI_SCANNER); let scanners = [ { id: 'WIFI', scanner: wifiScanner, map: item => { return { type: 'WIFI', name: item.ssid, payload: item, address: `Port: ${2000}`, protocolFactory: () => { throw new Error(`Not implemented Wi-Fi protocol factory`); // return new SocketProtocol({ // host: '', // port: 2000 // }) } }; } }, { id: 'NETWORK', scanner: new device_com_socket_node_1.NetworkServiceDiscovery(), map: (item) => { let ipAddress = item.host; if (item.addresses && item.addresses.length > 0) { ipAddress = item.addresses[0]; } // else if (item.referer && item.referer.address) { // ipAddress = item.referer.address; // } return { type: 'NETWORK', name: item.name, payload: 'TODO', address: `tcp://${ipAddress}:${item.port}` || 'UNKNOWN', protocolFactory: () => { if (!ipAddress) { throw new Error(`Cannot create socket protocol from ${item.name}. Cause: no IP address`); } return new device_com_socket_node_1.SocketProtocol({ host: ipAddress, port: item.port }); } }; } } ]; try { let bleScanner = yield container.get(types_1.TYPES.TAP_BLE_SCANNER)(); let bleScannerConfig = { id: 'BLE', scanner: bleScanner, map: peripheral => { let advertisement = peripheral.advertisement; return { type: 'BLE', payload: peripheral, name: advertisement.localName || 'UNKNOWN NAME', address: peripheral.address, protocolFactory: () => { if (!NOBLELIB) { throw new errors_1.BLELibraryNotInstalled(); } let comProtocol = new NOBLELIB.NobleBLEAdapter(peripheral); comProtocol.options.send.timeout = 5000; // TODO remove return comProtocol; } }; } }; scanners.push(bleScannerConfig); } catch (err) { ui_1.display.error(`${err.message}`); } return new tap_app_core_node_1.MultiProtocolDeviceScanner(scanners); }); }); container .bind(types_1.TYPES.ScriptRunnerProvider) .toDynamicValue(context => { return () => { return new testing_grammar_js_1.ScriptRunner({ display: (level, message) => { ui_1.display.infonl(`${message}`); }, output: (response, wordSize) => { if (!response) { return; } let message; if (!wordSize) { message = byte_converter_1.bufferToAsciiString(response.rawBody()); } else { message = impl_1.NumberConverter.fromOpaqueMsb(response.rawBody(), wordSize).toString(); } ui_1.display.infonl(`${message}`); } }); }; }); container .bind(types_1.TYPES.ScriptRunnerProvider) .toDynamicValue(context => { return () => { return new testing_grammar_js_1.ScriptRunner({ display: (level, message) => { ui_1.display.infonl(`${message}`); }, output: (response, wordSize) => { if (!response) { return; } let message; if (!wordSize) { message = byte_converter_1.bufferToAsciiString(response.rawBody()); } else { message = impl_1.NumberConverter.fromOpaqueMsb(response.rawBody(), wordSize).toString(); } ui_1.display.infonl(`${message}`); } }); }; }); // let profileConfig = global.configProvider.config() // container.bind<FirmwareUpdateProvider>(TYPES.RestFirmwareUpdateProvider).toDynamicValue((context) => { // let client = axios.default.create({ // baseURL: profileConfig.get('firmwareUpdateServer.url', 'http://localhost:3010/'), // timeout: profileConfig.get('firmwareUpdateServer.timeout', 10000), // headers: {} // }) // return new RestFirmwareUpdateProvider(client); // }); // container.bind<FirmwareUpdateProvider>(TYPES.S3FirmwareUpdateProvider).toDynamicValue((context) => { // return S3FirmwareUpdateProvider.createFromBucket({ // bucket: 'prod.iotize.tap.data', // region: 'eu-west-1' // }); // }); container .bind(types_1.TYPES.SchemaTapConfigurator) .toDynamicValue(context => { return new configurator_1.SchemaTapConfigurator(null); }); // container.bind<FirmwareUpdateProvider>(TYPES.FirmwareUpdateProvider).toDynamicValue((context) => { // return container.get(TYPES.S3FirmwareUpdateProvider) // }); container .bind(types_1.TYPES.TapNLinkUpdater) .toDynamicValue(context => { return new tapnlink_update_service_1.TapNLinkUpdaterService(); }); // container.bind<TapNPassUpdater>(TYPES.TapNPassUpdater).toDynamicValue((context) => { // return new TapNPassUpdater(); // }); // container.bind<AppConfig>(TYPES.FirebaseApp).toDynamicValue((context) => { // return new AppConfig(profileConfig.get("firebase")); // }); tap_app_core_node_1.tapProtocolFactory.addFactory((new class { filter(data) { let aliasConfig = global.configProvider.config().get('aliases', {}); // console.log(data, aliasConfig); if (typeof data === "string" && data.startsWith('@') && data in aliasConfig) { return true; } return false; } create(data) { let aliasConfig = global.configProvider.config().get('aliases', {}); if (data in aliasConfig) { return tap_app_core_node_1.tapProtocolFactory.fromUrl(aliasConfig[data]); } else { throw new Error(`Unknown alias: ${data}`); } } ; })); //# sourceMappingURL=inversify.config.js.map