@iotize/cli
Version:
IoTize command line interface
319 lines • 13 kB
JavaScript
;
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