namespace IronServices.Client;
///
/// API client for IronLicensing operations.
/// Access via IronServicesClient.Licensing
///
public class LicensingApi
{
private readonly IronServicesClient _client;
private readonly string _baseUrl;
internal LicensingApi(IronServicesClient client, string baseUrl)
{
_client = client;
_baseUrl = baseUrl;
}
private string Url(string endpoint) => IronServicesClient.BuildUrl(_baseUrl, endpoint);
///
/// Get dashboard statistics.
///
public async Task GetDashboardStatsAsync(CancellationToken ct = default)
{
return await _client.GetAsync(Url("api/v1/dashboard/stats"), ct)
?? new LicensingDashboardStats();
}
///
/// Get recent activity from audit logs.
///
public async Task> GetRecentActivityAsync(int limit = 50, CancellationToken ct = default)
{
return await _client.GetAsync>(Url($"api/v1/admin/audit?limit={limit}"), ct) ?? [];
}
///
/// Get licenses with optional filtering.
///
public async Task> GetLicensesAsync(string? status = null, Guid? productId = null, int page = 1, int limit = 50, CancellationToken ct = default)
{
var query = new List { $"page={page}", $"limit={limit}" };
if (!string.IsNullOrEmpty(status)) query.Add($"status={status}");
if (productId.HasValue) query.Add($"productId={productId}");
var queryString = "?" + string.Join("&", query);
return await _client.GetAsync>(Url($"api/v1/admin/licenses{queryString}"), ct) ?? [];
}
///
/// Get a specific license by ID.
///
public async Task GetLicenseAsync(Guid id, CancellationToken ct = default)
{
return await _client.GetAsync(Url($"api/v1/admin/licenses/{id}"), ct);
}
///
/// Create a new license.
///
public async Task CreateLicenseAsync(CreateLicenseRequest request, CancellationToken ct = default)
{
return await _client.PostAsync(Url("api/v1/admin/licenses"), request, ct);
}
///
/// Suspend a license.
///
public async Task SuspendLicenseAsync(Guid id, string? reason = null, CancellationToken ct = default)
{
return await _client.PostAsync