using System.Collections.Generic; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using BinaryLane.Api.V2.Models; using BinaryLane.Api.V2.Pagination; namespace BinaryLane.Api.V2.Resources; /// Reads information about the authenticated account. public interface IAccountApi { /// Gets the current account. Task GetAsync(CancellationToken cancellationToken = default); /// Gets the untyped account response for forward compatibility. Task GetRawAsync(CancellationToken cancellationToken = default); } /// Reads and waits for asynchronous account and server actions. public interface IActionsApi { /// Gets an action by its global action ID. Task GetAsync(long actionId, CancellationToken cancellationToken = default); /// Lists global actions. Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); /// Streams all global actions. IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); /// Supplies a requested user interaction for an action. Task ProceedAsync(long actionId, ProceedRequest request, CancellationToken cancellationToken = default); /// Polls an action until BinaryLane reports a terminal state. Task WaitForCompletionAsync( long actionId, ActionWaitOptions? options = null, CancellationToken cancellationToken = default); } /// Reads account billing and invoice information. public interface IBillingApi { Task GetBalanceAsync(CancellationToken cancellationToken = default); Task GetInvoiceAsync(long invoiceId, CancellationToken cancellationToken = default); Task> ListInvoicesAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task> ListUnpaidPaymentFailedInvoicesAsync(CancellationToken cancellationToken = default); } /// Reads data-transfer usage data. public interface IDataUsageApi { Task> ListCurrentAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllCurrentAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetCurrentAsync(long serverId, CancellationToken cancellationToken = default); } /// Manages DNS domains and DNS records. public interface IDomainsApi { Task> GetNameserversAsync(CancellationToken cancellationToken = default); Task RefreshNameserverCacheAsync(DomainRefreshRequest request, CancellationToken cancellationToken = default); Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task CreateAsync(DomainRequest request, CancellationToken cancellationToken = default); Task GetAsync(string domainName, CancellationToken cancellationToken = default); Task DeleteAsync(string domainName, CancellationToken cancellationToken = default); Task> ListRecordsAsync(string domainName, PageRequest? page = null, CancellationToken cancellationToken = default); Task CreateRecordAsync(string domainName, DomainRecordRequest request, CancellationToken cancellationToken = default); Task GetRecordAsync(string domainName, long recordId, CancellationToken cancellationToken = default); Task UpdateRecordAsync(string domainName, long recordId, UpdateDomainRecordRequest request, CancellationToken cancellationToken = default); Task DeleteRecordAsync(string domainName, long recordId, CancellationToken cancellationToken = default); } /// Reads and manages account images and backups represented as images. public interface IImagesApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetAsync(string imageIdOrSlug, CancellationToken cancellationToken = default); Task UpdateAsync(long imageId, ImageRequest request, CancellationToken cancellationToken = default); Task GetDownloadAsync(long imageId, CancellationToken cancellationToken = default); } /// Manages account SSH keys. public interface ISshKeysApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetAsync(long keyId, CancellationToken cancellationToken = default); Task CreateAsync(SshKeyRequest request, CancellationToken cancellationToken = default); Task UpdateAsync(long keyId, UpdateSshKeyRequest request, CancellationToken cancellationToken = default); Task DeleteAsync(long keyId, CancellationToken cancellationToken = default); } /// Manages load balancers, their members, and forwarding rules. public interface ILoadBalancersApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetAsync(long loadBalancerId, CancellationToken cancellationToken = default); Task CreateAsync(CreateLoadBalancerRequest request, CancellationToken cancellationToken = default); Task UpdateAsync(long loadBalancerId, UpdateLoadBalancerRequest request, CancellationToken cancellationToken = default); Task DeleteAsync(long loadBalancerId, CancellationToken cancellationToken = default); Task> GetAvailabilityAsync(CancellationToken cancellationToken = default); Task AddServersAsync(long loadBalancerId, ServerIdsRequest request, CancellationToken cancellationToken = default); Task RemoveServersAsync(long loadBalancerId, ServerIdsRequest request, CancellationToken cancellationToken = default); Task AddForwardingRulesAsync(long loadBalancerId, ForwardingRulesRequest request, CancellationToken cancellationToken = default); Task RemoveForwardingRulesAsync(long loadBalancerId, ForwardingRulesRequest request, CancellationToken cancellationToken = default); } /// Lists BinaryLane regions. public interface IRegionsApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); } /// Manages IPv6 reverse-name configuration. public interface IReverseNamesApi { Task> ListIpv6Async(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllIpv6Async(PageRequest? page = null, CancellationToken cancellationToken = default); Task UpdateIpv6Async(ReverseNameserversRequest request, CancellationToken cancellationToken = default); } /// Reads monitoring samples for servers. public interface ISampleSetsApi { Task GetLatestAsync(long serverId, string? dataInterval = null, CancellationToken cancellationToken = default); Task> ListAsync(long serverId, PageRequest? page = null, string? dataInterval = null, DateTimeOffset? start = null, DateTimeOffset? endAt = null, CancellationToken cancellationToken = default); } /// Manages BinaryLane servers and their server-scoped resources. public interface IServersApi { Task GetAsync(long serverId, CancellationToken cancellationToken = default); Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task CreateAsync(CreateServerRequest request, CancellationToken cancellationToken = default); Task DeleteAsync(long serverId, string? reason = null, CancellationToken cancellationToken = default); Task> ListActionsAsync(long serverId, PageRequest? page = null, CancellationToken cancellationToken = default); Task GetActionAsync(long serverId, long actionId, CancellationToken cancellationToken = default); Task SubmitActionAsync(long serverId, ServerAction request, CancellationToken cancellationToken = default); Task> GetAdvancedFirewallRulesAsync(long serverId, CancellationToken cancellationToken = default); Task GetAvailableAdvancedFeaturesAsync(long serverId, CancellationToken cancellationToken = default); Task> ListBackupsAsync(long serverId, PageRequest? page = null, CancellationToken cancellationToken = default); Task CreateBackupAsync(long serverId, UploadImageRequest request, CancellationToken cancellationToken = default); Task> ListKernelsAsync(long serverId, PageRequest? page = null, CancellationToken cancellationToken = default); Task> ListSnapshotsAsync(long serverId, PageRequest? page = null, CancellationToken cancellationToken = default); Task> GetThresholdAlertsAsync(long serverId, CancellationToken cancellationToken = default); Task> GetThresholdAlertServerIdsAsync(CancellationToken cancellationToken = default); Task> ListSoftwareAsync(long serverId, PageRequest? page = null, CancellationToken cancellationToken = default); Task GetUserDataAsync(long serverId, CancellationToken cancellationToken = default); Task GetConsoleAsync(long serverId, CancellationToken cancellationToken = default); } /// Lists available server sizes. public interface ISizesApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); } /// Lists available licensed software and operating-system software. public interface ISoftwareApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetAsync(long softwareId, CancellationToken cancellationToken = default); Task> ListOperatingSystemAsync(string operatingSystemIdOrSlug, PageRequest? page = null, CancellationToken cancellationToken = default); } /// Manages private virtual networks and their members. public interface IVpcsApi { Task> ListAsync(PageRequest? page = null, CancellationToken cancellationToken = default); IAsyncEnumerable ListAllAsync(PageRequest? page = null, CancellationToken cancellationToken = default); Task GetAsync(long vpcId, CancellationToken cancellationToken = default); Task CreateAsync(CreateVpcRequest request, CancellationToken cancellationToken = default); Task ReplaceAsync(long vpcId, UpdateVpcRequest request, CancellationToken cancellationToken = default); Task UpdateAsync(long vpcId, PatchVpcRequest request, CancellationToken cancellationToken = default); Task DeleteAsync(long vpcId, CancellationToken cancellationToken = default); Task> ListMembersAsync(long vpcId, PageRequest? page = null, CancellationToken cancellationToken = default); }