lavva.exalushome
Version:
Library implementing communication and abstraction layers for ExalusHome system
139 lines • 7.03 kB
JavaScript
import { DependencyContainer } from './DependencyContainer';
import { LocalStorageService } from "./Services/LocalStorageService";
import { ExalusConnectionService } from './Services/ExalusConnectionService';
import { WebApiCacheService } from "./Services/WebApi/WebApiCacheService";
import { UsersService } from "./Services/Users/UsersService";
import { DevicesService } from "./Services/Devices/DevicesService";
import { SessionService } from "./Services/Session/SessionService";
import { GeolocationService } from "./Services/Controller/GeolocationService";
import { ControllerConfigurationService } from "./Services/Controller/ControllerConfigurationService";
// 0. Import Module
import { initializeLinq } from "linq-to-typescript";
import { ChannelsGroupsService } from "./Services/Devices/ChannelsGroupsService";
import { AppStateService } from "./Services/AppStateService";
import { PicturesService } from './Services/Pictures/PicturesService';
import { UpdatesService } from './Services/Updates/UpdatesService';
import { ManuallyPairedDevicesService } from './Services/Devices/ManuallyPairedDevicesService';
import { ControllerExtensionsService } from './Services/Controller/ControllerExtensionsService';
import { UpdatesProvider } from './Services/Updates/UpdatesProvider';
import { RemoteStorageService } from './Services/RemoteStorageService';
import { StatesHistoryService } from './Services/StatesHistory/StatesHistoryService';
import { ScenesService } from './Services/Scenes/ScenesService';
import { ChatService } from './Services/Chat/ChatService';
import { ConnectedAppsService } from './Services/Controller/ConnectedAppsService';
import { DataMigrationService } from './Services/DataMigrationService';
import { FindControllerService } from './Services/Controller/FindControllerService';
import { LocalNetworkExalusConnectionService } from './Services/LocalNetworkExalusConnectionService';
import { PictureInPictureService } from './Services/PictureInPicture';
import { ControllerNotificationsService } from './Services/Notifications/ControllerNotificationsService';
import { AndroidLocationService } from './Services/AndroidLocationService';
import { AndroidNotificationsService } from './Services/AndroidNotificationService';
import { AppRateService } from './Services/AppRateService';
import { AppLocalesService } from './Services/AppLocalesService';
import { AndroidAutoCarPlayService } from './Services/AndroidAutoCarPlayService';
import { HomeKitService } from './Services/HomeKitService';
// 2. Bind Linq Functions to Array, Map, etc
initializeLinq();
export function GetDependencyContainer() {
return DependencyContainer.Instance;
}
export class Api {
static Init() {
if (DependencyContainer.IsInitialized)
return;
console.log("Initializing DependencyContainer");
let dep = DependencyContainer.Instance;
try {
dep.RegisterService(new DataMigrationService());
dep.RegisterService(new LocalStorageService());
dep.RegisterService(new AppStateService());
dep.RegisterService(new WebApiCacheService());
dep.RegisterService(new SessionService());
dep.RegisterService(new PictureInPictureService());
dep.RegisterService(new AppRateService());
dep.RegisterService(new AppLocalesService());
if (Api.IsRunningFromLocalNetwork()) {
console.log("\n\nRunning from local network!\n\n");
dep.RegisterService(new LocalNetworkExalusConnectionService());
}
else
dep.RegisterService(new ExalusConnectionService());
dep.RegisterService(new AndroidLocationService());
dep.RegisterService(new AndroidAutoCarPlayService());
dep.RegisterService(new AndroidNotificationsService());
dep.RegisterService(new RemoteStorageService());
dep.RegisterService(new GeolocationService());
dep.RegisterService(new ControllerConfigurationService());
dep.RegisterService(new FindControllerService());
dep.RegisterService(new ManuallyPairedDevicesService());
dep.RegisterService(new ControllerExtensionsService());
dep.RegisterService(new PicturesService());
dep.RegisterService(new UsersService());
dep.RegisterService(new DevicesService());
dep.RegisterService(new ChannelsGroupsService());
dep.RegisterService(new UpdatesProvider());
dep.RegisterService(new UpdatesService());
dep.RegisterService(new ConnectedAppsService());
dep.RegisterService(new StatesHistoryService());
dep.RegisterService(new ScenesService());
dep.RegisterService(new ChatService());
dep.RegisterService(new ControllerNotificationsService());
dep.RegisterService(new HomeKitService());
}
catch (ex) {
console.error(ex);
}
}
static IsAppServedFromControllerAsync() {
// http reuqest to controller
const url = `http://${window.location.hostname}/controller_info`;
return fetch(url, { method: 'GET' })
.then(response => {
if (response.ok) {
return true;
}
return false;
})
.catch(error => {
return false;
});
}
static IsRunningFromLocalNetwork(hostname = window.location.hostname) {
return (
//(['localhost', '127.0.0.1', '', '::1'].includes(hostname))
//|| (hostname.startsWith('192.168.'))
(hostname.startsWith('192.168.'))
|| (hostname.startsWith('10.'))
|| (hostname.startsWith('172.16.'))
//|| (hostname.endsWith('.local'))
);
}
static GetAsync(classType, cancelationToken) {
return DependencyContainer.Instance.GetServiceAsync(classType, cancelationToken);
}
static GetWithTimeoutAsync(classType, timeout) {
return DependencyContainer.Instance.GetServiceWithTimeoutAsync(classType, timeout);
}
static Get(classType) {
return DependencyContainer.Instance.GetService(classType);
}
static SleepForAsync(miliseconds) {
return new Promise(resolve => setTimeout(resolve, miliseconds));
}
static ExportStringAsFileToDownload(filename, content) {
// Create a Blob from the string content
const blob = new Blob([content], { type: 'text/plain' });
// Create a link element
const link = document.createElement('a');
// Create a URL for the Blob and set it as the href attribute of the link
const url = window.URL.createObjectURL(blob);
link.href = url;
// Set the download attribute with the desired filename
link.download = filename;
// Return the link element so the user can click it
return link;
}
}
Api.WorksInContextOf = "";
Api.Version = 1.0;
//# sourceMappingURL=Api.js.map