using Bit.Core.Platform.Push; using Bit.Core.Platform.Push.Internal; using Bit.Core.Platform.PushRegistration.Internal; using Bit.Core.Settings; using Bit.Core.Utilities; using Microsoft.Extensions.DependencyInjection.Extensions; namespace Microsoft.Extensions.DependencyInjection; /// /// Extension methods for adding the Push Registration feature. /// public static class PushRegistrationServiceCollectionExtensions { /// /// Adds a to the service collection. /// /// The to add services to. /// The for chaining. public static IServiceCollection AddPushRegistration(this IServiceCollection services) { ArgumentNullException.ThrowIfNull(services); // TODO: Should add feature that brings in IInstallationDeviceRepository once that is featurized // Register all possible variants under there concrete type. services.TryAddSingleton(); services.TryAddSingleton(); services.AddHttpClient(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(static sp => { var globalSettings = sp.GetRequiredService(); if (globalSettings.SelfHosted) { if (CoreHelpers.SettingHasValue(globalSettings.PushRelayBaseUri) && CoreHelpers.SettingHasValue(globalSettings.Installation.Key)) { return sp.GetRequiredService(); } return sp.GetRequiredService(); } return sp.GetRequiredService(); }); return services; } }