diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 43512fd..d63cc19 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,11 +1,12 @@ - latest + preview disable enable true true + $(NoWarn);IDE0130;CA1859 \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj b/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj index 1da4dc5..3101de7 100644 --- a/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj +++ b/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj @@ -1,17 +1,17 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.ChangeSetExecute - 1.3.0 + 1.4.0 - - + + - + diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj b/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj index 0cee3c8..75f5a75 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj +++ b/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj @@ -1,16 +1,16 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EmailSend - 1.5.0 + 1.6.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateOut.cs b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateOut.cs index 238869b..c79e98d 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateOut.cs +++ b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateOut.cs @@ -2,11 +2,11 @@ namespace GarageGroup.Infra; -public sealed record class DataverseEmailCreateOut +public readonly record struct DataverseEmailCreateOut { public DataverseEmailCreateOut(Guid emailId) => EmailId = emailId; - + public Guid EmailId { get; } } diff --git a/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj b/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj index 6ecda90..0934692 100644 --- a/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj @@ -1,16 +1,16 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityCreate - 3.13.0 + 3.14.0 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj b/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj index 9442564..986e19f 100644 --- a/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj @@ -1,16 +1,16 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityDelete - 3.4.2 + 3.4.3 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj b/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj index ed4ab32..0fdc3ed 100644 --- a/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj @@ -1,16 +1,16 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityGet - 3.11.0 + 3.12.0 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj b/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj index 0c11ae9..fd06d44 100644 --- a/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj +++ b/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj @@ -1,15 +1,15 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntitySetGet - 3.11.0 + 3.12.0 - - + + diff --git a/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj b/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj index a8566e0..1324b47 100644 --- a/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj @@ -1,17 +1,17 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityUpdate - 3.13.0 + 3.14.0 - - - - + + + + diff --git a/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj b/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj index 5b47c41..dbdfc86 100644 --- a/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj +++ b/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj @@ -1,16 +1,16 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.FetchXml - 1.4.0 + 1.5.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlIn.cs b/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlIn.cs index 262eef5..c4234de 100644 --- a/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlIn.cs +++ b/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlIn.cs @@ -9,8 +9,8 @@ public DataverseFetchXmlIn(string entityPluralName, string fetchXmlQueryString) } public string FetchXmlQueryString { get; } - + public string EntityPluralName { get; } - + public string? IncludeAnnotations { get; init; } } \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlOut.cs b/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlOut.cs index 7ad569c..00b7434 100644 --- a/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlOut.cs +++ b/src/api-abstractions/Api.Abstractions.FetchXml/DataverseFetchXmlOut.cs @@ -6,7 +6,7 @@ namespace GarageGroup.Infra; public sealed record class DataverseFetchXmlOut { public DataverseFetchXmlOut( - FlatArray value, + FlatArray value, [AllowNull] string pagingCookie = null) { Value = value; @@ -15,7 +15,7 @@ public DataverseFetchXmlOut( public FlatArray Value { get; } - public string? PagingCookie { get; init; } + public string? PagingCookie { get; } public bool MoreRecords { get; init; } } diff --git a/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj b/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj index 35b171c..4a1485c 100644 --- a/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj +++ b/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj @@ -1,10 +1,10 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.Impersonate - 2.1.2 + 2.1.3 \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj b/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj index e24e56e..bd6a83f 100644 --- a/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj +++ b/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj @@ -1,16 +1,16 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.Search - 3.11.0 + 3.12.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj b/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj index 75b5b66..0c9f9f7 100644 --- a/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj +++ b/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj @@ -1,14 +1,14 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.WhoAmI - 1.4.2 + 1.4.3 - + diff --git a/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj b/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj index 5d79237..96251a0 100644 --- a/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj +++ b/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj @@ -1,24 +1,24 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions - 3.15.0 + 3.16.0 - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj b/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj index fc6c4da..96f49aa 100644 --- a/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj +++ b/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj @@ -1,7 +1,7 @@ - net8.0 + net8.0;net9.0 false GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test @@ -12,9 +12,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/DataverseAlternateKeyTest.cs b/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/DataverseAlternateKeyTest.cs index a658406..6c902e3 100644 --- a/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/DataverseAlternateKeyTest.cs +++ b/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/DataverseAlternateKeyTest.cs @@ -1,5 +1,3 @@ namespace GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test; -public sealed partial class DataverseAlternateKeyTest -{ -} \ No newline at end of file +public sealed partial class DataverseAlternateKeyTest; \ No newline at end of file diff --git a/src/api-core/Api.Core.EntityKey.Test/Test.DataversePrimaryKey/DataversePrimaryKeyTest.cs b/src/api-core/Api.Core.EntityKey.Test/Test.DataversePrimaryKey/DataversePrimaryKeyTest.cs index 483b708..fc5cd19 100644 --- a/src/api-core/Api.Core.EntityKey.Test/Test.DataversePrimaryKey/DataversePrimaryKeyTest.cs +++ b/src/api-core/Api.Core.EntityKey.Test/Test.DataversePrimaryKey/DataversePrimaryKeyTest.cs @@ -1,5 +1,3 @@ namespace GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test; -public sealed partial class DataversePrimaryKeyTest -{ -} \ No newline at end of file +public sealed partial class DataversePrimaryKeyTest; \ No newline at end of file diff --git a/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj b/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj index 4054d55..8fb9255 100644 --- a/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj +++ b/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj @@ -1,10 +1,10 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.EntityKey - 3.1.5 + 3.1.6 \ No newline at end of file diff --git a/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs b/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs index bfcf229..d2f5ec2 100644 --- a/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs +++ b/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs @@ -6,7 +6,7 @@ namespace GarageGroup.Infra; public sealed record class DataverseAlternateKey : IDataverseEntityKey { - public DataverseAlternateKey(IReadOnlyCollection> idArguments) + public DataverseAlternateKey(params IReadOnlyCollection> idArguments) => Value = BuildValue(idArguments); diff --git a/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj b/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj index bf899fc..2803f10 100644 --- a/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj +++ b/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj @@ -1,14 +1,14 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.ExpandedField - 1.7.0 + 1.8.0 - + \ No newline at end of file diff --git a/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj b/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj index 18d40d4..485dde7 100644 --- a/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj +++ b/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj @@ -1,10 +1,10 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.FailureCode - 2.2.4 + 2.2.5 \ No newline at end of file diff --git a/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj b/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj index 46ea1b4..c56c31b 100644 --- a/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj +++ b/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj @@ -1,10 +1,10 @@ - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.Transaction - 1.0.2 + 1.0.3 \ No newline at end of file diff --git a/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj b/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj index 0c3332c..0be1635 100644 --- a/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj +++ b/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj @@ -1,7 +1,7 @@ - net8.0 + net8.0;net9.0 false GarageGroup.Infra.Dataverse.Api.Impersonation.Test GarageGroup.Infra.Dataverse.Api.Impersonation.Test @@ -12,11 +12,11 @@ - - + + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj b/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj index a891a93..df725ed 100644 --- a/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj +++ b/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj @@ -1,10 +1,10 @@  - net8.0 + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Impersonation - 2.2.2 + 2.2.3 diff --git a/src/api/Api.Test/Api.Test.csproj b/src/api/Api.Test/Api.Test.csproj index 412b18e..c80ec8c 100644 --- a/src/api/Api.Test/Api.Test.csproj +++ b/src/api/Api.Test/Api.Test.csproj @@ -1,7 +1,7 @@ - net8.0 + net8.0;net9.0 false GarageGroup.Infra.Dataverse.Api.Test GarageGroup.Infra.Dataverse.Api.Test @@ -14,10 +14,12 @@ - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api/Api/Api.csproj b/src/api/Api/Api.csproj index af2eb02..58892ef 100644 --- a/src/api/Api/Api.csproj +++ b/src/api/Api/Api.csproj @@ -1,21 +1,20 @@  - net8.0 - latest + net8.0;net9.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api - 3.17.0 + 3.18.0 - + + - - + \ No newline at end of file diff --git a/src/api/Api/Internal.AuthenticationHandler/AuthenticationHandler.cs b/src/api/Api/Internal.AuthenticationHandler/AuthenticationHandler.cs index b0c8b87..3c67a47 100644 --- a/src/api/Api/Internal.AuthenticationHandler/AuthenticationHandler.cs +++ b/src/api/Api/Internal.AuthenticationHandler/AuthenticationHandler.cs @@ -1,6 +1,6 @@ using System.Collections.Concurrent; using System.Net.Http; -using Microsoft.Identity.Client; +using Azure.Identity; namespace GarageGroup.Infra; @@ -8,11 +8,9 @@ internal sealed partial class AuthenticationHandler : DelegatingHandler { static AuthenticationHandler() => - ClientApplications = new(); + ClientCredentials = new(); - private static readonly ConcurrentDictionary ClientApplications; - - private const string LoginMsOnlineServiceBaseUrl = "https://login.microsoftonline.com/"; + private static readonly ConcurrentDictionary ClientCredentials; private readonly DataverseApiClientAuthOption option; @@ -21,15 +19,15 @@ internal AuthenticationHandler(HttpMessageHandler innerHandler, DataverseApiClie => this.option = option; - private static IConfidentialClientApplication GetClientApplication(DataverseApiClientAuthOption option) + private static ClientSecretCredential GetClientCredential(DataverseApiClientAuthOption option) { - return ClientApplications.GetOrAdd(option, CreateClientApplication); + return ClientCredentials.GetOrAdd(option, CreateClientCredential); - static IConfidentialClientApplication CreateClientApplication(DataverseApiClientAuthOption option) + static ClientSecretCredential CreateClientCredential(DataverseApiClientAuthOption option) => - ConfidentialClientApplicationBuilder.Create(option.AuthClientId) - .WithClientSecret(option.AuthClientSecret) - .WithAuthority(LoginMsOnlineServiceBaseUrl + option.AuthTenantId) - .Build(); + new( + tenantId: option.AuthTenantId.ToString(), + clientId: option.AuthClientId, + clientSecret: option.AuthClientSecret); } } \ No newline at end of file diff --git a/src/api/Api/Internal.AuthenticationHandler/Handler.Send.cs b/src/api/Api/Internal.AuthenticationHandler/Handler.Send.cs index 9bb0412..8222145 100644 --- a/src/api/Api/Internal.AuthenticationHandler/Handler.Send.cs +++ b/src/api/Api/Internal.AuthenticationHandler/Handler.Send.cs @@ -1,7 +1,7 @@ using System.Net.Http; -using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; +using Azure.Core; namespace GarageGroup.Infra; @@ -9,10 +9,10 @@ partial class AuthenticationHandler { protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { - string[] scopes = [option.ServiceUrl + "/.default"]; - var token = await GetClientApplication(option).AcquireTokenForClient(scopes).ExecuteAsync(cancellationToken).ConfigureAwait(false); + var context = new TokenRequestContext(scopes: [option.ServiceUrl + "/.default"]); + var token = await GetClientCredential(option).GetTokenAsync(context, cancellationToken).ConfigureAwait(false); - request.Headers.Authorization = AuthenticationHeaderValue.Parse(token.CreateAuthorizationHeader()); + request.Headers.Authorization = new(token.TokenType, token.Token); return await base.SendAsync(request, cancellationToken).ConfigureAwait(false); } } \ No newline at end of file