Mostlylucid.Common 8.14.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Mostlylucid.Common --version 8.14.2
                    
NuGet\Install-Package Mostlylucid.Common -Version 8.14.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Mostlylucid.Common" Version="8.14.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mostlylucid.Common" Version="8.14.2" />
                    
Directory.Packages.props
<PackageReference Include="Mostlylucid.Common" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Mostlylucid.Common --version 8.14.2
                    
#r "nuget: Mostlylucid.Common, 8.14.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Mostlylucid.Common@8.14.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Mostlylucid.Common&version=8.14.2
                    
Install as a Cake Addin
#tool nuget:?package=Mostlylucid.Common&version=8.14.2
                    
Install as a Cake Tool

Mostlylucid.Common

Shared abstractions, base classes, and utilities for Mostlylucid NuGet packages.

Features

Caching

Generic caching service abstraction with memory cache implementation:

// Register caching service
services.AddMemoryCachingService<MyData>(options =>
{
    options.DefaultExpiration = TimeSpan.FromMinutes(30);
    options.MaxEntries = 5000;
});

// Use in your service
public class MyService
{
    private readonly ICachingService<MyData> _cache;

    public async Task<MyData?> GetDataAsync(string key)
    {
        return await _cache.GetOrAddAsync(key, async () =>
        {
            // Fetch from source if not cached
            return await FetchFromSourceAsync(key);
        });
    }
}

Statistics Tracking

Base interfaces and implementations for service statistics:

public class MyService : IServiceStatistics
{
    private readonly ServiceStatisticsTracker _stats = new();

    public async Task<Result> ProcessAsync(Request request)
    {
        _stats.IncrementRequests();

        var cached = GetFromCache(request);
        if (cached != null)
        {
            _stats.IncrementCacheHit();
            return cached;
        }

        // Process...
    }

    public long TotalRequests => _stats.TotalRequests;
    public long CacheHits => _stats.CacheHits;
    public double CacheHitRate => _stats.CacheHitRate;
}

Periodic Update Service

Base class for background services that periodically update data:

public class MyUpdateService : PeriodicUpdateService
{
    protected override TimeSpan UpdateInterval => TimeSpan.FromHours(24);

    protected override Task<DateTime?> GetLastUpdateTimeAsync(CancellationToken ct)
    {
        return Task.FromResult(File.GetLastWriteTimeUtc("data.db") as DateTime?);
    }

    protected override async Task PerformUpdateAsync(CancellationToken ct)
    {
        await DownloadLatestDataAsync(ct);
    }
}

Configuration Interfaces

Standard options interfaces for consistent configuration:

public class MyOptions : ICacheableOptions, ITestableOptions
{
    public bool Enabled { get; set; } = true;
    public TimeSpan CacheDuration { get; set; } = TimeSpan.FromHours(1);
    public int MaxCacheEntries { get; set; } = 10000;
    public bool EnableTestMode { get; set; } = false;
    public string TestModeHeader => "X-Test-Mode";
}

Middleware Base

Base class for middleware with test mode support:

public class MyMiddleware : TestModeMiddlewareBase<MyResult>
{
    protected override string ResultKey => "MyResult";
    protected override string TestModeHeader => "X-Test-Mode";
    protected override bool IsTestModeEnabled => _options.EnableTestMode;

    protected override MyResult? CreateTestModeResult(string testValue)
    {
        return new MyResult { TestValue = testValue };
    }

    protected override async Task<MyResult?> ProcessRequestAsync(HttpContext context)
    {
        var ip = context.GetClientIpAddress();
        return await _service.ProcessAsync(ip);
    }
}

IP Address Extraction

Helper for getting client IP addresses with proxy/CDN support:

// Automatically checks CF-Connecting-IP, X-Forwarded-For, X-Real-IP, etc.
var clientIp = context.GetClientIpAddress();

Entity Interfaces

Standard interfaces for database entities:

public class CachedItem : ICachedEntity
{
    public string Key { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
    public DateTime ExpiresAt { get; set; }
    public bool IsExpired => DateTime.UtcNow > ExpiresAt;
}

OpenTelemetry Support

Base classes and helpers for OpenTelemetry instrumentation across all Mostlylucid packages:

using Mostlylucid.Common.Telemetry;

// Get all Mostlylucid activity source names for OpenTelemetry configuration
var sources = TelemetryExtensions.GetMostlylucidActivitySourceNames();
foreach (var source in sources)
{
    tracing.AddSource(source);
}

// Activity source names are available as constants
// ActivitySources.BotDetection = "Mostlylucid.BotDetection"
// ActivitySources.GeoDetection = "Mostlylucid.GeoDetection"
// etc.

Available telemetry utilities:

  • TelemetryActivitySource - Wrapper for System.Diagnostics.ActivitySource
  • TelemetryOptions - Configuration for telemetry behavior
  • TelemetryConstants - Standard attribute names following OpenTelemetry semantic conventions
  • TelemetryExtensions - Helper methods for service registration
  • ActivityExtensions - Extension methods for recording results and exceptions

Installation

dotnet add package Mostlylucid.Common

License

GNU AGPLv3

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on Mostlylucid.Common:

Package Downloads
mostlylucid.botdetection

Enterprise bot detection and anonymous entity resolution for ASP.NET Core — the detection engine behind StyloBot. Probabilistic and behavioural, not just User-Agent matching: UA/header/IP analysis, JA3/JA4/HTTP2/QUIC/TCP-IP fingerprinting, Leiden cluster discovery, 129-dim Markov session vectors, metastable fingerprint identity, and optional LLM classification. Zero-PII (HMAC-SHA256), SQLite-backed, single-call UseStyloBot() setup.

mostlylucid.geodetection

Geographic location detection and routing middleware for ASP.NET Core applications with country-based routing and IP geolocation.

Mostlylucid.Ephemeral.Atoms.Llm

Meta-package for the Ephemeral LLM coordinator atom. References Mostlylucid.Ephemeral.Atoms.Llm.Abstractions (contracts) and Mostlylucid.Ephemeral.Atoms.Llm.Coordinator (runtime). Install this to get the full prompt / pick / invoke / writeback pipeline; reference .Abstractions alone if you only implement the contracts (net8.0/net9.0/net10.0).

Mostlylucid.Ephemeral.Atoms.Llm.Coordinator

Ephemeral LLM coordinator runtime: a tick-driven prompt / pick / invoke / writeback pipeline (EphemeralLlmCoordinator + AddEphemeralLlmCoordinator DI) built on the Llm.Abstractions contracts and Mostlylucid.Common scheduling.

Mostlylucid.Atoms.Ephemeral

Ephemeral LLM coordinator atom: a prompt / pick / invoke / writeback pipeline that drives scheduling-coordinated LLM calls. Depends only on Mostlylucid.Common scheduling and the Microsoft.Extensions abstractions.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.15.0 48 10/17/2026
8.14.2 45 10/17/2026
8.14.1 54 10/17/2026
8.14.0 380 9/12/2026
8.12.1 461 8/26/2026
8.12.0 227 8/26/2026
8.11.3 221 8/26/2026
8.11.2 231 8/26/2026
8.11.1 221 8/26/2026
8.10.0 316 8/16/2026
8.9.4 240 8/16/2026
8.9.3 305 8/14/2026
8.9.1 256 8/12/2026
8.9.0 243 8/12/2026
8.8.2 204 8/12/2026
8.8.1 112 8/10/2026
8.7.0 141 8/4/2026
8.6.0 131 8/1/2026
8.5.4 125 7/27/2026
8.5.1 133 7/26/2026
Loading failed