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;
}
}