using System.Net.Http.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; namespace SafeNSound.Sdk; public class SafeNSoundClient(SafeNSoundConfiguration config, string accessToken) { public WrappedHttpClient HttpClient { get; } = new() { BaseAddress = new Uri(config.BaseUri), DefaultRequestHeaders = { Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken) } }; public async Task WhoAmI() { var res = await HttpClient.GetAsync("/auth/whoami"); res.EnsureSuccessStatusCode(); return (await res.Content.ReadFromJsonAsync())!; } #region Alarm public async Task GetAlarm(string userId = "@me") { var res = await HttpClient.GetAsync($"/alarm/{userId}"); res.EnsureSuccessStatusCode(); return (await res.Content.ReadFromJsonAsync())!; } public async Task SetAlarm(AlarmDto alarm, string userId = "@me") { var res = await HttpClient.PutAsJsonAsync("/alarm/@me", alarm); res.EnsureSuccessStatusCode(); } public async Task DeleteAlarm(string userId = "@me") { var res = await HttpClient.DeleteAsync($"/alarm/{userId}"); res.EnsureSuccessStatusCode(); } #endregion #region Budget #endregion public async Task> GetAllAlarms() { var res = await HttpClient.GetAsync("/alarms"); res.EnsureSuccessStatusCode(); return (await res.Content.ReadFromJsonAsync>())!; } public async Task DeleteAccount(AuthDto auth) { var res = await HttpClient.DeleteAsJsonAsync("/auth/delete", auth); res.EnsureSuccessStatusCode(); } public async Task> GetAssignedUsers() { var res = await HttpClient.GetAsync("/monitor/assignedUsers"); res.EnsureSuccessStatusCode(); return (await res.Content.ReadFromJsonAsync>())!; } public async Task AddAssignedUser(string targetUserId) { var res = await HttpClient.PatchAsJsonAsync("/monitor/assignedUsers", new { userId = targetUserId }); res.EnsureSuccessStatusCode(); } public async Task RemoveAssignedUser(string targetUserId) { var res = await HttpClient.DeleteAsJsonAsync($"/monitor/assignedUsers", new { userId = targetUserId }); res.EnsureSuccessStatusCode(); } public async IAsyncEnumerable GetAllUserIdsEnumerable() { var res = await HttpClient.GetAsync($"/admin/allUserIds"); res.EnsureSuccessStatusCode(); await foreach (var item in res.Content.ReadFromJsonAsAsyncEnumerable()) { yield return item!; } } public async Task MonitorAllUsers() { var res = await HttpClient.PostAsync("/admin/monitorAllUsers", null); res.EnsureSuccessStatusCode(); } } public class AlarmDto { [JsonPropertyName("reason")] public required string Reason { get; set; } [JsonPropertyName("createdAt")] public DateTime CreatedAt { get; set; } }