Visit the official YourKit store. Upon successful payment (credit card, PayPal, or wire transfer), you receive an automated email from sales@yourkit.com.
If your development machine has no internet access:
After activation, verify the integration: yourkit license key new
This API endpoint handles the creation and validation of the license key.
File: controllers/licenseController.ts
import Request, Response from 'express';
import LicenseService from '../services/licenseService';
import body, validationResult from 'express-validator';
export class LicenseController
private licenseService: LicenseService;
constructor()
this.licenseService = new LicenseService();
/**
* Feature: Add New YourKit License Key
* POST /api/v1/licenses/yourkit
*/
public addLicenseKey = async (req: Request, res: Response) =>
// 1. Input Validation
const errors = validationResult(req);
if (!errors.isEmpty())
return res.status(400).json( errors: errors.array() );
const licenseKey, assignedTo = req.body;
try
// 2. Business Logic (Validation & Storage)
const result = await this.licenseService.addYourKitKey(
key: licenseKey,
owner: assignedTo
);
if (!result.success)
return res.status(409).json( message: result.message );
// 3. Return Success Response
return res.status(201).json(
message: 'YourKit license key added successfully.',
data:
id: result.id,
status: 'active',
createdAt: new Date()
);
catch (error)
console.error('Error adding YourKit license:', error);
return res.status(500).json( message: 'Internal server error' );
;
File: services/licenseService.ts
interface LicenseData
key: string;
owner: string;
interface ServiceResult
success: boolean;
message: string;
id?: string;
export class LicenseService
// Mock database function
private async saveToDb(license: LicenseData): Promise<string>
// In a real app, use Prisma/TypeORM/Mongoose here
// const newLicense = await db.licenses.create( data: license );
return `license_$Date.now()`; // Return generated ID
/**
* Validates the YourKit key format and persists it.
* YourKit keys are typically long alphanumeric strings.
*/
public async addYourKitKey(data: LicenseData): Promise<ServiceResult>
const yourKitRegex = /^[A-Z0-9]5-[A-Z0-9]5-[A-Z0-9]5-[A-Z0-9]5-[A-Z0-9]5$/i;
// Basic format validation (Adjust regex based on actual YourKit format)
// Note: Real validation often requires calling YourKit's internal verification API
// or checking the digital signature if available.
if (!yourKitRegex.test(data.key))
return success: false, message: 'Invalid YourKit license key format.' ;
// Check for duplicates (Pseudo-code)
// const exists = await db.licenses.findOne( key: data.key );
// if (exists) return success: false, message: 'License key already exists.' ;
const id = await this.saveToDb(data);
return success: true, message: 'License saved.', id ;
Route Definition:
import Router from 'express';
import LicenseController from './controllers/licenseController';
import body from 'express-validator';
const router = Router();
const controller = new LicenseController();
router.post(
'/licenses/yourkit',
[
body('licenseKey').notEmpty().withMessage('License key is required'),
body('assignedTo').optional().isEmail().withMessage('Must be a valid email')
],
controller.addLicenseKey
);
export default router;
YourKit stores license info in a hidden file. If the GUI fails, you can manually create a file:
Even with a valid key, you might encounter errors. Here’s how to resolve them: Visit the official YourKit store