Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/tidy-ducks-juggle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"PostHog": minor
---

Add the static `PostHogSdk` facade in the `PostHog.Sdk` namespace.
139 changes: 139 additions & 0 deletions src/PostHog/NoOpPostHogClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
using System.Text.Json;
using PostHog;
using PostHog.Api;
using PostHog.Features;
using PostHog.Json;

namespace PostHog.Sdk;

internal sealed class NoOpPostHogClient : IPostHogClient, IFeatureFlagEvaluationsHost
{
static readonly IReadOnlyDictionary<string, FeatureFlag> EmptyFeatureFlags = new Dictionary<string, FeatureFlag>();

NoOpPostHogClient()
{
}

internal static NoOpPostHogClient Instance { get; } = new();

public Task<ApiResult> AliasAsync(string previousId, string newId, CancellationToken cancellationToken)
=> Task.FromResult(new ApiResult(0));

public Task<ApiResult> IdentifyAsync(
string distinctId,
Dictionary<string, object>? personPropertiesToSet,
Dictionary<string, object>? personPropertiesToSetOnce,
CancellationToken cancellationToken)
=> Task.FromResult(new ApiResult(0));

public Task<ApiResult> GroupIdentifyAsync(
string type,
StringOrValue<int> key,
Dictionary<string, object>? properties,
CancellationToken cancellationToken)
=> Task.FromResult(new ApiResult(0));

public Task<ApiResult> GroupIdentifyAsync(
string distinctId,
string type,
StringOrValue<int> key,
Dictionary<string, object>? properties,
CancellationToken cancellationToken)
=> Task.FromResult(new ApiResult(0));

public bool Capture(
string distinctId,
string eventName,
Dictionary<string, object>? properties,
GroupCollection? groups,
bool sendFeatureFlags,
DateTimeOffset? timestamp = null)
=> false;

public bool Capture(
string distinctId,
string eventName,
Dictionary<string, object>? properties,
GroupCollection? groups,
FeatureFlagEvaluations? flags,
DateTimeOffset? timestamp = null)
=> false;

public bool CaptureException(
Exception exception,
string distinctId,
Dictionary<string, object>? properties,
GroupCollection? groups,
bool sendFeatureFlags,
DateTimeOffset? timestamp = null)
=> false;

public bool CaptureException(
Exception exception,
string distinctId,
Dictionary<string, object>? properties,
GroupCollection? groups,
FeatureFlagEvaluations? flags,
DateTimeOffset? timestamp = null)
=> false;

public Task<bool> IsFeatureEnabledAsync(
string featureKey,
string distinctId,
FeatureFlagOptions? options,
CancellationToken cancellationToken)
=> Task.FromResult(false);

public Task<FeatureFlag?> GetFeatureFlagAsync(
string featureKey,
string distinctId,
FeatureFlagOptions? options,
CancellationToken cancellationToken)
=> Task.FromResult<FeatureFlag?>(null);

public Task<JsonDocument?> GetRemoteConfigPayloadAsync(string key, CancellationToken cancellationToken)
=> Task.FromResult<JsonDocument?>(null);

public Task<IReadOnlyDictionary<string, FeatureFlag>> GetAllFeatureFlagsAsync(
string distinctId,
AllFeatureFlagsOptions? options,
CancellationToken cancellationToken)
=> Task.FromResult(EmptyFeatureFlags);

public Task<FeatureFlagEvaluations> EvaluateFlagsAsync(
string distinctId,
AllFeatureFlagsOptions? options,
CancellationToken cancellationToken)
=> Task.FromResult(FeatureFlagEvaluations.Empty(this, distinctId));

public Task LoadFeatureFlagsAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;

public Task FlushAsync()
=> Task.CompletedTask;

public string Version => Versioning.VersionConstants.Version;

public void Dispose()
{
}

public ValueTask DisposeAsync()
=> default;

void IFeatureFlagEvaluationsHost.CaptureFeatureFlagCalled(
string distinctId,
string featureKey,
EvaluatedFlagRecord? record,
GroupCollection? groups,
string? requestId,
long? evaluatedAt,
long? flagDefinitionsLoadedAt,
IReadOnlyCollection<string> errors)
{
}

void IFeatureFlagEvaluationsHost.LogFilterWarning(string message)
{
}
}
Loading
Loading