import { BehaviorSubject, Observable } from 'rxjs' import { Update } from 'patch-db-client' import { RR, Encrypted, BackupTargetType, Metrics } from './api.types' import { DataModel } from 'src/app/services/patch-db/data-model' import { Log, SetupStatus } from '@start9labs/shared' import { WebSocketSubjectConfig } from 'rxjs/webSocket' import type { JWK } from 'node-jose' export abstract class ApiService { protected readonly jose = import('node-jose') readonly patchStream$ = new BehaviorSubject[]>([]) pubkey?: JWK.Key async encrypt(toEncrypt: string): Promise { const { pubkey } = this if (!pubkey) throw new Error('No pubkey found!') const encrypted = await this.jose.then(jose => jose.JWE.createEncrypt(pubkey).update(toEncrypt).final(), ) return { encrypted } } // http // for getting static files: ex icons, instructions, licenses abstract getStatic(url: string): Promise // for sideloading packages abstract uploadPackage(guid: string, body: Blob): Promise abstract uploadFile(body: Blob): Promise // db abstract setDbValue( pathArr: Array, value: T, ): Promise // auth abstract getPubKey(): Promise abstract login(params: RR.LoginReq): Promise abstract logout(params: RR.LogoutReq): Promise abstract getSessions(params: RR.GetSessionsReq): Promise abstract killSessions(params: RR.KillSessionsReq): Promise // server abstract echo(params: RR.EchoReq): Promise abstract openPatchWebsocket$(): Observable> abstract openLogsWebsocket$( config: WebSocketSubjectConfig, ): Observable abstract openMetricsWebsocket$( config: WebSocketSubjectConfig, ): Observable abstract getSystemTime( params: RR.GetSystemTimeReq, ): Promise abstract getServerLogs( params: RR.GetServerLogsReq, ): Promise abstract getKernelLogs( params: RR.GetServerLogsReq, ): Promise abstract getTorLogs(params: RR.GetServerLogsReq): Promise abstract followServerLogs( params: RR.FollowServerLogsReq, ): Promise abstract followKernelLogs( params: RR.FollowServerLogsReq, ): Promise abstract followTorLogs( params: RR.FollowServerLogsReq, ): Promise abstract getServerMetrics( params: RR.GetServerMetricsReq, ): Promise abstract updateServer(url?: string): Promise abstract restartServer( params: RR.RestartServerReq, ): Promise abstract shutdownServer( params: RR.ShutdownServerReq, ): Promise abstract systemRebuild( params: RR.SystemRebuildReq, ): Promise abstract repairDisk(params: RR.SystemRebuildReq): Promise abstract resetTor(params: RR.ResetTorReq): Promise abstract toggleZram(params: RR.ToggleZramReq): Promise // marketplace URLs abstract marketplaceProxy( path: string, params: Record, url: string, arch?: string, ): Promise abstract getEos(): Promise // password // abstract updatePassword (params: RR.UpdatePasswordReq): Promise // notification abstract getNotifications( params: RR.GetNotificationsReq, ): Promise abstract deleteNotification( params: RR.DeleteNotificationReq, ): Promise abstract deleteAllNotifications( params: RR.DeleteAllNotificationsReq, ): Promise // wifi abstract enableWifi(params: RR.EnableWifiReq): Promise abstract getWifi( params: RR.GetWifiReq, timeout: number, ): Promise abstract addWifi(params: RR.AddWifiReq): Promise abstract connectWifi(params: RR.ConnectWifiReq): Promise abstract deleteWifi(params: RR.DeleteWifiReq): Promise // email abstract testEmail(params: RR.TestEmailReq): Promise abstract configureEmail( params: RR.ConfigureEmailReq, ): Promise // ssh abstract getSshKeys(params: RR.GetSSHKeysReq): Promise abstract addSshKey(params: RR.AddSSHKeyReq): Promise abstract deleteSshKey(params: RR.DeleteSSHKeyReq): Promise // backup abstract getBackupTargets( params: RR.GetBackupTargetsReq, ): Promise abstract addBackupTarget( type: BackupTargetType, params: | RR.AddCifsBackupTargetReq | RR.AddCloudBackupTargetReq | RR.AddDiskBackupTargetReq, ): Promise abstract updateBackupTarget( type: BackupTargetType, params: | RR.UpdateCifsBackupTargetReq | RR.UpdateCloudBackupTargetReq | RR.UpdateDiskBackupTargetReq, ): Promise abstract removeBackupTarget( params: RR.RemoveBackupTargetReq, ): Promise abstract getBackupJobs( params: RR.GetBackupJobsReq, ): Promise abstract createBackupJob( params: RR.CreateBackupJobReq, ): Promise abstract updateBackupJob( params: RR.UpdateBackupJobReq, ): Promise abstract deleteBackupJob( params: RR.DeleteBackupJobReq, ): Promise abstract getBackupRuns( params: RR.GetBackupRunsReq, ): Promise abstract deleteBackupRuns( params: RR.DeleteBackupRunsReq, ): Promise abstract getBackupInfo( params: RR.GetBackupInfoReq, ): Promise abstract createBackup(params: RR.CreateBackupReq): Promise // package abstract getPackageProperties( params: RR.GetPackagePropertiesReq, ): Promise['data']> abstract getPackageLogs( params: RR.GetPackageLogsReq, ): Promise abstract followPackageLogs( params: RR.FollowPackageLogsReq, ): Promise abstract installPackage( params: RR.InstallPackageReq, ): Promise abstract dryUpdatePackage( params: RR.DryUpdatePackageReq, ): Promise abstract getPackageConfig( params: RR.GetPackageConfigReq, ): Promise abstract drySetPackageConfig( params: RR.DrySetPackageConfigReq, ): Promise abstract setPackageConfig( params: RR.SetPackageConfigReq, ): Promise abstract restorePackages( params: RR.RestorePackagesReq, ): Promise abstract executePackageAction( params: RR.ExecutePackageActionReq, ): Promise abstract startPackage(params: RR.StartPackageReq): Promise abstract restartPackage( params: RR.RestartPackageReq, ): Promise abstract stopPackage(params: RR.StopPackageReq): Promise abstract uninstallPackage( params: RR.UninstallPackageReq, ): Promise abstract dryConfigureDependency( params: RR.DryConfigureDependencyReq, ): Promise abstract sideloadPackage( params: RR.SideloadPackageReq, ): Promise abstract getSetupStatus(): Promise }