diff --git a/bitwarden_license/src/Sso/Views/Shared/_Layout.cshtml b/bitwarden_license/src/Sso/Views/Shared/_Layout.cshtml index b5330dfa92bf..b3c244a3d435 100644 --- a/bitwarden_license/src/Sso/Views/Shared/_Layout.cshtml +++ b/bitwarden_license/src/Sso/Views/Shared/_Layout.cshtml @@ -1,4 +1,4 @@ -@using static Bit.Core.Utilities.AssemblyHelpers; +@inject Bitwarden.Server.Sdk.Environment.IBitwardenEnvironment BitwardenEnvironment @@ -30,7 +30,7 @@
- Version @GetVersion() + Version @BitwardenEnvironment.Version
diff --git a/src/Admin/Controllers/HomeController.cs b/src/Admin/Controllers/HomeController.cs index 958c7d17f724..b219bdb34710 100644 --- a/src/Admin/Controllers/HomeController.cs +++ b/src/Admin/Controllers/HomeController.cs @@ -5,6 +5,7 @@ using System.Text.Json; using Bit.Admin.Models; using Bit.Core.Settings; +using Bitwarden.Server.Sdk.Environment; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; @@ -18,12 +19,14 @@ public class HomeController : Controller private readonly GlobalSettings _globalSettings; private readonly IHttpClientFactory _httpClientFactory; private readonly ILogger _logger; + private readonly IBitwardenEnvironment _bitwardenEnvironment; - public HomeController(GlobalSettings globalSettings, IHttpClientFactory httpClientFactory, ILogger logger) + public HomeController(GlobalSettings globalSettings, IHttpClientFactory httpClientFactory, ILogger logger, IBitwardenEnvironment bitwardenEnvironment) { _globalSettings = globalSettings; _httpClientFactory = httpClientFactory; _logger = logger; + _bitwardenEnvironment = bitwardenEnvironment; } [Authorize] @@ -32,7 +35,7 @@ public IActionResult Index() return View(new HomeModel { GlobalSettings = _globalSettings, - CurrentVersion = Core.Utilities.AssemblyHelpers.GetVersion() + CurrentVersion = _bitwardenEnvironment.Version }); } diff --git a/src/Admin/Controllers/InfoController.cs b/src/Admin/Controllers/InfoController.cs index dc41721de468..7f9680b6db8d 100644 --- a/src/Admin/Controllers/InfoController.cs +++ b/src/Admin/Controllers/InfoController.cs @@ -1,5 +1,4 @@ -using Bit.Core.Utilities; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; namespace Bit.Admin.Controllers; @@ -11,10 +10,4 @@ public DateTime GetAlive() { return DateTime.UtcNow; } - - [HttpGet("~/version")] - public JsonResult GetVersion() - { - return Json(AssemblyHelpers.GetVersion()); - } } diff --git a/src/Admin/Startup.cs b/src/Admin/Startup.cs index 53e971ffcb90..935e225c064e 100644 --- a/src/Admin/Startup.cs +++ b/src/Admin/Startup.cs @@ -162,6 +162,10 @@ public void Configure( // Gates endpoints carrying IFeatureMetadata; required in any app that // routes requests through endpoints tagged with [RequireFeature]. app.UseFeatureFlagChecks(); - app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute()); + app.UseEndpoints(endpoints => + { + endpoints.MapDefaultControllerRoute(); + endpoints.MapVersionEndpoint(); + }); } } diff --git a/src/Api/Controllers/ConfigController.cs b/src/Api/Controllers/ConfigController.cs index 899e5b369113..de3011f2c0db 100644 --- a/src/Api/Controllers/ConfigController.cs +++ b/src/Api/Controllers/ConfigController.cs @@ -1,5 +1,6 @@ using Bit.Api.Models.Response; using Bit.Core.Settings; +using Bitwarden.Server.Sdk.Environment; using Bitwarden.Server.Sdk.Features; using Microsoft.AspNetCore.Mvc; @@ -10,18 +11,21 @@ public class ConfigController : Controller { private readonly IGlobalSettings _globalSettings; private readonly IFeatureService _featureService; + private readonly IBitwardenEnvironment _bitwardenEnvironment; public ConfigController( IGlobalSettings globalSettings, - IFeatureService featureService) + IFeatureService featureService, + IBitwardenEnvironment bitwardenEnvironment) { _globalSettings = globalSettings; _featureService = featureService; + _bitwardenEnvironment = bitwardenEnvironment; } [HttpGet("")] public ConfigResponseModel GetConfigs() { - return new ConfigResponseModel(_featureService, _globalSettings); + return new ConfigResponseModel(_featureService, _globalSettings, _bitwardenEnvironment); } } diff --git a/src/Api/Controllers/InfoController.cs b/src/Api/Controllers/InfoController.cs index 590a3006c043..65998c9d78e4 100644 --- a/src/Api/Controllers/InfoController.cs +++ b/src/Api/Controllers/InfoController.cs @@ -1,5 +1,4 @@ -using Bit.Core.Utilities; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; namespace Bit.Api.Controllers; @@ -17,10 +16,4 @@ public DateTime GetNow() { return GetAlive(); } - - [HttpGet("~/version")] - public JsonResult GetVersion() - { - return Json(AssemblyHelpers.GetVersion()); - } } diff --git a/src/Api/Models/Response/ConfigResponseModel.cs b/src/Api/Models/Response/ConfigResponseModel.cs index 490e28bb020e..cb34fc89a23d 100644 --- a/src/Api/Models/Response/ConfigResponseModel.cs +++ b/src/Api/Models/Response/ConfigResponseModel.cs @@ -9,7 +9,7 @@ using Bit.Core.Enums; using Bit.Core.Models.Api; using Bit.Core.Settings; -using Bit.Core.Utilities; +using Bitwarden.Server.Sdk.Environment; namespace Bit.Api.Models.Response; @@ -24,22 +24,14 @@ public class ConfigResponseModel : ResponseModel public CommunicationSettings Communication { get; set; } public ServerSettingsResponseModel Settings { get; set; } - public ConfigResponseModel() : base("config") - { - Version = AssemblyHelpers.GetVersion(); - GitHash = AssemblyHelpers.GetGitHash(); - Environment = new EnvironmentConfigResponseModel(); - FeatureStates = new Dictionary(); - Settings = new ServerSettingsResponseModel(); - } - public ConfigResponseModel( Bitwarden.Server.Sdk.Features.IFeatureService featureService, - IGlobalSettings globalSettings + IGlobalSettings globalSettings, + IBitwardenEnvironment bitwardenEnvironment ) : base("config") { - Version = AssemblyHelpers.GetVersion(); - GitHash = AssemblyHelpers.GetGitHash(); + Version = bitwardenEnvironment.Version; + GitHash = bitwardenEnvironment.GitHash; Environment = new EnvironmentConfigResponseModel { CloudRegion = globalSettings.BaseServiceUri.CloudRegion, diff --git a/src/Api/Startup.cs b/src/Api/Startup.cs index b755e286ac50..415dc85495cd 100644 --- a/src/Api/Startup.cs +++ b/src/Api/Startup.cs @@ -286,6 +286,7 @@ public void Configure( app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); + endpoints.MapVersionEndpoint(); #if !OSS // PAM is a commercial feature; its Minimal API endpoints are only mapped in non-OSS builds. diff --git a/src/Core/Utilities/AssemblyHelpers.cs b/src/Core/Utilities/AssemblyHelpers.cs deleted file mode 100644 index 03f7ff986d7e..000000000000 --- a/src/Core/Utilities/AssemblyHelpers.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Diagnostics; -using System.Reflection; - -namespace Bit.Core.Utilities; - -public static class AssemblyHelpers -{ - private static string? _version; - private static string? _gitHash; - - static AssemblyHelpers() - { - var assemblyInformationalVersionAttribute = typeof(AssemblyHelpers).Assembly.GetCustomAttribute(); - if (assemblyInformationalVersionAttribute == null) - { - Debug.Fail("The AssemblyInformationalVersionAttribute is expected to exist in this assembly, possibly its generation was turned off."); - return; - } - - var informationalVersion = assemblyInformationalVersionAttribute.InformationalVersion.AsSpan(); - - if (!informationalVersion.TrySplitBy('+', out var version, out var gitHash)) - { - // Treat the whole thing as the version - _version = informationalVersion.ToString(); - return; - } - - _version = version.ToString(); - if (gitHash.Length < 8) - { - return; - } - _gitHash = gitHash[..8].ToString(); - } - - public static string? GetVersion() - { - return _version; - } - - public static string? GetGitHash() - { - return _gitHash; - } -} diff --git a/src/Icons/Controllers/InfoController.cs b/src/Icons/Controllers/InfoController.cs index 253ee7cc7801..ad0f737e234c 100644 --- a/src/Icons/Controllers/InfoController.cs +++ b/src/Icons/Controllers/InfoController.cs @@ -1,5 +1,4 @@ -using Bit.Core.Utilities; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; namespace Bit.Icons.Controllers; @@ -11,10 +10,4 @@ public DateTime GetAlive() { return DateTime.UtcNow; } - - [HttpGet("~/version")] - public JsonResult GetVersion() - { - return Json(AssemblyHelpers.GetVersion()); - } } diff --git a/src/Icons/Startup.cs b/src/Icons/Startup.cs index e40328ba7e08..b0752055f466 100644 --- a/src/Icons/Startup.cs +++ b/src/Icons/Startup.cs @@ -98,6 +98,10 @@ public void Configure( .AllowAnyMethod().AllowAnyHeader().AllowCredentials()); app.UseRouting(); - app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute()); + app.UseEndpoints(endpoints => + { + endpoints.MapDefaultControllerRoute(); + endpoints.MapVersionEndpoint(); + }); } } diff --git a/src/Notifications/Controllers/InfoController.cs b/src/Notifications/Controllers/InfoController.cs index afd6911a8de1..38adb456c2eb 100644 --- a/src/Notifications/Controllers/InfoController.cs +++ b/src/Notifications/Controllers/InfoController.cs @@ -1,5 +1,4 @@ -using Bit.Core.Utilities; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; namespace Bit.Notifications.Controllers; @@ -11,10 +10,4 @@ public DateTime GetAlive() { return DateTime.UtcNow; } - - [HttpGet("~/version")] - public JsonResult GetVersion() - { - return Json(AssemblyHelpers.GetVersion()); - } } diff --git a/src/Notifications/Startup.cs b/src/Notifications/Startup.cs index 3a4dc2d4476c..762ac51c6cd5 100644 --- a/src/Notifications/Startup.cs +++ b/src/Notifications/Startup.cs @@ -122,6 +122,7 @@ public void Configure( options.TransportMaxBufferSize = 4096; }); endpoints.MapDefaultControllerRoute(); + endpoints.MapVersionEndpoint(); }); } } diff --git a/test/Api.IntegrationTest/Controllers/ConfigControllerTests.cs b/test/Api.IntegrationTest/Controllers/ConfigControllerTests.cs index 73fa3aba7d6d..bf7ef920e1cf 100644 --- a/test/Api.IntegrationTest/Controllers/ConfigControllerTests.cs +++ b/test/Api.IntegrationTest/Controllers/ConfigControllerTests.cs @@ -1,13 +1,14 @@ using System.Net.Http.Headers; using Bit.Api.IntegrationTest.Factories; using Bit.Api.IntegrationTest.Helpers; -using Bit.Api.Models.Response; using Bit.Core.AdminConsole.Entities; using Bit.Core.Billing.Enums; using Xunit; namespace Bit.Api.IntegrationTest.Controllers; +file record ConfigResponse(string Version); + public class ConfigControllerTests : IClassFixture, IAsyncLifetime { private readonly HttpClient _client; @@ -48,7 +49,7 @@ public async Task GetConfigs_Unauthenticated() var response = await _client.GetAsync("/config"); response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); + var result = await response.Content.ReadFromJsonAsync(); Assert.NotNull(result); Assert.NotEmpty(result!.Version); @@ -61,7 +62,7 @@ public async Task GetConfigs_Authenticated() var response = await _client.GetAsync("/config"); response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); + var result = await response.Content.ReadFromJsonAsync(); Assert.NotNull(result); Assert.NotEmpty(result!.Version); @@ -87,7 +88,7 @@ public async Task GetConfigs_WithOrganizations(int orgCount) var response = await _client.GetAsync("/config"); response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); + var result = await response.Content.ReadFromJsonAsync(); Assert.NotNull(result); Assert.NotEmpty(result!.Version); diff --git a/test/Api.Test/Controllers/ConfigControllerTests.cs b/test/Api.Test/Controllers/ConfigControllerTests.cs index 29125974efe3..3ec637ba9663 100644 --- a/test/Api.Test/Controllers/ConfigControllerTests.cs +++ b/test/Api.Test/Controllers/ConfigControllerTests.cs @@ -2,6 +2,7 @@ using AutoFixture.Xunit2; using Bit.Api.Controllers; using Bit.Core.Settings; +using Bitwarden.Server.Sdk.Environment; using Bitwarden.Server.Sdk.Features; using NSubstitute; using Xunit; @@ -13,16 +14,19 @@ public class ConfigControllerTests : IDisposable private readonly ConfigController _sut; private readonly GlobalSettings _globalSettings; private readonly IFeatureService _featureService; + private readonly IBitwardenEnvironment _bitwardenEnvironment; public ConfigControllerTests() { _globalSettings = new GlobalSettings(); _featureService = Substitute.For(); _featureService.GetAll().Returns(new Dictionary()); + _bitwardenEnvironment = Substitute.For(); _sut = new ConfigController( _globalSettings, - _featureService + _featureService, + _bitwardenEnvironment ); } diff --git a/test/Api.Test/Models/Response/ServerSettingsResponseModelTests.cs b/test/Api.Test/Models/Response/ServerSettingsResponseModelTests.cs index af03d94d67f5..5521452ec9be 100644 --- a/test/Api.Test/Models/Response/ServerSettingsResponseModelTests.cs +++ b/test/Api.Test/Models/Response/ServerSettingsResponseModelTests.cs @@ -1,6 +1,7 @@ using System.Text.Json.Nodes; using Bit.Api.Models.Response; using Bit.Core.Settings; +using Bitwarden.Server.Sdk.Environment; using Bitwarden.Server.Sdk.Features; using NSubstitute; using Xunit; @@ -21,7 +22,9 @@ public void ConfigResponseModel_SuppressOnboardingInterstitialsTrue_MapsToSettin var featureService = Substitute.For(); featureService.GetAll().Returns(new Dictionary()); - var model = new ConfigResponseModel(featureService, globalSettings); + var bitwardenEnvironment = Substitute.For(); + + var model = new ConfigResponseModel(featureService, globalSettings, bitwardenEnvironment); Assert.True(model.Settings.SuppressOnboardingInterstitials); } @@ -38,7 +41,9 @@ public void ConfigResponseModel_SuppressOnboardingInterstitialsFalse_MapsToSetti var featureService = Substitute.For(); featureService.GetAll().Returns(new Dictionary()); - var model = new ConfigResponseModel(featureService, globalSettings); + var bitwardenEnvironment = Substitute.For(); + + var model = new ConfigResponseModel(featureService, globalSettings, bitwardenEnvironment); Assert.False(model.Settings.SuppressOnboardingInterstitials); } diff --git a/test/Core.Test/Utilities/AssemblyHelpersTests.cs b/test/Core.Test/Utilities/AssemblyHelpersTests.cs deleted file mode 100644 index 463deb54a112..000000000000 --- a/test/Core.Test/Utilities/AssemblyHelpersTests.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Bit.Core.Utilities; -using Xunit; - -namespace Bit.Core.Test.Utilities; - -public class AssemblyHelpersTests -{ - [Fact] - public void ReturnsValidVersionAndGitHash() - { - var version = AssemblyHelpers.GetVersion(); - _ = Version.Parse(version); - - var gitHash = AssemblyHelpers.GetGitHash(); - Assert.NotNull(gitHash); - Assert.Equal(8, gitHash.Length); - } -} diff --git a/test/SeederApi.IntegrationTest/packages.lock.json b/test/SeederApi.IntegrationTest/packages.lock.json index 65c0355fc60e..38680bb2f8c4 100644 --- a/test/SeederApi.IntegrationTest/packages.lock.json +++ b/test/SeederApi.IntegrationTest/packages.lock.json @@ -1464,7 +1464,17 @@ "seederapi": { "type": "Project", "dependencies": { + "Bitwarden.Server.Sdk.Environment": "[0.1.0, )", + "Bitwarden.Server.Sdk.Features": "[1.4.0, )", + "Bitwarden.Server.Sdk.WebEssentials": "[0.5.0, )", "Core": "[2026.8.0, )", + "OpenTelemetry.Exporter.OpenTelemetryProtocol": "[1.15.3, )", + "OpenTelemetry.Extensions.Hosting": "[1.15.3, )", + "OpenTelemetry.Instrumentation.AspNetCore": "[1.15.2, )", + "OpenTelemetry.Instrumentation.EntityFrameworkCore": "[1.12.0-beta.2, )", + "OpenTelemetry.Instrumentation.Http": "[1.15.1, )", + "OpenTelemetry.Instrumentation.Runtime": "[1.15.1, )", + "OpenTelemetry.Instrumentation.SqlClient": "[1.15.2, )", "Seeder": "[2026.8.0, )", "SharedWeb": "[2026.8.0, )" } diff --git a/util/SeederApi/Controllers/InfoController.cs b/util/SeederApi/Controllers/InfoController.cs index 347f51ef9ca5..138f8714c4b5 100644 --- a/util/SeederApi/Controllers/InfoController.cs +++ b/util/SeederApi/Controllers/InfoController.cs @@ -1,5 +1,4 @@ -using Bit.Core.Utilities; -using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Bit.SeederApi.Controllers; @@ -13,10 +12,4 @@ public DateTime GetAlive() { return DateTime.UtcNow; } - - [HttpGet("~/version")] - public JsonResult GetVersion() - { - return Json(AssemblyHelpers.GetVersion()); - } } diff --git a/util/SeederApi/Program.cs b/util/SeederApi/Program.cs index 2067df307a09..e96b7101ebb2 100644 --- a/util/SeederApi/Program.cs +++ b/util/SeederApi/Program.cs @@ -8,6 +8,7 @@ public static void Main(string[] args) { Host .CreateDefaultBuilder(args) + .UseBitwardenSdk() .ConfigureCustomAppConfiguration(args) .ConfigureWebHostDefaults(webBuilder => { diff --git a/util/SeederApi/SeederApi.csproj b/util/SeederApi/SeederApi.csproj index 72d8c3d255e5..a7569218774c 100644 --- a/util/SeederApi/SeederApi.csproj +++ b/util/SeederApi/SeederApi.csproj @@ -1,4 +1,5 @@ + bitwarden-seeder-api diff --git a/util/SeederApi/Startup.cs b/util/SeederApi/Startup.cs index 3ce616f1fdc0..07239dc000e6 100644 --- a/util/SeederApi/Startup.cs +++ b/util/SeederApi/Startup.cs @@ -93,6 +93,7 @@ public void Configure( app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(name: "default", pattern: "{controller=Seed}/{action=Index}/{id?}"); + endpoints.MapVersionEndpoint(); }); } } diff --git a/util/SeederApi/packages.lock.json b/util/SeederApi/packages.lock.json index d2a6e31f6622..9320265a5ecc 100644 --- a/util/SeederApi/packages.lock.json +++ b/util/SeederApi/packages.lock.json @@ -2,6 +2,94 @@ "version": 1, "dependencies": { "net10.0": { + "Bitwarden.Server.Sdk.Environment": { + "type": "Direct", + "requested": "[0.1.0, )", + "resolved": "0.1.0", + "contentHash": "yLK3ik/+zQ4w41iDObvv4vq2QwWPaVMuyKFpzlgsukClOOuZUxJAivwnnZZDMXbp2wipWgaW4yeEY+yLdLVaVQ==" + }, + "Bitwarden.Server.Sdk.Features": { + "type": "Direct", + "requested": "[1.4.0, )", + "resolved": "1.4.0", + "contentHash": "74Ir68CSZSUvZvVkb2CaUNHSAZcFMtZY5pReHz+K1eQX6+Am29iWS1i8DbQWq9F6KmCAEbqcGDyfAo4gRCurbg==", + "dependencies": { + "Bitwarden.Server.Sdk.Environment": "0.1.0", + "LaunchDarkly.ServerSdk": "8.14.1" + } + }, + "Bitwarden.Server.Sdk.WebEssentials": { + "type": "Direct", + "requested": "[0.5.0, )", + "resolved": "0.5.0", + "contentHash": "pMKQCluxCGueZ8DK9NS8Xfa+/oxplS9NoSxd7JrI573JsKKl7THe2yeB772S7yogzmqt+0n3GrvA56b8fKOIsQ==", + "dependencies": { + "Bitwarden.Server.Sdk.Environment": "0.1.0" + } + }, + "OpenTelemetry.Exporter.OpenTelemetryProtocol": { + "type": "Direct", + "requested": "[1.15.3, )", + "resolved": "1.15.3", + "contentHash": "FEXJepcseTGbATiCkUfP7ipoFEYYfl/0UmmUwi0KxCPg9PaUA8ab2P1LGopK+/HExasJ1ZutFhZrN6WvUIR23g==", + "dependencies": { + "OpenTelemetry": "1.15.3" + } + }, + "OpenTelemetry.Extensions.Hosting": { + "type": "Direct", + "requested": "[1.15.3, )", + "resolved": "1.15.3", + "contentHash": "u8n/W8yIlqv0BXZmvId1iVaeWXG42tGKdTkuLYg5g57Y/r9CeUNzqtrSHNdG5IoO8iPX79w3v+WsbAHgUQbfeg==", + "dependencies": { + "OpenTelemetry": "1.15.3" + } + }, + "OpenTelemetry.Instrumentation.AspNetCore": { + "type": "Direct", + "requested": "[1.15.2, )", + "resolved": "1.15.2", + "contentHash": "2nPd7r0ug/gd6/CNFL6Rlu+RSQ9WYGSGHAYQ1ssbSqyzKJpqTunfx2I/1O0WB5k+L0cyXbG4XVZpoSoUc3M7wg==", + "dependencies": { + "OpenTelemetry.Api.ProviderBuilderExtensions": "[1.15.3, 2.0.0)" + } + }, + "OpenTelemetry.Instrumentation.EntityFrameworkCore": { + "type": "Direct", + "requested": "[1.12.0-beta.2, )", + "resolved": "1.12.0-beta.2", + "contentHash": "4D2PLiJWbBbQbauojkIflT11WGVXoRU+xgox1mvOkpfm7YXIfwTtROOlcdscS51sMh5fgwjGKJtLWpLKppe7dw==", + "dependencies": { + "OpenTelemetry.Api.ProviderBuilderExtensions": "[1.12.0, 2.0.0)" + } + }, + "OpenTelemetry.Instrumentation.Http": { + "type": "Direct", + "requested": "[1.15.1, )", + "resolved": "1.15.1", + "contentHash": "vFO4Fj/dXkoVNGo/nhoGpO2zYQmZwr4jTID7oRGo+XlQ8LqksyZjUXQ4p39RfUvTID7IzzL8Qe71tW7CcAFymA==", + "dependencies": { + "OpenTelemetry.Api.ProviderBuilderExtensions": "[1.15.3, 2.0.0)" + } + }, + "OpenTelemetry.Instrumentation.Runtime": { + "type": "Direct", + "requested": "[1.15.1, )", + "resolved": "1.15.1", + "contentHash": "cpPwlUT5HXcLGPaIgsbSy0W9eFYAPGVbTP1p8/uyQ4Osvf5BJuPpEXE7crL09SmEd44r0DGNKDtsqxaAz0HxQw==", + "dependencies": { + "OpenTelemetry.Api": "[1.15.3, 2.0.0)" + } + }, + "OpenTelemetry.Instrumentation.SqlClient": { + "type": "Direct", + "requested": "[1.15.2, )", + "resolved": "1.15.2", + "contentHash": "pRB84YJEXD121kygc6CtcF46dtLuTKIjphA2SJye32G4g2Xl3epkCrOcPCOAg4WDagCdMGa16Ge6PPVzFJZsAQ==", + "dependencies": { + "OpenTelemetry.Api.ProviderBuilderExtensions": "[1.15.3, 2.0.0)" + } + }, "AdaptiveCards": { "type": "Transitive", "resolved": "3.1.0", @@ -155,20 +243,6 @@ "Newtonsoft.Json": "12.0.2" } }, - "Bitwarden.Server.Sdk.Environment": { - "type": "Transitive", - "resolved": "0.1.0", - "contentHash": "yLK3ik/+zQ4w41iDObvv4vq2QwWPaVMuyKFpzlgsukClOOuZUxJAivwnnZZDMXbp2wipWgaW4yeEY+yLdLVaVQ==" - }, - "Bitwarden.Server.Sdk.Features": { - "type": "Transitive", - "resolved": "1.4.0", - "contentHash": "74Ir68CSZSUvZvVkb2CaUNHSAZcFMtZY5pReHz+K1eQX6+Am29iWS1i8DbQWq9F6KmCAEbqcGDyfAo4gRCurbg==", - "dependencies": { - "Bitwarden.Server.Sdk.Environment": "0.1.0", - "LaunchDarkly.ServerSdk": "8.14.1" - } - }, "Bogus": { "type": "Transitive", "resolved": "35.6.5", @@ -760,6 +834,27 @@ "resolved": "3.0.271", "contentHash": "pqpqeK8xQGggExhr4tesVgJkjdn+9HQAO0QgrYV2hFjE3y90okzk1kQMntMiUOGfV7FrCUfKPaVvPBD4IANqKg==" }, + "OpenTelemetry": { + "type": "Transitive", + "resolved": "1.15.3", + "contentHash": "N0i6WjPoHPbZyms1ugbDIFAJFuGlpeExJMU/+XSL0lQRUkg/D0utFkDoLXf8Z1km5B+xVZ2GyMXXiX8qdeNmPg==", + "dependencies": { + "OpenTelemetry.Api.ProviderBuilderExtensions": "1.15.3" + } + }, + "OpenTelemetry.Api": { + "type": "Transitive", + "resolved": "1.15.3", + "contentHash": "fX+fkCysfPut+qCcT3bKqyX4QN9Saf4CgX8HLOHywEVD+Xr7sULtfuypITpoDysjx8R59dn/3mWhgimMH8cm/g==" + }, + "OpenTelemetry.Api.ProviderBuilderExtensions": { + "type": "Transitive", + "resolved": "1.15.3", + "contentHash": "SYn0lqYDwLMWhv/zlNGsQcl2yX++yTumanX46bmOZE/ZDOd1WjPBO2kZaZgKLEZTZk48pavIFGJ6vOvxXgWVFQ==", + "dependencies": { + "OpenTelemetry.Api": "1.15.3" + } + }, "Otp.NET": { "type": "Transitive", "resolved": "1.4.0",