From e5bdf89e92858bd05a611a21701ba2f6156e88f2 Mon Sep 17 00:00:00 2001 From: Stephan van Rooij <1292510+svrooij@users.noreply.github.com> Date: Wed, 24 Jul 2024 17:52:22 +0200 Subject: [PATCH 1/4] Scrape store details in a proxy --- .github/workflows/build.yml | 18 + .gitignore | 5 +- WingetIntune.sln | 7 + src/Svrooij.WinTuner.CmdLets/Startup.cs | 3 +- .../packages.lock.json | 44 +- .../WinTuner.Proxy.Client.csproj | 35 ++ ...nTunerProxyClientAuthenticationProvider.cs | 24 + .../WinTunerProxyClientFactory.cs | 20 + .../WinTunerProxyClientOptions.cs | 12 + .../WinTunerProxyServiceExtensions.cs | 47 ++ src/WingetIntune.Cli/packages.lock.json | 36 +- .../Graph/GraphStoreAppUploader.cs | 69 +-- .../Internal/MsStore/Models/DisplayCatalog.cs | 488 ------------------ .../MsStore/Models/MicrosoftStoreManifest.cs | 68 --- .../MsStore/Models/MicrosoftStoreSearch.cs | 41 -- .../Internal/MsStore/StoreClient.cs | 79 --- .../Internal/MsStore/store-requests.http | 21 - src/WingetIntune/Intune/IntuneManager.cs | 14 +- src/WingetIntune/Models/Mapper.cs | 45 -- src/WingetIntune/Models/PackageInfo.cs | 16 + src/WingetIntune/WingetIntune.csproj | 1 + .../WingetServiceCollectionExtension.cs | 52 +- src/WingetIntune/packages.lock.json | 100 ++-- .../Graph/GraphStoreAppUploaderTests.cs | 67 ++- .../Intune/IntuneManagerTests.cs | 8 +- .../MsStore/MicrosoftStoreClientTests.cs | 171 ------ tests/WingetIntune.Tests/packages.lock.json | 51 +- 27 files changed, 412 insertions(+), 1130 deletions(-) create mode 100644 src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj create mode 100644 src/WinTuner.Proxy.Client/WinTunerProxyClientAuthenticationProvider.cs create mode 100644 src/WinTuner.Proxy.Client/WinTunerProxyClientFactory.cs create mode 100644 src/WinTuner.Proxy.Client/WinTunerProxyClientOptions.cs create mode 100644 src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs delete mode 100644 src/WingetIntune/Internal/MsStore/Models/DisplayCatalog.cs delete mode 100644 src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreManifest.cs delete mode 100644 src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreSearch.cs delete mode 100644 src/WingetIntune/Internal/MsStore/StoreClient.cs delete mode 100644 src/WingetIntune/Internal/MsStore/store-requests.http delete mode 100644 tests/WingetIntune.Tests/MsStore/MicrosoftStoreClientTests.cs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6939e8c..f308974 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,6 +40,9 @@ jobs: restore-keys: | ${{ runner.os }}-nuget + - name: 🎒 Install Kiota + run: dotnet tool install --global Microsoft.OpenApi.Kiota + - name: 🎒 Load packages run: dotnet restore @@ -90,6 +93,9 @@ jobs: restore-keys: | ${{ runner.os }}-nuget + - name: 🎒 Install Kiota + run: dotnet tool install --global Microsoft.OpenApi.Kiota + - name: 🎒 Load packages run: dotnet restore @@ -168,6 +174,9 @@ jobs: restore-keys: | ${{ runner.os }}-nuget + - name: 🎒 Install Kiota + run: dotnet tool install --global Microsoft.OpenApi.Kiota + - name: 🎒 Load packages run: dotnet restore @@ -212,6 +221,9 @@ jobs: restore-keys: | ${{ runner.os }}-nuget + - name: 🎒 Install Kiota + run: dotnet tool install --global Microsoft.OpenApi.Kiota + - name: 🎒 Load packages run: dotnet restore @@ -223,6 +235,12 @@ jobs: $module = Get-Content -Path src/Svrooij.WinTuner.CmdLets/WinTuner.psd1 $module = $module -replace 'ModuleVersion = ''\d+\.\d+\.\d+''', "ModuleVersion = '$version'" $module | Set-Content -Path src/Svrooij.WinTuner.CmdLets/WinTuner.psd1 + $startupContent = Get-Content -Path src/Svrooij.WinTuner.CmdLets/Startup.cs + $startupContent = $startupContent -replace '*REPLACED_AT_BUILD*', $env:WINTUNER_PROXY_TOKEN + $startupContent | Set-Content -Path src/Svrooij.WinTuner.CmdLets/Startup.cs + + env: + WINTUNER_PROXY_TOKEN: ${{ secrets.WINTUNER_PROXY_TOKEN }} - name: 🛠️ Build module shell: pwsh diff --git a/.gitignore b/.gitignore index f43c980..c96a272 100644 --- a/.gitignore +++ b/.gitignore @@ -368,4 +368,7 @@ dist # LUT config file from Visual Studio *.lutconfig -TestResults.xml \ No newline at end of file +TestResults.xml + +# Ignore all files that are generated by Kiota before restore +/src/WinTuner.Proxy.Client/Generated diff --git a/WingetIntune.sln b/WingetIntune.sln index 508ad97..a311dee 100644 --- a/WingetIntune.sln +++ b/WingetIntune.sln @@ -33,6 +33,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Winget.CommunityRepository. EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apps", "Apps", "{4D1367F6-2076-481E-A7BD-0BFA6BEFCA3D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinTuner.Proxy.Client", "src\WinTuner.Proxy.Client\WinTuner.Proxy.Client.csproj", "{1074A148-FDB2-48B1-91C6-1D37A5D139A6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -63,6 +65,10 @@ Global {516169B3-872B-443B-8736-27E2A08E7091}.Debug|Any CPU.Build.0 = Debug|Any CPU {516169B3-872B-443B-8736-27E2A08E7091}.Release|Any CPU.ActiveCfg = Release|Any CPU {516169B3-872B-443B-8736-27E2A08E7091}.Release|Any CPU.Build.0 = Release|Any CPU + {1074A148-FDB2-48B1-91C6-1D37A5D139A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1074A148-FDB2-48B1-91C6-1D37A5D139A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1074A148-FDB2-48B1-91C6-1D37A5D139A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1074A148-FDB2-48B1-91C6-1D37A5D139A6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -74,6 +80,7 @@ Global {C32DB1BC-299E-4742-8372-278C8843026C} = {4D1367F6-2076-481E-A7BD-0BFA6BEFCA3D} {050B8AB3-6232-4220-950F-578D9E3E2203} = {4D1367F6-2076-481E-A7BD-0BFA6BEFCA3D} {516169B3-872B-443B-8736-27E2A08E7091} = {70C0FC9B-4495-43AC-AB67-331201AEAA52} + {1074A148-FDB2-48B1-91C6-1D37A5D139A6} = {70C0FC9B-4495-43AC-AB67-331201AEAA52} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {94A78033-8BE6-4A61-BC28-66CE040924C8} diff --git a/src/Svrooij.WinTuner.CmdLets/Startup.cs b/src/Svrooij.WinTuner.CmdLets/Startup.cs index 32ba3fd..ed0773b 100644 --- a/src/Svrooij.WinTuner.CmdLets/Startup.cs +++ b/src/Svrooij.WinTuner.CmdLets/Startup.cs @@ -15,7 +15,8 @@ public override void ConfigureServices(IServiceCollection services) { services.AddTransient(); services.AddTransient(); - services.AddWingetServices(); + const string code = "*REPLACED_AT_BUILD*"; + services.AddWingetServices(code); } /// diff --git a/src/Svrooij.WinTuner.CmdLets/packages.lock.json b/src/Svrooij.WinTuner.CmdLets/packages.lock.json index 97b0792..e489f72 100644 --- a/src/Svrooij.WinTuner.CmdLets/packages.lock.json +++ b/src/Svrooij.WinTuner.CmdLets/packages.lock.json @@ -346,11 +346,10 @@ }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "7ZxIrX23NZXqmYZyUCmjtDYnY6Wc9pkKWsItIxxSQ5Obea4xqX0AGRInxP8tsV5Z5t67RkVcM1O2zATRDJh1fA==", + "resolved": "1.9.9", + "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", "dependencies": { - "Std.UriTemplate": "0.0.46", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)" + "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { @@ -365,12 +364,10 @@ }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.3.3", - "contentHash": "X+rkl///PgQawQyQGNtZHoY2rhcOc6BngOwK75098HUViJr1IuLc06k5Rq2eRPN0rdngWWyHwM5wC/96V04geQ==", + "resolved": "1.9.9", + "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Form": { @@ -383,11 +380,10 @@ }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "n421mk9agwBeHhAkeQIwRc3bjRE4oEPM1/CTxuiUZkd8ni4PN0Tabp3PPCjsuNmqcZXLleUh2nG/JBCoRizdzA==", + "resolved": "1.9.9", + "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Multipart": { @@ -697,8 +693,8 @@ }, "Std.UriTemplate": { "type": "Transitive", - "resolved": "0.0.46", - "contentHash": "/cCCMsB3i+MVt5LTbl236dnFd/BE4dKzzzC1teGTpAHzwPTiLIuD5hioGgtPuli/enAj8Dhmt/e9JlVUIITIgQ==" + "resolved": "1.0.3", + "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, "SvRooij.ContentPrep": { "type": "Transitive", @@ -1194,12 +1190,8 @@ }, "System.Text.Json": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" }, "System.Threading.AccessControl": { "type": "Transitive", @@ -1263,8 +1255,18 @@ "Riok.Mapperly": "[3.5.1, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } + }, + "wintuner.proxy.client": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Kiota.Abstractions": "[1.9.9, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + } } } } diff --git a/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj b/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj new file mode 100644 index 0000000..0d675b4 --- /dev/null +++ b/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj @@ -0,0 +1,35 @@ + + + + net6.0 + enable + enable + https://proxy.wintuner.app/api/ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WinTuner.Proxy.Client/WinTunerProxyClientAuthenticationProvider.cs b/src/WinTuner.Proxy.Client/WinTunerProxyClientAuthenticationProvider.cs new file mode 100644 index 0000000..db04cfb --- /dev/null +++ b/src/WinTuner.Proxy.Client/WinTunerProxyClientAuthenticationProvider.cs @@ -0,0 +1,24 @@ +using Microsoft.Kiota.Abstractions; +using Microsoft.Kiota.Abstractions.Authentication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WinTuner.Proxy.Client; +internal class WinTunerProxyClientAuthenticationProvider : IAuthenticationProvider +{ + private readonly string apiKey; + private readonly string headerName; + public WinTunerProxyClientAuthenticationProvider(string apiKey, string headerName = "x-functions-key") + { + this.apiKey = apiKey; + this.headerName = headerName; + } + public Task AuthenticateRequestAsync(RequestInformation request, Dictionary? additionalAuthenticationContext = null, CancellationToken cancellationToken = default) + { + request.Headers.Add(headerName, apiKey); + return Task.CompletedTask; + } +} diff --git a/src/WinTuner.Proxy.Client/WinTunerProxyClientFactory.cs b/src/WinTuner.Proxy.Client/WinTunerProxyClientFactory.cs new file mode 100644 index 0000000..f0463ae --- /dev/null +++ b/src/WinTuner.Proxy.Client/WinTunerProxyClientFactory.cs @@ -0,0 +1,20 @@ +using Microsoft.Extensions.Options; +using Microsoft.Kiota.Http.HttpClientLibrary; + +namespace WinTuner.Proxy.Client; +internal class WinTunerProxyClientFactory +{ + private readonly WinTunerProxyClientOptions options; + private readonly HttpClient httpClient; + public WinTunerProxyClientFactory(HttpClient httpClient, IOptions options) + { + this.httpClient = httpClient; + this.options = options.Value; + if (this.options.BaseAddress is not null) + { + this.httpClient.BaseAddress = this.options.BaseAddress; + } + } + + public WinTunerProxyClient GetClient(string? code = null) => new WinTunerProxyClient(new HttpClientRequestAdapter(new WinTunerProxyClientAuthenticationProvider(code ?? options.Code), httpClient: httpClient)); +} diff --git a/src/WinTuner.Proxy.Client/WinTunerProxyClientOptions.cs b/src/WinTuner.Proxy.Client/WinTunerProxyClientOptions.cs new file mode 100644 index 0000000..7708072 --- /dev/null +++ b/src/WinTuner.Proxy.Client/WinTunerProxyClientOptions.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WinTuner.Proxy.Client; +public class WinTunerProxyClientOptions +{ + public Uri? BaseAddress { get; set; } + public string Code { get; set; } = default!; +} diff --git a/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs b/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs new file mode 100644 index 0000000..b29914f --- /dev/null +++ b/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Kiota.Http.HttpClientLibrary; +using Microsoft.Kiota.Http.HttpClientLibrary.Middleware; + +namespace WinTuner.Proxy.Client; +public static class WinTunerProxyServiceExtensions +{ + public static IServiceCollection AddWinTunerProxyClient(this IServiceCollection services, Action configure) + { + services.Configure(configure); + // Only add the Kiota handlers if they are not already present + if (!services.Any(s => s.ServiceType == typeof(RetryHandler))) + { + services.AddKiotaHandlers(); + } + + services.AddHttpClient().AttachKiotaHandlers(); + services.AddTransient((sp) => sp.GetRequiredService().GetClient()); + return services; + } + + private static IServiceCollection AddKiotaHandlers(this IServiceCollection services) + { + // Dynamically load the Kiota handlers from the Client Factory + var kiotaHandlers = KiotaClientFactory.GetDefaultHandlerTypes(); + // And register them in the DI container + foreach (var handler in kiotaHandlers) + { + services.AddTransient(handler); + } + + return services; + } + + private static IHttpClientBuilder AttachKiotaHandlers(this IHttpClientBuilder builder) + { + // Dynamically load the Kiota handlers from the Client Factory + var kiotaHandlers = KiotaClientFactory.GetDefaultHandlerTypes(); + // And attach them to the http client builder + foreach (var handler in kiotaHandlers) + { + builder.AddHttpMessageHandler((sp) => (DelegatingHandler)sp.GetRequiredService(handler)); + } + + return builder; + } +} diff --git a/src/WingetIntune.Cli/packages.lock.json b/src/WingetIntune.Cli/packages.lock.json index d3f7233..947027a 100644 --- a/src/WingetIntune.Cli/packages.lock.json +++ b/src/WingetIntune.Cli/packages.lock.json @@ -551,11 +551,10 @@ }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "7ZxIrX23NZXqmYZyUCmjtDYnY6Wc9pkKWsItIxxSQ5Obea4xqX0AGRInxP8tsV5Z5t67RkVcM1O2zATRDJh1fA==", + "resolved": "1.9.9", + "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", "dependencies": { - "Std.UriTemplate": "0.0.46", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)" + "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { @@ -570,12 +569,10 @@ }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.3.3", - "contentHash": "X+rkl///PgQawQyQGNtZHoY2rhcOc6BngOwK75098HUViJr1IuLc06k5Rq2eRPN0rdngWWyHwM5wC/96V04geQ==", + "resolved": "1.9.9", + "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Form": { @@ -588,11 +585,10 @@ }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "n421mk9agwBeHhAkeQIwRc3bjRE4oEPM1/CTxuiUZkd8ni4PN0Tabp3PPCjsuNmqcZXLleUh2nG/JBCoRizdzA==", + "resolved": "1.9.9", + "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Multipart": { @@ -666,8 +662,8 @@ }, "Std.UriTemplate": { "type": "Transitive", - "resolved": "0.0.46", - "contentHash": "/cCCMsB3i+MVt5LTbl236dnFd/BE4dKzzzC1teGTpAHzwPTiLIuD5hioGgtPuli/enAj8Dhmt/e9JlVUIITIgQ==" + "resolved": "1.0.3", + "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, "SvRooij.ContentPrep": { "type": "Transitive", @@ -924,8 +920,18 @@ "Riok.Mapperly": "[3.5.1, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } + }, + "wintuner.proxy.client": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Kiota.Abstractions": "[1.9.9, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + } } } } diff --git a/src/WingetIntune/Graph/GraphStoreAppUploader.cs b/src/WingetIntune/Graph/GraphStoreAppUploader.cs index c12973f..1f433e2 100644 --- a/src/WingetIntune/Graph/GraphStoreAppUploader.cs +++ b/src/WingetIntune/Graph/GraphStoreAppUploader.cs @@ -2,11 +2,6 @@ using Microsoft.Graph.Beta; using Microsoft.Graph.Beta.Models; using Microsoft.Graph.Beta.Models.ODataErrors; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using WingetIntune.Models; namespace WingetIntune.Graph; @@ -14,27 +9,27 @@ public class GraphStoreAppUploader { private readonly ILogger logger; private readonly IFileManager fileManager; - private readonly Internal.MsStore.MicrosoftStoreClient microsoftStoreClient; - private readonly Mapper mapper = new(); + private readonly WinTuner.Proxy.Client.WinTunerProxyClient proxyClient; - public GraphStoreAppUploader(ILogger logger, IFileManager fileManager, Internal.MsStore.MicrosoftStoreClient microsoftStoreClient) + public GraphStoreAppUploader(ILogger logger, IFileManager fileManager, WinTuner.Proxy.Client.WinTunerProxyClient proxyClient) { #if NET8_0_OR_GREATER ArgumentNullException.ThrowIfNull(logger); ArgumentNullException.ThrowIfNull(fileManager); - ArgumentNullException.ThrowIfNull(microsoftStoreClient); + ArgumentNullException.ThrowIfNull(proxyClient); #endif this.logger = logger; this.fileManager = fileManager; - this.microsoftStoreClient = microsoftStoreClient; + this.proxyClient = proxyClient; } - public Task GetStoreIdForNameAsync(string searchstring, CancellationToken cancellationToken) + public async Task GetStoreIdForNameAsync(string searchstring, CancellationToken cancellationToken) { #if NET8_0_OR_GREATER ArgumentException.ThrowIfNullOrEmpty(searchstring); #endif - return microsoftStoreClient.GetPackageIdForFirstMatchAsync(searchstring, cancellationToken); + var results = await proxyClient.Store.Search.GetAsync(req => req.QueryParameters.SearchString = searchstring, cancellationToken); + return results?.FirstOrDefault()?.PackageIdentifier; } public async Task CreateStoreAppAsync(GraphServiceClient graphServiceClient, string packageId, CancellationToken cancellationToken) @@ -44,52 +39,60 @@ public GraphStoreAppUploader(ILogger logger, IFileManager ArgumentException.ThrowIfNullOrEmpty(packageId); ArgumentNullException.ThrowIfNull(cancellationToken); #endif - var catalog = await microsoftStoreClient.GetDisplayCatalogAsync(packageId!, cancellationToken); - ArgumentNullException.ThrowIfNull(catalog); - if (!(catalog.Products?.Count() > 0)) + var package = await proxyClient.Store.Package[packageId].GetAsync(cancellationToken: cancellationToken); + if (package is null) { - logger.LogError("No products found for {packageId}", packageId); + logger.LogError("No package found for {packageId}", packageId); return null; } - - var app = mapper.ToWinGetApp(catalog!); - - try + var app = new WinGetApp { - var imagePath = Path.GetTempFileName(); - var uriPart = catalog.Products.First()?.LocalizedProperties.FirstOrDefault()?.Images?.FirstOrDefault(i => i.Height == 300 && i.Width == 300)?.Uri; // && i.ImagePurpose.Equals("Tile", StringComparison.OrdinalIgnoreCase) - if (uriPart is null) + DisplayName = package.DisplayName, + PackageIdentifier = package.PackageIdentifier!, + InformationUrl = package.InformationUrl, + PrivacyInformationUrl = package.PrivacyInformationUrl, + Description = package.Description, + Developer = package.Publisher, + Publisher = package.Publisher, + Notes = $"Generated by WinTuner at {DateTimeOffset.UtcNow} [WinTuner|store|{package.PackageIdentifier}]", + InstallExperience = new WinGetAppInstallExperience { - logger.LogWarning("No image found for {packageId}", packageId); + RunAsAccount = package.Scope == "user" ? RunAsAccountType.User : RunAsAccountType.System } - else + }; + app.AdditionalData.Add("repositoryType", "microsoftstore"); + try + { + if (package.IconUrl is not null) { - var imageUrl = $"http:{uriPart}"; - await fileManager.DownloadFileAsync(imageUrl, imagePath, overrideFile: true, cancellationToken: cancellationToken); + var imagePath = Path.GetTempFileName(); + await fileManager.DownloadFileAsync(package.IconUrl, imagePath, overrideFile: true, cancellationToken: cancellationToken); app.LargeIcon = new MimeContent { Type = "image/png", Value = await fileManager.ReadAllBytesAsync(imagePath, cancellationToken) }; } - } catch (Exception ex) { logger.LogError(ex, "Error downloading image for {packageId}", packageId); } + return await uploadAppAsync(graphServiceClient, app, cancellationToken); + } - logger.LogInformation("Creating new WinGetApp (MsStore) for {packageId}", packageId); - + private async Task uploadAppAsync(GraphServiceClient graphServiceClient, WinGetApp winGetApp, CancellationToken cancellationToken) + { + logger.LogInformation("Creating new WinGetApp (MsStore) for {PackageIdentifier}", winGetApp.PackageIdentifier); try { - var createdApp = await graphServiceClient.DeviceAppManagement.MobileApps.PostAsync(app, cancellationToken); - logger.LogInformation("MsStore app {packageIdentifier} created in Intune {appId}", createdApp?.PackageIdentifier, createdApp?.Id); + var createdApp = await graphServiceClient.DeviceAppManagement.MobileApps.PostAsync(winGetApp, cancellationToken); + logger.LogInformation("MsStore app {PackageIdentifier} created in Intune {AppId}", createdApp?.PackageIdentifier, createdApp?.Id); return createdApp; } catch (ODataError ex) { - logger.LogError(ex, "Error publishing app {message}", ex.Error?.Message); + logger.LogError(ex, "Error publishing app {Message}", ex.Error?.Message); throw; } catch (Exception ex) diff --git a/src/WingetIntune/Internal/MsStore/Models/DisplayCatalog.cs b/src/WingetIntune/Internal/MsStore/Models/DisplayCatalog.cs deleted file mode 100644 index 60d421f..0000000 --- a/src/WingetIntune/Internal/MsStore/Models/DisplayCatalog.cs +++ /dev/null @@ -1,488 +0,0 @@ -namespace WingetIntune.Internal.MsStore.Models; - -public class DisplayCatalogResponse -{ - public Product[] Products { get; set; } -} - -public class Product -{ - public DateTime LastModifiedDate { get; set; } - public Localizedproperty[] LocalizedProperties { get; set; } - public Marketproperty[] MarketProperties { get; set; } - public string ProductASchema { get; set; } - public string ProductBSchema { get; set; } - public string ProductId { get; set; } - public AppProperties Properties { get; set; } - public Alternateid[] AlternateIds { get; set; } - public object DomainDataVersion { get; set; } - public string IngestionSource { get; set; } - public bool IsMicrosoftProduct { get; set; } - public string PreferredSkuId { get; set; } - public string ProductType { get; set; } - public Validationdata ValidationData { get; set; } - public object[] MerchandizingTags { get; set; } - public string PartD { get; set; } - public string ProductFamily { get; set; } - public string SchemaVersion { get; set; } - public string ProductKind { get; set; } - public Productpolicies ProductPolicies { get; set; } - public Displayskuavailability[] DisplaySkuAvailabilities { get; set; } -} - -public class AppProperties -{ - public AppAttribute[] Attributes { get; set; } - public bool CanInstallToSDCard { get; set; } - public string Category { get; set; } - public string SubCategory { get; set; } - public object Categories { get; set; } - public object Extensions { get; set; } - public bool IsAccessible { get; set; } - public bool IsLineOfBusinessApp { get; set; } - public bool IsPublishedToLegacyWindowsPhoneStore { get; set; } - public bool IsPublishedToLegacyWindowsStore { get; set; } - public bool IsSettingsApp { get; set; } - public string PackageFamilyName { get; set; } - public string PackageIdentityName { get; set; } - public string PublisherCertificateName { get; set; } - public string PublisherId { get; set; } - public object XboxLiveTier { get; set; } - public object XboxXPA { get; set; } - public object XboxCrossGenSetId { get; set; } - public object XboxConsoleGenOptimized { get; set; } - public object XboxConsoleGenCompatible { get; set; } - public bool XboxLiveGoldRequired { get; set; } - public XBOX XBOX { get; set; } - public Extendedclientmetadata ExtendedClientMetadata { get; set; } - public object OwnershipType { get; set; } - public string PdpBackgroundColor { get; set; } - public bool HasAddOns { get; set; } - public DateTime RevisionId { get; set; } -} - -public class XBOX -{ -} - -public class Extendedclientmetadata -{ -} - -public class AppAttribute -{ - public string Name { get; set; } - public object Minimum { get; set; } - public object Maximum { get; set; } - public object ApplicablePlatforms { get; set; } - public object Group { get; set; } -} - -public class Validationdata -{ - public bool PassedValidation { get; set; } - public string RevisionId { get; set; } - public string ValidationResultUri { get; set; } -} - -public class Productpolicies -{ -} - -public class Localizedproperty -{ - public string DeveloperName { get; set; } - public object DisplayPlatformProperties { get; set; } - public string PublisherName { get; set; } - public object PublisherAddress { get; set; } - public string PublisherWebsiteUri { get; set; } - public string SupportUri { get; set; } - public object SupportPhone { get; set; } - public object EligibilityProperties { get; set; } - public object[] Franchises { get; set; } - public Image[] Images { get; set; } - public object[] Videos { get; set; } - public string ProductDescription { get; set; } - public string ProductTitle { get; set; } - public string ShortTitle { get; set; } - public string SortTitle { get; set; } - public object FriendlyTitle { get; set; } - public string ShortDescription { get; set; } - public object[] SearchTitles { get; set; } - public string VoiceTitle { get; set; } - public object RenderGroupDetails { get; set; } - public object[] ProductDisplayRanks { get; set; } - public object InteractiveModelConfig { get; set; } - public bool Interactive3DEnabled { get; set; } - public string Language { get; set; } - public string[] Markets { get; set; } -} - -public class Image -{ - public string FileId { get; set; } - public object EISListingIdentifier { get; set; } - public string BackgroundColor { get; set; } - public string Caption { get; set; } - public int FileSizeInBytes { get; set; } - public string ForegroundColor { get; set; } - public int Height { get; set; } - public string ImagePositionInfo { get; set; } - public string ImagePurpose { get; set; } - public string UnscaledImageSHA256Hash { get; set; } - public string Uri { get; set; } - public int Width { get; set; } - - public override string ToString() - { - return $"{ImagePurpose} ({Width}x{Height})"; - } -} - -public class Marketproperty -{ - public DateTime OriginalReleaseDate { get; set; } - public string OriginalReleaseDateFriendlyName { get; set; } - public int MinimumUserAge { get; set; } - public Contentrating[] ContentRatings { get; set; } - public object[] RelatedProducts { get; set; } - public Usagedata[] UsageData { get; set; } - public object BundleConfig { get; set; } - public string[] Markets { get; set; } -} - -public class Contentrating -{ - public string RatingSystem { get; set; } - public string RatingId { get; set; } - public string[] RatingDescriptors { get; set; } - public object[] RatingDisclaimers { get; set; } - public string[] InteractiveElements { get; set; } -} - -public class Usagedata -{ - public string AggregateTimeSpan { get; set; } - public float AverageRating { get; set; } - public int PlayCount { get; set; } - public int RatingCount { get; set; } - public string RentalCount { get; set; } - public string TrialCount { get; set; } - public string PurchaseCount { get; set; } -} - -public class Alternateid -{ - public string IdType { get; set; } - public string Value { get; set; } -} - -public class Displayskuavailability -{ - public Sku Sku { get; set; } - public Availability[] Availabilities { get; set; } - public Historicalbestavailability[] HistoricalBestAvailabilities { get; set; } -} - -public class Sku -{ - public DateTime LastModifiedDate { get; set; } - public SkuLocalizedproperty[] LocalizedProperties { get; set; } - public SkuMarketproperty[] MarketProperties { get; set; } - public string ProductId { get; set; } - public SkuProperties Properties { get; set; } - public string SkuASchema { get; set; } - public string SkuBSchema { get; set; } - public string SkuId { get; set; } - public string SkuType { get; set; } - public object RecurrencePolicy { get; set; } - public object SubscriptionPolicyId { get; set; } -} - -public class SkuProperties -{ - public object EarlyAdopterEnrollmentUrl { get; set; } - public Fulfillmentdata FulfillmentData { get; set; } - public string FulfillmentType { get; set; } - public object FulfillmentPluginId { get; set; } - public bool HasThirdPartyIAPs { get; set; } - public DateTime LastUpdateDate { get; set; } - public Hardwareproperties HardwareProperties { get; set; } - public object[] HardwareRequirements { get; set; } - public object[] HardwareWarningList { get; set; } - public string InstallationTerms { get; set; } - public Package[] Packages { get; set; } - public string VersionString { get; set; } - public object[] VisibleToB2BServiceIds { get; set; } - public bool XboxXPA { get; set; } - public object[] BundledSkus { get; set; } - public bool IsRepurchasable { get; set; } - public int SkuDisplayRank { get; set; } - public object DisplayPhysicalStoreInventory { get; set; } - public object[] AdditionalIdentifiers { get; set; } - public bool IsTrial { get; set; } - public bool IsPreOrder { get; set; } - public bool IsBundle { get; set; } -} - -public class Fulfillmentdata -{ - public string ProductId { get; set; } - public string WuBundleId { get; set; } - public string WuCategoryId { get; set; } - public string PackageFamilyName { get; set; } - public string SkuId { get; set; } - public object Content { get; set; } - public object PackageFeatures { get; set; } -} - -public class Hardwareproperties -{ - public object[] MinimumHardware { get; set; } - public object[] RecommendedHardware { get; set; } - public string MinimumProcessor { get; set; } - public string RecommendedProcessor { get; set; } - public string MinimumGraphics { get; set; } - public string RecommendedGraphics { get; set; } -} - -public class Package -{ - public Application[] Applications { get; set; } - public string[] Architectures { get; set; } - public string[] Capabilities { get; set; } - public object[] DeviceCapabilities { get; set; } - public object[] ExperienceIds { get; set; } - public object[] FrameworkDependencies { get; set; } - public object[] HardwareDependencies { get; set; } - public object[] HardwareRequirements { get; set; } - public string Hash { get; set; } - public string HashAlgorithm { get; set; } - public bool IsStreamingApp { get; set; } - public string[] Languages { get; set; } - public int MaxDownloadSizeInBytes { get; set; } - public int MaxInstallSizeInBytes { get; set; } - public string PackageFormat { get; set; } - public string PackageFamilyName { get; set; } - public object MainPackageFamilyNameForDlc { get; set; } - public string PackageFullName { get; set; } - public string PackageId { get; set; } - public string ContentId { get; set; } - public object KeyId { get; set; } - public int PackageRank { get; set; } - public string PackageUri { get; set; } - public Platformdependency[] PlatformDependencies { get; set; } - public string PlatformDependencyXmlBlob { get; set; } - public string ResourceId { get; set; } - public string Version { get; set; } - public object PackageDownloadUris { get; set; } - public object[] DriverDependencies { get; set; } - public PackageFulfillmentdata FulfillmentData { get; set; } -} - -public class PackageFulfillmentdata -{ - public string ProductId { get; set; } - public string WuBundleId { get; set; } - public string WuCategoryId { get; set; } - public string PackageFamilyName { get; set; } - public string SkuId { get; set; } - public object Content { get; set; } - public object PackageFeatures { get; set; } -} - -public class Application -{ - public string ApplicationId { get; set; } - public int DeclarationOrder { get; set; } - public string[] Extensions { get; set; } -} - -public class Platformdependency -{ - public long MaxTested { get; set; } - public long MinVersion { get; set; } - public string PlatformName { get; set; } -} - -public class SkuLocalizedproperty -{ - public object[] Contributors { get; set; } - public object[] Features { get; set; } - public string MinimumNotes { get; set; } - public string RecommendedNotes { get; set; } - public string ReleaseNotes { get; set; } - public object DisplayPlatformProperties { get; set; } - public string SkuDescription { get; set; } - public string SkuTitle { get; set; } - public string SkuButtonTitle { get; set; } - public object DeliveryDateOverlay { get; set; } - public object[] SkuDisplayRank { get; set; } - public object TextResources { get; set; } - public object[] Images { get; set; } - public Legaltext LegalText { get; set; } - public string Language { get; set; } - public string[] Markets { get; set; } -} - -public class Legaltext -{ - public string AdditionalLicenseTerms { get; set; } - public string Copyright { get; set; } - public string CopyrightUri { get; set; } - public string PrivacyPolicy { get; set; } - public string PrivacyPolicyUri { get; set; } - public string Tou { get; set; } - public string TouUri { get; set; } -} - -public class SkuMarketproperty -{ - public DateTime FirstAvailableDate { get; set; } - public string[] SupportedLanguages { get; set; } - public object PackageIds { get; set; } - public object PIFilter { get; set; } - public string[] Markets { get; set; } -} - -public class Availability -{ - public string[] Actions { get; set; } - public string AvailabilityASchema { get; set; } - public string AvailabilityBSchema { get; set; } - public string AvailabilityId { get; set; } - public Conditions Conditions { get; set; } - public DateTime LastModifiedDate { get; set; } - public string[] Markets { get; set; } - public Ordermanagementdata OrderManagementData { get; set; } - public AvailabilityProperties Properties { get; set; } - public string SkuId { get; set; } - public int DisplayRank { get; set; } - public bool RemediationRequired { get; set; } - public Licensingdata LicensingData { get; set; } -} - -public class Conditions -{ - public Clientconditions ClientConditions { get; set; } - public DateTime EndDate { get; set; } - public string[] ResourceSetIds { get; set; } - public DateTime StartDate { get; set; } -} - -public class Clientconditions -{ - public Allowedplatform[] AllowedPlatforms { get; set; } -} - -public class Allowedplatform -{ - public int MaxVersion { get; set; } - public int MinVersion { get; set; } - public string PlatformName { get; set; } -} - -public class Ordermanagementdata -{ - public object[] GrantedEntitlementKeys { get; set; } - public Pifilter PIFilter { get; set; } - public Price Price { get; set; } -} - -public class Pifilter -{ - public object[] ExclusionProperties { get; set; } - public object[] InclusionProperties { get; set; } -} - -public class Price -{ - public string CurrencyCode { get; set; } - public bool IsPIRequired { get; set; } - public double ListPrice { get; set; } - public double MSRP { get; set; } - public string TaxType { get; set; } - public string WholesaleCurrencyCode { get; set; } -} - -public class AvailabilityProperties -{ - public DateTime OriginalReleaseDate { get; set; } -} - -public class Licensingdata -{ - public Satisfyingentitlementkey[] SatisfyingEntitlementKeys { get; set; } -} - -public class Satisfyingentitlementkey -{ - public string[] EntitlementKeys { get; set; } - public string[] LicensingKeyIds { get; set; } -} - -public class Historicalbestavailability -{ - public string[] Actions { get; set; } - public string AvailabilityASchema { get; set; } - public string AvailabilityBSchema { get; set; } - public string AvailabilityId { get; set; } - public HistoricalbestavailabilityConditions Conditions { get; set; } - public DateTime LastModifiedDate { get; set; } - public string[] Markets { get; set; } - public Ordermanagementdata1 OrderManagementData { get; set; } - public Properties3 Properties { get; set; } - public string SkuId { get; set; } - public int DisplayRank { get; set; } - public string ProductASchema { get; set; } -} - -public class HistoricalbestavailabilityConditions -{ - public Clientconditions1 ClientConditions { get; set; } - public DateTime EndDate { get; set; } - public string[] ResourceSetIds { get; set; } - public DateTime StartDate { get; set; } - public string[] EligibilityPredicateIds { get; set; } - public int SupportedCatalogVersion { get; set; } -} - -public class Clientconditions1 -{ - public Allowedplatform1[] AllowedPlatforms { get; set; } -} - -public class Allowedplatform1 -{ - public int MaxVersion { get; set; } - public int MinVersion { get; set; } - public string PlatformName { get; set; } -} - -public class Ordermanagementdata1 -{ - public object[] GrantedEntitlementKeys { get; set; } - public Pifilter1 PIFilter { get; set; } - public Price1 Price { get; set; } -} - -public class Pifilter1 -{ - public object[] ExclusionProperties { get; set; } - public object[] InclusionProperties { get; set; } -} - -public class Price1 -{ - public string CurrencyCode { get; set; } - public bool IsPIRequired { get; set; } - public double ListPrice { get; set; } - public double MSRP { get; set; } - public string TaxType { get; set; } - public string WholesaleCurrencyCode { get; set; } -} - -public class Properties3 -{ - public DateTime OriginalReleaseDate { get; set; } -} diff --git a/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreManifest.cs b/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreManifest.cs deleted file mode 100644 index 727f70b..0000000 --- a/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreManifest.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace WingetIntune.Internal.MsStore.Models; - -#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. -public class MicrosoftStoreManifest -{ - - public string type { get; set; } - public MicrosoftStoreManifestData Data { get; set; } -} - -public class MicrosoftStoreManifestData -{ - public string type { get; set; } - public string PackageIdentifier { get; set; } - public MicrosoftStoreManifestVersion[] Versions { get; set; } -} - -public class MicrosoftStoreManifestVersion -{ - public string type { get; set; } - public string PackageVersion { get; set; } - public MicrosoftStoreManifestDefaultlocale DefaultLocale { get; set; } - public MicrosoftStoreManifestInstaller[] Installers { get; set; } -} - -public class MicrosoftStoreManifestDefaultlocale -{ - public string type { get; set; } - public string PackageLocale { get; set; } - public string Publisher { get; set; } - public string PublisherUrl { get; set; } - public string PrivacyUrl { get; set; } - public string PublisherSupportUrl { get; set; } - public string PackageName { get; set; } - public string License { get; set; } - public string Copyright { get; set; } - public string ShortDescription { get; set; } - public string Description { get; set; } - public object[] Tags { get; set; } - public MicrosoftStoreManifestAgreement[] Agreements { get; set; } -} - -public class MicrosoftStoreManifestAgreement -{ - public string type { get; set; } - public string AgreementLabel { get; set; } - public string Agreement { get; set; } - public string AgreementUrl { get; set; } -} - -public class MicrosoftStoreManifestInstaller -{ - public string type { get; set; } - public string MSStoreProductIdentifier { get; set; } - public string Architecture { get; set; } - public string InstallerType { get; set; } - public MicrosoftStoreManifestMarkets Markets { get; set; } - public string PackageFamilyName { get; set; } - public string Scope { get; set; } -} - -public class MicrosoftStoreManifestMarkets -{ - public string type { get; set; } - public string[] AllowedMarkets { get; set; } -} - -#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. diff --git a/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreSearch.cs b/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreSearch.cs deleted file mode 100644 index bcb7c40..0000000 --- a/src/WingetIntune/Internal/MsStore/Models/MicrosoftStoreSearch.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace WingetIntune.Internal.MsStore.Models; -public class MicrosoftStoreSearchRequest -{ - public MicrosoftStoreSearchQuery Query { get; set; } -} - -public class MicrosoftStoreSearchQuery -{ - public string KeyWord { get; set; } - public string MatchType { get; set; } = "Substring"; -} - -#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. -public class MicrosoftStoreSearchResult -{ - public string type { get; set; } - public MicrosoftStoreSearchData[] Data { get; set; } - - public override string ToString() - { - return $"[{nameof(MicrosoftStoreSearchResult)}] {Data.Length} results"; - } -} - -public class MicrosoftStoreSearchData -{ - public string type { get; set; } - public string PackageIdentifier { get; set; } - public string PackageName { get; set; } - public string Publisher { get; set; } - public MicrosoftStoreManifestVersion[] Versions { get; set; } -} - -public class MicrosoftStoreSearchVersion -{ - public string type { get; set; } - public string PackageVersion { get; set; } - public string[] PackageFamilyNames { get; set; } -} - -#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. diff --git a/src/WingetIntune/Internal/MsStore/StoreClient.cs b/src/WingetIntune/Internal/MsStore/StoreClient.cs deleted file mode 100644 index d648875..0000000 --- a/src/WingetIntune/Internal/MsStore/StoreClient.cs +++ /dev/null @@ -1,79 +0,0 @@ -using Microsoft.Extensions.Logging; -using System.Net.Http.Headers; -using System.Net.Http.Json; -using System.Text.Json; -using WingetIntune.Internal.MsStore.Models; - -namespace WingetIntune.Internal.MsStore; - -/* - * This code would not exists without the hard work of Sander Rozemuller, Thank you! - * https://www.rozemuller.com/add-microsoft-store-app-with-icon-into-intune-automated/ - */ - -public partial class MicrosoftStoreClient -{ - private readonly HttpClient _httpClient; - private readonly ILogger _logger; - - public MicrosoftStoreClient(HttpClient httpClient, ILogger logger) - { - _httpClient = httpClient; - _logger = logger; - } - - public async Task GetPackageIdForFirstMatchAsync(string searchString, CancellationToken cancellationToken) - { - LogSearchRequest(searchString); - var result = await Search(searchString, cancellationToken); - return result?.Data.FirstOrDefault()?.PackageIdentifier; - } - - public async Task GetDisplayCatalogAsync(string packageId, CancellationToken cancellation) - { - //LogGetManifest(packageId); - var url = $"https://displaycatalog.mp.microsoft.com/v7.0/products?bigIds={packageId}&market=US&languages=en-us"; - var response = await _httpClient.GetAsync(url, cancellation); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadFromJsonAsync(cancellationToken: cancellation); - } - - public async Task GetManifestAsync(string packageId, CancellationToken cancellation) - { - LogGetManifest(packageId); - var url = $"https://storeedgefd.dsx.mp.microsoft.com/v9.0/packageManifests/{packageId}"; - var response = await _httpClient.GetAsync(url, cancellation); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadFromJsonAsync(cancellationToken: cancellation); - } - - public async Task Search(string searchString, CancellationToken cancellationToken) - { - var url = "https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch"; - var body = new MicrosoftStoreSearchRequest - { - Query = new MicrosoftStoreSearchQuery - { - KeyWord = searchString - } - }; - - var data = JsonSerializer.SerializeToUtf8Bytes(body); - var request = new HttpRequestMessage(HttpMethod.Post, url) - { - Content = new ByteArrayContent(data) - }; - request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); - - var response = await _httpClient.SendAsync(request, cancellationToken); - response.EnsureSuccessStatusCode(); - return await response.Content.ReadFromJsonAsync(cancellationToken: cancellationToken); - } - - [LoggerMessage(EventId = 1, Level = LogLevel.Information, Message = "Searching for {searchString} in Microsoft Store")] - private partial void LogSearchRequest(string searchString); - - [LoggerMessage(EventId = 2, Level = LogLevel.Information, Message = "Getting manifest for {packageId} from Microsoft Store")] - private partial void LogGetManifest(string packageId); - -} diff --git a/src/WingetIntune/Internal/MsStore/store-requests.http b/src/WingetIntune/Internal/MsStore/store-requests.http deleted file mode 100644 index 2c7e01b..0000000 --- a/src/WingetIntune/Internal/MsStore/store-requests.http +++ /dev/null @@ -1,21 +0,0 @@ -# For more info on HTTP files go to https://aka.ms/vs/httpfile - -POST https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch HTTP/1.1 -Content-Type: application/json - -{ - "Query": { - "KeyWord": "FireFox", - "MatchType": "Substring" - } -} - -### - -GET https://displaycatalog.mp.microsoft.com/v7.0/products?bigIds=9NZVDKPMR9RD&market=US&languages=en-us - - -### - -GET https://storeedgefd.dsx.mp.microsoft.com/v9.0/packageManifests/9NZVDKPMR9RD -Accept: application/json diff --git a/src/WingetIntune/Intune/IntuneManager.cs b/src/WingetIntune/Intune/IntuneManager.cs index 97b6799..4315522 100644 --- a/src/WingetIntune/Intune/IntuneManager.cs +++ b/src/WingetIntune/Intune/IntuneManager.cs @@ -27,12 +27,11 @@ public partial class IntuneManager private readonly Mapper mapper = new Mapper(); private readonly IAzureFileUploader azureFileUploader; private readonly IIntunePackager intunePackager; - private readonly Internal.MsStore.MicrosoftStoreClient microsoftStoreClient; private readonly PublicClientAuth publicClient; private readonly GraphAppUploader graphAppUploader; private readonly GraphStoreAppUploader graphStoreAppUploader; - public IntuneManager(ILoggerFactory? loggerFactory, IFileManager fileManager, IProcessManager processManager, HttpClient httpClient, IAzureFileUploader azureFileUploader, Internal.MsStore.MicrosoftStoreClient microsoftStoreClient, PublicClientAuth publicClient, IIntunePackager intunePackager, IWingetRepository wingetRepository, GraphAppUploader graphAppUploader, GraphStoreAppUploader graphStoreAppUploader) + public IntuneManager(ILoggerFactory? loggerFactory, IFileManager fileManager, IProcessManager processManager, HttpClient httpClient, IAzureFileUploader azureFileUploader, PublicClientAuth publicClient, IIntunePackager intunePackager, IWingetRepository wingetRepository, GraphAppUploader graphAppUploader, GraphStoreAppUploader graphStoreAppUploader) { this.loggerFactory = loggerFactory ?? new NullLoggerFactory(); this.logger = this.loggerFactory.CreateLogger(); @@ -40,7 +39,6 @@ public IntuneManager(ILoggerFactory? loggerFactory, IFileManager fileManager, IP this.processManager = processManager; this.httpClient = httpClient; this.azureFileUploader = azureFileUploader; - this.microsoftStoreClient = microsoftStoreClient; this.publicClient = publicClient; this.intunePackager = intunePackager; this.wingetRepository = wingetRepository; @@ -499,15 +497,7 @@ private void LoadMsiDetails(string installerPath, ref PackageInfo packageInfo) private void ComputeInstallerDetails(ref PackageInfo package, PackageOptions packageOptions) { - var installer = package.GetBestFit(packageOptions.Architecture, packageOptions.InstallerContext, packageOptions.Locale) - ?? package.GetBestFit(Architecture.Neutral, InstallerContext.Unknown, packageOptions.Locale) - ?? package.GetBestFit(Architecture.Neutral, packageOptions.InstallerContext, packageOptions.Locale) - ?? package.GetBestFit(packageOptions.Architecture, InstallerContext.Unknown, packageOptions.Locale); - if (installer == null && packageOptions.Architecture == Architecture.X64) - { - installer = package.GetBestFit(Architecture.X86, packageOptions.InstallerContext) - ?? package.GetBestFit(Architecture.X86, InstallerContext.Unknown); - } + var installer = package.GetBestInstaller(packageOptions); if (installer is null) { throw new ArgumentException($"No installer found for {package.PackageIdentifier} {package.Version} {packageOptions.Architecture}"); diff --git a/src/WingetIntune/Models/Mapper.cs b/src/WingetIntune/Models/Mapper.cs index e2f52c8..12e385f 100644 --- a/src/WingetIntune/Models/Mapper.cs +++ b/src/WingetIntune/Models/Mapper.cs @@ -1,7 +1,6 @@ using Microsoft.Graph.Beta.Models; using Riok.Mapperly.Abstractions; using System.Text.RegularExpressions; -using WingetIntune.Internal.MsStore.Models; using WingetIntune.Intune; namespace WingetIntune.Models; @@ -107,50 +106,6 @@ public Win32LobApp ToWin32LobApp(PackageInfo packageInfo) _ => WindowsArchitecture.None }; - public WinGetApp ToWinGetApp(MicrosoftStoreManifest storeManifest) - { - var locale = storeManifest.Data.Versions.LastOrDefault()?.DefaultLocale!; - var app = _ToWinGetApp(locale); - app.DisplayName = locale.PackageName; - app.PackageIdentifier = storeManifest.Data.PackageIdentifier; - app.InformationUrl = locale.PublisherSupportUrl?.ValidUriOrNull(); - app.PrivacyInformationUrl = locale.PrivacyUrl?.ValidUriOrNull(); - app.AdditionalData.Add("repositoryType", "microsoftstore"); - app.InstallExperience = new WinGetAppInstallExperience() - { - RunAsAccount = storeManifest.Data.Versions?.LastOrDefault()?.Installers?.LastOrDefault()?.Scope == "user" ? RunAsAccountType.User : RunAsAccountType.System, - }; - app.Developer = app.Publisher; - app.Description ??= locale.ShortDescription; - app.Notes = $"Generated by WinTuner at {DateTimeOffset.UtcNow} [WinTuner|store|{storeManifest.Data.PackageIdentifier}]"; - return app; - } - - public WinGetApp ToWinGetApp(DisplayCatalogResponse displayCatalogResponse) - { - var product = displayCatalogResponse.Products.FirstOrDefault(); - var displaySku = product?.DisplaySkuAvailabilities?.FirstOrDefault()?.Sku.LocalizedProperties.FirstOrDefault(); - var productProperties = product?.LocalizedProperties?.FirstOrDefault(); - var app = new WinGetApp - { - DisplayName = displaySku!.SkuTitle, - PackageIdentifier = product!.ProductId, - InformationUrl = productProperties?.SupportUri, - PrivacyInformationUrl = productProperties?.PublisherWebsiteUri, - Description = productProperties!.ProductDescription - }; - app.AdditionalData.Add("repositoryType", "microsoftstore"); - app.InstallExperience = new WinGetAppInstallExperience() - { - RunAsAccount = RunAsAccountType.System, - }; - app.Developer = app.Publisher = productProperties.PublisherName; - app.Notes = $"Generated by WinTuner at {DateTimeOffset.UtcNow} [WinTuner|store|{product!.ProductId}]"; - return app; - } - - private partial WinGetApp _ToWinGetApp(MicrosoftStoreManifestDefaultlocale locale); - internal partial WingetIntune.Graph.FileEncryptionInfo ToFileEncryptionInfo(ApplicationInfoEncryptionInfo packageInfo); //internal partial Microsoft.Graph.Beta.Models.FileEncryptionInfo ToGraphEncryptionInfo(ApplicationInfoEncryptionInfo packageInfo); diff --git a/src/WingetIntune/Models/PackageInfo.cs b/src/WingetIntune/Models/PackageInfo.cs index 37dce87..bb5912b 100644 --- a/src/WingetIntune/Models/PackageInfo.cs +++ b/src/WingetIntune/Models/PackageInfo.cs @@ -43,6 +43,22 @@ public class PackageInfo ; } + internal WingetInstaller? GetBestInstaller(PackageOptions packageOptions) + { + if (Installers is null) { return null; } + var installer = GetBestFit(packageOptions.Architecture, packageOptions.InstallerContext, packageOptions.Locale) + ?? GetBestFit(Models.Architecture.Neutral, Models.InstallerContext.Unknown, packageOptions.Locale) + ?? GetBestFit(Models.Architecture.Neutral, packageOptions.InstallerContext, packageOptions.Locale) + ?? GetBestFit(packageOptions.Architecture, Models.InstallerContext.Unknown, packageOptions.Locale); + // if the installer is still null and we are not explicitly looking for arm64 or x64, try x86 + if (installer == null && packageOptions.Architecture != WingetIntune.Models.Architecture.X64 && packageOptions.Architecture != Models.Architecture.Arm64) + { + installer = GetBestFit(Models.Architecture.X86, packageOptions.InstallerContext) + ?? GetBestFit(Models.Architecture.X86, Models.InstallerContext.Unknown); + } + return installer; + } + internal bool InstallersLoaded => Installers?.Count > 0 == true; public static PackageInfo Parse(string wingetOutput) diff --git a/src/WingetIntune/WingetIntune.csproj b/src/WingetIntune/WingetIntune.csproj index 67bb272..8079477 100644 --- a/src/WingetIntune/WingetIntune.csproj +++ b/src/WingetIntune/WingetIntune.csproj @@ -39,5 +39,6 @@ + diff --git a/src/WingetIntune/WingetServiceCollectionExtension.cs b/src/WingetIntune/WingetServiceCollectionExtension.cs index cbb5696..e5fc982 100644 --- a/src/WingetIntune/WingetServiceCollectionExtension.cs +++ b/src/WingetIntune/WingetServiceCollectionExtension.cs @@ -1,16 +1,16 @@ using System.Runtime.CompilerServices; using Microsoft.Extensions.DependencyInjection; using Microsoft.Kiota.Http.HttpClientLibrary; -using Microsoft.Kiota.Http.HttpClientLibrary.Middleware; -using Microsoft.Kiota.Http.HttpClientLibrary.Middleware.Options; using WingetIntune.Interfaces; using WingetIntune.Intune; +using WinTuner.Proxy.Client; [assembly: InternalsVisibleTo("WingetIntune.Tests")] namespace WingetIntune; public static class WingetServiceCollectionExtension { - public static IServiceCollection AddWingetServices(this IServiceCollection services) + public const string DefaultProxyCode = "*REPLACED_AT_BUILD*"; + public static IServiceCollection AddWingetServices(this IServiceCollection services, string? proxyCode = null) { services.ConfigureHttpClientDefaults(config => { @@ -53,30 +53,52 @@ public static IServiceCollection AddWingetServices(this IServiceCollection servi services.AddTransient(); services.AddTransient(); services.AddSingleton(); - services.AddTransient(); services.AddSingleton(); + services.AddWinTunerProxyClient(config => + { + var codeFromEnv = Environment.GetEnvironmentVariable("WINTUNER_PROXY_CODE"); + if (!string.IsNullOrEmpty(codeFromEnv)) + { + config.Code = codeFromEnv; + } + else if (!string.IsNullOrEmpty(proxyCode) && proxyCode != DefaultProxyCode) + { + config.Code = proxyCode; + } + var proxyUrl = Environment.GetEnvironmentVariable("WINTUNER_PROXY_URL"); + if (!string.IsNullOrEmpty(proxyUrl)) + { + config.BaseAddress = new Uri(proxyUrl); + } + }); + return services; } private static IServiceCollection AddKiotaHandlers(this IServiceCollection services) { - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + // Dynamically load the Kiota handlers from the Client Factory + var kiotaHandlers = KiotaClientFactory.GetDefaultHandlerTypes(); + // And register them in the DI container + foreach (var handler in kiotaHandlers) + { + services.AddTransient(handler); + } + return services; } private static IHttpClientBuilder AttachKiotaHandlers(this IHttpClientBuilder builder) { - //builder.AddHttpMessageHandler>(); - //builder.AddHttpMessageHandler(); - builder.AddHttpMessageHandler(); - builder.AddHttpMessageHandler(); - builder.AddHttpMessageHandler(); - builder.AddHttpMessageHandler(); + // Dynamically load the Kiota handlers from the Client Factory + var kiotaHandlers = KiotaClientFactory.GetDefaultHandlerTypes(); + // And attach them to the http client builder + foreach (var handler in kiotaHandlers) + { + builder.AddHttpMessageHandler((sp) => (DelegatingHandler)sp.GetRequiredService(handler)); + } + return builder; } } diff --git a/src/WingetIntune/packages.lock.json b/src/WingetIntune/packages.lock.json index ec7319f..e9239f7 100644 --- a/src/WingetIntune/packages.lock.json +++ b/src/WingetIntune/packages.lock.json @@ -235,11 +235,10 @@ }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "7ZxIrX23NZXqmYZyUCmjtDYnY6Wc9pkKWsItIxxSQ5Obea4xqX0AGRInxP8tsV5Z5t67RkVcM1O2zATRDJh1fA==", + "resolved": "1.9.9", + "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", "dependencies": { - "Std.UriTemplate": "0.0.46", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)" + "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { @@ -254,12 +253,10 @@ }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.3.3", - "contentHash": "X+rkl///PgQawQyQGNtZHoY2rhcOc6BngOwK75098HUViJr1IuLc06k5Rq2eRPN0rdngWWyHwM5wC/96V04geQ==", + "resolved": "1.9.9", + "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Form": { @@ -272,11 +269,10 @@ }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "n421mk9agwBeHhAkeQIwRc3bjRE4oEPM1/CTxuiUZkd8ni4PN0Tabp3PPCjsuNmqcZXLleUh2nG/JBCoRizdzA==", + "resolved": "1.9.9", + "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Multipart": { @@ -315,8 +311,8 @@ }, "Std.UriTemplate": { "type": "Transitive", - "resolved": "0.0.46", - "contentHash": "/cCCMsB3i+MVt5LTbl236dnFd/BE4dKzzzC1teGTpAHzwPTiLIuD5hioGgtPuli/enAj8Dhmt/e9JlVUIITIgQ==" + "resolved": "1.0.3", + "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, "System.Collections": { "type": "Transitive", @@ -469,20 +465,13 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" }, "System.Threading.Tasks": { "type": "Transitive", @@ -510,6 +499,15 @@ "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", "YamlDotNet": "[15.1.4, )" } + }, + "wintuner.proxy.client": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Kiota.Abstractions": "[1.9.9, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + } } }, "net8.0": { @@ -793,11 +791,10 @@ }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "7ZxIrX23NZXqmYZyUCmjtDYnY6Wc9pkKWsItIxxSQ5Obea4xqX0AGRInxP8tsV5Z5t67RkVcM1O2zATRDJh1fA==", + "resolved": "1.9.9", + "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", "dependencies": { - "Std.UriTemplate": "0.0.46", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)" + "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { @@ -812,12 +809,10 @@ }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.3.3", - "contentHash": "X+rkl///PgQawQyQGNtZHoY2rhcOc6BngOwK75098HUViJr1IuLc06k5Rq2eRPN0rdngWWyHwM5wC/96V04geQ==", + "resolved": "1.9.9", + "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Form": { @@ -830,11 +825,10 @@ }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "n421mk9agwBeHhAkeQIwRc3bjRE4oEPM1/CTxuiUZkd8ni4PN0Tabp3PPCjsuNmqcZXLleUh2nG/JBCoRizdzA==", + "resolved": "1.9.9", + "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Multipart": { @@ -873,8 +867,8 @@ }, "Std.UriTemplate": { "type": "Transitive", - "resolved": "0.0.46", - "contentHash": "/cCCMsB3i+MVt5LTbl236dnFd/BE4dKzzzC1teGTpAHzwPTiLIuD5hioGgtPuli/enAj8Dhmt/e9JlVUIITIgQ==" + "resolved": "1.0.3", + "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, "System.Collections": { "type": "Transitive", @@ -1024,20 +1018,13 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" }, "System.Threading.Tasks": { "type": "Transitive", @@ -1065,6 +1052,15 @@ "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", "YamlDotNet": "[15.1.4, )" } + }, + "wintuner.proxy.client": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Kiota.Abstractions": "[1.9.9, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + } } } } diff --git a/tests/WingetIntune.Tests/Graph/GraphStoreAppUploaderTests.cs b/tests/WingetIntune.Tests/Graph/GraphStoreAppUploaderTests.cs index a486aed..85730c6 100644 --- a/tests/WingetIntune.Tests/Graph/GraphStoreAppUploaderTests.cs +++ b/tests/WingetIntune.Tests/Graph/GraphStoreAppUploaderTests.cs @@ -1,8 +1,10 @@ using Microsoft.Extensions.Logging; using Microsoft.Graph.Beta; +using Microsoft.Kiota.Abstractions.Authentication; +using Microsoft.Kiota.Http.HttpClientLibrary; using System.Text; using WingetIntune.Graph; -using WingetIntune.Internal.MsStore; +using WinTuner.Proxy.Client; namespace WingetIntune.Tests.Graph; @@ -13,14 +15,27 @@ public class GraphStoreAppUploaderTests public async Task CreateStoreAppAsync_WithValidPackageId_CreatesAppSuccessfully() { const string packageId = "9NZVDKPMR9RD"; - const string manifestData = @"{""Products"":[{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""DeveloperName"":"""",""DisplayPlatformProperties"":null,""PublisherName"":""Mozilla"",""PublisherAddress"":null,""PublisherWebsiteUri"":""https://www.mozilla.org/firefox/"",""SupportUri"":""https://support.mozilla.org/products/firefox"",""SupportPhone"":null,""EligibilityProperties"":null,""Franchises"":[],""Images"":[{""FileId"":""3071430996971663174"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":14069,""ForegroundColor"":"""",""Height"":100,""ImagePositionInfo"":"""",""ImagePurpose"":""Logo"",""UnscaledImageSHA256Hash"":""NmfuVtG1XGBx/p8HUht9J+giOGcMN5oIea7M4xjN/H8="",""Uri"":""//store-images.s-microsoft.com/image/apps.26422.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.37a70641-3de3-41b1-9c94-3cb0cfc663c2"",""Width"":100},{""FileId"":""3004232197050559163"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":63556,""ForegroundColor"":"""",""Height"":300,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""S5CO1XDVz6JpQlsSlJWWEN45hRkKGDwyapmRK6A66qA="",""Uri"":""//store-images.s-microsoft.com/image/apps.36939.14473293538384797.0ec149d2-d2b5-48a8-afd4-66986d387ec9.820a68fb-12dd-45a1-9a5a-1f141fc93f29"",""Width"":300},{""FileId"":""3008762446945936351"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":7710,""ForegroundColor"":"""",""Height"":88,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""9z/FtCO6NlcynHvQQ6gvOoXTw/h8ZUzdrOxMg+QMt2Q="",""Uri"":""//store-images.s-microsoft.com/image/apps.16375.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.a6fb32ca-2223-41dc-8d73-8395066b1c4f"",""Width"":88},{""FileId"":""3052106644741011285"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":187605,""ForegroundColor"":"""",""Height"":620,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""6gpjyrwSRgQ9Fa4NbghXdgJsrO/cs7vxFM+Y/mkBCDg="",""Uri"":""//store-images.s-microsoft.com/image/apps.2794.14473293538384797.0ec149d2-d2b5-48a8-afd4-66986d387ec9.5a7e12ea-3baa-41de-ae7c-e58c7d22b644"",""Width"":620},{""FileId"":""3031096784199183752"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":8923,""ForegroundColor"":"""",""Height"":142,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""dhSnfnKPaSBBYSgcsMpkSPeuawH/9ZSKTZE3LW+hpNM="",""Uri"":""//store-images.s-microsoft.com/image/apps.5238.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.13c8d648-665d-4185-8b32-beb922c3a9d1"",""Width"":142},{""FileId"":""3028587524167049996"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":17159,""ForegroundColor"":"""",""Height"":300,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""AjdCKOV39U/zZ91jWgO3Uc0gJy8DZ4tNs46DxTrPoPs="",""Uri"":""//store-images.s-microsoft.com/image/apps.14082.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.abebba2b-9232-4dc4-a59c-0ded036614e4"",""Width"":620},{""FileId"":""3000180573878009204"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":2219458,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/0"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""We95BmfhVSMei0EwA/W2IN8vfUIrIE1KxMRNl/bNpu0="",""Uri"":""//store-images.s-microsoft.com/image/apps.61273.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.836cb591-5b2e-480c-abe0-fbef3445148c"",""Width"":3840},{""FileId"":""3001975626805331357"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":1142645,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/1"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""RxzoePoLqML4h7d/kM4yqb0vbQQRd+mK+uOyI5S0814="",""Uri"":""//store-images.s-microsoft.com/image/apps.7239.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.2836ec17-3608-4c59-955b-e33a4ddbe09a"",""Width"":3840},{""FileId"":""3051311566860831267"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":1435423,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/2"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""sf+mRDniEBQEybyQg3H2FJ+YDSdRD79bK2ZjQARm9Tc="",""Uri"":""//store-images.s-microsoft.com/image/apps.65457.14473293538384797.c7c6f980-349e-4aec-8b21-c9a6aba30011.325858ad-e348-4660-95b8-d2f66200e3fc"",""Width"":3840},{""FileId"":""3048171808590640430"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":2744619,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/3"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""NeoziSi4gk+vLi5eIcXPS03Cq1hY5u8xGMAohxBXA54="",""Uri"":""//store-images.s-microsoft.com/image/apps.59957.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.7cf8905f-6469-422f-8aed-c9bc151a97c4"",""Width"":3840},{""FileId"":""3008914828876618251"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":881119,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/4"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""Xt+ESkKx6rAGAqMWPrfv+myQvniyCYFJnWFinDlk6g8="",""Uri"":""//store-images.s-microsoft.com/image/apps.57182.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.b1631027-7eff-4a82-b06f-956df2b0f6f8"",""Width"":3840}],""Videos"":[],""ProductDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, youre choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser thats backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. Theyre like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance speed, design, utility, ease of use, and a steadfast commitment to your privacy no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when youre outside of Facebook yes, theyre actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe you know, the good stuff on the internet but just dont have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, theres an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""ProductTitle"":""Mozilla Firefox"",""ShortTitle"":""Firefox"",""SortTitle"":"""",""FriendlyTitle"":null,""ShortDescription"":"""",""SearchTitles"":[],""VoiceTitle"":"""",""RenderGroupDetails"":null,""ProductDisplayRanks"":[],""InteractiveModelConfig"":null,""Interactive3DEnabled"":false,""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z"",""OriginalReleaseDateFriendlyName"":"""",""MinimumUserAge"":0,""ContentRatings"":[{""RatingSystem"":""ESRB"",""RatingId"":""ESRB:E"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""ESRB:UnrInt""]},{""RatingSystem"":""PEGI"",""RatingId"":""PEGI:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""PEGI:UnrInt""]},{""RatingSystem"":""DJCTQ"",""RatingId"":""DJCTQ:L"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""DJCTQ:UnrInt""]},{""RatingSystem"":""USK"",""RatingId"":""USK:Everyone"",""RatingDescriptors"":[""USK:ConDifAge""],""RatingDisclaimers"":[],""InteractiveElements"":[""USK:UnrInt""]},{""RatingSystem"":""IARC"",""RatingId"":""IARC:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""IARC:UnrInt""]},{""RatingSystem"":""PCBP"",""RatingId"":""PCBP:0"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""PCBP:UnrInt""]},{""RatingSystem"":""CSRR"",""RatingId"":""CSRR:G"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]},{""RatingSystem"":""CCC"",""RatingId"":""CCC:TE"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]},{""RatingSystem"":""Microsoft"",""RatingId"":""Microsoft:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]}],""RelatedProducts"":[],""UsageData"":[{""AggregateTimeSpan"":""7Days"",""AverageRating"":4.5,""PlayCount"":0,""RatingCount"":199,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""},{""AggregateTimeSpan"":""30Days"",""AverageRating"":4.4,""PlayCount"":0,""RatingCount"":416,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""},{""AggregateTimeSpan"":""AllTime"",""AverageRating"":4.5,""PlayCount"":0,""RatingCount"":20348,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""}],""BundleConfig"":null,""Markets"":[""US""]}],""ProductASchema"":""Product;3"",""ProductBSchema"":""ProductUnifiedApp;3"",""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""Attributes"":[{""Name"":""BroadcastSupport"",""Minimum"":null,""Maximum"":null,""ApplicablePlatforms"":null,""Group"":null}],""CanInstallToSDCard"":false,""Category"":""Productivity"",""SubCategory"":"""",""Categories"":null,""Extensions"":null,""IsAccessible"":false,""IsLineOfBusinessApp"":false,""IsPublishedToLegacyWindowsPhoneStore"":false,""IsPublishedToLegacyWindowsStore"":false,""IsSettingsApp"":false,""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""PackageIdentityName"":""Mozilla.Firefox"",""PublisherCertificateName"":""CN=082E9164-EE6C-4EC8-B62C-441FAE7BEFA1"",""PublisherId"":""77577580"",""XboxLiveTier"":null,""XboxXPA"":null,""XboxCrossGenSetId"":null,""XboxConsoleGenOptimized"":null,""XboxConsoleGenCompatible"":null,""XboxLiveGoldRequired"":false,""XBOX"":{},""ExtendedClientMetadata"":{},""OwnershipType"":null,""PdpBackgroundColor"":""#FFFFFF"",""HasAddOns"":false,""RevisionId"":""2024-04-30T14:41:20.5900076Z""},""AlternateIds"":[{""IdType"":""LegacyWindowsStoreProductId"",""Value"":""70bed52e-e1d3-467f-96b1-f4d474846515""},{""IdType"":""LegacyWindowsPhoneProductId"",""Value"":""60c1b112-072c-4657-b28d-d65f06e9d660""},{""IdType"":""XboxTitleId"",""Value"":""1728623981""}],""DomainDataVersion"":null,""IngestionSource"":""DCE"",""IsMicrosoftProduct"":false,""PreferredSkuId"":""0010"",""ProductType"":""Application"",""ValidationData"":{""PassedValidation"":false,""RevisionId"":""2024-04-30T14:41:20.5900076Z||.||95df8e43-f7a7-43f0-a00b-149bf8a386b1||1152921505697685831||Null||fullrelease"",""ValidationResultUri"":""""},""MerchandizingTags"":[],""PartD"":"""",""ProductFamily"":""Apps"",""SchemaVersion"":""3"",""ProductKind"":""Application"",""ProductPolicies"":{},""DisplaySkuAvailabilities"":[{""Sku"":{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""Contributors"":[],""Features"":[],""MinimumNotes"":"""",""RecommendedNotes"":"""",""ReleaseNotes"":""A faster, more intuitive Firefox now available in the Windows App Store"",""DisplayPlatformProperties"":null,""SkuDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, youre choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser thats backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. Theyre like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance speed, design, utility, ease of use, and a steadfast commitment to your privacy no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when youre outside of Facebook yes, theyre actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe you know, the good stuff on the internet but just dont have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, theres an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""SkuTitle"":""Mozilla Firefox"",""SkuButtonTitle"":"""",""DeliveryDateOverlay"":null,""SkuDisplayRank"":[],""TextResources"":null,""Images"":[],""LegalText"":{""AdditionalLicenseTerms"":"""",""Copyright"":"""",""CopyrightUri"":"""",""PrivacyPolicy"":"""",""PrivacyPolicyUri"":""https://www.mozilla.org/privacy/firefox/"",""Tou"":"""",""TouUri"":""""},""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""FirstAvailableDate"":""2021-10-05T21:38:45.1973879Z"",""SupportedLanguages"":[""en-us"",""zh-cn"",""zh-tw"",""cs"",""nl"",""en-ca"",""en-gb"",""fi"",""fr"",""el"",""hu"",""id"",""it"",""ja"",""pl"",""pt-br"",""pt-pt"",""ru"",""es-ar"",""es-mx"",""es-es"",""sv-se"",""tr"",""de"",""be"",""ar"",""bs"",""ca"",""cy"",""da"",""es-cl"",""sq"",""gl"",""ka"",""gu-in"",""hi-in"",""is"",""kk"",""ko"",""ms"",""nb-no"",""nn-no"",""pa-in"",""ro"",""si"",""sk"",""sl"",""th"",""uk"",""ur"",""vi""],""PackageIds"":null,""PIFilter"":null,""Markets"":[""US""]}],""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""EarlyAdopterEnrollmentUrl"":null,""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null},""FulfillmentType"":""WindowsUpdate"",""FulfillmentPluginId"":null,""HasThirdPartyIAPs"":false,""LastUpdateDate"":""2024-04-30T14:41:13.0000000Z"",""HardwareProperties"":{""MinimumHardware"":[],""RecommendedHardware"":[],""MinimumProcessor"":"""",""RecommendedProcessor"":"""",""MinimumGraphics"":"""",""RecommendedGraphics"":""""},""HardwareRequirements"":[],""HardwareWarningList"":[],""InstallationTerms"":""InstallationTermsStandard"",""Packages"":[{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x86""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""zrZtsI/8iaERjKU5t10jEMnCC7QWpztt3BhLTsbyJ14="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":146228493,""MaxInstallSizeInBytes"":289435648,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2"",""PackageId"":""08dea409-a13a-9903-2bbc-7f5e541f1d94-X86"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30001,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null}},{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x64""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""m7sF5N88lREGMPNzhM+f3gvbYkMPDD2mwqiFQelHvFU="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":150856555,""MaxInstallSizeInBytes"":305274880,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2"",""PackageId"":""7698ca0e-0912-77ba-3a73-1504a9fef084-X64"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30002,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null}}],""VersionString"":"""",""VisibleToB2BServiceIds"":[],""XboxXPA"":false,""BundledSkus"":[],""IsRepurchasable"":false,""SkuDisplayRank"":0,""DisplayPhysicalStoreInventory"":null,""AdditionalIdentifiers"":[],""IsTrial"":false,""IsPreOrder"":false,""IsBundle"":false},""SkuASchema"":""Sku;3"",""SkuBSchema"":""SkuUnifiedApp;3"",""SkuId"":""0010"",""SkuType"":""full"",""RecurrencePolicy"":null,""SubscriptionPolicyId"":null},""Availabilities"":[{""Actions"":[""Details"",""Fulfill"",""Purchase"",""Browse"",""Curate"",""Redeem""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9RBCP3VR54XC"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""PIFilter"":{""ExclusionProperties"":[],""InclusionProperties"":[]},""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":""TaxesNotIncluded"",""WholesaleCurrencyCode"":""""}},""Properties"":{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z""},""SkuId"":""0010"",""DisplayRank"":0,""RemediationRequired"":false},{""Actions"":[""License"",""Browse"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9TXXNTRLPTLW"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""LicensingData"":{""SatisfyingEntitlementKeys"":[{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0010""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:60c1b112-072c-4657-b28d-d65f06e9d660:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:70bed52e-e1d3-467f-96b1-f4d474846515:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0001""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0002""],""LicensingKeyIds"":[""1""]}]},""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0010"",""DisplayRank"":1,""RemediationRequired"":false},{""Actions"":[""License"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9SH85X02C4KQ"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Mobile""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Team""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Xbox""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Holographic""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Core""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""LicensingData"":{""SatisfyingEntitlementKeys"":[{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0010""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:60c1b112-072c-4657-b28d-d65f06e9d660:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:70bed52e-e1d3-467f-96b1-f4d474846515:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0001""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0002""],""LicensingKeyIds"":[""1""]}]},""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0010"",""DisplayRank"":2,""RemediationRequired"":false}],""HistoricalBestAvailabilities"":[{""Actions"":[""Details"",""Fulfill"",""Purchase"",""Browse"",""Curate"",""Redeem""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9RBCP3VR54XC"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z"",""EligibilityPredicateIds"":[""CannotSeenByChinaClient""],""SupportedCatalogVersion"":6},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""PIFilter"":{""ExclusionProperties"":[],""InclusionProperties"":[]},""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":""TaxesNotIncluded"",""WholesaleCurrencyCode"":""""}},""Properties"":{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z""},""SkuId"":""0010"",""DisplayRank"":0,""ProductASchema"":""Product;3""}]},{""Sku"":{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""Contributors"":[],""Features"":[],""MinimumNotes"":"""",""RecommendedNotes"":"""",""ReleaseNotes"":""A faster, more intuitive Firefox now available in the Windows App Store"",""DisplayPlatformProperties"":null,""SkuDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, youre choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser thats backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. Theyre like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance speed, design, utility, ease of use, and a steadfast commitment to your privacy no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when youre outside of Facebook yes, theyre actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe you know, the good stuff on the internet but just dont have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, theres an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""SkuTitle"":""Mozilla Firefox"",""SkuButtonTitle"":"""",""DeliveryDateOverlay"":null,""SkuDisplayRank"":[],""TextResources"":null,""Images"":[],""LegalText"":{""AdditionalLicenseTerms"":"""",""Copyright"":"""",""CopyrightUri"":"""",""PrivacyPolicy"":"""",""PrivacyPolicyUri"":""https://www.mozilla.org/privacy/firefox/"",""Tou"":"""",""TouUri"":""""},""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""FirstAvailableDate"":""2021-10-05T21:38:45.1973879Z"",""SupportedLanguages"":[""en-us"",""zh-cn"",""zh-tw"",""cs"",""nl"",""en-ca"",""en-gb"",""fi"",""fr"",""el"",""hu"",""id"",""it"",""ja"",""pl"",""pt-br"",""pt-pt"",""ru"",""es-ar"",""es-mx"",""es-es"",""sv-se"",""tr"",""de"",""be"",""ar"",""bs"",""ca"",""cy"",""da"",""es-cl"",""sq"",""gl"",""ka"",""gu-in"",""hi-in"",""is"",""kk"",""ko"",""ms"",""nb-no"",""nn-no"",""pa-in"",""ro"",""si"",""sk"",""sl"",""th"",""uk"",""ur"",""vi""],""PackageIds"":null,""PIFilter"":null,""Markets"":[""US""]}],""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""EarlyAdopterEnrollmentUrl"":null,""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null},""FulfillmentType"":""WindowsUpdate"",""FulfillmentPluginId"":null,""HasThirdPartyIAPs"":false,""LastUpdateDate"":""2024-04-30T14:41:13.0000000Z"",""HardwareProperties"":{""MinimumHardware"":[],""RecommendedHardware"":[],""MinimumProcessor"":"""",""RecommendedProcessor"":"""",""MinimumGraphics"":"""",""RecommendedGraphics"":""""},""HardwareRequirements"":[],""HardwareWarningList"":[],""InstallationTerms"":""InstallationTermsStandard"",""Packages"":[{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x86""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""zrZtsI/8iaERjKU5t10jEMnCC7QWpztt3BhLTsbyJ14="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":146228493,""MaxInstallSizeInBytes"":289435648,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2"",""PackageId"":""08dea409-a13a-9903-2bbc-7f5e541f1d94-X86"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30001,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null}},{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x64""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""m7sF5N88lREGMPNzhM+f3gvbYkMPDD2mwqiFQelHvFU="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":150856555,""MaxInstallSizeInBytes"":305274880,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2"",""PackageId"":""7698ca0e-0912-77ba-3a73-1504a9fef084-X64"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30002,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null}}],""VersionString"":"""",""VisibleToB2BServiceIds"":[],""XboxXPA"":false,""BundledSkus"":[],""IsRepurchasable"":false,""SkuDisplayRank"":2,""DisplayPhysicalStoreInventory"":null,""AdditionalIdentifiers"":[],""IsTrial"":true,""IsPreOrder"":false,""IsBundle"":false},""SkuASchema"":""Sku;3"",""SkuBSchema"":""SkuUnifiedApp;3"",""SkuId"":""0011"",""SkuType"":""trial"",""RecurrencePolicy"":null,""SubscriptionPolicyId"":null},""Availabilities"":[{""Actions"":[""Details"",""License"",""Fulfill""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9P32GQQH8MSX"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0011"",""DisplayRank"":0,""RemediationRequired"":false},{""Actions"":[""License"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9PT62300SK6S"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Mobile""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Team""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Xbox""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Holographic""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Core""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0011"",""DisplayRank"":1,""RemediationRequired"":false}],""HistoricalBestAvailabilities"":[]}]}]}"; + const string manifestData = @"{ + ""description"": ""Choose the browser that prioritizes you, not their bottom line.\n\nDon't settle for the default browser. When you choose Firefox, you protect your data while supporting the non-profit Mozilla Foundation, whose mission is to build a better internet that's safe and accessible for everyone, everywhere.\n\nJoin the hundreds of millions of people who choose to protect what's important by using Firefox, a web browser designed to be fast, private and safe. \n\nFAST. PRIVATE. SAFE. \nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks most trackers from invading your privacy and slowing your web browsing.\n\nPICK UP RIGHT WHERE YOU LEFT OFF \nBrowse on your computer, then seamlessly switch to Firefox on your phone. With Firefox across your devices, you can always access your passwords, bookmarks, and tabs. \n\nTAKE YOUR PASSWORDS ON THE GO\nWith a free password manager built into Firefox, you can easily log into sites across all your devices. The Firefox password manager securely stores your logins, automatically fills in usernames and passwords, and suggests strong passwords when you create a new account.\n\nEDIT PDFS WITH EASE\nView, print and edit PDFs with Firefox's free PDF editor. Add text, sign, and highlight PDF documents right in Firefox. \n\nMULTITASKING MADE EASY \nWith Picture-in-Picture, you can pop videos out in separate, scalable windows that pin to the screen so you can keep watching while you go about your business on other websites or do things outside of Firefox. \n\nBROWSE LIKE NO ONE'S WATCHING\nWhen you browse in private mode, you remain incognito. Firefox shields you from third-party cookies and content trackers and clears your search and browsing history when you close all private windows. \n\nPRIVATELY TRANSLATE WEBPAGES IN REAL-TIME\nWhile other browsers rely on cloud services to translate webpages, Firefox translations are done offline without recording what webpages you translate.\n\nFOCUS WHEN IT MATTERS\nReader View conveniently removes distractions like buttons, ads, background images, and videos while allowing you to customize the layout to fit your reading preferences.\n\nCUSTOMIZE YOUR BROWSING EXPERIENCE\nWith Firefox Add-Ons, you can discover extensions and themes that make browsing even faster, safer and more fun. There are extensions for everyone, from additional privacy tools to tab managers to ad blockers. \n\nCHALLENGING THE STATUS QUO SINCE 1998 \nMozilla created Firefox as a faster, more private alternative to internet browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."", + ""iconUrl"": ""https://store-images.s-microsoft.com/image/apps.7279.14473293538384797.bcb417dc-ffbe-444e-9589-e6a25f04ad52.156eed19-aa35-4e69-96a7-c11abd7f887d"", + ""informationUrl"": ""https://www.mozilla.org/firefox/"", + ""privacyInformationUrl"": ""https://www.mozilla.org/privacy/firefox/"", + ""scope"": ""user"", + ""architectures"": [ + ""x64"", + ""x86"", + ""arm64"" + ], + ""packageIdentifier"": ""9NZVDKPMR9RD"", + ""displayName"": ""Mozilla Firefox"", + ""publisher"": ""Mozilla"" +}"; const string graphResponseData = @"{ ""@odata.type"": ""#microsoft.graph.winGetApp"", ""id"": ""0177548a-548a-0177-8a54-77018a547701"" }"; var httpClient = Substitute.For(); - var storeLogger = Substitute.For>(); var graphLogger = Substitute.For>(); var fileManager = Substitute.For(); - var client = new MicrosoftStoreClient(httpClient, storeLogger); - var storeAppUploader = new GraphStoreAppUploader(graphLogger, fileManager, client); + var proxyClient = new WinTunerProxyClient(new HttpClientRequestAdapter(new AnonymousAuthenticationProvider(), httpClient: httpClient)); + var storeAppUploader = new GraphStoreAppUploader(graphLogger, fileManager, proxyClient); var cancellationToken = new CancellationToken(); var manifestResponse = new HttpResponseMessage @@ -35,10 +50,10 @@ public async Task CreateStoreAppAsync_WithValidPackageId_CreatesAppSuccessfully( httpClient.SendAsync(Arg.Is(req => req.Method == HttpMethod.Get - && req.RequestUri == new Uri($"https://displaycatalog.mp.microsoft.com/v7.0/products?bigIds={packageId}&market=US&languages=en-us")), cancellationToken) + && req.RequestUri == new Uri($"https://proxy.wintuner.app/api/store/package/{packageId}")), cancellationToken) .Returns(manifestResponse); - fileManager.DownloadFileAsync("http://store-images.s-microsoft.com/image/apps.36939.14473293538384797.0ec149d2-d2b5-48a8-afd4-66986d387ec9.820a68fb-12dd-45a1-9a5a-1f141fc93f29", Arg.Any(), expectedHash: null, overrideFile: false, cancellationToken: cancellationToken) + fileManager.DownloadFileAsync("https://store-images.s-microsoft.com/image/apps.7279.14473293538384797.bcb417dc-ffbe-444e-9589-e6a25f04ad52.156eed19-aa35-4e69-96a7-c11abd7f887d", Arg.Any(), expectedHash: null, overrideFile: false, cancellationToken: cancellationToken) .Returns(Task.CompletedTask); fileManager.ReadAllBytesAsync(Arg.Any(), cancellationToken) @@ -47,7 +62,8 @@ public async Task CreateStoreAppAsync_WithValidPackageId_CreatesAppSuccessfully( var expectedGraphBody = new Dictionary { { "@odata.type", "#microsoft.graph.winGetApp" }, - { "displayName", "Mozilla Firefox" } + { "displayName", "Mozilla Firefox" }, + { "publisher", "Mozilla" } }; httpClient.SendAsync(Arg.Is(req => req.Method == HttpMethod.Post @@ -57,7 +73,7 @@ public async Task CreateStoreAppAsync_WithValidPackageId_CreatesAppSuccessfully( ), cancellationToken) .Returns(graphResponse); - var graphClient = new GraphServiceClient(httpClient, new Microsoft.Kiota.Abstractions.Authentication.AnonymousAuthenticationProvider()); + var graphClient = new GraphServiceClient(httpClient, new AnonymousAuthenticationProvider()); var result = await storeAppUploader.CreateStoreAppAsync(graphClient, packageId, cancellationToken); @@ -70,44 +86,21 @@ public async Task CreateStoreAppAsync_WithValidPackageId_CreatesAppSuccessfully( public async Task GetStoreIdForNameAsync_Returns_ExptectedResult() { var httpClient = Substitute.For(); - var storeLogger = Substitute.For>(); var graphStoreLogger = Substitute.For>(); - var client = new MicrosoftStoreClient(httpClient, storeLogger); + var proxyClient = new WinTunerProxyClient(new HttpClientRequestAdapter(new AnonymousAuthenticationProvider(), httpClient: httpClient)); var cancellationToken = new CancellationToken(); - var graphStoreAppUploader = new GraphStoreAppUploader(graphStoreLogger, Substitute.For(), client); + var graphStoreAppUploader = new GraphStoreAppUploader(graphStoreLogger, Substitute.For(), proxyClient); var expectedResponse = new HttpResponseMessage { - Content = new StringContent( - @"{ - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchResponse, StoreEdgeFD"", - ""Data"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchData, StoreEdgeFD"", - ""PackageIdentifier"": ""9NZVDKPMR9RD"", - ""PackageName"": ""Mozilla Firefox"", - ""Publisher"": ""Mozilla"", - ""Versions"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchVersion, StoreEdgeFD"", - ""PackageVersion"": ""Unknown"", - ""PackageFamilyNames"": [ - ""Mozilla.Firefox_n80bbvh6b1yt2"" - ] - } - ] - } - ] - }", Encoding.UTF8, "application/json") + Content = new StringContent(@"[{""packageIdentifier"": ""9NZVDKPMR9RD"",""displayName"": ""Mozilla Firefox"",""publisher"": ""Mozilla""}]", Encoding.UTF8, "application/json") }; // Validate the body of the request somehow httpClient.SendAsync(Arg.Is(req => - req.Method == HttpMethod.Post - && req.RequestUri == new Uri("https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch") - && req.Content != null - && req.Content.IsJson()), cancellationToken) + req.Method == HttpMethod.Get + && req.RequestUri == new Uri("https://proxy.wintuner.app/api/store/search?searchString=Mozilla%20Firefox")), cancellationToken) .Returns(expectedResponse); // Act diff --git a/tests/WingetIntune.Tests/Intune/IntuneManagerTests.cs b/tests/WingetIntune.Tests/Intune/IntuneManagerTests.cs index ce320ea..91f621d 100644 --- a/tests/WingetIntune.Tests/Intune/IntuneManagerTests.cs +++ b/tests/WingetIntune.Tests/Intune/IntuneManagerTests.cs @@ -11,7 +11,7 @@ public class IntuneManagerTests [Fact] public async Task GenerateMsiPackage_OtherPackage_ThrowsError() { - var intuneManager = new IntuneManager(null, null, null, null, null, null, null, null, null, null, null); + var intuneManager = new IntuneManager(null, null, null, null, null, null, null, null, null, null); var tempFolder = Path.Combine(Path.GetTempPath(), "intunewin"); var outputFolder = Path.Combine(Path.GetTempPath(), "packages"); @@ -80,7 +80,7 @@ public async Task GenerateInstallerPackage_MsiPackage_Returns() var intunePackager = Substitute.For(); - var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, processManager, null, null, null, null, intunePackager, null, null, null); + var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, processManager, null, null, null, intunePackager, null, null, null); await intuneManager.GenerateInstallerPackage(tempFolder, outputFolder, IntuneTestConstants.azureCliPackageInfo, new PackageOptions { Architecture = Models.Architecture.X64, InstallerContext = InstallerContext.User }, CancellationToken.None); @@ -105,7 +105,7 @@ public async Task DownloadLogoAsync_CallsFilemanager() fileManager.DownloadFileAsync($"https://api.winstall.app/icons/{packageId}.png", logoPath, null, false, false, Arg.Any()) .Returns(Task.CompletedTask); - var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, null, null, null, null, null, null, null, null, null); + var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, null, null, null, null, null, null, null, null); await intuneManager.DownloadLogoAsync(folder, packageId, CancellationToken.None); //call.Received(1); @@ -137,7 +137,7 @@ public async Task DownloadInstallerAsync_CallsFilemanager() fileManager.DownloadFileAsync(packageInfo.InstallerUrl.ToString(), installerPath, hash, true, false, Arg.Any()) .Returns(Task.CompletedTask); - var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, null, null, null, null, null, null, null, null, null); + var intuneManager = new IntuneManager(new NullLoggerFactory(), fileManager, null, null, null, null, null, null, null, null); await intuneManager.DownloadInstallerAsync(folder, packageInfo, CancellationToken.None); //call.Received(1); diff --git a/tests/WingetIntune.Tests/MsStore/MicrosoftStoreClientTests.cs b/tests/WingetIntune.Tests/MsStore/MicrosoftStoreClientTests.cs deleted file mode 100644 index 4a5706e..0000000 --- a/tests/WingetIntune.Tests/MsStore/MicrosoftStoreClientTests.cs +++ /dev/null @@ -1,171 +0,0 @@ -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using WingetIntune.Internal.MsStore; - -namespace WingetIntune.Tests.MsStore; -public class MicrosoftStoreClientTests -{ - [Fact] - public async Task GetDisplayCatalogAsync_ReturnsExpectedResult() - { - const string packageId = "9NZVDKPMR9RD"; - const string responseData = @"{""Products"":[{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""DeveloperName"":"""",""DisplayPlatformProperties"":null,""PublisherName"":""Mozilla"",""PublisherAddress"":null,""PublisherWebsiteUri"":""https://www.mozilla.org/firefox/"",""SupportUri"":""https://support.mozilla.org/products/firefox"",""SupportPhone"":null,""EligibilityProperties"":null,""Franchises"":[],""Images"":[{""FileId"":""3071430996971663174"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":14069,""ForegroundColor"":"""",""Height"":100,""ImagePositionInfo"":"""",""ImagePurpose"":""Logo"",""UnscaledImageSHA256Hash"":""NmfuVtG1XGBx/p8HUht9J+giOGcMN5oIea7M4xjN/H8="",""Uri"":""//store-images.s-microsoft.com/image/apps.26422.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.37a70641-3de3-41b1-9c94-3cb0cfc663c2"",""Width"":100},{""FileId"":""3004232197050559163"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":63556,""ForegroundColor"":"""",""Height"":300,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""S5CO1XDVz6JpQlsSlJWWEN45hRkKGDwyapmRK6A66qA="",""Uri"":""//store-images.s-microsoft.com/image/apps.36939.14473293538384797.0ec149d2-d2b5-48a8-afd4-66986d387ec9.820a68fb-12dd-45a1-9a5a-1f141fc93f29"",""Width"":300},{""FileId"":""3008762446945936351"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":7710,""ForegroundColor"":"""",""Height"":88,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""9z/FtCO6NlcynHvQQ6gvOoXTw/h8ZUzdrOxMg+QMt2Q="",""Uri"":""//store-images.s-microsoft.com/image/apps.16375.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.a6fb32ca-2223-41dc-8d73-8395066b1c4f"",""Width"":88},{""FileId"":""3052106644741011285"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":187605,""ForegroundColor"":"""",""Height"":620,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""6gpjyrwSRgQ9Fa4NbghXdgJsrO/cs7vxFM+Y/mkBCDg="",""Uri"":""//store-images.s-microsoft.com/image/apps.2794.14473293538384797.0ec149d2-d2b5-48a8-afd4-66986d387ec9.5a7e12ea-3baa-41de-ae7c-e58c7d22b644"",""Width"":620},{""FileId"":""3031096784199183752"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":8923,""ForegroundColor"":"""",""Height"":142,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""dhSnfnKPaSBBYSgcsMpkSPeuawH/9ZSKTZE3LW+hpNM="",""Uri"":""//store-images.s-microsoft.com/image/apps.5238.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.13c8d648-665d-4185-8b32-beb922c3a9d1"",""Width"":142},{""FileId"":""3028587524167049996"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":17159,""ForegroundColor"":"""",""Height"":300,""ImagePositionInfo"":"""",""ImagePurpose"":""Tile"",""UnscaledImageSHA256Hash"":""AjdCKOV39U/zZ91jWgO3Uc0gJy8DZ4tNs46DxTrPoPs="",""Uri"":""//store-images.s-microsoft.com/image/apps.14082.14473293538384797.ed62a13f-c9ba-478e-9f33-7fd3515b0820.abebba2b-9232-4dc4-a59c-0ded036614e4"",""Width"":620},{""FileId"":""3000180573878009204"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":2219458,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/0"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""We95BmfhVSMei0EwA/W2IN8vfUIrIE1KxMRNl/bNpu0="",""Uri"":""//store-images.s-microsoft.com/image/apps.61273.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.836cb591-5b2e-480c-abe0-fbef3445148c"",""Width"":3840},{""FileId"":""3001975626805331357"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":1142645,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/1"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""RxzoePoLqML4h7d/kM4yqb0vbQQRd+mK+uOyI5S0814="",""Uri"":""//store-images.s-microsoft.com/image/apps.7239.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.2836ec17-3608-4c59-955b-e33a4ddbe09a"",""Width"":3840},{""FileId"":""3051311566860831267"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":1435423,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/2"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""sf+mRDniEBQEybyQg3H2FJ+YDSdRD79bK2ZjQARm9Tc="",""Uri"":""//store-images.s-microsoft.com/image/apps.65457.14473293538384797.c7c6f980-349e-4aec-8b21-c9a6aba30011.325858ad-e348-4660-95b8-d2f66200e3fc"",""Width"":3840},{""FileId"":""3048171808590640430"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":2744619,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/3"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""NeoziSi4gk+vLi5eIcXPS03Cq1hY5u8xGMAohxBXA54="",""Uri"":""//store-images.s-microsoft.com/image/apps.59957.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.7cf8905f-6469-422f-8aed-c9bc151a97c4"",""Width"":3840},{""FileId"":""3008914828876618251"",""EISListingIdentifier"":null,""BackgroundColor"":""#20123A"",""Caption"":"""",""FileSizeInBytes"":881119,""ForegroundColor"":"""",""Height"":2160,""ImagePositionInfo"":""Desktop/4"",""ImagePurpose"":""Screenshot"",""UnscaledImageSHA256Hash"":""Xt+ESkKx6rAGAqMWPrfv+myQvniyCYFJnWFinDlk6g8="",""Uri"":""//store-images.s-microsoft.com/image/apps.57182.14473293538384797.38906001-683a-40ba-aa5d-ca1c71126f40.b1631027-7eff-4a82-b06f-956df2b0f6f8"",""Width"":3840}],""Videos"":[],""ProductDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, you’re choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser that’s backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. They’re like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy — we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance — speed, design, utility, ease of use, and a steadfast commitment to your privacy — no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when you’re outside of Facebook — yes, they’re actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe — you know, the good stuff on the internet — but just don’t have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, there’s an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""ProductTitle"":""Mozilla Firefox"",""ShortTitle"":""Firefox"",""SortTitle"":"""",""FriendlyTitle"":null,""ShortDescription"":"""",""SearchTitles"":[],""VoiceTitle"":"""",""RenderGroupDetails"":null,""ProductDisplayRanks"":[],""InteractiveModelConfig"":null,""Interactive3DEnabled"":false,""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z"",""OriginalReleaseDateFriendlyName"":"""",""MinimumUserAge"":0,""ContentRatings"":[{""RatingSystem"":""ESRB"",""RatingId"":""ESRB:E"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""ESRB:UnrInt""]},{""RatingSystem"":""PEGI"",""RatingId"":""PEGI:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""PEGI:UnrInt""]},{""RatingSystem"":""DJCTQ"",""RatingId"":""DJCTQ:L"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""DJCTQ:UnrInt""]},{""RatingSystem"":""USK"",""RatingId"":""USK:Everyone"",""RatingDescriptors"":[""USK:ConDifAge""],""RatingDisclaimers"":[],""InteractiveElements"":[""USK:UnrInt""]},{""RatingSystem"":""IARC"",""RatingId"":""IARC:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""IARC:UnrInt""]},{""RatingSystem"":""PCBP"",""RatingId"":""PCBP:0"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[""PCBP:UnrInt""]},{""RatingSystem"":""CSRR"",""RatingId"":""CSRR:G"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]},{""RatingSystem"":""CCC"",""RatingId"":""CCC:TE"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]},{""RatingSystem"":""Microsoft"",""RatingId"":""Microsoft:3"",""RatingDescriptors"":[],""RatingDisclaimers"":[],""InteractiveElements"":[]}],""RelatedProducts"":[],""UsageData"":[{""AggregateTimeSpan"":""7Days"",""AverageRating"":4.5,""PlayCount"":0,""RatingCount"":199,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""},{""AggregateTimeSpan"":""30Days"",""AverageRating"":4.4,""PlayCount"":0,""RatingCount"":416,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""},{""AggregateTimeSpan"":""AllTime"",""AverageRating"":4.5,""PlayCount"":0,""RatingCount"":20348,""RentalCount"":""0"",""TrialCount"":""0"",""PurchaseCount"":""0""}],""BundleConfig"":null,""Markets"":[""US""]}],""ProductASchema"":""Product;3"",""ProductBSchema"":""ProductUnifiedApp;3"",""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""Attributes"":[{""Name"":""BroadcastSupport"",""Minimum"":null,""Maximum"":null,""ApplicablePlatforms"":null,""Group"":null}],""CanInstallToSDCard"":false,""Category"":""Productivity"",""SubCategory"":"""",""Categories"":null,""Extensions"":null,""IsAccessible"":false,""IsLineOfBusinessApp"":false,""IsPublishedToLegacyWindowsPhoneStore"":false,""IsPublishedToLegacyWindowsStore"":false,""IsSettingsApp"":false,""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""PackageIdentityName"":""Mozilla.Firefox"",""PublisherCertificateName"":""CN=082E9164-EE6C-4EC8-B62C-441FAE7BEFA1"",""PublisherId"":""77577580"",""XboxLiveTier"":null,""XboxXPA"":null,""XboxCrossGenSetId"":null,""XboxConsoleGenOptimized"":null,""XboxConsoleGenCompatible"":null,""XboxLiveGoldRequired"":false,""XBOX"":{},""ExtendedClientMetadata"":{},""OwnershipType"":null,""PdpBackgroundColor"":""#FFFFFF"",""HasAddOns"":false,""RevisionId"":""2024-04-30T14:41:20.5900076Z""},""AlternateIds"":[{""IdType"":""LegacyWindowsStoreProductId"",""Value"":""70bed52e-e1d3-467f-96b1-f4d474846515""},{""IdType"":""LegacyWindowsPhoneProductId"",""Value"":""60c1b112-072c-4657-b28d-d65f06e9d660""},{""IdType"":""XboxTitleId"",""Value"":""1728623981""}],""DomainDataVersion"":null,""IngestionSource"":""DCE"",""IsMicrosoftProduct"":false,""PreferredSkuId"":""0010"",""ProductType"":""Application"",""ValidationData"":{""PassedValidation"":false,""RevisionId"":""2024-04-30T14:41:20.5900076Z||.||95df8e43-f7a7-43f0-a00b-149bf8a386b1||1152921505697685831||Null||fullrelease"",""ValidationResultUri"":""""},""MerchandizingTags"":[],""PartD"":"""",""ProductFamily"":""Apps"",""SchemaVersion"":""3"",""ProductKind"":""Application"",""ProductPolicies"":{},""DisplaySkuAvailabilities"":[{""Sku"":{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""Contributors"":[],""Features"":[],""MinimumNotes"":"""",""RecommendedNotes"":"""",""ReleaseNotes"":""A faster, more intuitive Firefox now available in the Windows App Store"",""DisplayPlatformProperties"":null,""SkuDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, you’re choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser that’s backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. They’re like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy — we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance — speed, design, utility, ease of use, and a steadfast commitment to your privacy — no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when you’re outside of Facebook — yes, they’re actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe — you know, the good stuff on the internet — but just don’t have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, there’s an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""SkuTitle"":""Mozilla Firefox"",""SkuButtonTitle"":"""",""DeliveryDateOverlay"":null,""SkuDisplayRank"":[],""TextResources"":null,""Images"":[],""LegalText"":{""AdditionalLicenseTerms"":"""",""Copyright"":"""",""CopyrightUri"":"""",""PrivacyPolicy"":"""",""PrivacyPolicyUri"":""https://www.mozilla.org/privacy/firefox/"",""Tou"":"""",""TouUri"":""""},""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""FirstAvailableDate"":""2021-10-05T21:38:45.1973879Z"",""SupportedLanguages"":[""en-us"",""zh-cn"",""zh-tw"",""cs"",""nl"",""en-ca"",""en-gb"",""fi"",""fr"",""el"",""hu"",""id"",""it"",""ja"",""pl"",""pt-br"",""pt-pt"",""ru"",""es-ar"",""es-mx"",""es-es"",""sv-se"",""tr"",""de"",""be"",""ar"",""bs"",""ca"",""cy"",""da"",""es-cl"",""sq"",""gl"",""ka"",""gu-in"",""hi-in"",""is"",""kk"",""ko"",""ms"",""nb-no"",""nn-no"",""pa-in"",""ro"",""si"",""sk"",""sl"",""th"",""uk"",""ur"",""vi""],""PackageIds"":null,""PIFilter"":null,""Markets"":[""US""]}],""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""EarlyAdopterEnrollmentUrl"":null,""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null},""FulfillmentType"":""WindowsUpdate"",""FulfillmentPluginId"":null,""HasThirdPartyIAPs"":false,""LastUpdateDate"":""2024-04-30T14:41:13.0000000Z"",""HardwareProperties"":{""MinimumHardware"":[],""RecommendedHardware"":[],""MinimumProcessor"":"""",""RecommendedProcessor"":"""",""MinimumGraphics"":"""",""RecommendedGraphics"":""""},""HardwareRequirements"":[],""HardwareWarningList"":[],""InstallationTerms"":""InstallationTermsStandard"",""Packages"":[{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x86""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""zrZtsI/8iaERjKU5t10jEMnCC7QWpztt3BhLTsbyJ14="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":146228493,""MaxInstallSizeInBytes"":289435648,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2"",""PackageId"":""08dea409-a13a-9903-2bbc-7f5e541f1d94-X86"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30001,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null}},{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x64""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""m7sF5N88lREGMPNzhM+f3gvbYkMPDD2mwqiFQelHvFU="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":150856555,""MaxInstallSizeInBytes"":305274880,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2"",""PackageId"":""7698ca0e-0912-77ba-3a73-1504a9fef084-X64"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30002,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0010"",""Content"":null,""PackageFeatures"":null}}],""VersionString"":"""",""VisibleToB2BServiceIds"":[],""XboxXPA"":false,""BundledSkus"":[],""IsRepurchasable"":false,""SkuDisplayRank"":0,""DisplayPhysicalStoreInventory"":null,""AdditionalIdentifiers"":[],""IsTrial"":false,""IsPreOrder"":false,""IsBundle"":false},""SkuASchema"":""Sku;3"",""SkuBSchema"":""SkuUnifiedApp;3"",""SkuId"":""0010"",""SkuType"":""full"",""RecurrencePolicy"":null,""SubscriptionPolicyId"":null},""Availabilities"":[{""Actions"":[""Details"",""Fulfill"",""Purchase"",""Browse"",""Curate"",""Redeem""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9RBCP3VR54XC"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""PIFilter"":{""ExclusionProperties"":[],""InclusionProperties"":[]},""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":""TaxesNotIncluded"",""WholesaleCurrencyCode"":""""}},""Properties"":{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z""},""SkuId"":""0010"",""DisplayRank"":0,""RemediationRequired"":false},{""Actions"":[""License"",""Browse"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9TXXNTRLPTLW"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""LicensingData"":{""SatisfyingEntitlementKeys"":[{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0010""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:60c1b112-072c-4657-b28d-d65f06e9d660:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:70bed52e-e1d3-467f-96b1-f4d474846515:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0001""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0002""],""LicensingKeyIds"":[""1""]}]},""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0010"",""DisplayRank"":1,""RemediationRequired"":false},{""Actions"":[""License"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9SH85X02C4KQ"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Mobile""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Team""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Xbox""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Holographic""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Core""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""LicensingData"":{""SatisfyingEntitlementKeys"":[{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0010""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:60c1b112-072c-4657-b28d-d65f06e9d660:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""wes:App:70bed52e-e1d3-467f-96b1-f4d474846515:Full""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0001""],""LicensingKeyIds"":[""1""]},{""EntitlementKeys"":[""big:9NZVDKPMR9RD:0002""],""LicensingKeyIds"":[""1""]}]},""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0010"",""DisplayRank"":2,""RemediationRequired"":false}],""HistoricalBestAvailabilities"":[{""Actions"":[""Details"",""Fulfill"",""Purchase"",""Browse"",""Curate"",""Redeem""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9RBCP3VR54XC"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z"",""EligibilityPredicateIds"":[""CannotSeenByChinaClient""],""SupportedCatalogVersion"":6},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""PIFilter"":{""ExclusionProperties"":[],""InclusionProperties"":[]},""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":""TaxesNotIncluded"",""WholesaleCurrencyCode"":""""}},""Properties"":{""OriginalReleaseDate"":""2021-10-05T21:38:45.1973879Z""},""SkuId"":""0010"",""DisplayRank"":0,""ProductASchema"":""Product;3""}]},{""Sku"":{""LastModifiedDate"":""2024-04-30T14:41:13.2369856Z"",""LocalizedProperties"":[{""Contributors"":[],""Features"":[],""MinimumNotes"":"""",""RecommendedNotes"":"""",""ReleaseNotes"":""A faster, more intuitive Firefox now available in the Windows App Store"",""DisplayPlatformProperties"":null,""SkuDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, you’re choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser that’s backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. They’re like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy — we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance — speed, design, utility, ease of use, and a steadfast commitment to your privacy — no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when you’re outside of Facebook — yes, they’re actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe — you know, the good stuff on the internet — but just don’t have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, there’s an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""SkuTitle"":""Mozilla Firefox"",""SkuButtonTitle"":"""",""DeliveryDateOverlay"":null,""SkuDisplayRank"":[],""TextResources"":null,""Images"":[],""LegalText"":{""AdditionalLicenseTerms"":"""",""Copyright"":"""",""CopyrightUri"":"""",""PrivacyPolicy"":"""",""PrivacyPolicyUri"":""https://www.mozilla.org/privacy/firefox/"",""Tou"":"""",""TouUri"":""""},""Language"":""en-us"",""Markets"":[""US"",""DZ"",""AR"",""AU"",""AT"",""BH"",""BD"",""BE"",""BR"",""BG"",""CA"",""CL"",""CN"",""CO"",""CR"",""HR"",""CY"",""CZ"",""DK"",""EG"",""EE"",""FI"",""FR"",""DE"",""GR"",""GT"",""HK"",""HU"",""IS"",""IN"",""ID"",""IQ"",""IE"",""IL"",""IT"",""JP"",""JO"",""KZ"",""KE"",""KW"",""LV"",""LB"",""LI"",""LT"",""LU"",""MY"",""MT"",""MR"",""MX"",""MA"",""NL"",""NZ"",""NG"",""NO"",""OM"",""PK"",""PE"",""PH"",""PL"",""PT"",""QA"",""RO"",""RU"",""SA"",""RS"",""SG"",""SK"",""SI"",""ZA"",""KR"",""ES"",""SE"",""CH"",""TW"",""TH"",""TT"",""TN"",""TR"",""UA"",""AE"",""GB"",""VN"",""YE"",""LY"",""LK"",""UY"",""VE"",""AF"",""AX"",""AL"",""AS"",""AO"",""AI"",""AQ"",""AG"",""AM"",""AW"",""BO"",""BQ"",""BA"",""BW"",""BV"",""IO"",""BN"",""BF"",""BI"",""KH"",""CM"",""CV"",""KY"",""CF"",""TD"",""TL"",""DJ"",""DM"",""DO"",""EC"",""SV"",""GQ"",""ER"",""ET"",""FK"",""FO"",""FJ"",""GF"",""PF"",""TF"",""GA"",""GM"",""GE"",""GH"",""GI"",""GL"",""GD"",""GP"",""GU"",""GG"",""GN"",""GW"",""GY"",""HT"",""HM"",""HN"",""AZ"",""BS"",""BB"",""BY"",""BZ"",""BJ"",""BM"",""BT"",""KM"",""CG"",""CD"",""CK"",""CX"",""CC"",""CI"",""CW"",""JM"",""SJ"",""JE"",""KI"",""KG"",""LA"",""LS"",""LR"",""MO"",""MK"",""MG"",""MW"",""IM"",""MH"",""MQ"",""MU"",""YT"",""FM"",""MD"",""MN"",""MS"",""MZ"",""MM"",""NA"",""NR"",""NP"",""MV"",""ML"",""NC"",""NI"",""NE"",""NU"",""NF"",""PW"",""PS"",""PA"",""PG"",""PY"",""RE"",""RW"",""BL"",""MF"",""WS"",""ST"",""SN"",""MP"",""PN"",""SX"",""SB"",""SO"",""SC"",""SL"",""GS"",""SH"",""KN"",""LC"",""PM"",""VC"",""TJ"",""TZ"",""TG"",""TK"",""TO"",""TM"",""TC"",""TV"",""UM"",""UG"",""VI"",""VG"",""WF"",""EH"",""ZM"",""ZW"",""UZ"",""VU"",""SR"",""SZ"",""AD"",""MC"",""SM"",""ME"",""VA"",""NEUTRAL""]}],""MarketProperties"":[{""FirstAvailableDate"":""2021-10-05T21:38:45.1973879Z"",""SupportedLanguages"":[""en-us"",""zh-cn"",""zh-tw"",""cs"",""nl"",""en-ca"",""en-gb"",""fi"",""fr"",""el"",""hu"",""id"",""it"",""ja"",""pl"",""pt-br"",""pt-pt"",""ru"",""es-ar"",""es-mx"",""es-es"",""sv-se"",""tr"",""de"",""be"",""ar"",""bs"",""ca"",""cy"",""da"",""es-cl"",""sq"",""gl"",""ka"",""gu-in"",""hi-in"",""is"",""kk"",""ko"",""ms"",""nb-no"",""nn-no"",""pa-in"",""ro"",""si"",""sk"",""sl"",""th"",""uk"",""ur"",""vi""],""PackageIds"":null,""PIFilter"":null,""Markets"":[""US""]}],""ProductId"":""9NZVDKPMR9RD"",""Properties"":{""EarlyAdopterEnrollmentUrl"":null,""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null},""FulfillmentType"":""WindowsUpdate"",""FulfillmentPluginId"":null,""HasThirdPartyIAPs"":false,""LastUpdateDate"":""2024-04-30T14:41:13.0000000Z"",""HardwareProperties"":{""MinimumHardware"":[],""RecommendedHardware"":[],""MinimumProcessor"":"""",""RecommendedProcessor"":"""",""MinimumGraphics"":"""",""RecommendedGraphics"":""""},""HardwareRequirements"":[],""HardwareWarningList"":[],""InstallationTerms"":""InstallationTermsStandard"",""Packages"":[{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x86""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""zrZtsI/8iaERjKU5t10jEMnCC7QWpztt3BhLTsbyJ14="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":146228493,""MaxInstallSizeInBytes"":289435648,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2"",""PackageId"":""08dea409-a13a-9903-2bbc-7f5e541f1d94-X86"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30001,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x86__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null}},{""Applications"":[{""ApplicationId"":""App"",""DeclarationOrder"":0,""Extensions"":[""appExecutionAlias-appExecutionAlias"",""fileTypeAssociation-.avif"",""fileTypeAssociation-.htm"",""fileTypeAssociation-.html"",""fileTypeAssociation-.pdf"",""fileTypeAssociation-.shtml"",""fileTypeAssociation-.xht"",""fileTypeAssociation-.xhtml"",""fileTypeAssociation-.svg"",""fileTypeAssociation-.webp"",""protocol-http"",""protocol-https"",""protocol-mailto"",""protocol-firefox-bridge"",""protocol-firefox-private-bridge"",""comServer-comServer"",""toastNotificationActivation-toastNotificationActivation""]}],""Architectures"":[""x64""],""Capabilities"":[""runFullTrust"",""Microsoft.storeFilter.core.notSupported_8wekyb3d8bbwe"",""Microsoft.requiresNonSMode_8wekyb3d8bbwe""],""DeviceCapabilities"":[],""ExperienceIds"":[],""FrameworkDependencies"":[],""HardwareDependencies"":[],""HardwareRequirements"":[],""Hash"":""m7sF5N88lREGMPNzhM+f3gvbYkMPDD2mwqiFQelHvFU="",""HashAlgorithm"":""SHA256"",""IsStreamingApp"":false,""Languages"":[""en-us"",""af"",""ar"",""be"",""bg"",""bn"",""bs"",""ca"",""cs"",""cy"",""da"",""de"",""el"",""en-ca"",""en-gb"",""es-ar"",""es-cl"",""es-es"",""es-mx"",""et"",""eu"",""fa"",""fi"",""fr"",""ga-ie"",""gl"",""gu-in"",""he"",""hi-in"",""hr"",""hu"",""hy-am"",""id"",""is"",""it"",""ja"",""ka"",""kk"",""km"",""kn"",""ko"",""lt"",""lv"",""mk"",""mr"",""ms"",""nb-no"",""ne-np"",""nl"",""nn-no"",""pa-in"",""pl"",""pt-br"",""pt-pt"",""ro"",""ru"",""si"",""sk"",""sl"",""sq"",""sv-se"",""ta"",""te"",""th"",""tr"",""uk"",""ur"",""vi"",""xh"",""zh-cn"",""zh-tw""],""MaxDownloadSizeInBytes"":150856555,""MaxInstallSizeInBytes"":305274880,""PackageFormat"":""Msix"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""MainPackageFamilyNameForDlc"":null,""PackageFullName"":""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2"",""PackageId"":""7698ca0e-0912-77ba-3a73-1504a9fef084-X64"",""ContentId"":""642d213e-143d-9470-0528-23c84ddac98c"",""KeyId"":null,""PackageRank"":30002,""PackageUri"":""https://productingestionbin1.blob.core.windows.net"",""PlatformDependencies"":[{""MaxTested"":2814751249597971,""MinVersion"":2814750931222528,""PlatformName"":""Windows.Desktop""}],""PlatformDependencyXmlBlob"":""{\""blob.version\"":1688867040526336,\""content.isMain\"":false,\""content.packageId\"":\""Mozilla.Firefox_125.0.3.0_x64__n80bbvh6b1yt2\"",\""content.productId\"":\""60c1b112-072c-4657-b28d-d65f06e9d660\"",\""content.targetPlatforms\"":[{\""platform.maxVersionTested\"":2814751249597971,\""platform.minVersion\"":2814750931222528,\""platform.target\"":3}],\""content.type\"":7,\""policy\"":{\""category.first\"":\""app\"",\""category.second\"":\""Productivity\"",\""optOut.backupRestore\"":false,\""optOut.removeableMedia\"":true},\""policy2\"":{\""ageRating\"":1,\""optOut.DVR\"":true,\""thirdPartyAppRatings\"":[{\""level\"":7,\""systemId\"":3},{\""level\"":12,\""systemId\"":5},{\""level\"":48,\""systemId\"":12},{\""level\"":27,\""systemId\"":9},{\""level\"":76,\""systemId\"":16},{\""level\"":68,\""systemId\"":15},{\""level\"":54,\""systemId\"":13}]}}"",""ResourceId"":"""",""Version"":""35184372089028608"",""PackageDownloadUris"":null,""DriverDependencies"":[],""FulfillmentData"":{""ProductId"":""9NZVDKPMR9RD"",""WuBundleId"":""f5e8ea9b-4ff6-4b62-99b6-740e683367a7"",""WuCategoryId"":""b234f54f-cf50-4416-9fc0-b9742f96d0a0"",""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""SkuId"":""0011"",""Content"":null,""PackageFeatures"":null}}],""VersionString"":"""",""VisibleToB2BServiceIds"":[],""XboxXPA"":false,""BundledSkus"":[],""IsRepurchasable"":false,""SkuDisplayRank"":2,""DisplayPhysicalStoreInventory"":null,""AdditionalIdentifiers"":[],""IsTrial"":true,""IsPreOrder"":false,""IsBundle"":false},""SkuASchema"":""Sku;3"",""SkuBSchema"":""SkuUnifiedApp;3"",""SkuId"":""0011"",""SkuType"":""trial"",""RecurrencePolicy"":null,""SubscriptionPolicyId"":null},""Availabilities"":[{""Actions"":[""Details"",""License"",""Fulfill""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9P32GQQH8MSX"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Desktop""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.8828080""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0011"",""DisplayRank"":0,""RemediationRequired"":false},{""Actions"":[""License"",""Details""],""AvailabilityASchema"":""Availability;3"",""AvailabilityBSchema"":""AvailabilityUnifiedApp;3"",""AvailabilityId"":""9PT62300SK6S"",""Conditions"":{""ClientConditions"":{""AllowedPlatforms"":[{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Mobile""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Team""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Xbox""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Holographic""},{""MaxVersion"":2147483647,""MinVersion"":0,""PlatformName"":""Windows.Core""}]},""EndDate"":""9998-12-30T00:00:00.0000000Z"",""ResourceSetIds"":[""1""],""StartDate"":""1753-01-01T00:00:00.0000000Z""},""LastModifiedDate"":""2024-04-30T14:39:37.7718031Z"",""Markets"":[""US""],""OrderManagementData"":{""GrantedEntitlementKeys"":[],""Price"":{""CurrencyCode"":""USD"",""IsPIRequired"":false,""ListPrice"":0.0,""MSRP"":0.0,""TaxType"":"""",""WholesaleCurrencyCode"":""""}},""Properties"":{},""SkuId"":""0011"",""DisplayRank"":1,""RemediationRequired"":false}],""HistoricalBestAvailabilities"":[]}]}]}"; - - var httpClient = Substitute.For(); - var logger = Substitute.For>(); - var client = new MicrosoftStoreClient(httpClient, logger); - var cancellationToken = new CancellationToken(); - - var fakeResponse = new HttpResponseMessage - { - Content = new StringContent(responseData, Encoding.UTF8, "application/json") - }; - - httpClient.SendAsync(Arg.Is(req => - req.Method == HttpMethod.Get - && req.RequestUri == new Uri($"https://displaycatalog.mp.microsoft.com/v7.0/products?bigIds={packageId}&market=US&languages=en-us")), cancellationToken) - .Returns(fakeResponse); - - // Act - var result = await client.GetDisplayCatalogAsync(packageId, cancellationToken); - - // Assert - Assert.NotNull(result); - var product = result?.Products.FirstOrDefault(); - Assert.NotNull(product); - Assert.Equal(packageId, product.ProductId); - Assert.Equal("Mozilla Firefox", product.LocalizedProperties.FirstOrDefault().ProductTitle); - - var image = product.LocalizedProperties.FirstOrDefault().Images.FirstOrDefault(i => i.Height == 300 && i.Width == 300); - Assert.NotNull(image); - } - - [Fact] - public async Task GetManifestAsync_ReturnsExpectedResult() - { - const string packageId = "9NZVDKPMR9RD"; - const string responseData = @"{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.PackageManifestResponse, StoreEdgeFD"",""Data"":{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.PackageManifestData, StoreEdgeFD"",""PackageIdentifier"":""9NZVDKPMR9RD"",""Versions"":[{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.PackageManifestVersion, StoreEdgeFD"",""PackageVersion"":""Unknown"",""DefaultLocale"":{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.DefaultLocale, StoreEdgeFD"",""PackageLocale"":""en-us"",""Publisher"":""Mozilla"",""PublisherUrl"":""https://www.mozilla.org/firefox/"",""PrivacyUrl"":""https://www.mozilla.org/privacy/firefox/"",""PublisherSupportUrl"":""https://support.mozilla.org/products/firefox"",""PackageName"":""Mozilla Firefox"",""License"":""ms-windows-store://pdp/?ProductId=9NZVDKPMR9RD"",""Copyright"":"""",""ShortDescription"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, you’re choosing to protect your d..."",""Description"":""Firefox Browser: fast, private & safe web browser\r\n\r\nWhen it comes to your life online, you have a choice: accept the factory settings or put your privacy first. When you choose Firefox for Windows as your default browser, you’re choosing to protect your data while supporting an independent tech company. Firefox is also the only major browser backed by a non-profit fighting to give you more openness, transparency and control of your life online. Join hundreds of millions of people who choose to protect what's important by choosing Firefox - a web browser designed to be fast, easy to use, customizable and private.\r\n\r\nA BROWSER THAT REFLECTS WHO YOU ARE \r\n- You can choose whatever default browser you want. Maybe think about using the only super-fast, ultra-private browser that’s backed by a non-profit? No pressure though.\r\n- Our secret sauce: Firefox Add-ons. They’re like these magical power-ups you can add to your Firefox browser to make it even better.\r\n- From watching a web tutorial to keeping an eye on your favorite team, your video follows you while you multitask with Picture-in-Picture.\r\n\r\nFAST. PRIVATE. SAFE.\r\nFirefox browser gives you effortless privacy protection with lightning-fast page loads. Enhanced Tracking Protection automatically blocks over 2,000 known online trackers from invading your privacy and slowing down your webpages. Firefox browser also introduces a clean new design that makes it easier to get more things done, more quickly. Plus, with smart browsing features built in, Firefox lets you take your privacy, passwords, and bookmarks with you safely wherever you go.\r\n\r\nYOU COME FIRST\r\nAs the internet grows and changes, Firefox continues to focus on your right to privacy — we call it the Personal Data Promise: Take less. Keep it safe. No secrets. Your data, your web activity, your life online is protected with Firefox.\r\n\r\nHOW FIREFOX COMPARES TO OTHER BROWSERS\r\nWhen it comes to all-around performance — speed, design, utility, ease of use, and a steadfast commitment to your privacy — no browser beats Firefox. And being backed by a non-profit means that unlike other browsers, we have no financial stake in following you around the web.\r\n\r\nPICK UP RIGHT WHERE YOU LEFT OFF\r\nStart using Firefox on your phone then switch to the Firefox browser on your computer. With Firefox across your devices you can take your bookmarks, saved logins and browsing history wherever you go. Firefox browser also takes the guesswork out of passwords by remembering your passwords across devices.\r\n\r\nKEEP FACEBOOK OFF YOUR BACK\r\nBuilt for Firefox, the Facebook Container extension helps to stop Facebook from collecting your personal data and web activity when you’re outside of Facebook — yes, they’re actually doing this.\r\n\r\nYOUR SAVE BUTTON FOR THE INTERNET\r\nHit the Pocket button when you come across an interesting article, video, recipe — you know, the good stuff on the internet — but just don’t have the time. Pocket stashes it in your own private, distraction-free space to dive into later.\r\n\r\nMULTITASKING MADE EASY\r\nPlay a video in a separate, scalable window that pins to the front of your desktop with the Picture-in-Picture feature. It stays and plays while you go about your other business on other tabs or do things outside of Firefox. \r\n\r\nEXTENSIONS FOR EVERY INTEREST\r\nFrom security to news to gaming, there’s an extension for everyone. Add as many as you want until your browser is just right.\r\n\r\nCHALLENGING THE STATUS QUO SINCE 1998\r\nFirefox was created by Mozilla as a faster, more private alternative to browsers like Microsoft Edge and Google Chrome. Our mission-driven company and volunteer community continue to put your privacy above all else."",""Tags"":[],""Agreements"":[{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Category"",""Agreement"":""Productivity""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Pricing"",""Agreement"":""Free""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Free Trial"",""Agreement"":""No""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Terms of Transaction"",""AgreementUrl"":""https://aka.ms/microsoft-store-terms-of-transaction""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Seizure Warning"",""AgreementUrl"":""https://aka.ms/microsoft-store-seizure-warning""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.AgreementDetail, StoreEdgeFD"",""AgreementLabel"":""Store License Terms"",""AgreementUrl"":""https://aka.ms/microsoft-store-license""}]},""Installers"":[{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.BigCatInstaller, StoreEdgeFD"",""MSStoreProductIdentifier"":""9NZVDKPMR9RD"",""Architecture"":""x86"",""InstallerType"":""msstore"",""Markets"":{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.Markets, StoreEdgeFD"",""AllowedMarkets"":[""US""]},""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""Scope"":""user""},{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.BigCatInstaller, StoreEdgeFD"",""MSStoreProductIdentifier"":""9NZVDKPMR9RD"",""Architecture"":""x64"",""InstallerType"":""msstore"",""Markets"":{""$type"":""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.PackageManifest.Markets, StoreEdgeFD"",""AllowedMarkets"":[""US""]},""PackageFamilyName"":""Mozilla.Firefox_n80bbvh6b1yt2"",""Scope"":""user""}]}]}}"; - - var httpClient = Substitute.For(); - var logger = Substitute.For>(); - var client = new MicrosoftStoreClient(httpClient, logger); - var cancellationToken = new CancellationToken(); - - var fakeResponse = new HttpResponseMessage - { - Content = new StringContent(responseData, Encoding.UTF8, "application/json") - }; - - httpClient.SendAsync(Arg.Is(req => - req.Method == HttpMethod.Get - && req.RequestUri == new Uri($"https://storeedgefd.dsx.mp.microsoft.com/v9.0/packageManifests/{packageId}")), cancellationToken) - .Returns(fakeResponse); - - // Act - var result = await client.GetManifestAsync(packageId, cancellationToken); - - // Assert - Assert.NotNull(result); - Assert.Equal(packageId, result.Data.PackageIdentifier); - Assert.Equal("Mozilla Firefox", result.Data.Versions[0].DefaultLocale.PackageName); - } - - [Fact] - public async Task GetPackageIdForFirstMatchAsync_ReturnsExpectedResult() - { - // Arrange - var httpClient = Substitute.For(); - var logger = Substitute.For>(); - var client = new MicrosoftStoreClient(httpClient, logger); - var cancellationToken = new CancellationToken(); - - var expectedResponse = new HttpResponseMessage - { - Content = new StringContent( - @"{ - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchResponse, StoreEdgeFD"", - ""Data"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchData, StoreEdgeFD"", - ""PackageIdentifier"": ""9NZVDKPMR9RD"", - ""PackageName"": ""Mozilla Firefox"", - ""Publisher"": ""Mozilla"", - ""Versions"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchVersion, StoreEdgeFD"", - ""PackageVersion"": ""Unknown"", - ""PackageFamilyNames"": [ - ""Mozilla.Firefox_n80bbvh6b1yt2"" - ] - } - ] - } - ] - }", Encoding.UTF8, "application/json") - }; - - httpClient.SendAsync(Arg.Is(req => - req.Method == HttpMethod.Post - && req.RequestUri == new Uri("https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch")), cancellationToken) - .Returns(expectedResponse); - - // Act - var result = await client.GetPackageIdForFirstMatchAsync("FireFox", cancellationToken); - - // Assert - Assert.Equal("9NZVDKPMR9RD", result); - } - - [Fact] - public async Task Search_ReturnsExpectedResult() - { - // Arrange - var httpClient = Substitute.For(); - var logger = Substitute.For>(); - var client = new MicrosoftStoreClient(httpClient, logger); - var cancellationToken = new CancellationToken(); - - var expectedResponse = new HttpResponseMessage - { - Content = new StringContent( - @"{ - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchResponse, StoreEdgeFD"", - ""Data"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchData, StoreEdgeFD"", - ""PackageIdentifier"": ""9NZVDKPMR9RD"", - ""PackageName"": ""Mozilla Firefox"", - ""Publisher"": ""Mozilla"", - ""Versions"": [ - { - ""$type"": ""Microsoft.Marketplace.Storefront.StoreEdgeFD.BusinessLogic.Response.ManifestSearch.ManifestSearchVersion, StoreEdgeFD"", - ""PackageVersion"": ""Unknown"", - ""PackageFamilyNames"": [ - ""Mozilla.Firefox_n80bbvh6b1yt2"" - ] - } - ] - } - ] - }", Encoding.UTF8, "application/json") - }; - - httpClient.SendAsync(Arg.Is(req => - req.Method == HttpMethod.Post - && req.RequestUri == new Uri("https://storeedgefd.dsx.mp.microsoft.com/v9.0/manifestSearch")), cancellationToken) - .Returns(expectedResponse); - - // Act - var result = await client.Search("FireFox", cancellationToken); - - // Assert - Assert.NotNull(result); - Assert.Equal("Mozilla Firefox", result?.Data.FirstOrDefault()?.PackageName); - Assert.Equal("9NZVDKPMR9RD", result?.Data.FirstOrDefault()?.PackageIdentifier); - } - -} diff --git a/tests/WingetIntune.Tests/packages.lock.json b/tests/WingetIntune.Tests/packages.lock.json index ed50961..189cdc9 100644 --- a/tests/WingetIntune.Tests/packages.lock.json +++ b/tests/WingetIntune.Tests/packages.lock.json @@ -317,11 +317,10 @@ }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "7ZxIrX23NZXqmYZyUCmjtDYnY6Wc9pkKWsItIxxSQ5Obea4xqX0AGRInxP8tsV5Z5t67RkVcM1O2zATRDJh1fA==", + "resolved": "1.9.9", + "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", "dependencies": { - "Std.UriTemplate": "0.0.46", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)" + "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { @@ -336,12 +335,10 @@ }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.3.3", - "contentHash": "X+rkl///PgQawQyQGNtZHoY2rhcOc6BngOwK75098HUViJr1IuLc06k5Rq2eRPN0rdngWWyHwM5wC/96V04geQ==", + "resolved": "1.9.9", + "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.0, 9.0.0)", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Form": { @@ -354,11 +351,10 @@ }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "n421mk9agwBeHhAkeQIwRc3bjRE4oEPM1/CTxuiUZkd8ni4PN0Tabp3PPCjsuNmqcZXLleUh2nG/JBCoRizdzA==", + "resolved": "1.9.9", + "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Text.Json": "[6.0.0, 9.0.0)" + "Microsoft.Kiota.Abstractions": "1.9.9" } }, "Microsoft.Kiota.Serialization.Multipart": { @@ -424,8 +420,8 @@ }, "Std.UriTemplate": { "type": "Transitive", - "resolved": "0.0.46", - "contentHash": "/cCCMsB3i+MVt5LTbl236dnFd/BE4dKzzzC1teGTpAHzwPTiLIuD5hioGgtPuli/enAj8Dhmt/e9JlVUIITIgQ==" + "resolved": "1.0.3", + "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, "SvRooij.ContentPrep": { "type": "Transitive", @@ -604,20 +600,13 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encodings.Web": "6.0.0" - } + "resolved": "4.7.2", + "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" }, "System.Threading.Tasks": { "type": "Transitive", @@ -700,8 +689,18 @@ "Riok.Mapperly": "[3.5.1, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } + }, + "wintuner.proxy.client": { + "type": "Project", + "dependencies": { + "Microsoft.Extensions.Http": "[8.0.0, )", + "Microsoft.Kiota.Abstractions": "[1.9.9, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + } } } } From 6765e80443035670df8f71a11116f436ec78f132 Mon Sep 17 00:00:00 2001 From: Stephan van Rooij <1292510+svrooij@users.noreply.github.com> Date: Wed, 24 Jul 2024 18:06:01 +0200 Subject: [PATCH 2/4] Pacakge updates --- .../Svrooij.WinTuner.CmdLets.csproj | 2 +- .../packages.lock.json | 325 +++----- .../WinTuner.Proxy.Client.csproj | 12 +- .../Winget.CommunityRepository.csproj | 2 +- src/WingetIntune.Cli/WingetIntune.Cli.csproj | 2 +- src/WingetIntune.Cli/packages.lock.json | 317 +++----- src/WingetIntune/WingetIntune.csproj | 12 +- src/WingetIntune/packages.lock.json | 698 ++++++------------ .../WingetIntune.Tests.csproj | 4 +- tests/WingetIntune.Tests/packages.lock.json | 358 +++------ 10 files changed, 538 insertions(+), 1194 deletions(-) diff --git a/src/Svrooij.WinTuner.CmdLets/Svrooij.WinTuner.CmdLets.csproj b/src/Svrooij.WinTuner.CmdLets/Svrooij.WinTuner.CmdLets.csproj index 4ad79d1..e6c48f5 100644 --- a/src/Svrooij.WinTuner.CmdLets/Svrooij.WinTuner.CmdLets.csproj +++ b/src/Svrooij.WinTuner.CmdLets/Svrooij.WinTuner.CmdLets.csproj @@ -13,7 +13,7 @@ - + All diff --git a/src/Svrooij.WinTuner.CmdLets/packages.lock.json b/src/Svrooij.WinTuner.CmdLets/packages.lock.json index e489f72..72cd2d2 100644 --- a/src/Svrooij.WinTuner.CmdLets/packages.lock.json +++ b/src/Svrooij.WinTuner.CmdLets/packages.lock.json @@ -4,11 +4,11 @@ "net6.0": { "Azure.Identity": { "type": "Direct", - "requested": "[1.11.4, )", - "resolved": "1.11.4", - "contentHash": "Sf4BoE6Q3jTgFkgBkx7qztYOFELBCo+wQgpYDwal/qJ1unBH73ywPztIJKXBXORRzAeNijsuxhk94h0TIMvfYg==", + "requested": "[1.12.0, )", + "resolved": "1.12.0", + "contentHash": "OBIM3aPz8n9oEO5fdnee+Vsc5Nl4W3FeslPpESyDiyByntQI5BAa76KD60eFXm9ulevnwxGZP9YXL8Y+paI5Uw==", "dependencies": { - "Azure.Core": "1.38.0", + "Azure.Core": "1.40.0", "Microsoft.Identity.Client": "4.61.3", "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", "System.Memory": "4.5.4", @@ -60,8 +60,8 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.38.0", - "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", + "resolved": "1.41.0", + "contentHash": "7OO8rPCVSvXj2IQET3NkRf8hU2ZDCCvCIUhlrE089qkLNpNfWufJnBwHRKLAOWF3bhKBGJS/9hPBgjJ8kupUIg==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "System.ClientModel": "1.0.0", @@ -242,33 +242,31 @@ }, "Microsoft.Graph.Beta": { "type": "Transitive", - "resolved": "5.59.0-preview", - "contentHash": "Qx/vwDlDWSpeWQme0E/xByA48/5EjyZ8L4S6Arb/LPuaZv/bNcciefo9s/LUHXfC9Ep9cOck+HdseZBAJd7/tg==", + "resolved": "5.78.0-preview", + "contentHash": "HD7wd1Tfmdtj8x0t2RohAjD9gNQxRP52id8hrY/L0EiXUj0/qG9OOKSccIfI3ATgrRZAYqKhedhbyNxO88txow==", "dependencies": { - "Microsoft.Graph.Core": "3.1.3" + "Microsoft.Graph.Core": "3.1.12" } }, "Microsoft.Graph.Core": { "type": "Transitive", - "resolved": "3.1.3", - "contentHash": "sysGvd+1vggJKIc5kfiDuwpMlJJaTwIK+uYA2MEo3PJp3asP8G2U+W0NFQvxANLUDipLTd2zofCbfRCVUjA4Ag==", + "resolved": "3.1.14", + "contentHash": "rZbrwUzeBi7yBA7V2P9j9VRSfgpgY/cVjLhSURH4sMOOQHtriYYfvBetRe8McC5eLpNn+T9IKNrRyyvkt/YVLQ==", "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.0.3", - "Microsoft.Kiota.Abstractions": "1.7.2", - "Microsoft.Kiota.Authentication.Azure": "1.1.2", - "Microsoft.Kiota.Http.HttpClientLibrary": "1.3.3", - "Microsoft.Kiota.Serialization.Form": "1.1.1", - "Microsoft.Kiota.Serialization.Json": "1.1.2", - "Microsoft.Kiota.Serialization.Multipart": "1.1.1", - "Microsoft.Kiota.Serialization.Text": "1.1.1", - "NETStandard.Library": "2.0.3", - "System.Security.Claims": "4.3.0" + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1", + "Microsoft.Kiota.Abstractions": "1.9.11", + "Microsoft.Kiota.Authentication.Azure": "1.9.11", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.9.11", + "Microsoft.Kiota.Serialization.Form": "1.9.11", + "Microsoft.Kiota.Serialization.Json": "1.9.11", + "Microsoft.Kiota.Serialization.Multipart": "1.9.11", + "Microsoft.Kiota.Serialization.Text": "1.9.11" } }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", + "resolved": "4.62.0", + "contentHash": "2q5m8ASh9lJ714CkCxA1lmj60K6OeDR2vV78adviOM/ZEoISldY+THr7gmqJ6rtSbZ0J4R/a9KcgL/wm8Ogi4Q==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -276,19 +274,19 @@ }, "Microsoft.Identity.Client.Broker": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "VX8YJYmjNZzWjLuwAwBWzTtfNRTqjj5DKPEci6eNa2tedBWSyOGvcsVMVUL/vy1oRSAjfpwzUIFlXCmhWnCAeA==", + "resolved": "4.62.0", + "contentHash": "D5iSJglKXJzeCb2/UAPGVkqRLHk6512iojDoyjEeLi8e89jE3QZykIVkkZNkFpuVXsVebyrkA87YHr+DJOvvUQ==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "Microsoft.Identity.Client.NativeInterop": "0.16.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "resolved": "4.62.0", + "contentHash": "ylCHQwNpT+YYu4Le+r0x5XRHKsFtIgIIAHshDWIlgeA/AoFs/9yREdtSeIELdN7X3lJAIiUjJR8z7r7KJ3ETLw==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -299,107 +297,105 @@ }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "q4MZ8d0LlWKWtQfxNl9ZRZVOQ7IPEAR6CF4rFKITfuqEUOhqrbwHbqBanReI37155IKb8V/tPJqpPa3KXm9wQQ==" + "resolved": "8.0.1", + "contentHash": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "lsleZbCuh3wZ3RfKd8WJ7E52nIeQQzJsDrgHN+B3Zhzd32UTQ1V3Vjn1N9PssnSulAoEMF0aAiue7ucX+TPoQA==", + "resolved": "8.0.1", + "contentHash": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "7.6.0" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "7AVJhNY4y/i96XGfaXovX8aAyYWz6HHtPEPHPpbg5JCchwVaoO08VmmpHe0L2gVagW/iHG0w4a4Xg9gxLXQ/8A==", + "resolved": "8.0.1", + "contentHash": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "7.6.0" + "Microsoft.IdentityModel.Abstractions": "8.0.1" } }, "Microsoft.IdentityModel.Protocols": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "BtwR+tctBYhPNygyZmt1Rnw74GFrJteW+1zcdIgyvBCjkek6cNwPPqRfdhzCv61i+lwyNomRi8+iI4QKd4YCKA==", + "resolved": "8.0.1", + "contentHash": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.0.3", - "Microsoft.IdentityModel.Tokens": "7.0.3" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Protocols.OpenIdConnect": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "W97TraHApDNArLwpPcXfD+FZH7njJsfEwZE9y9BoofeXMS8H0LBBobz0VOmYmMK4mLdOKxzN7SFT3Ekg0FWI3Q==", + "resolved": "8.0.1", + "contentHash": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==", "dependencies": { - "Microsoft.IdentityModel.Protocols": "7.0.3", - "System.IdentityModel.Tokens.Jwt": "7.0.3" + "Microsoft.IdentityModel.Protocols": "8.0.1", + "System.IdentityModel.Tokens.Jwt": "8.0.1" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "xvEil42RUe4Si/TuLDvglNXpklgCWMSecPduczXPS2BAypjheUehPqKLwIy8vSdzB4K2zza3yLgmODBt+J6ZxQ==", + "resolved": "8.0.1", + "contentHash": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.6.0" + "Microsoft.IdentityModel.Logging": "8.0.1" } }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", + "resolved": "1.9.11", + "contentHash": "gzQFUyle28Efl2qP9HYrI9+WqSJOjA2HFmVuDXSONtfwL+AvkzaSE4V7YUVbj5DLzmBNuDwCFf6+kN8x2e+Huw==", "dependencies": { "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "Dzc6h9pSHKCJPjJ4RnEs2liL4vVO/O7Oh8XolMHB7c+4/bkdvOdWS9UYz5uMtP4Q+zgnUF3KO/0WvJSA4nbiNw==", + "resolved": "1.9.11", + "contentHash": "dZ161I/Mo+dSwtU+eiwYuwfzi0ZSi3sSBeuMYo7SU8F4nwoo4VDTTtXzpdyd91Lzs2AMMG9eyD1hjXaFQvHufw==", "dependencies": { - "Azure.Core": "1.36.0", - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.1, 9.0.0)" + "Azure.Core": "1.41.0", + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", + "resolved": "1.9.11", + "contentHash": "dOLWQHUGZgXhFPvow36Yq7SugxPZ7evoqrv8zkO3iwHP3KA0R8nQrrIs6WTubyLURz1fqQ/1ET0sxArPoVmjsQ==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Form": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "/j0B30rmLUoan6ckekHmPe6H0xJ3nCkn5RfgFfJkDnJiLO15N57+NTDgjGPbdwqRafQGyvJUmuON2APVZIdQhA==", + "resolved": "1.9.11", + "contentHash": "/8OzXep6dRZSd+emkIv3wbW9aAwc8Esd2O5Rx44CYMLNb4DNTmHEaQ9CD1zQML8DoIKCVy3DICWGfJbjHk/y7Q==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", + "resolved": "1.9.11", + "contentHash": "XR9J9GR2fnv43g85KmdnzMcoQBFIbCWS+lk2pb8/D7tokiWb754G2QumtzPtA3k0xPVlXC3X/Apz0cSv4RiQQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Multipart": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "+31xiVWveV9/8qGlm+STiwVVN74tpwJvXq2Q2MZGDQCWZ1j+aDr4y5auOw0l1yr2nD+1jjyjU239101Pu6ECgw==", + "resolved": "1.9.11", + "contentHash": "R/zw1z76kR9bboJNbhmrsHzSnvcqHo4YPUc9ZzxkGKz3HymSbRUsOcjBpFewmTVBZgl+fXzRtxuViMJVzzLlQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Text": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "6iA04gp7BhbgkLjKJ9wq+/87zI5DROSkakQ5cenlUKMUySTHkleLI7f0r57BNHi+sCtQu5Am3+h40G85yJwhug==", + "resolved": "1.9.11", + "contentHash": "NpTuo28GK6A+DB04jBAQS4XlURdtI6/bgKhpG+WKO8NB28igJTcRnfotW9sop0amViEy+eccUE/0zX9kmfVezg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Management.Infrastructure": { @@ -434,11 +430,6 @@ "resolved": "7.0.4", "contentHash": "yLEHlNN7O5WiND89r42sepgVwy5W/ZoTiFEdJDV7MHR1lW02LL7Nipz2TD5qM/Kx9W3/k3NP+PAP2qUdOm+leg==" }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, "Microsoft.NETCore.Windows.ApiSets": { "type": "Transitive", "resolved": "1.0.1", @@ -602,14 +593,6 @@ "Microsoft.CSharp": "4.3.0" } }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, "Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.3", @@ -626,8 +609,8 @@ }, "Riok.Mapperly": { "type": "Transitive", - "resolved": "3.5.1", - "contentHash": "ECFSdemqIN7HoCu8lOtGYW15fYK5XgSg9tpaspdevi4rj6Z4KomMQz6bKID1L5WMHxjyexix250wP5eAF0iKNw==" + "resolved": "3.6.0", + "contentHash": "eQkT3evicd5fdb8HgAJjJ+uvbhfA76ozZZsBtounFrOvk0mj+9tozv1hCYV0f0cTmXIZsxtU93FMWPzd76wSaw==" }, "runtime.linux-arm.runtime.native.System.IO.Ports": { "type": "Transitive", @@ -720,16 +703,6 @@ "resolved": "6.0.0", "contentHash": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==" }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Collections.Immutable": { "type": "Transitive", "resolved": "5.0.0", @@ -844,35 +817,13 @@ "resolved": "6.0.0", "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==" }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "LIuEbv/kFpuw00yI/mPu+T9NAVdH/u7Y5ChCGzYQQeCg9Pft2C7HFWuO/P+Z7c2RcySNjVk1FmuAheKjYIbOkw==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "7.6.0", - "Microsoft.IdentityModel.Tokens": "7.6.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "resolved": "8.0.1", + "contentHash": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" + "Microsoft.IdentityModel.JsonWebTokens": "8.0.1", + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "System.IO.Packaging": { @@ -956,18 +907,6 @@ "System.Security.Principal.Windows": "5.0.0" } }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, "System.Reflection.Context": { "type": "Transitive", "resolved": "6.0.0", @@ -983,37 +922,6 @@ "resolved": "5.0.0", "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==" }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, "System.Runtime.Caching": { "type": "Transitive", "resolved": "6.0.0", @@ -1027,35 +935,11 @@ "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Security.AccessControl": { "type": "Transitive", "resolved": "6.0.1", "contentHash": "IQ4NXP/B3Ayzvw0rDQzVTYsCKyy0Jp9KI6aYcK7UnGVlR9+Awz++TIPCQtPYfLJfOpm8ajowMR09V7quD3sEHw==" }, - "System.Security.Claims": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", "resolved": "6.0.4", @@ -1087,14 +971,6 @@ "System.Windows.Extensions": "6.0.0" } }, - "System.Security.Principal": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, "System.Security.Principal.Windows": { "type": "Transitive", "resolved": "5.0.0", @@ -1162,16 +1038,6 @@ "resolved": "6.0.0", "contentHash": "GQovERMrNP0Vbtgk8LzH4PlFS6lqHgsL9WkUmv8Kkxa0m0vNakitytpHZlfJ9WR7n9WKLXh68nn2kyL9mflnLg==" }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Text.Encoding.CodePages": { "type": "Transitive", "resolved": "6.0.0", @@ -1182,16 +1048,20 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0" + } }, "System.Threading.AccessControl": { "type": "Transitive", @@ -1201,16 +1071,6 @@ "System.Security.AccessControl": "6.0.0" } }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Threading.Tasks.Extensions": { "type": "Transitive", "resolved": "4.5.4", @@ -1231,30 +1091,32 @@ }, "YamlDotNet": { "type": "Transitive", - "resolved": "15.1.4", - "contentHash": "IjWucOgVbhm72da0Ck3KcyvMuKT/TfilHcvtwvhLLnkn2zr5st8BkH3lDoY5lkMH9Z3jsJeLDrnBS4GpAViUqg==" + "resolved": "16.0.0", + "contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw==" }, "winget.communityrepository": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", - "YamlDotNet": "[15.1.4, )" + "YamlDotNet": "[16.0.0, )" } }, "wingetintune": { "type": "Project", "dependencies": { + "Azure.Core": "[1.41.0, )", "Microsoft.Bcl.AsyncInterfaces": "[8.0.0, )", "Microsoft.CSharp": "[4.7.0, )", "Microsoft.Extensions.Http": "[8.0.0, )", "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", "Microsoft.Extensions.Options": "[8.0.2, )", - "Microsoft.Graph.Beta": "[5.59.0-preview, )", - "Microsoft.Identity.Client.Broker": "[4.61.3, )", - "Microsoft.Identity.Client.Extensions.Msal": "[4.61.3, )", - "Riok.Mapperly": "[3.5.1, )", + "Microsoft.Graph.Beta": "[5.78.0-preview, )", + "Microsoft.Graph.Core": "[3.1.14, )", + "Microsoft.Identity.Client.Broker": "[4.62.0, )", + "Microsoft.Identity.Client.Extensions.Msal": "[4.62.0, )", + "Riok.Mapperly": "[3.6.0, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", - "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "System.IdentityModel.Tokens.Jwt": "[8.0.1, )", "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } @@ -1263,9 +1125,10 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Http": "[8.0.0, )", - "Microsoft.Kiota.Abstractions": "[1.9.9, )", - "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", - "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + "Microsoft.Kiota.Abstractions": "[1.9.11, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.11, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.11, )", + "System.Text.Json": "[8.0.4, )" } } } diff --git a/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj b/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj index 0d675b4..416ad34 100644 --- a/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj +++ b/src/WinTuner.Proxy.Client/WinTuner.Proxy.Client.csproj @@ -8,17 +8,18 @@ - - - + + + + - + @@ -27,8 +28,7 @@ - + diff --git a/src/Winget.CommunityRepository/Winget.CommunityRepository.csproj b/src/Winget.CommunityRepository/Winget.CommunityRepository.csproj index fc1fd9c..c58dd91 100644 --- a/src/Winget.CommunityRepository/Winget.CommunityRepository.csproj +++ b/src/Winget.CommunityRepository/Winget.CommunityRepository.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/WingetIntune.Cli/WingetIntune.Cli.csproj b/src/WingetIntune.Cli/WingetIntune.Cli.csproj index 4ce2053..cb21629 100644 --- a/src/WingetIntune.Cli/WingetIntune.Cli.csproj +++ b/src/WingetIntune.Cli/WingetIntune.Cli.csproj @@ -40,7 +40,7 @@ - + diff --git a/src/WingetIntune.Cli/packages.lock.json b/src/WingetIntune.Cli/packages.lock.json index 947027a..cb390dd 100644 --- a/src/WingetIntune.Cli/packages.lock.json +++ b/src/WingetIntune.Cli/packages.lock.json @@ -4,11 +4,11 @@ "net8.0": { "Azure.Identity": { "type": "Direct", - "requested": "[1.11.4, )", - "resolved": "1.11.4", - "contentHash": "Sf4BoE6Q3jTgFkgBkx7qztYOFELBCo+wQgpYDwal/qJ1unBH73ywPztIJKXBXORRzAeNijsuxhk94h0TIMvfYg==", + "requested": "[1.12.0, )", + "resolved": "1.12.0", + "contentHash": "OBIM3aPz8n9oEO5fdnee+Vsc5Nl4W3FeslPpESyDiyByntQI5BAa76KD60eFXm9ulevnwxGZP9YXL8Y+paI5Uw==", "dependencies": { - "Azure.Core": "1.38.0", + "Azure.Core": "1.40.0", "Microsoft.Identity.Client": "4.61.3", "Microsoft.Identity.Client.Extensions.Msal": "4.61.3", "System.Memory": "4.5.4", @@ -56,8 +56,8 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.38.0", - "contentHash": "IuEgCoVA0ef7E4pQtpC3+TkPbzaoQfa77HlfJDmfuaJUCVJmn7fT0izamZiryW5sYUFKizsftIxMkXKbgIcPMQ==", + "resolved": "1.41.0", + "contentHash": "7OO8rPCVSvXj2IQET3NkRf8hU2ZDCCvCIUhlrE089qkLNpNfWufJnBwHRKLAOWF3bhKBGJS/9hPBgjJ8kupUIg==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "System.ClientModel": "1.0.0", @@ -447,33 +447,31 @@ }, "Microsoft.Graph.Beta": { "type": "Transitive", - "resolved": "5.59.0-preview", - "contentHash": "Qx/vwDlDWSpeWQme0E/xByA48/5EjyZ8L4S6Arb/LPuaZv/bNcciefo9s/LUHXfC9Ep9cOck+HdseZBAJd7/tg==", + "resolved": "5.78.0-preview", + "contentHash": "HD7wd1Tfmdtj8x0t2RohAjD9gNQxRP52id8hrY/L0EiXUj0/qG9OOKSccIfI3ATgrRZAYqKhedhbyNxO88txow==", "dependencies": { - "Microsoft.Graph.Core": "3.1.3" + "Microsoft.Graph.Core": "3.1.12" } }, "Microsoft.Graph.Core": { "type": "Transitive", - "resolved": "3.1.3", - "contentHash": "sysGvd+1vggJKIc5kfiDuwpMlJJaTwIK+uYA2MEo3PJp3asP8G2U+W0NFQvxANLUDipLTd2zofCbfRCVUjA4Ag==", + "resolved": "3.1.14", + "contentHash": "rZbrwUzeBi7yBA7V2P9j9VRSfgpgY/cVjLhSURH4sMOOQHtriYYfvBetRe8McC5eLpNn+T9IKNrRyyvkt/YVLQ==", "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.0.3", - "Microsoft.Kiota.Abstractions": "1.7.2", - "Microsoft.Kiota.Authentication.Azure": "1.1.2", - "Microsoft.Kiota.Http.HttpClientLibrary": "1.3.3", - "Microsoft.Kiota.Serialization.Form": "1.1.1", - "Microsoft.Kiota.Serialization.Json": "1.1.2", - "Microsoft.Kiota.Serialization.Multipart": "1.1.1", - "Microsoft.Kiota.Serialization.Text": "1.1.1", - "NETStandard.Library": "2.0.3", - "System.Security.Claims": "4.3.0" + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1", + "Microsoft.Kiota.Abstractions": "1.9.11", + "Microsoft.Kiota.Authentication.Azure": "1.9.11", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.9.11", + "Microsoft.Kiota.Serialization.Form": "1.9.11", + "Microsoft.Kiota.Serialization.Json": "1.9.11", + "Microsoft.Kiota.Serialization.Multipart": "1.9.11", + "Microsoft.Kiota.Serialization.Text": "1.9.11" } }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", + "resolved": "4.62.0", + "contentHash": "2q5m8ASh9lJ714CkCxA1lmj60K6OeDR2vV78adviOM/ZEoISldY+THr7gmqJ6rtSbZ0J4R/a9KcgL/wm8Ogi4Q==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -481,19 +479,19 @@ }, "Microsoft.Identity.Client.Broker": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "VX8YJYmjNZzWjLuwAwBWzTtfNRTqjj5DKPEci6eNa2tedBWSyOGvcsVMVUL/vy1oRSAjfpwzUIFlXCmhWnCAeA==", + "resolved": "4.62.0", + "contentHash": "D5iSJglKXJzeCb2/UAPGVkqRLHk6512iojDoyjEeLi8e89jE3QZykIVkkZNkFpuVXsVebyrkA87YHr+DJOvvUQ==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "Microsoft.Identity.Client.NativeInterop": "0.16.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "resolved": "4.62.0", + "contentHash": "ylCHQwNpT+YYu4Le+r0x5XRHKsFtIgIIAHshDWIlgeA/AoFs/9yREdtSeIELdN7X3lJAIiUjJR8z7r7KJ3ETLw==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -504,107 +502,105 @@ }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "q4MZ8d0LlWKWtQfxNl9ZRZVOQ7IPEAR6CF4rFKITfuqEUOhqrbwHbqBanReI37155IKb8V/tPJqpPa3KXm9wQQ==" + "resolved": "8.0.1", + "contentHash": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "lsleZbCuh3wZ3RfKd8WJ7E52nIeQQzJsDrgHN+B3Zhzd32UTQ1V3Vjn1N9PssnSulAoEMF0aAiue7ucX+TPoQA==", + "resolved": "8.0.1", + "contentHash": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "7.6.0" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "7AVJhNY4y/i96XGfaXovX8aAyYWz6HHtPEPHPpbg5JCchwVaoO08VmmpHe0L2gVagW/iHG0w4a4Xg9gxLXQ/8A==", + "resolved": "8.0.1", + "contentHash": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "7.6.0" + "Microsoft.IdentityModel.Abstractions": "8.0.1" } }, "Microsoft.IdentityModel.Protocols": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "BtwR+tctBYhPNygyZmt1Rnw74GFrJteW+1zcdIgyvBCjkek6cNwPPqRfdhzCv61i+lwyNomRi8+iI4QKd4YCKA==", + "resolved": "8.0.1", + "contentHash": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.0.3", - "Microsoft.IdentityModel.Tokens": "7.0.3" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Protocols.OpenIdConnect": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "W97TraHApDNArLwpPcXfD+FZH7njJsfEwZE9y9BoofeXMS8H0LBBobz0VOmYmMK4mLdOKxzN7SFT3Ekg0FWI3Q==", + "resolved": "8.0.1", + "contentHash": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==", "dependencies": { - "Microsoft.IdentityModel.Protocols": "7.0.3", - "System.IdentityModel.Tokens.Jwt": "7.0.3" + "Microsoft.IdentityModel.Protocols": "8.0.1", + "System.IdentityModel.Tokens.Jwt": "8.0.1" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "xvEil42RUe4Si/TuLDvglNXpklgCWMSecPduczXPS2BAypjheUehPqKLwIy8vSdzB4K2zza3yLgmODBt+J6ZxQ==", + "resolved": "8.0.1", + "contentHash": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.6.0" + "Microsoft.IdentityModel.Logging": "8.0.1" } }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", + "resolved": "1.9.11", + "contentHash": "gzQFUyle28Efl2qP9HYrI9+WqSJOjA2HFmVuDXSONtfwL+AvkzaSE4V7YUVbj5DLzmBNuDwCFf6+kN8x2e+Huw==", "dependencies": { "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "Dzc6h9pSHKCJPjJ4RnEs2liL4vVO/O7Oh8XolMHB7c+4/bkdvOdWS9UYz5uMtP4Q+zgnUF3KO/0WvJSA4nbiNw==", + "resolved": "1.9.11", + "contentHash": "dZ161I/Mo+dSwtU+eiwYuwfzi0ZSi3sSBeuMYo7SU8F4nwoo4VDTTtXzpdyd91Lzs2AMMG9eyD1hjXaFQvHufw==", "dependencies": { - "Azure.Core": "1.36.0", - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.1, 9.0.0)" + "Azure.Core": "1.41.0", + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", + "resolved": "1.9.11", + "contentHash": "dOLWQHUGZgXhFPvow36Yq7SugxPZ7evoqrv8zkO3iwHP3KA0R8nQrrIs6WTubyLURz1fqQ/1ET0sxArPoVmjsQ==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Form": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "/j0B30rmLUoan6ckekHmPe6H0xJ3nCkn5RfgFfJkDnJiLO15N57+NTDgjGPbdwqRafQGyvJUmuON2APVZIdQhA==", + "resolved": "1.9.11", + "contentHash": "/8OzXep6dRZSd+emkIv3wbW9aAwc8Esd2O5Rx44CYMLNb4DNTmHEaQ9CD1zQML8DoIKCVy3DICWGfJbjHk/y7Q==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", + "resolved": "1.9.11", + "contentHash": "XR9J9GR2fnv43g85KmdnzMcoQBFIbCWS+lk2pb8/D7tokiWb754G2QumtzPtA3k0xPVlXC3X/Apz0cSv4RiQQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Multipart": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "+31xiVWveV9/8qGlm+STiwVVN74tpwJvXq2Q2MZGDQCWZ1j+aDr4y5auOw0l1yr2nD+1jjyjU239101Pu6ECgw==", + "resolved": "1.9.11", + "contentHash": "R/zw1z76kR9bboJNbhmrsHzSnvcqHo4YPUc9ZzxkGKz3HymSbRUsOcjBpFewmTVBZgl+fXzRtxuViMJVzzLlQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Text": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "6iA04gp7BhbgkLjKJ9wq+/87zI5DROSkakQ5cenlUKMUySTHkleLI7f0r57BNHi+sCtQu5Am3+h40G85yJwhug==", + "resolved": "1.9.11", + "contentHash": "NpTuo28GK6A+DB04jBAQS4XlURdtI6/bgKhpG+WKO8NB28igJTcRnfotW9sop0amViEy+eccUE/0zX9kmfVezg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.NETCore.Platforms": { @@ -612,23 +608,10 @@ "resolved": "7.0.4", "contentHash": "yLEHlNN7O5WiND89r42sepgVwy5W/ZoTiFEdJDV7MHR1lW02LL7Nipz2TD5qM/Kx9W3/k3NP+PAP2qUdOm+leg==" }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, "Riok.Mapperly": { "type": "Transitive", - "resolved": "3.5.1", - "contentHash": "ECFSdemqIN7HoCu8lOtGYW15fYK5XgSg9tpaspdevi4rj6Z4KomMQz6bKID1L5WMHxjyexix250wP5eAF0iKNw==" + "resolved": "3.6.0", + "contentHash": "eQkT3evicd5fdb8HgAJjJ+uvbhfA76ozZZsBtounFrOvk0mj+9tozv1hCYV0f0cTmXIZsxtU93FMWPzd76wSaw==" }, "SQLitePCLRaw.bundle_e_sqlite3": { "type": "Transitive", @@ -684,16 +667,6 @@ "System.Text.Json": "4.7.2" } }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.CommandLine.NamingConventionBinder": { "type": "Transitive", "resolved": "2.0.0-beta4.22272.1", @@ -712,35 +685,13 @@ "resolved": "6.0.0", "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "LIuEbv/kFpuw00yI/mPu+T9NAVdH/u7Y5ChCGzYQQeCg9Pft2C7HFWuO/P+Z7c2RcySNjVk1FmuAheKjYIbOkw==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "7.6.0", - "Microsoft.IdentityModel.Tokens": "7.6.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "resolved": "8.0.1", + "contentHash": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" + "Microsoft.IdentityModel.JsonWebTokens": "8.0.1", + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "System.Memory": { @@ -762,101 +713,16 @@ "resolved": "4.5.0", "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "4.7.0", "contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==" }, - "System.Security.Principal": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Text.Encodings.Web": { "type": "Transitive", "resolved": "8.0.0", @@ -864,22 +730,12 @@ }, "System.Text.Json": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { "System.Text.Encodings.Web": "8.0.0" } }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Threading.Tasks.Extensions": { "type": "Transitive", "resolved": "4.5.4", @@ -887,14 +743,14 @@ }, "YamlDotNet": { "type": "Transitive", - "resolved": "15.1.4", - "contentHash": "IjWucOgVbhm72da0Ck3KcyvMuKT/TfilHcvtwvhLLnkn2zr5st8BkH3lDoY5lkMH9Z3jsJeLDrnBS4GpAViUqg==" + "resolved": "16.0.0", + "contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw==" }, "winget.communityrepository": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", - "YamlDotNet": "[15.1.4, )" + "YamlDotNet": "[16.0.0, )" } }, "winget.communityrepository.ef": { @@ -909,17 +765,19 @@ "wingetintune": { "type": "Project", "dependencies": { + "Azure.Core": "[1.41.0, )", "Microsoft.Bcl.AsyncInterfaces": "[8.0.0, )", "Microsoft.CSharp": "[4.7.0, )", "Microsoft.Extensions.Http": "[8.0.0, )", "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", "Microsoft.Extensions.Options": "[8.0.2, )", - "Microsoft.Graph.Beta": "[5.59.0-preview, )", - "Microsoft.Identity.Client.Broker": "[4.61.3, )", - "Microsoft.Identity.Client.Extensions.Msal": "[4.61.3, )", - "Riok.Mapperly": "[3.5.1, )", + "Microsoft.Graph.Beta": "[5.78.0-preview, )", + "Microsoft.Graph.Core": "[3.1.14, )", + "Microsoft.Identity.Client.Broker": "[4.62.0, )", + "Microsoft.Identity.Client.Extensions.Msal": "[4.62.0, )", + "Riok.Mapperly": "[3.6.0, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", - "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "System.IdentityModel.Tokens.Jwt": "[8.0.1, )", "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } @@ -928,9 +786,10 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Http": "[8.0.0, )", - "Microsoft.Kiota.Abstractions": "[1.9.9, )", - "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", - "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + "Microsoft.Kiota.Abstractions": "[1.9.11, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.11, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.11, )", + "System.Text.Json": "[8.0.4, )" } } } diff --git a/src/WingetIntune/WingetIntune.csproj b/src/WingetIntune/WingetIntune.csproj index 8079477..70f2ae9 100644 --- a/src/WingetIntune/WingetIntune.csproj +++ b/src/WingetIntune/WingetIntune.csproj @@ -24,17 +24,19 @@ + - - - - + + + + + - + diff --git a/src/WingetIntune/packages.lock.json b/src/WingetIntune/packages.lock.json index e9239f7..c9eaeed 100644 --- a/src/WingetIntune/packages.lock.json +++ b/src/WingetIntune/packages.lock.json @@ -2,6 +2,22 @@ "version": 1, "dependencies": { "net6.0": { + "Azure.Core": { + "type": "Direct", + "requested": "[1.41.0, )", + "resolved": "1.41.0", + "contentHash": "7OO8rPCVSvXj2IQET3NkRf8hU2ZDCCvCIUhlrE089qkLNpNfWufJnBwHRKLAOWF3bhKBGJS/9hPBgjJ8kupUIg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.1", + "System.Memory.Data": "1.0.2", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Direct", "requested": "[8.0.0, )", @@ -48,38 +64,54 @@ }, "Microsoft.Graph.Beta": { "type": "Direct", - "requested": "[5.59.0-preview, )", - "resolved": "5.59.0-preview", - "contentHash": "Qx/vwDlDWSpeWQme0E/xByA48/5EjyZ8L4S6Arb/LPuaZv/bNcciefo9s/LUHXfC9Ep9cOck+HdseZBAJd7/tg==", + "requested": "[5.78.0-preview, )", + "resolved": "5.78.0-preview", + "contentHash": "HD7wd1Tfmdtj8x0t2RohAjD9gNQxRP52id8hrY/L0EiXUj0/qG9OOKSccIfI3ATgrRZAYqKhedhbyNxO88txow==", "dependencies": { - "Microsoft.Graph.Core": "3.1.3" + "Microsoft.Graph.Core": "3.1.12" + } + }, + "Microsoft.Graph.Core": { + "type": "Direct", + "requested": "[3.1.14, )", + "resolved": "3.1.14", + "contentHash": "rZbrwUzeBi7yBA7V2P9j9VRSfgpgY/cVjLhSURH4sMOOQHtriYYfvBetRe8McC5eLpNn+T9IKNrRyyvkt/YVLQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1", + "Microsoft.Kiota.Abstractions": "1.9.11", + "Microsoft.Kiota.Authentication.Azure": "1.9.11", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.9.11", + "Microsoft.Kiota.Serialization.Form": "1.9.11", + "Microsoft.Kiota.Serialization.Json": "1.9.11", + "Microsoft.Kiota.Serialization.Multipart": "1.9.11", + "Microsoft.Kiota.Serialization.Text": "1.9.11" } }, "Microsoft.Identity.Client.Broker": { "type": "Direct", - "requested": "[4.61.3, )", - "resolved": "4.61.3", - "contentHash": "VX8YJYmjNZzWjLuwAwBWzTtfNRTqjj5DKPEci6eNa2tedBWSyOGvcsVMVUL/vy1oRSAjfpwzUIFlXCmhWnCAeA==", + "requested": "[4.62.0, )", + "resolved": "4.62.0", + "contentHash": "D5iSJglKXJzeCb2/UAPGVkqRLHk6512iojDoyjEeLi8e89jE3QZykIVkkZNkFpuVXsVebyrkA87YHr+DJOvvUQ==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "Microsoft.Identity.Client.NativeInterop": "0.16.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Direct", - "requested": "[4.61.3, )", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "requested": "[4.62.0, )", + "resolved": "4.62.0", + "contentHash": "ylCHQwNpT+YYu4Le+r0x5XRHKsFtIgIIAHshDWIlgeA/AoFs/9yREdtSeIELdN7X3lJAIiUjJR8z7r7KJ3ETLw==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, "Riok.Mapperly": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "ECFSdemqIN7HoCu8lOtGYW15fYK5XgSg9tpaspdevi4rj6Z4KomMQz6bKID1L5WMHxjyexix250wP5eAF0iKNw==" + "requested": "[3.6.0, )", + "resolved": "3.6.0", + "contentHash": "eQkT3evicd5fdb8HgAJjJ+uvbhfA76ozZZsBtounFrOvk0mj+9tozv1hCYV0f0cTmXIZsxtU93FMWPzd76wSaw==" }, "SvRooij.ContentPrep": { "type": "Direct", @@ -94,26 +126,12 @@ }, "System.IdentityModel.Tokens.Jwt": { "type": "Direct", - "requested": "[7.6.0, )", - "resolved": "7.6.0", - "contentHash": "LIuEbv/kFpuw00yI/mPu+T9NAVdH/u7Y5ChCGzYQQeCg9Pft2C7HFWuO/P+Z7c2RcySNjVk1FmuAheKjYIbOkw==", + "requested": "[8.0.1, )", + "resolved": "8.0.1", + "contentHash": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==", "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "7.6.0", - "Microsoft.IdentityModel.Tokens": "7.6.0" - } - }, - "Azure.Core": { - "type": "Transitive", - "resolved": "1.36.0", - "contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==", - "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "1.1.1", - "System.Diagnostics.DiagnosticSource": "6.0.1", - "System.Memory.Data": "1.0.2", - "System.Numerics.Vectors": "4.5.0", - "System.Text.Encodings.Web": "4.7.2", - "System.Text.Json": "4.7.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.IdentityModel.JsonWebTokens": "8.0.1", + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.Extensions.Configuration.Abstractions": { @@ -155,27 +173,10 @@ "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "Microsoft.Graph.Core": { - "type": "Transitive", - "resolved": "3.1.3", - "contentHash": "sysGvd+1vggJKIc5kfiDuwpMlJJaTwIK+uYA2MEo3PJp3asP8G2U+W0NFQvxANLUDipLTd2zofCbfRCVUjA4Ag==", - "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.0.3", - "Microsoft.Kiota.Abstractions": "1.7.2", - "Microsoft.Kiota.Authentication.Azure": "1.1.2", - "Microsoft.Kiota.Http.HttpClientLibrary": "1.3.3", - "Microsoft.Kiota.Serialization.Form": "1.1.1", - "Microsoft.Kiota.Serialization.Json": "1.1.2", - "Microsoft.Kiota.Serialization.Multipart": "1.1.1", - "Microsoft.Kiota.Serialization.Text": "1.1.1", - "NETStandard.Library": "2.0.3", - "System.Security.Claims": "4.3.0" - } - }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", + "resolved": "4.62.0", + "contentHash": "2q5m8ASh9lJ714CkCxA1lmj60K6OeDR2vV78adviOM/ZEoISldY+THr7gmqJ6rtSbZ0J4R/a9KcgL/wm8Ogi4Q==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -188,107 +189,105 @@ }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "q4MZ8d0LlWKWtQfxNl9ZRZVOQ7IPEAR6CF4rFKITfuqEUOhqrbwHbqBanReI37155IKb8V/tPJqpPa3KXm9wQQ==" + "resolved": "8.0.1", + "contentHash": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "lsleZbCuh3wZ3RfKd8WJ7E52nIeQQzJsDrgHN+B3Zhzd32UTQ1V3Vjn1N9PssnSulAoEMF0aAiue7ucX+TPoQA==", + "resolved": "8.0.1", + "contentHash": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "7.6.0" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "7AVJhNY4y/i96XGfaXovX8aAyYWz6HHtPEPHPpbg5JCchwVaoO08VmmpHe0L2gVagW/iHG0w4a4Xg9gxLXQ/8A==", + "resolved": "8.0.1", + "contentHash": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "7.6.0" + "Microsoft.IdentityModel.Abstractions": "8.0.1" } }, "Microsoft.IdentityModel.Protocols": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "BtwR+tctBYhPNygyZmt1Rnw74GFrJteW+1zcdIgyvBCjkek6cNwPPqRfdhzCv61i+lwyNomRi8+iI4QKd4YCKA==", + "resolved": "8.0.1", + "contentHash": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.0.3", - "Microsoft.IdentityModel.Tokens": "7.0.3" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Protocols.OpenIdConnect": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "W97TraHApDNArLwpPcXfD+FZH7njJsfEwZE9y9BoofeXMS8H0LBBobz0VOmYmMK4mLdOKxzN7SFT3Ekg0FWI3Q==", + "resolved": "8.0.1", + "contentHash": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==", "dependencies": { - "Microsoft.IdentityModel.Protocols": "7.0.3", - "System.IdentityModel.Tokens.Jwt": "7.0.3" + "Microsoft.IdentityModel.Protocols": "8.0.1", + "System.IdentityModel.Tokens.Jwt": "8.0.1" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "xvEil42RUe4Si/TuLDvglNXpklgCWMSecPduczXPS2BAypjheUehPqKLwIy8vSdzB4K2zza3yLgmODBt+J6ZxQ==", + "resolved": "8.0.1", + "contentHash": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.6.0" + "Microsoft.IdentityModel.Logging": "8.0.1" } }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", + "resolved": "1.9.11", + "contentHash": "gzQFUyle28Efl2qP9HYrI9+WqSJOjA2HFmVuDXSONtfwL+AvkzaSE4V7YUVbj5DLzmBNuDwCFf6+kN8x2e+Huw==", "dependencies": { "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "Dzc6h9pSHKCJPjJ4RnEs2liL4vVO/O7Oh8XolMHB7c+4/bkdvOdWS9UYz5uMtP4Q+zgnUF3KO/0WvJSA4nbiNw==", + "resolved": "1.9.11", + "contentHash": "dZ161I/Mo+dSwtU+eiwYuwfzi0ZSi3sSBeuMYo7SU8F4nwoo4VDTTtXzpdyd91Lzs2AMMG9eyD1hjXaFQvHufw==", "dependencies": { - "Azure.Core": "1.36.0", - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.1, 9.0.0)" + "Azure.Core": "1.41.0", + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", + "resolved": "1.9.11", + "contentHash": "dOLWQHUGZgXhFPvow36Yq7SugxPZ7evoqrv8zkO3iwHP3KA0R8nQrrIs6WTubyLURz1fqQ/1ET0sxArPoVmjsQ==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Form": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "/j0B30rmLUoan6ckekHmPe6H0xJ3nCkn5RfgFfJkDnJiLO15N57+NTDgjGPbdwqRafQGyvJUmuON2APVZIdQhA==", + "resolved": "1.9.11", + "contentHash": "/8OzXep6dRZSd+emkIv3wbW9aAwc8Esd2O5Rx44CYMLNb4DNTmHEaQ9CD1zQML8DoIKCVy3DICWGfJbjHk/y7Q==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", + "resolved": "1.9.11", + "contentHash": "XR9J9GR2fnv43g85KmdnzMcoQBFIbCWS+lk2pb8/D7tokiWb754G2QumtzPtA3k0xPVlXC3X/Apz0cSv4RiQQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Multipart": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "+31xiVWveV9/8qGlm+STiwVVN74tpwJvXq2Q2MZGDQCWZ1j+aDr4y5auOw0l1yr2nD+1jjyjU239101Pu6ECgw==", + "resolved": "1.9.11", + "contentHash": "R/zw1z76kR9bboJNbhmrsHzSnvcqHo4YPUc9ZzxkGKz3HymSbRUsOcjBpFewmTVBZgl+fXzRtxuViMJVzzLlQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Text": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "6iA04gp7BhbgkLjKJ9wq+/87zI5DROSkakQ5cenlUKMUySTHkleLI7f0r57BNHi+sCtQu5Am3+h40G85yJwhug==", + "resolved": "1.9.11", + "contentHash": "NpTuo28GK6A+DB04jBAQS4XlURdtI6/bgKhpG+WKO8NB28igJTcRnfotW9sop0amViEy+eccUE/0zX9kmfVezg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.NETCore.Platforms": { @@ -296,32 +295,18 @@ "resolved": "7.0.4", "contentHash": "yLEHlNN7O5WiND89r42sepgVwy5W/ZoTiFEdJDV7MHR1lW02LL7Nipz2TD5qM/Kx9W3/k3NP+PAP2qUdOm+leg==" }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, "Std.UriTemplate": { "type": "Transitive", "resolved": "1.0.3", "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, - "System.Collections": { + "System.ClientModel": { "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" } }, "System.Diagnostics.DiagnosticSource": { @@ -332,28 +317,6 @@ "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, "System.Memory.Data": { "type": "Transitive", "resolved": "1.0.2", @@ -368,119 +331,31 @@ "resolved": "4.5.0", "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" }, - "System.Security.Principal": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding": { + "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" - }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "8.0.0" } }, "System.Threading.Tasks.Extensions": { @@ -490,27 +365,44 @@ }, "YamlDotNet": { "type": "Transitive", - "resolved": "15.1.4", - "contentHash": "IjWucOgVbhm72da0Ck3KcyvMuKT/TfilHcvtwvhLLnkn2zr5st8BkH3lDoY5lkMH9Z3jsJeLDrnBS4GpAViUqg==" + "resolved": "16.0.0", + "contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw==" }, "winget.communityrepository": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", - "YamlDotNet": "[15.1.4, )" + "YamlDotNet": "[16.0.0, )" } }, "wintuner.proxy.client": { "type": "Project", "dependencies": { "Microsoft.Extensions.Http": "[8.0.0, )", - "Microsoft.Kiota.Abstractions": "[1.9.9, )", - "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", - "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + "Microsoft.Kiota.Abstractions": "[1.9.11, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.11, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.11, )", + "System.Text.Json": "[8.0.4, )" } } }, "net8.0": { + "Azure.Core": { + "type": "Direct", + "requested": "[1.41.0, )", + "resolved": "1.41.0", + "contentHash": "7OO8rPCVSvXj2IQET3NkRf8hU2ZDCCvCIUhlrE089qkLNpNfWufJnBwHRKLAOWF3bhKBGJS/9hPBgjJ8kupUIg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.1", + "System.Memory.Data": "1.0.2", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Direct", "requested": "[8.0.0, )", @@ -558,38 +450,54 @@ }, "Microsoft.Graph.Beta": { "type": "Direct", - "requested": "[5.59.0-preview, )", - "resolved": "5.59.0-preview", - "contentHash": "Qx/vwDlDWSpeWQme0E/xByA48/5EjyZ8L4S6Arb/LPuaZv/bNcciefo9s/LUHXfC9Ep9cOck+HdseZBAJd7/tg==", + "requested": "[5.78.0-preview, )", + "resolved": "5.78.0-preview", + "contentHash": "HD7wd1Tfmdtj8x0t2RohAjD9gNQxRP52id8hrY/L0EiXUj0/qG9OOKSccIfI3ATgrRZAYqKhedhbyNxO88txow==", "dependencies": { - "Microsoft.Graph.Core": "3.1.3" + "Microsoft.Graph.Core": "3.1.12" + } + }, + "Microsoft.Graph.Core": { + "type": "Direct", + "requested": "[3.1.14, )", + "resolved": "3.1.14", + "contentHash": "rZbrwUzeBi7yBA7V2P9j9VRSfgpgY/cVjLhSURH4sMOOQHtriYYfvBetRe8McC5eLpNn+T9IKNrRyyvkt/YVLQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1", + "Microsoft.Kiota.Abstractions": "1.9.11", + "Microsoft.Kiota.Authentication.Azure": "1.9.11", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.9.11", + "Microsoft.Kiota.Serialization.Form": "1.9.11", + "Microsoft.Kiota.Serialization.Json": "1.9.11", + "Microsoft.Kiota.Serialization.Multipart": "1.9.11", + "Microsoft.Kiota.Serialization.Text": "1.9.11" } }, "Microsoft.Identity.Client.Broker": { "type": "Direct", - "requested": "[4.61.3, )", - "resolved": "4.61.3", - "contentHash": "VX8YJYmjNZzWjLuwAwBWzTtfNRTqjj5DKPEci6eNa2tedBWSyOGvcsVMVUL/vy1oRSAjfpwzUIFlXCmhWnCAeA==", + "requested": "[4.62.0, )", + "resolved": "4.62.0", + "contentHash": "D5iSJglKXJzeCb2/UAPGVkqRLHk6512iojDoyjEeLi8e89jE3QZykIVkkZNkFpuVXsVebyrkA87YHr+DJOvvUQ==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "Microsoft.Identity.Client.NativeInterop": "0.16.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Direct", - "requested": "[4.61.3, )", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "requested": "[4.62.0, )", + "resolved": "4.62.0", + "contentHash": "ylCHQwNpT+YYu4Le+r0x5XRHKsFtIgIIAHshDWIlgeA/AoFs/9yREdtSeIELdN7X3lJAIiUjJR8z7r7KJ3ETLw==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, "Riok.Mapperly": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "ECFSdemqIN7HoCu8lOtGYW15fYK5XgSg9tpaspdevi4rj6Z4KomMQz6bKID1L5WMHxjyexix250wP5eAF0iKNw==" + "requested": "[3.6.0, )", + "resolved": "3.6.0", + "contentHash": "eQkT3evicd5fdb8HgAJjJ+uvbhfA76ozZZsBtounFrOvk0mj+9tozv1hCYV0f0cTmXIZsxtU93FMWPzd76wSaw==" }, "SvRooij.ContentPrep": { "type": "Direct", @@ -604,26 +512,12 @@ }, "System.IdentityModel.Tokens.Jwt": { "type": "Direct", - "requested": "[7.6.0, )", - "resolved": "7.6.0", - "contentHash": "LIuEbv/kFpuw00yI/mPu+T9NAVdH/u7Y5ChCGzYQQeCg9Pft2C7HFWuO/P+Z7c2RcySNjVk1FmuAheKjYIbOkw==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "7.6.0", - "Microsoft.IdentityModel.Tokens": "7.6.0" - } - }, - "Azure.Core": { - "type": "Transitive", - "resolved": "1.36.0", - "contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==", + "requested": "[8.0.1, )", + "resolved": "8.0.1", + "contentHash": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==", "dependencies": { - "Microsoft.Bcl.AsyncInterfaces": "1.1.1", - "System.Diagnostics.DiagnosticSource": "6.0.1", - "System.Memory.Data": "1.0.2", - "System.Numerics.Vectors": "4.5.0", - "System.Text.Encodings.Web": "4.7.2", - "System.Text.Json": "4.7.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.IdentityModel.JsonWebTokens": "8.0.1", + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.Extensions.Configuration": { @@ -711,27 +605,10 @@ "resolved": "8.0.0", "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" }, - "Microsoft.Graph.Core": { - "type": "Transitive", - "resolved": "3.1.3", - "contentHash": "sysGvd+1vggJKIc5kfiDuwpMlJJaTwIK+uYA2MEo3PJp3asP8G2U+W0NFQvxANLUDipLTd2zofCbfRCVUjA4Ag==", - "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.0.3", - "Microsoft.Kiota.Abstractions": "1.7.2", - "Microsoft.Kiota.Authentication.Azure": "1.1.2", - "Microsoft.Kiota.Http.HttpClientLibrary": "1.3.3", - "Microsoft.Kiota.Serialization.Form": "1.1.1", - "Microsoft.Kiota.Serialization.Json": "1.1.2", - "Microsoft.Kiota.Serialization.Multipart": "1.1.1", - "Microsoft.Kiota.Serialization.Text": "1.1.1", - "NETStandard.Library": "2.0.3", - "System.Security.Claims": "4.3.0" - } - }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", + "resolved": "4.62.0", + "contentHash": "2q5m8ASh9lJ714CkCxA1lmj60K6OeDR2vV78adviOM/ZEoISldY+THr7gmqJ6rtSbZ0J4R/a9KcgL/wm8Ogi4Q==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -744,107 +621,105 @@ }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "q4MZ8d0LlWKWtQfxNl9ZRZVOQ7IPEAR6CF4rFKITfuqEUOhqrbwHbqBanReI37155IKb8V/tPJqpPa3KXm9wQQ==" + "resolved": "8.0.1", + "contentHash": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "lsleZbCuh3wZ3RfKd8WJ7E52nIeQQzJsDrgHN+B3Zhzd32UTQ1V3Vjn1N9PssnSulAoEMF0aAiue7ucX+TPoQA==", + "resolved": "8.0.1", + "contentHash": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "7.6.0" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "7AVJhNY4y/i96XGfaXovX8aAyYWz6HHtPEPHPpbg5JCchwVaoO08VmmpHe0L2gVagW/iHG0w4a4Xg9gxLXQ/8A==", + "resolved": "8.0.1", + "contentHash": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "7.6.0" + "Microsoft.IdentityModel.Abstractions": "8.0.1" } }, "Microsoft.IdentityModel.Protocols": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "BtwR+tctBYhPNygyZmt1Rnw74GFrJteW+1zcdIgyvBCjkek6cNwPPqRfdhzCv61i+lwyNomRi8+iI4QKd4YCKA==", + "resolved": "8.0.1", + "contentHash": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.0.3", - "Microsoft.IdentityModel.Tokens": "7.0.3" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Protocols.OpenIdConnect": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "W97TraHApDNArLwpPcXfD+FZH7njJsfEwZE9y9BoofeXMS8H0LBBobz0VOmYmMK4mLdOKxzN7SFT3Ekg0FWI3Q==", + "resolved": "8.0.1", + "contentHash": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==", "dependencies": { - "Microsoft.IdentityModel.Protocols": "7.0.3", - "System.IdentityModel.Tokens.Jwt": "7.0.3" + "Microsoft.IdentityModel.Protocols": "8.0.1", + "System.IdentityModel.Tokens.Jwt": "8.0.1" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "xvEil42RUe4Si/TuLDvglNXpklgCWMSecPduczXPS2BAypjheUehPqKLwIy8vSdzB4K2zza3yLgmODBt+J6ZxQ==", + "resolved": "8.0.1", + "contentHash": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.6.0" + "Microsoft.IdentityModel.Logging": "8.0.1" } }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", + "resolved": "1.9.11", + "contentHash": "gzQFUyle28Efl2qP9HYrI9+WqSJOjA2HFmVuDXSONtfwL+AvkzaSE4V7YUVbj5DLzmBNuDwCFf6+kN8x2e+Huw==", "dependencies": { "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "Dzc6h9pSHKCJPjJ4RnEs2liL4vVO/O7Oh8XolMHB7c+4/bkdvOdWS9UYz5uMtP4Q+zgnUF3KO/0WvJSA4nbiNw==", + "resolved": "1.9.11", + "contentHash": "dZ161I/Mo+dSwtU+eiwYuwfzi0ZSi3sSBeuMYo7SU8F4nwoo4VDTTtXzpdyd91Lzs2AMMG9eyD1hjXaFQvHufw==", "dependencies": { - "Azure.Core": "1.36.0", - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.1, 9.0.0)" + "Azure.Core": "1.41.0", + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", + "resolved": "1.9.11", + "contentHash": "dOLWQHUGZgXhFPvow36Yq7SugxPZ7evoqrv8zkO3iwHP3KA0R8nQrrIs6WTubyLURz1fqQ/1ET0sxArPoVmjsQ==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Form": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "/j0B30rmLUoan6ckekHmPe6H0xJ3nCkn5RfgFfJkDnJiLO15N57+NTDgjGPbdwqRafQGyvJUmuON2APVZIdQhA==", + "resolved": "1.9.11", + "contentHash": "/8OzXep6dRZSd+emkIv3wbW9aAwc8Esd2O5Rx44CYMLNb4DNTmHEaQ9CD1zQML8DoIKCVy3DICWGfJbjHk/y7Q==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", + "resolved": "1.9.11", + "contentHash": "XR9J9GR2fnv43g85KmdnzMcoQBFIbCWS+lk2pb8/D7tokiWb754G2QumtzPtA3k0xPVlXC3X/Apz0cSv4RiQQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Multipart": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "+31xiVWveV9/8qGlm+STiwVVN74tpwJvXq2Q2MZGDQCWZ1j+aDr4y5auOw0l1yr2nD+1jjyjU239101Pu6ECgw==", + "resolved": "1.9.11", + "contentHash": "R/zw1z76kR9bboJNbhmrsHzSnvcqHo4YPUc9ZzxkGKz3HymSbRUsOcjBpFewmTVBZgl+fXzRtxuViMJVzzLlQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Text": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "6iA04gp7BhbgkLjKJ9wq+/87zI5DROSkakQ5cenlUKMUySTHkleLI7f0r57BNHi+sCtQu5Am3+h40G85yJwhug==", + "resolved": "1.9.11", + "contentHash": "NpTuo28GK6A+DB04jBAQS4XlURdtI6/bgKhpG+WKO8NB28igJTcRnfotW9sop0amViEy+eccUE/0zX9kmfVezg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.NETCore.Platforms": { @@ -852,32 +727,18 @@ "resolved": "7.0.4", "contentHash": "yLEHlNN7O5WiND89r42sepgVwy5W/ZoTiFEdJDV7MHR1lW02LL7Nipz2TD5qM/Kx9W3/k3NP+PAP2qUdOm+leg==" }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, "Std.UriTemplate": { "type": "Transitive", "resolved": "1.0.3", "contentHash": "0C9WPYRHGHI4L1X3w7mdrr2WKz//6d/T000SqX5HNNPScFGfQYRuL8FBhn4Ny1WGcCnuMZXb6kfCnMW5OtCdTw==" }, - "System.Collections": { + "System.ClientModel": { "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" } }, "System.Diagnostics.DiagnosticSource": { @@ -885,28 +746,6 @@ "resolved": "8.0.0", "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==" }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, "System.Memory.Data": { "type": "Transitive", "resolved": "1.0.2", @@ -921,119 +760,27 @@ "resolved": "4.5.0", "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" }, - "System.Security.Principal": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Text.Encodings.Web": "8.0.0" } }, "System.Threading.Tasks.Extensions": { @@ -1043,23 +790,24 @@ }, "YamlDotNet": { "type": "Transitive", - "resolved": "15.1.4", - "contentHash": "IjWucOgVbhm72da0Ck3KcyvMuKT/TfilHcvtwvhLLnkn2zr5st8BkH3lDoY5lkMH9Z3jsJeLDrnBS4GpAViUqg==" + "resolved": "16.0.0", + "contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw==" }, "winget.communityrepository": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", - "YamlDotNet": "[15.1.4, )" + "YamlDotNet": "[16.0.0, )" } }, "wintuner.proxy.client": { "type": "Project", "dependencies": { "Microsoft.Extensions.Http": "[8.0.0, )", - "Microsoft.Kiota.Abstractions": "[1.9.9, )", - "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", - "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + "Microsoft.Kiota.Abstractions": "[1.9.11, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.11, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.11, )", + "System.Text.Json": "[8.0.4, )" } } } diff --git a/tests/WingetIntune.Tests/WingetIntune.Tests.csproj b/tests/WingetIntune.Tests/WingetIntune.Tests.csproj index 82fc433..aff56ea 100644 --- a/tests/WingetIntune.Tests/WingetIntune.Tests.csproj +++ b/tests/WingetIntune.Tests/WingetIntune.Tests.csproj @@ -25,8 +25,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/WingetIntune.Tests/packages.lock.json b/tests/WingetIntune.Tests/packages.lock.json index 189cdc9..bce94d5 100644 --- a/tests/WingetIntune.Tests/packages.lock.json +++ b/tests/WingetIntune.Tests/packages.lock.json @@ -44,27 +44,28 @@ }, "xunit": { "type": "Direct", - "requested": "[2.8.1, )", - "resolved": "2.8.1", - "contentHash": "MLBz2NQp3rtSIoJdjj3DBEr/EeOFlQYF3oCCljat3DY9GQ7yYmtjIAv8Zyfm5BcwYso5sjvIe5scuHaJPVCGIQ==", + "requested": "[2.9.0, )", + "resolved": "2.9.0", + "contentHash": "PtU3rZ0ThdmdJqTbK7GkgFf6iBaCR6Q0uvJHznID+XEYk2v6O/b7sRxqnbi3B2gRDXxjTqMkVNayzwsqsFUxRw==", "dependencies": { - "xunit.analyzers": "1.14.0", - "xunit.assert": "2.8.1", - "xunit.core": "[2.8.1]" + "xunit.analyzers": "1.15.0", + "xunit.assert": "2.9.0", + "xunit.core": "[2.9.0]" } }, "xunit.runner.visualstudio": { "type": "Direct", - "requested": "[2.8.1, )", - "resolved": "2.8.1", - "contentHash": "qBTK0WAcnw65mymIjVDqWUTdqjMyzjwu9e9SF0oGYfYELgbcteDZ4fQLJaXw8mzkvpAD7YdoexBbg8VYQFkWWA==" + "requested": "[2.8.2, )", + "resolved": "2.8.2", + "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==" }, "Azure.Core": { "type": "Transitive", - "resolved": "1.36.0", - "contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==", + "resolved": "1.41.0", + "contentHash": "7OO8rPCVSvXj2IQET3NkRf8hU2ZDCCvCIUhlrE089qkLNpNfWufJnBwHRKLAOWF3bhKBGJS/9hPBgjJ8kupUIg==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.ClientModel": "1.0.0", "System.Diagnostics.DiagnosticSource": "6.0.1", "System.Memory.Data": "1.0.2", "System.Numerics.Vectors": "4.5.0", @@ -213,33 +214,31 @@ }, "Microsoft.Graph.Beta": { "type": "Transitive", - "resolved": "5.59.0-preview", - "contentHash": "Qx/vwDlDWSpeWQme0E/xByA48/5EjyZ8L4S6Arb/LPuaZv/bNcciefo9s/LUHXfC9Ep9cOck+HdseZBAJd7/tg==", + "resolved": "5.78.0-preview", + "contentHash": "HD7wd1Tfmdtj8x0t2RohAjD9gNQxRP52id8hrY/L0EiXUj0/qG9OOKSccIfI3ATgrRZAYqKhedhbyNxO88txow==", "dependencies": { - "Microsoft.Graph.Core": "3.1.3" + "Microsoft.Graph.Core": "3.1.12" } }, "Microsoft.Graph.Core": { "type": "Transitive", - "resolved": "3.1.3", - "contentHash": "sysGvd+1vggJKIc5kfiDuwpMlJJaTwIK+uYA2MEo3PJp3asP8G2U+W0NFQvxANLUDipLTd2zofCbfRCVUjA4Ag==", + "resolved": "3.1.14", + "contentHash": "rZbrwUzeBi7yBA7V2P9j9VRSfgpgY/cVjLhSURH4sMOOQHtriYYfvBetRe8McC5eLpNn+T9IKNrRyyvkt/YVLQ==", "dependencies": { - "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.0.3", - "Microsoft.Kiota.Abstractions": "1.7.2", - "Microsoft.Kiota.Authentication.Azure": "1.1.2", - "Microsoft.Kiota.Http.HttpClientLibrary": "1.3.3", - "Microsoft.Kiota.Serialization.Form": "1.1.1", - "Microsoft.Kiota.Serialization.Json": "1.1.2", - "Microsoft.Kiota.Serialization.Multipart": "1.1.1", - "Microsoft.Kiota.Serialization.Text": "1.1.1", - "NETStandard.Library": "2.0.3", - "System.Security.Claims": "4.3.0" + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1", + "Microsoft.Kiota.Abstractions": "1.9.11", + "Microsoft.Kiota.Authentication.Azure": "1.9.11", + "Microsoft.Kiota.Http.HttpClientLibrary": "1.9.11", + "Microsoft.Kiota.Serialization.Form": "1.9.11", + "Microsoft.Kiota.Serialization.Json": "1.9.11", + "Microsoft.Kiota.Serialization.Multipart": "1.9.11", + "Microsoft.Kiota.Serialization.Text": "1.9.11" } }, "Microsoft.Identity.Client": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "naJo/Qm35Caaoxp5utcw+R8eU8ZtLz2ALh8S+gkekOYQ1oazfCQMWVT4NJ/FnHzdIJlm8dMz0oMpMGCabx5odA==", + "resolved": "4.62.0", + "contentHash": "2q5m8ASh9lJ714CkCxA1lmj60K6OeDR2vV78adviOM/ZEoISldY+THr7gmqJ6rtSbZ0J4R/a9KcgL/wm8Ogi4Q==", "dependencies": { "Microsoft.IdentityModel.Abstractions": "6.35.0", "System.Diagnostics.DiagnosticSource": "6.0.1" @@ -247,19 +246,19 @@ }, "Microsoft.Identity.Client.Broker": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "VX8YJYmjNZzWjLuwAwBWzTtfNRTqjj5DKPEci6eNa2tedBWSyOGvcsVMVUL/vy1oRSAjfpwzUIFlXCmhWnCAeA==", + "resolved": "4.62.0", + "contentHash": "D5iSJglKXJzeCb2/UAPGVkqRLHk6512iojDoyjEeLi8e89jE3QZykIVkkZNkFpuVXsVebyrkA87YHr+DJOvvUQ==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "Microsoft.Identity.Client.NativeInterop": "0.16.1" } }, "Microsoft.Identity.Client.Extensions.Msal": { "type": "Transitive", - "resolved": "4.61.3", - "contentHash": "PWnJcznrSGr25MN8ajlc2XIDW4zCFu0U6FkpaNLEWLgd1NgFCp5uDY3mqLDgM8zCN8hqj8yo5wHYfLB2HjcdGw==", + "resolved": "4.62.0", + "contentHash": "ylCHQwNpT+YYu4Le+r0x5XRHKsFtIgIIAHshDWIlgeA/AoFs/9yREdtSeIELdN7X3lJAIiUjJR8z7r7KJ3ETLw==", "dependencies": { - "Microsoft.Identity.Client": "4.61.3", + "Microsoft.Identity.Client": "4.62.0", "System.Security.Cryptography.ProtectedData": "4.5.0" } }, @@ -270,107 +269,105 @@ }, "Microsoft.IdentityModel.Abstractions": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "q4MZ8d0LlWKWtQfxNl9ZRZVOQ7IPEAR6CF4rFKITfuqEUOhqrbwHbqBanReI37155IKb8V/tPJqpPa3KXm9wQQ==" + "resolved": "8.0.1", + "contentHash": "OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==" }, "Microsoft.IdentityModel.JsonWebTokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "lsleZbCuh3wZ3RfKd8WJ7E52nIeQQzJsDrgHN+B3Zhzd32UTQ1V3Vjn1N9PssnSulAoEMF0aAiue7ucX+TPoQA==", + "resolved": "8.0.1", + "contentHash": "s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==", "dependencies": { - "Microsoft.IdentityModel.Tokens": "7.6.0" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Logging": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "7AVJhNY4y/i96XGfaXovX8aAyYWz6HHtPEPHPpbg5JCchwVaoO08VmmpHe0L2gVagW/iHG0w4a4Xg9gxLXQ/8A==", + "resolved": "8.0.1", + "contentHash": "UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==", "dependencies": { - "Microsoft.IdentityModel.Abstractions": "7.6.0" + "Microsoft.IdentityModel.Abstractions": "8.0.1" } }, "Microsoft.IdentityModel.Protocols": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "BtwR+tctBYhPNygyZmt1Rnw74GFrJteW+1zcdIgyvBCjkek6cNwPPqRfdhzCv61i+lwyNomRi8+iI4QKd4YCKA==", + "resolved": "8.0.1", + "contentHash": "uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.0.3", - "Microsoft.IdentityModel.Tokens": "7.0.3" + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "Microsoft.IdentityModel.Protocols.OpenIdConnect": { "type": "Transitive", - "resolved": "7.0.3", - "contentHash": "W97TraHApDNArLwpPcXfD+FZH7njJsfEwZE9y9BoofeXMS8H0LBBobz0VOmYmMK4mLdOKxzN7SFT3Ekg0FWI3Q==", + "resolved": "8.0.1", + "contentHash": "AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==", "dependencies": { - "Microsoft.IdentityModel.Protocols": "7.0.3", - "System.IdentityModel.Tokens.Jwt": "7.0.3" + "Microsoft.IdentityModel.Protocols": "8.0.1", + "System.IdentityModel.Tokens.Jwt": "8.0.1" } }, "Microsoft.IdentityModel.Tokens": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "xvEil42RUe4Si/TuLDvglNXpklgCWMSecPduczXPS2BAypjheUehPqKLwIy8vSdzB4K2zza3yLgmODBt+J6ZxQ==", + "resolved": "8.0.1", + "contentHash": "kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==", "dependencies": { - "Microsoft.IdentityModel.Logging": "7.6.0" + "Microsoft.IdentityModel.Logging": "8.0.1" } }, "Microsoft.Kiota.Abstractions": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "KZpiJ5LkBDW5pSdMe0vfx6h501QH4tKdbHfo2e802rcJZTpgJkyuzja+lbx42wHXDUSpJ5QS3HThNuRVuKsSWA==", + "resolved": "1.9.11", + "contentHash": "gzQFUyle28Efl2qP9HYrI9+WqSJOjA2HFmVuDXSONtfwL+AvkzaSE4V7YUVbj5DLzmBNuDwCFf6+kN8x2e+Huw==", "dependencies": { "Std.UriTemplate": "1.0.3" } }, "Microsoft.Kiota.Authentication.Azure": { "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "Dzc6h9pSHKCJPjJ4RnEs2liL4vVO/O7Oh8XolMHB7c+4/bkdvOdWS9UYz5uMtP4Q+zgnUF3KO/0WvJSA4nbiNw==", + "resolved": "1.9.11", + "contentHash": "dZ161I/Mo+dSwtU+eiwYuwfzi0ZSi3sSBeuMYo7SU8F4nwoo4VDTTtXzpdyd91Lzs2AMMG9eyD1hjXaFQvHufw==", "dependencies": { - "Azure.Core": "1.36.0", - "Microsoft.Kiota.Abstractions": "1.7.2", - "System.Diagnostics.DiagnosticSource": "[6.0.1, 9.0.0)" + "Azure.Core": "1.41.0", + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Http.HttpClientLibrary": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "99g0my0v283eMR/BOEZFmjlk6yQx+m0HTiKcdPUArG7sciDWxU7WgUQ3VVfjodwqs7LnBauhctTw9cXzy/Y88w==", + "resolved": "1.9.11", + "contentHash": "dOLWQHUGZgXhFPvow36Yq7SugxPZ7evoqrv8zkO3iwHP3KA0R8nQrrIs6WTubyLURz1fqQ/1ET0sxArPoVmjsQ==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Form": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "/j0B30rmLUoan6ckekHmPe6H0xJ3nCkn5RfgFfJkDnJiLO15N57+NTDgjGPbdwqRafQGyvJUmuON2APVZIdQhA==", + "resolved": "1.9.11", + "contentHash": "/8OzXep6dRZSd+emkIv3wbW9aAwc8Esd2O5Rx44CYMLNb4DNTmHEaQ9CD1zQML8DoIKCVy3DICWGfJbjHk/y7Q==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Json": { "type": "Transitive", - "resolved": "1.9.9", - "contentHash": "8pwI5Q+VYoBejv65LheOms/jQFSijrH2IYUB/p2xMlsYhsLxPiXSb1iRe3uEGomugDmUiZ2e3+n51i90VTAshg==", + "resolved": "1.9.11", + "contentHash": "XR9J9GR2fnv43g85KmdnzMcoQBFIbCWS+lk2pb8/D7tokiWb754G2QumtzPtA3k0xPVlXC3X/Apz0cSv4RiQQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.9.9" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Multipart": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "+31xiVWveV9/8qGlm+STiwVVN74tpwJvXq2Q2MZGDQCWZ1j+aDr4y5auOw0l1yr2nD+1jjyjU239101Pu6ECgw==", + "resolved": "1.9.11", + "contentHash": "R/zw1z76kR9bboJNbhmrsHzSnvcqHo4YPUc9ZzxkGKz3HymSbRUsOcjBpFewmTVBZgl+fXzRtxuViMJVzzLlQw==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.Kiota.Serialization.Text": { "type": "Transitive", - "resolved": "1.1.1", - "contentHash": "6iA04gp7BhbgkLjKJ9wq+/87zI5DROSkakQ5cenlUKMUySTHkleLI7f0r57BNHi+sCtQu5Am3+h40G85yJwhug==", + "resolved": "1.9.11", + "contentHash": "NpTuo28GK6A+DB04jBAQS4XlURdtI6/bgKhpG+WKO8NB28igJTcRnfotW9sop0amViEy+eccUE/0zX9kmfVezg==", "dependencies": { - "Microsoft.Kiota.Abstractions": "1.7.2" + "Microsoft.Kiota.Abstractions": "1.9.11" } }, "Microsoft.NETCore.Platforms": { @@ -378,11 +375,6 @@ "resolved": "7.0.4", "contentHash": "yLEHlNN7O5WiND89r42sepgVwy5W/ZoTiFEdJDV7MHR1lW02LL7Nipz2TD5qM/Kx9W3/k3NP+PAP2qUdOm+leg==" }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", "resolved": "17.10.0", @@ -400,14 +392,6 @@ "Newtonsoft.Json": "13.0.1" } }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, "Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.1", @@ -415,8 +399,8 @@ }, "Riok.Mapperly": { "type": "Transitive", - "resolved": "3.5.1", - "contentHash": "ECFSdemqIN7HoCu8lOtGYW15fYK5XgSg9tpaspdevi4rj6Z4KomMQz6bKID1L5WMHxjyexix250wP5eAF0iKNw==" + "resolved": "3.6.0", + "contentHash": "eQkT3evicd5fdb8HgAJjJ+uvbhfA76ozZZsBtounFrOvk0mj+9tozv1hCYV0f0cTmXIZsxtU93FMWPzd76wSaw==" }, "Std.UriTemplate": { "type": "Transitive", @@ -433,14 +417,13 @@ "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, - "System.Collections": { + "System.ClientModel": { "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "resolved": "1.0.0", + "contentHash": "I3CVkvxeqFYjIVEP59DnjbeoGNfo/+SZrCLpRz2v/g0gpCHaEMPtWSY0s9k/7jR1rAsLNg2z2u1JRB76tPjnIw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" } }, "System.Diagnostics.DiagnosticSource": { @@ -453,35 +436,13 @@ "resolved": "6.0.0", "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.IdentityModel.Tokens.Jwt": { "type": "Transitive", - "resolved": "7.6.0", - "contentHash": "LIuEbv/kFpuw00yI/mPu+T9NAVdH/u7Y5ChCGzYQQeCg9Pft2C7HFWuO/P+Z7c2RcySNjVk1FmuAheKjYIbOkw==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "7.6.0", - "Microsoft.IdentityModel.Tokens": "7.6.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "resolved": "8.0.1", + "contentHash": "GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" + "Microsoft.IdentityModel.JsonWebTokens": "8.0.1", + "Microsoft.IdentityModel.Tokens": "8.0.1" } }, "System.Memory.Data": { @@ -498,124 +459,32 @@ "resolved": "4.5.0", "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, "System.Reflection.Metadata": { "type": "Transitive", "resolved": "1.6.0", "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", "resolved": "6.0.0", "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Security.Claims": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Security.Principal": "4.3.0" - } - }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" }, - "System.Security.Principal": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA==" + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" + "System.Text.Encodings.Web": "8.0.0" } }, "System.Threading.Tasks.Extensions": { @@ -630,65 +499,67 @@ }, "xunit.analyzers": { "type": "Transitive", - "resolved": "1.14.0", - "contentHash": "KcFBmV2150xZHPUebV3YLR5gGl8R4wLuPOoxMiwCf1L4bL8ls0dcwtGFzr6NvQRgg6dWgSqbE52I6SYyeB0VnQ==" + "resolved": "1.15.0", + "contentHash": "s+M8K/Rtlgr6CmD7AYQKrNTvT5sh0l0ZKDoZ3Z/ExhlIwfV9mGAMR4f7KqIB7SSK7ZOhqDTgTUMYPmKfmvWUWQ==" }, "xunit.assert": { "type": "Transitive", - "resolved": "2.8.1", - "contentHash": "DDM18ur+PeNFhQ4w/vO+uvCUy8hA3OS5+AMf/CFov9Wco7Le49zzj0hovRWwa8f/3vaUfjL5r+IkPvqEHu2IIg==" + "resolved": "2.9.0", + "contentHash": "Z/1pyia//860wEYTKn6Q5dmgikJdRjgE4t5AoxJkK8oTmidzPLEPG574kmm7LFkMLbH6Frwmgb750kcyR+hwoA==" }, "xunit.core": { "type": "Transitive", - "resolved": "2.8.1", - "contentHash": "Ng4Q/DOwotESPl5CufcdqgP6O2KDpdEcIvNfA3upzfCiBrkj5WsmLhf/XUsCVolzvHA7b1WUlyeTo7j1ulG4gQ==", + "resolved": "2.9.0", + "contentHash": "uRaop9tZsZMCaUS4AfbSPGYHtvywWnm8XXFNUqII7ShWyDBgdchY6gyDNgO4AK1Lv/1NNW61Zq63CsDV6oH6Jg==", "dependencies": { - "xunit.extensibility.core": "[2.8.1]", - "xunit.extensibility.execution": "[2.8.1]" + "xunit.extensibility.core": "[2.9.0]", + "xunit.extensibility.execution": "[2.9.0]" } }, "xunit.extensibility.core": { "type": "Transitive", - "resolved": "2.8.1", - "contentHash": "ilfAsxEhpne9AXXf3W+O65mRgGum94m2xHYm1yeJ1m7eiINM6OOwpaHhoNC/KWEQ2u/WF6/XiEs+Q0TOq7hiGA==", + "resolved": "2.9.0", + "contentHash": "zjDEUSxsr6UNij4gIwCgMqQox+oLDPRZ+mubwWLci+SssPBFQD1xeRR4SvgBuXqbE0QXCJ/STVTp+lxiB5NLVA==", "dependencies": { "xunit.abstractions": "2.0.3" } }, "xunit.extensibility.execution": { "type": "Transitive", - "resolved": "2.8.1", - "contentHash": "38UnJW+64Wn8QIabujcNEw0HKvWw2AlYCgU8GNwCCDqyrSuRYb7zwetn7SHoHfbL9e9FAvEiAMXmc2wSUY8sVQ==", + "resolved": "2.9.0", + "contentHash": "5ZTQZvmPLlBw6QzCOwM0KnMsZw6eGjbmC176QHZlcbQoMhGIeGcYzYwn5w9yXxf+4phtplMuVqTpTbFDQh2bqQ==", "dependencies": { - "xunit.extensibility.core": "[2.8.1]" + "xunit.extensibility.core": "[2.9.0]" } }, "YamlDotNet": { "type": "Transitive", - "resolved": "15.1.4", - "contentHash": "IjWucOgVbhm72da0Ck3KcyvMuKT/TfilHcvtwvhLLnkn2zr5st8BkH3lDoY5lkMH9Z3jsJeLDrnBS4GpAViUqg==" + "resolved": "16.0.0", + "contentHash": "kZ4jR5ltFhnjaUqK9x81zXRIUTH4PTXTTEmJDNQdkDLQhcv+2Nl19r0dCSvPW1mstOYBfXTnjdieRbUO6gHMDw==" }, "winget.communityrepository": { "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", - "YamlDotNet": "[15.1.4, )" + "YamlDotNet": "[16.0.0, )" } }, "wingetintune": { "type": "Project", "dependencies": { + "Azure.Core": "[1.41.0, )", "Microsoft.Bcl.AsyncInterfaces": "[8.0.0, )", "Microsoft.CSharp": "[4.7.0, )", "Microsoft.Extensions.Http": "[8.0.0, )", "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )", "Microsoft.Extensions.Options": "[8.0.2, )", - "Microsoft.Graph.Beta": "[5.59.0-preview, )", - "Microsoft.Identity.Client.Broker": "[4.61.3, )", - "Microsoft.Identity.Client.Extensions.Msal": "[4.61.3, )", - "Riok.Mapperly": "[3.5.1, )", + "Microsoft.Graph.Beta": "[5.78.0-preview, )", + "Microsoft.Graph.Core": "[3.1.14, )", + "Microsoft.Identity.Client.Broker": "[4.62.0, )", + "Microsoft.Identity.Client.Extensions.Msal": "[4.62.0, )", + "Riok.Mapperly": "[3.6.0, )", "SvRooij.ContentPrep": "[0.1.3-alpha0001, )", - "System.IdentityModel.Tokens.Jwt": "[7.6.0, )", + "System.IdentityModel.Tokens.Jwt": "[8.0.1, )", "WinTuner.Proxy.Client": "[1.0.0, )", "Winget.CommunityRepository": "[1.0.0, )" } @@ -697,9 +568,10 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Http": "[8.0.0, )", - "Microsoft.Kiota.Abstractions": "[1.9.9, )", - "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.9, )", - "Microsoft.Kiota.Serialization.Json": "[1.9.9, )" + "Microsoft.Kiota.Abstractions": "[1.9.11, )", + "Microsoft.Kiota.Http.HttpClientLibrary": "[1.9.11, )", + "Microsoft.Kiota.Serialization.Json": "[1.9.11, )", + "System.Text.Json": "[8.0.4, )" } } } From 14168021950eb20420f844f962922da224fb8b2b Mon Sep 17 00:00:00 2001 From: Stephan van Rooij <1292510+svrooij@users.noreply.github.com> Date: Wed, 24 Jul 2024 18:22:34 +0200 Subject: [PATCH 3/4] Temporary remove AppAssignmentUpdate (since it seems to be removed from the graph sdk) --- src/Svrooij.WinTuner.CmdLets/Commands/DeployWtWin32App.cs | 2 +- src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs | 2 +- src/WingetIntune/Graph/GraphWorkflows.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Svrooij.WinTuner.CmdLets/Commands/DeployWtWin32App.cs b/src/Svrooij.WinTuner.CmdLets/Commands/DeployWtWin32App.cs index 5c86d46..4e6bcce 100644 --- a/src/Svrooij.WinTuner.CmdLets/Commands/DeployWtWin32App.cs +++ b/src/Svrooij.WinTuner.CmdLets/Commands/DeployWtWin32App.cs @@ -245,7 +245,7 @@ await batch.AddBatchRequestStepAsync(graphServiceClient.DeviceAppManagement.Mobi { if (assignment.Intent == GraphModels.InstallIntent.Available && assignment.Settings is null) { - assignment.Settings = new GraphModels.Win32LobAppAssignmentSettings { AutoUpdateSettings = new GraphModels.Win32LobAppAutoUpdateSettings { AutoUpdateSupersededApps = GraphModels.Win32LobAppAutoUpdateSupersededApps.Enabled } }; + //assignment.Settings = new GraphModels.Win32LobAppAssignmentSettings { AutoUpdateSettings = new GraphModels.Win32LobAppAutoUpdateSettings { AutoUpdateSupersededApps = GraphModels.Win32LobAppAutoUpdateSupersededApps.Enabled } }; } } diff --git a/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs b/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs index b29914f..500608a 100644 --- a/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs +++ b/src/WinTuner.Proxy.Client/WinTunerProxyServiceExtensions.cs @@ -13,7 +13,7 @@ public static IServiceCollection AddWinTunerProxyClient(this IServiceCollection { services.AddKiotaHandlers(); } - + services.AddHttpClient().AttachKiotaHandlers(); services.AddTransient((sp) => sp.GetRequiredService().GetClient()); return services; diff --git a/src/WingetIntune/Graph/GraphWorkflows.cs b/src/WingetIntune/Graph/GraphWorkflows.cs index 09fecde..4a9ad6d 100644 --- a/src/WingetIntune/Graph/GraphWorkflows.cs +++ b/src/WingetIntune/Graph/GraphWorkflows.cs @@ -70,7 +70,7 @@ private static List GenerateAssignments(string[] groups, In MobileAppAssignmentSettings? settings = null; if (intent == InstallIntent.Available && addSetting) { - settings = new Win32LobAppAssignmentSettings { AutoUpdateSettings = new Win32LobAppAutoUpdateSettings { AutoUpdateSupersededApps = Win32LobAppAutoUpdateSupersededApps.Enabled } }; + //settings = new Win32LobAppAssignmentSettings { AutoUpdateSettings = new Win32LobAppAutoUpdateSettings { AutoUpdateSupersededApps = Win32LobAppAutoUpdateSupersededApps.Enabled } }; } if (groups is not null && groups.Any()) { From 830a07bfb10c8258433af9abf5fa0c3dbe9d63ed Mon Sep 17 00:00:00 2001 From: Stephan van Rooij <1292510+svrooij@users.noreply.github.com> Date: Wed, 24 Jul 2024 22:19:48 +0200 Subject: [PATCH 4/4] Testing the proxy --- .github/workflows/build.yml | 17 ++++-- .github/workflows/proxy.yml | 47 +++++++++++++++++ .../WinTunerProxy.Tests.ps1 | 52 +++++++++++++++++++ tests/WinTuner.Proxy.Tests/run.ps1 | 22 ++++++++ 4 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/proxy.yml create mode 100644 tests/WinTuner.Proxy.Tests/WinTunerProxy.Tests.ps1 create mode 100644 tests/WinTuner.Proxy.Tests/run.ps1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f308974..9fcb5a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,15 @@ on: workflow_dispatch: jobs: + api: + name: 💤 Wake api + runs-on: ubuntu-latest + steps: + - name: ✅ Load OpenAPI specs + shell: pwsh + run: | + $homepage = iwr -Uri https://proxy.wintuner.app + $specs = Iwr -Uri https://proxy.wintuner.app/api/swagger.json test: name: 🛠️ Build and Test C# runs-on: ubuntu-latest @@ -43,7 +52,7 @@ jobs: - name: 🎒 Install Kiota run: dotnet tool install --global Microsoft.OpenApi.Kiota - - name: 🎒 Load packages + - name: 🎒 Load packages (and generate api client) run: dotnet restore - name: 🛠️ Build code @@ -96,7 +105,7 @@ jobs: - name: 🎒 Install Kiota run: dotnet tool install --global Microsoft.OpenApi.Kiota - - name: 🎒 Load packages + - name: 🎒 Load packages (and generate api client) run: dotnet restore - name: 🛠️ Build module @@ -177,7 +186,7 @@ jobs: - name: 🎒 Install Kiota run: dotnet tool install --global Microsoft.OpenApi.Kiota - - name: 🎒 Load packages + - name: 🎒 Load packages (and generate api client) run: dotnet restore - name: 🛠️ Build code @@ -224,7 +233,7 @@ jobs: - name: 🎒 Install Kiota run: dotnet tool install --global Microsoft.OpenApi.Kiota - - name: 🎒 Load packages + - name: 🎒 Load packages (and generate api client) run: dotnet restore - name: 📝 Set module version diff --git a/.github/workflows/proxy.yml b/.github/workflows/proxy.yml new file mode 100644 index 0000000..1a4bc68 --- /dev/null +++ b/.github/workflows/proxy.yml @@ -0,0 +1,47 @@ +name: 🧪 Test Proxy +on: + workflow_dispatch: + schedule: + - cron: '28 7 * * 1,4,6' + +jobs: + proxy: + permissions: + checks: write + name: ✅ Check proxy + runs-on: ubuntu-latest + steps: + - name: 📦 Install Pester + shell: pwsh + run: Install-Module -Name Pester -Force -SkipPublisherCheck -Scope CurrentUser + + - name: 🧪 Run test + shell: pwsh + run: | + Import-Module Pester + $pesterConfig = [PesterConfiguration]@{ + Output = @{ + Verbosity = "Normal" + CIFormat = "Auto" + StackTraceVerbosity = "FirstLine" + } + TestResult = @{ + Enabled = $true + OutputPath = "${{ github.workspace }}/testresults/TestResults.xml" + OutputFormat = "JUnitXml" + } + Run = @{ + Path = "./tests/WinTuner.Proxy.Tests" + Exit = $true + } + Should = @{ + ErrorAction = "Continue" + } + } + Invoke-Pester -Configuration $pesterConfig + + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + if: always() + with: + files: ${{ github.workspace }}/testresults/*.xml diff --git a/tests/WinTuner.Proxy.Tests/WinTunerProxy.Tests.ps1 b/tests/WinTuner.Proxy.Tests/WinTunerProxy.Tests.ps1 new file mode 100644 index 0000000..c7c0454 --- /dev/null +++ b/tests/WinTuner.Proxy.Tests/WinTunerProxy.Tests.ps1 @@ -0,0 +1,52 @@ +Describe 'WinTunerProxy' { + It 'Should respond within 15 seconds' { + $measurement = Measure-Command -Expression { $response = Invoke-WebRequest -Uri https://proxy.wintuner.app -ConnectionTimeoutSeconds 30; $response.StatusCode | Should -Be 200 } + $measurement.TotalSeconds | Should -BeLessThan 15 + } + + It 'Should produce a valid json at /api/swagger.json' { + $response = Invoke-WebRequest -Uri https://proxy.wintuner.app/api/swagger.json + $response.StatusCode | Should -Be 200 + $response.Content | ConvertFrom-Json | Should -Not -BeNullOrEmpty + } + + Describe 'Package' { + It 'Should return package information for "9NZVDKPMR9RD"' { + $response = Invoke-RestMethod -Uri https://proxy.wintuner.app/api/store/package/9NZVDKPMR9RD -Headers @{ 'x-functions-key' = $env:WINTUNER_PROXY_CODE } + $response.packageIdentifier | Should -Be '9NZVDKPMR9RD' + $response.displayName | Should -Be 'Mozilla Firefox' + $response.publisher | Should -Be 'Mozilla' + + $response.description | Should -Not -BeNullOrEmpty + $response.iconUrl | Should -Not -BeNullOrEmpty + $response.informationUrl | Should -Not -BeNullOrEmpty + $response.privacyInformationUrl | Should -Not -BeNullOrEmpty + $response.scope | Should -BeIn 'system', 'user' + } + + It 'Should return package information for "XP9KHM4BK9FZ7Q"' { + $response = Invoke-RestMethod -Uri https://proxy.wintuner.app/api/store/package/XP9KHM4BK9FZ7Q -Headers @{ 'x-functions-key' = $env:WINTUNER_PROXY_CODE } + $response.packageIdentifier | Should -Be 'XP9KHM4BK9FZ7Q' + $response.displayName | Should -Be 'Visual Studio Code' + $response.publisher | Should -Be 'Microsoft Corporation' + + $response.description | Should -Not -BeNullOrEmpty + $response.iconUrl | Should -Not -BeNullOrEmpty + $response.informationUrl | Should -Not -BeNullOrEmpty + $response.privacyInformationUrl | Should -Not -BeNullOrEmpty + $response.scope | Should -BeIn 'system', 'user' + } + } + + Describe 'Search' { + It 'Should find packageIdentifier for "Visual Studio Code"' { + $response = Invoke-RestMethod -Uri https://proxy.wintuner.app/api/store/search?searchString=Visual+Studio+Code -Headers @{ 'x-functions-key' = $env:WINTUNER_PROXY_CODE } + # The response looks like: + # [{"packageIdentifier": "string","displayName": "string","publisher": "string"}] + # and is valid JSON with an array of objects + $response | Should -HaveCount 2 + $item = $response[1]; + $item.packageIdentifier | Should -Be 'XP9KHM4BK9FZ7Q' + } + } +} \ No newline at end of file diff --git a/tests/WinTuner.Proxy.Tests/run.ps1 b/tests/WinTuner.Proxy.Tests/run.ps1 new file mode 100644 index 0000000..fc7d1e6 --- /dev/null +++ b/tests/WinTuner.Proxy.Tests/run.ps1 @@ -0,0 +1,22 @@ +$pesterConfig = [PesterConfiguration]@{ + Output = @{ + Verbosity = "Normal" + CIFormat = "Auto" + StackTraceVerbosity = "FirstLine" + } + OutputFormat = "NUnitXML" + TestResult = @{ + Enabled = $true + OutputPath = "TestResults.xml" + OutputFormat = "JUnitXml" + } + Run = @{ + Path = "./tests/WinTuner.Proxy.Tests" + Exit = $true + } + Should = @{ + ErrorAction = "Continue" + } +} + +Invoke-Pester -Configuration $pesterConfig \ No newline at end of file