private static async Task HandleAsync(string serverUrl, string accessToken, string username, string password, string timelineKey)
        {
            using var client = HttpClientFactory.Create(username, password, accessToken);
            serverUrl ??= await client.GetCloudServerUrlAsync();

            JsonElement home = await client.GetAsJsonAsync(serverUrl, ManicTimeMediaType.V3);

            JsonElement timelines = await client.GetAsJsonAsync(Urls.Timelines(home.GetLinkHref("manictime/timelines"), timelineKey), ManicTimeMediaType.V3);

            Console.WriteLine(timelines.FormatForDisplay());
        }
        private static async Task <string> GetServerTokenEndpointUrlAsync(HttpClient client, string serverUrl)
        {
            using HttpResponseMessage serverResponse = await client.GetAsync(serverUrl);

            ServerAuthCheck.AssertOAuthConfiguredOnServer(serverResponse);

            JsonElement home = await serverResponse.Content.ReadFromJsonAsync <JsonElement>();

            string tokenEndpointHref = home.GetLinkHref("manictime/token");

            if (tokenEndpointHref == null)
            {
                throw new InvalidOperationException("Token endpoint url not found.");
            }
            return(tokenEndpointHref);
        }
        private static async Task HandleAsync(string serverUrl, string accessToken, string username, string password, string timelineKey, DateTime fromTime, DateTime toTime)
        {
            using var client = HttpClientFactory.Create(username, password, accessToken);
            serverUrl ??= await client.GetCloudServerUrlAsync();

            JsonElement home = await client.GetAsJsonAsync(serverUrl, ManicTimeMediaType.V3);

            JsonElement timelines = await client.GetAsJsonAsync(Urls.Timelines(home.GetLinkHref("manictime/timelines"), timelineKey), ManicTimeMediaType.V3);

            JsonElement timeline = timelines.GetProperty("timelines").EnumerateArray().SingleOrDefault();

            if (timeline.ValueKind == JsonValueKind.Undefined)
            {
                throw new InvalidOperationException("Timeline not found.");
            }
            JsonElement activities = await client.GetAsJsonAsync(Urls.Activities(timeline.GetLinkHref("manictime/activities"), fromTime, toTime), ManicTimeMediaType.V3);

            Console.WriteLine(activities.FormatForDisplay());
        }