# KeyNexus C++ SDK

Official C++ SDK for KeyNexus License Management System.

## Installation

### Using vcpkg

```bash
vcpkg install keynexus-cpp
```

### Manual Installation

```bash
git clone https://github.com/keynexus/keynexus-cpp
cd keynexus-cpp
mkdir build && cd build
cmake ..
make
sudo make install
```

## Quick Start

```cpp
#include <keynexus/client.hpp>
#include <iostream>

int main() {
    // Initialize client
    keynexus::Client client(
        "app_xxxxxxxxxxxx",      // app_id
        "sk_xxxxxxxxxxxxxxxxxxxx" // secret_key
    );

    // Validate license
    auto result = client.validate_license("XXXXX-XXXXX-XXXXX-XXXXX");
    
    if (result.success) {
        std::cout << "✅ License valid!" << std::endl;
        std::cout << "Type: " << result.license.type << std::endl;
    } else {
        std::cout << "❌ Error: " << result.message << std::endl;
    }

    return 0;
}
```

## Features

- ✅ Modern C++17 support
- ✅ Automatic HWID generation
- ✅ Cross-platform (Windows, Linux, macOS)
- ✅ Header-only option available
- ✅ No external dependencies (uses libcurl)

## Requirements

- C++17 or later
- CMake 3.14+
- libcurl
- OpenSSL (for hashing)

## Building

```bash
mkdir build
cd build
cmake ..
cmake --build .
```

## Examples

### Initialize Application

```cpp
auto init_result = client.initialize("1.0.0");
if (init_result.success) {
    std::cout << "App initialized" << std::endl;
}
```

### Validate License

```cpp
auto result = client.validate_license("XXXXX-XXXXX-XXXXX-XXXXX");

if (result.success) {
    if (result.license.type == "lifetime") {
        std::cout << "Lifetime license" << std::endl;
    } else if (result.license.days_left.has_value()) {
        std::cout << "Days left: " << *result.license.days_left << std::endl;
    }
}
```

### Login with Password

```cpp
auto login_result = client.login_with_password("username", "password");

if (login_result.success) {
    std::cout << "Welcome " << login_result.user.username << std::endl;
}
```

### Get User Info

```cpp
auto user = client.get_user_info();
std::cout << "Email: " << user.email << std::endl;
```

## Documentation

Full documentation: https://keynexus.es/docs

## License

MIT License
