import { FullKeyboard, SetLanguageParams } from '@start9labs/shared' import { T } from '@start9labs/start-sdk' import { GetPackageRes, GetPackagesRes } from '@start9labs/marketplace' import { Dump } from 'patch-db-client' import { WebSocketSubject } from 'rxjs/webSocket' import { DataModel } from '../patch-db/data-model' import { ActionRes, CheckDnsRes, CifsBackupTarget, DiagnosticErrorRes, FollowPackageLogsReq, FollowServerLogsReq, GetActionInputRes, GetPackageLogsReq, GetRegistryPackageReq, GetRegistryPackagesReq, PkgAddPrivateDomainReq, PkgAddPublicDomainReq, PkgBindingSetAddressEnabledReq, PkgRemovePrivateDomainReq, PkgRemovePublicDomainReq, ServerBindingSetAddressEnabledReq, ServerState, WebsocketConfig, } from './api.types' export abstract class ApiService { // http // for uploading files abstract uploadFile(guid: string, body: Blob): Promise // for getting static files: ex license abstract getStatic( urls: string[], params: Record, ): Promise // websocket abstract openWebsocket$( guid: string, config?: WebsocketConfig, ): WebSocketSubject // state abstract echo(params: T.EchoParams, url: string): Promise abstract getState(): Promise // db abstract subscribeToPatchDB(params: {}): Promise<{ dump: Dump guid: string }> abstract setDbValue( pathArr: Array, value: T, ): Promise // auth abstract login(params: T.LoginParams): Promise abstract logout(params: {}): Promise abstract getSessions(params: {}): Promise abstract killSessions(params: T.KillParams): Promise abstract resetPassword(params: T.ResetPasswordParams): Promise // diagnostic abstract diagnosticGetError(): Promise abstract diagnosticRestart(): Promise abstract diagnosticForgetDrive(): Promise abstract diagnosticRepairDisk(): Promise abstract diagnosticGetLogs(params: T.LogsParams): Promise // init abstract initFollowProgress(): Promise abstract initFollowLogs( params: FollowServerLogsReq, ): Promise // server abstract getSystemTime(params: {}): Promise abstract getServerLogs(params: T.LogsParams): Promise abstract getKernelLogs(params: T.LogsParams): Promise abstract followServerLogs( params: FollowServerLogsReq, ): Promise abstract followKernelLogs( params: FollowServerLogsReq, ): Promise abstract followServerMetrics(params: {}): Promise abstract updateServer(params: { registry: string targetVersion: string }): Promise<'updating' | 'no-updates'> abstract restartServer(params: {}): Promise abstract shutdownServer(params: {}): Promise abstract repairDisk(params: {}): Promise abstract toggleKiosk(enable: boolean): Promise abstract setKeyboard(params: FullKeyboard): Promise abstract setLanguage(params: SetLanguageParams): Promise abstract setDns(params: T.SetStaticDnsParams): Promise abstract queryDns(params: T.QueryDnsParams): Promise abstract checkPort(params: T.CheckPortParams): Promise abstract checkDns(params: T.CheckDnsParams): Promise // smtp abstract setSmtp(params: T.SmtpValue): Promise abstract clearSmtp(params: {}): Promise abstract testSmtp(params: T.TestSmtpParams): Promise // marketplace URLs abstract checkOSUpdate(params: { registry: string serverId: string }): Promise abstract getRegistryInfo(params: { registry: string }): Promise abstract getRegistryPackage( params: GetRegistryPackageReq, ): Promise abstract getRegistryPackages( params: GetRegistryPackagesReq, ): Promise // notification abstract getNotifications( params: T.ListNotificationParams, ): Promise abstract markSeenNotifications( params: T.ModifyNotificationParams, ): Promise abstract markSeenAllNotifications( params: T.ModifyNotificationBeforeParams, ): Promise abstract markUnseenNotifications( params: T.ModifyNotificationParams, ): Promise abstract deleteNotifications( params: T.ModifyNotificationParams, ): Promise // ** proxies ** abstract addTunnel(params: T.AddTunnelParams): Promise<{ id: string }> abstract updateTunnel(params: T.RenameGatewayParams): Promise abstract removeTunnel(params: T.RemoveTunnelParams): Promise abstract setDefaultOutbound(params: { gateway: string | null }): Promise abstract setServiceOutbound(params: T.SetOutboundGatewayParams): Promise // ** domains ** // wifi abstract enableWifi(params: T.SetWifiEnabledParams): Promise abstract setWifiCountry(params: T.SetCountryParams): Promise abstract getWifi(params: {}, timeout: number): Promise abstract addWifi(params: T.WifiAddParams): Promise abstract connectWifi(params: T.WifiSsidParams): Promise abstract deleteWifi(params: T.WifiSsidParams): Promise // ssh abstract getSshKeys(params: {}): Promise abstract addSshKey(params: T.SshAddParams): Promise abstract deleteSshKey(params: T.SshDeleteParams): Promise // backup abstract getBackupTargets(params: {}): Promise<{ [id: string]: T.BackupTarget }> abstract addBackupTarget( params: T.CifsAddParams, ): Promise<{ [id: string]: CifsBackupTarget }> abstract updateBackupTarget( params: T.CifsUpdateParams, ): Promise<{ [id: string]: CifsBackupTarget }> abstract removeBackupTarget(params: T.CifsRemoveParams): Promise abstract getBackupInfo(params: T.InfoParams): Promise abstract createBackup(params: T.BackupParams): Promise // @TODO 041 // ** automated backups ** // 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 // package abstract getPackageLogs(params: GetPackageLogsReq): Promise abstract followPackageLogs( params: FollowPackageLogsReq, ): Promise abstract installPackage(params: T.InstallParams): Promise abstract cancelInstallPackage(params: T.CancelInstallParams): Promise abstract getActionInput( params: T.GetActionInputParams, ): Promise abstract runAction(params: T.RunActionParams): Promise abstract clearTask(params: T.ClearTaskParams): Promise abstract restorePackages(params: T.RestorePackageParams): Promise abstract startPackage(params: T.ControlParams): Promise abstract restartPackage(params: T.ControlParams): Promise abstract stopPackage(params: T.ControlParams): Promise abstract rebuildPackage(params: T.RebuildParams): Promise abstract uninstallPackage(params: T.UninstallParams): Promise abstract sideloadPackage(): Promise // @TODO 041 // ** service outbound proxy ** // abstract setServiceOutboundProxy( // params: RR.SetServiceOutboundTunnelReq, // ): Promise abstract initAcme(params: T.InitAcmeParams): Promise abstract removeAcme(params: T.RemoveAcmeParams): Promise abstract serverBindingSetAddressEnabled( params: ServerBindingSetAddressEnabledReq, ): Promise abstract osUiAddPublicDomain( params: T.AddPublicDomainParams, ): Promise abstract osUiRemovePublicDomain(params: T.RemoveDomainParams): Promise abstract osUiAddPrivateDomain(params: T.AddPrivateDomainParams): Promise abstract osUiRemovePrivateDomain(params: T.RemoveDomainParams): Promise abstract pkgBindingSetAddressEnabled( params: PkgBindingSetAddressEnabledReq, ): Promise abstract pkgAddPublicDomain( params: PkgAddPublicDomainReq, ): Promise abstract pkgRemovePublicDomain( params: PkgRemovePublicDomainReq, ): Promise abstract pkgAddPrivateDomain(params: PkgAddPrivateDomainReq): Promise abstract pkgRemovePrivateDomain( params: PkgRemovePrivateDomainReq, ): Promise }