import { CloudLocation } from "./location" ; export interface Server { getId ( ) : string ; getName ( ) : string ; getVersion ( ) : string ; setName ( name ) : Promise < void > ; listAccessKeys ( ) : Promise < AccessKey [ ] > ; getDataUsage ( ) : Promise < BytesByAccessKey > ; addAccessKey ( ) : Promise < AccessKey > ; renameAccessKey ( accessKeyId , name ) : Promise < void > ; removeAccessKey ( accessKeyId ) : Promise < void > ; setDefaultDataLimit ( limit ) : Promise < void > ; getDefaultDataLimit ( ) : DataLimit | undefined ; removeDefaultDataLimit ( ) : Promise < void > ; setAccessKeyDataLimit ( accessKeyId , limit ) : Promise < void > ; removeAccessKeyDataLimit ( accessKeyId ) : Promise < void > ; getMetricsEnabled ( ) : boolean ; setMetricsEnabled ( metricsEnabled ) : Promise < void > ; getMetricsId ( ) : string ; isHealthy ( ) : Promise < boolean > ; getCreatedDate ( ) : Date ; getHostnameForAccessKeys ( ) : string ; setHostnameForAccessKeys ( hostname ) : Promise < void > ; getManagementApiUrl ( ) : string ; getPortForNewAccessKeys ( ) : number | undefined ; setPortForNewAccessKeys ( port ) : Promise < void > ; } export interface ManualServer extends Server { getCertificateFingerprint ( ) : string ; forget ( ) : void ; } export interface ManagedServer extends Server { monitorInstallProgress ( ) : AsyncGenerator < number , void > ; getHost ( ) : ManagedServerHost ; } export interface ManagedServerHost { getMonthlyOutboundTransferLimit ( ) : DataAmount ; getMonthlyCost ( ) : MonetaryCost ; getCloudLocation ( ) : CloudLocation ; delete ( ) : Promise < void > ; } export class DataAmount { terabytes : number ; } export class MonetaryCost { usd : number ; } export interface ManualServerConfig { apiUrl : string ; certSha256 : string ; } export interface ManualServerRepository { listServers ( ) : Promise < ManualServer [ ] > ; addServer ( config ) : Promise < ManualServer > ; findServer ( config ) : ManualServer | undefined ; } export type AccessKeyId = string ; export interface AccessKey { id : AccessKeyId ; name : string ; accessUrl : string ; dataLimit ? : DataLimit ; } export type BytesByAccessKey = Map < AccessKeyId , number > ; export interface DataLimit { readonly bytes : number ; }