// Dark Broken Key C# SDK — wraps the Dark Broken Key Client API v1 (POST /api/v1). // .NET 6+ (System.Net.Http + System.Text.Json, no third-party packages). // // Setup: pass your site origin, application name and owner ID from your // dashboard (Overview -> Credentials) to the constructor. using System; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace DarkBrokenKeySdk { public class DarkBrokenKeyException : Exception { public DarkBrokenKeyException(string message) : base(message) { } } public class DarkBrokenKey { private static readonly HttpClient Http = new HttpClient(); private readonly string _baseUrl; private readonly string _name; private readonly string _ownerid; private readonly string _version; public string SessionId { get; private set; } public DarkBrokenKey(string baseUrl = "https://your-site.pages.dev", // <-- your Dark Broken Key deployment string name = "MyApp", // <-- your application name string ownerid = "YOUR_OWNER_ID", // <-- your developer owner ID string version = "1.0") // <-- your application version { _baseUrl = baseUrl.TrimEnd('/'); _name = name; _ownerid = ownerid; _version = version; } private async Task Call(string type, object extra = null) { var payload = new System.Collections.Generic.Dictionary { ["type"] = type, ["name"] = _name, ["ownerid"] = _ownerid }; if (extra != null) foreach (var p in JsonSerializer.SerializeToElement(extra).EnumerateObject()) payload[p.Name] = p.Value; var body = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); var resp = await Http.PostAsync(_baseUrl + "/api/v1", body); var data = JsonDocument.Parse(await resp.Content.ReadAsStringAsync()).RootElement; if (!data.TryGetProperty("success", out var ok) || !ok.GetBoolean()) throw new DarkBrokenKeyException(data.TryGetProperty("message", out var m) ? m.GetString() : "Unknown error"); if (data.TryGetProperty("sessionid", out var sid)) SessionId = sid.GetString(); return data; } /// Handshake + version check. Call this before anything else. public Task Init() => Call("init", new { version = _version }); /// Create an end-user account by consuming a license key. public Task Register(string username, string password, string key, string hwid = "") => Call("register", new { username, pass = password, key, hwid }); /// Log in with username + password (HWID lock enforced). public Task Login(string username, string password, string hwid = "") => Call("login", new { username, pass = password, hwid }); /// Key-only login. Unused keys are activated on first use. public Task License(string key, string hwid = "") => Call("license", new { key, hwid }); /// Validate the current session (also re-checks ban/expiry). public Task Check() => Call("check", new { sessionid = SessionId ?? "" }); /// Fetch a server-side variable by name (requires a valid session). public async Task Var(string varid) { var data = await Call("var", new { sessionid = SessionId ?? "", varid }); return data.GetProperty("info").GetProperty("value").GetString(); } } // Example: // var app = new DarkBrokenKey(); // await app.Init(); // await app.Login("username", "password", "YOUR-HWID-HERE"); // Console.WriteLine(await app.Var("welcome")); }