Developer Documentation.
Complete technical guides, cryptographic anti-tamper specifications, and ready-to-use downloadable SDKs to protect, activate, and monetize your digital products across web, mobile, and native desktop environments.
Embed this public key into your client application for zero-latency offline lease verification.
Laravel Licensing SDK
Drop-in middleware, Artisan activation command, and scheduled heartbeat sync.
1 Configure Environment Variables
Add the credentials provided in your KKORINE Client Portal to your project's .env:
# KKORINE Licensing Authority
KKORINE_LICENSE_SERVER=https://kkorine.com
KKORINE_LICENSE_KEY=KKOR-XXXX-XXXX-XXXX-XXXX
KKORINE_LICENSE_EMAIL=purchaser@company.com
2 Initial Product Activation
Run the Artisan command in your server terminal or trigger it inside an installation wizard:
$ php artisan license:activate
3 Enforce License on Routes
Protect your application features using the included EnsureValidLicense middleware:
use Kkorine\License\Middleware\EnsureValidLicense;
Route::middleware([EnsureValidLicense::class])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::resource('billing', BillingController::class);
});
4 Schedule Automated Daily Heartbeat
In routes/console.php, schedule the background heartbeat to renew offline lease tokens automatically:
use Illuminate\Support\Facades\Schedule;
use Kkorine\License\KkorineLicenseClient;
Schedule::call(fn() => app(KkorineLicenseClient::class)->heartbeat())->daily();
Node.js / Express Client
Zero external dependencies. Uses native Node.js crypto for asymmetric RSA-2048 verification.
1 Integration Example
const express = require('express');
const KkorineLicenseClient = require('./kkorine-license');
const licenseClient = new KkorineLicenseClient({
serverUrl: 'https://kkorine.com',
licenseKey: process.env.KKORINE_LICENSE_KEY,
email: process.env.KKORINE_LICENSE_EMAIL
});
// 1. Initial activation on boot
await licenseClient.activate();
// 2. Automated background heartbeat timer (pings every 12 hours)
licenseClient.startHeartbeat(12);
// 3. Attach Express middleware
const app = express();
app.use(licenseClient.middleware());
app.get('/api/data', (req, res) => {
res.json({ success: true, message: 'Authorized access' });
});
app.listen(3000, () => console.log('App running with active license guard.'));
Flutter / Dart Client SDK
Secure lease storage, background timer, and ready-made license expired holding screen.
1 Flutter Service Usage
import 'package:flutter/material.dart';
import 'kkorine_license_service.dart';
import 'license_expired_view.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final license = KkorineLicenseService(serverUrl: 'https://kkorine.com');
// Activate or verify existing offline lease
await license.activate(
licenseKey: 'KKOR-XXXX-XXXX-XXXX-XXXX',
email: 'client@company.com',
);
runApp(MyApp(isLicensed: license.isLicensed, license: license));
}
class MyApp extends StatelessWidget {
final bool isLicensed;
final KkorineLicenseService license;
const MyApp({Key? key, required this.isLicensed, required this.license}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: isLicensed
? const HomeScreen()
: LicenseExpiredView(
renewalUrl: license.renewalUrl,
onRefresh: () => license.sendHeartbeat(),
),
);
}
}
Windows C# / .NET SDK
Hardware node-locking using Windows Registry Machine GUID and AppData encrypted lease persistence.
1 C# WinForms / WPF / Console Example
using Kkorine.Licensing;
using System.Diagnostics;
var licenseManager = new KkorineLicenseManager("https://kkorine.com");
// Verify offline lease status on application launch
if (!licenseManager.IsLicensed)
{
Console.WriteLine("License not active. Activating...");
bool ok = await licenseManager.ActivateAsync("KKOR-XXXX-XXXX-XXXX-XXXX", "client@company.com");
if (!ok)
{
Console.WriteLine("Subscription expired or invalid.");
// Open default browser to KKORINE customer renewal portal
Process.Start(new ProcessStartInfo(licenseManager.GetRenewalUrl()) { UseShellExecute = true });
return;
}
}
Console.WriteLine("Authorized. Running application features...");
Angular HTTP Interceptor
Intercepts HTTP 402/403 subscription expiry responses from your backend API.
1
Register Interceptor in app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient, withInterceptorsFromDi, HTTP_INTERCEPTORS } from '@angular/common/http';
import { KkorineLicenseInterceptor } from './kkorine-license.interceptor';
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(withInterceptorsFromDi()),
{
provide: HTTP_INTERCEPTORS,
useClass: KkorineLicenseInterceptor,
multi: true
}
]
};
RESTful Licensing API Reference
Use standard HTTP POST requests to activate, verify, or sync heartbeats from Python, Go, Rust, or custom runtimes.
Authenticates purchaser email and binds the runtime instance to the license key.
Request Body (JSON){
"license_key": "KKOR-9B2F-4A81-9C3E-71D2",
"email": "purchaser@company.com",
"instance_identifier": "app.client.com",
"fingerprint": "optional-hardware-hash",
"platform": "laravel|node|flutter|windows|other",
"client_version": "1.0.0"
}
Response Body (HTTP 200 OK)
{
"success": true,
"license_status": "active",
"lease_token": "eyJhbGciOiJSU0EyNTYi...",
"lease_payload": {
"license_key": "KKOR-9B2F-4A81-9C3E-71D2",
"status": "active",
"expires_at": "2027-10-15T00:00:00Z",
"lease_expires_at": "2026-10-19T13:30:00Z"
},
"lease_signature": "v9X8aZ...",
"renewal_url": "https://kkorine.com/portal/licenses?renew=KKOR-9B2F-4A81-9C3E-71D2"
}
Periodic ping (recommended every 12 to 24 hours) to receive an updated cryptographic lease token.
{
"license_key": "KKOR-9B2F-4A81-9C3E-71D2",
"instance_hash": "a4f89b...",
"client_version": "1.0.0"
}