private async Task<bool> EnsureTokenIsValid()
{
var res = false;
if (masterClient == null ||
(string.IsNullOrWhiteSpace(conversationToken) || string.IsNullOrWhiteSpace(ConversationId))
|| DateTime.UtcNow > convoTokenExpirationDate || ConversationClient == null) return res;
//MK renew only when getting close to end date (~5 min)
if (DateTime.UtcNow.AddMinutes(-5) > convoTokenExpirationDate)
{
var refreshConvoTokenResponse = await ConversationClient.Tokens.RenewTokenWithOperationResponseAsync(ConversationId);
if (!string.IsNullOrWhiteSpace(refreshConvoTokenResponse?.Body))
{
conversationToken = refreshConvoTokenResponse.Body;
convoTokenExpirationDate = DateTimeOffset.UtcNow.AddMinutes(Utilities.Constants.ConvoTokenExpirationTimeInMinutes);
ConversationClient = new DirectLinkApiClient(new TokenCredentials(conversationToken, TenantId), new LoggingHttpHandler());
res = true;
}
else
{
//TODO handle refresh of new conversation token failure
}
}
else
{
res = true;
}
return res;
}
}