JavaScript Projects
SunLicense Integration Guide for JavaScript Projects
Prerequisites
- Node.js environment (for backend) or modern web browser (for frontend) 
- npm or yarn package manager 
- SunLicense API credentials 
Integration Steps
1. Backend Implementation (Node.js)
const axios = require('axios');
class SunLicenseValidator {
    constructor(licenseKey, productId, version = '1.0.0') {
        this.licenseKey = licenseKey;
        this.productId = productId;
        this.version = version;
        this.apiUrl = 'YOUR_API_URL/api/v1/validate';
    }
    async validate() {
        try {
            const payload = {
                licenseKey: this.licenseKey,
                productId: this.productId,
                productVersion: this.version,
                hwid: this.getHWID(), // Optional
                operatingSystem: process.platform,
                operatingSystemVersion: process.version
            };
            const response = await axios.post(this.apiUrl, payload, {
                headers: { 'Content-Type': 'application/json' }
            });
            return response.status === 200;
        } catch (error) {
            throw new Error(`License validation failed: ${error.message}`);
        }
    }
    getHWID() {
        // Implement your HWID generation logic here
        return 'YOUR-HWID';
    }
}
// Usage example
const validator = new SunLicenseValidator('YOUR-LICENSE-KEY', YOUR_PRODUCT_ID);
validator.validate()
    .then(() => console.log('License valid!'))
    .catch(error => console.error(error));2. Frontend Implementation (Browser)
class SunLicenseValidator {
    constructor(licenseKey, productId, version = '1.0.0') {
        this.licenseKey = licenseKey;
        this.productId = productId;
        this.version = version;
        this.apiUrl = 'YOUR_API_URL/api/v1/validate';
    }
    async validate() {
        try {
            const payload = {
                licenseKey: this.licenseKey,
                productId: this.productId,
                productVersion: this.version,
                operatingSystem: navigator.platform,
                operatingSystemVersion: navigator.userAgent
            };
            const response = await fetch(this.apiUrl, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(payload)
            });
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return true;
        } catch (error) {
            throw new Error(`License validation failed: ${error.message}`);
        }
    }
}3. Integration with Popular Frameworks
Express.js Middleware
function licensingMiddleware(licenseKey, productId) {
    const validator = new SunLicenseValidator(licenseKey, productId);
    
    return async (req, res, next) => {
        try {
            await validator.validate();
            next();
        } catch (error) {
            res.status(403).json({ error: 'Invalid license' });
        }
    };
}
// Usage in Express app
app.use(licensingMiddleware('YOUR-LICENSE-KEY', YOUR_PRODUCT_ID));React Component
import React, { useState, useEffect } from 'react';
function LicenseProtectedApp({ licenseKey, productId, children }) {
    const [isValid, setIsValid] = useState(false);
    const [error, setError] = useState(null);
    useEffect(() => {
        const validator = new SunLicenseValidator(licenseKey, productId);
        validator.validate()
            .then(() => setIsValid(true))
            .catch(err => setError(err.message));
    }, [licenseKey, productId]);
    if (error) return <div>License Error: {error}</div>;
    if (!isValid) return <div>Validating license...</div>;
    return children;
}Best Practices
- Security - Never expose license key in frontend code 
- Implement server-side validation 
- Use secure communication (HTTPS) 
 
- Error Handling - Implement proper error handling 
- Show user-friendly error messages 
- Log validation failures 
 
- Performance - Cache validation results 
- Implement retry mechanisms 
- Handle offline scenarios 
 
Common Issues and Solutions
- CORS Issues - Configure proper CORS headers 
- Use proxy for API requests 
- Handle preflight requests 
 
- Network Problems - Implement timeout handling 
- Add retry logic 
- Cache validation results 
 
Last updated