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