exisone-client
v0.7.0
Published
Node.js client SDK for ExisOne Software Activation System
Maintainers
Readme
ExisOne Node.js Client SDK
Official Node.js/TypeScript client SDK for the ExisOne Software Activation System.
Installation
npm install exisone-clientQuick Start
import { ExisOneClient } from 'exisone-client';
// Initialize the client
const client = new ExisOneClient({
baseUrl: 'https://www.exisone.com',
accessToken: 'your-api-token'
});
// Generate a hardware fingerprint for this machine
const hardwareId = client.generateHardwareId();
// Activate a license
const result = await client.activate({
activationKey: 'XXXX-XXXX-XXXX-XXXX',
email: '[email protected]',
hardwareId,
productName: 'MyProduct'
});
if (result.success) {
console.log('License activated successfully!');
} else {
console.log(`Activation failed: ${result.errorMessage}`);
}Features
- License Activation - Activate licenses on specific hardware
- License Validation - Validate licenses online or offline
- Smart Validation - Auto-detects offline vs online keys with fallback
- Hardware ID Generation - Cross-platform hardware fingerprinting
- Offline Support - Validate licenses without internet using RSA signatures
- TypeScript Support - Full type definitions included
- Zero Dependencies - Uses only Node.js built-in modules
Requirements
- Node.js 18.0.0 or higher (uses native
fetch)
API Reference
ExisOneClient
Constructor Options
| Option | Type | Description |
|--------|------|-------------|
| baseUrl | string | Base URL for the ExisOne API (must use HTTPS) |
| accessToken | string | API access token for authentication |
| offlinePublicKey | string | RSA public key (PEM) for offline validation |
| allowedBaseUrlHosts | string[] | Restrict baseUrl to specific hosts |
| timeout | number | Request timeout in milliseconds (default: 30000) |
Methods
generateHardwareId(): string
Generate a cross-platform hardware fingerprint for this machine.
const hardwareId = client.generateHardwareId();
// Returns: "A1B2C3D4E5F6..." (64-char hex string)activate(params): Promise<ActivationResult>
Activate a license on this machine.
const result = await client.activate({
activationKey: 'XXXX-XXXX-XXXX-XXXX',
email: '[email protected]',
hardwareId,
productName: 'MyProduct',
version: '1.0.0' // Optional: your app version
});
if (result.success) {
console.log(`Server version: ${result.serverVersion}`);
} else {
console.log(`Error: ${result.errorCode} - ${result.errorMessage}`);
}validate(params): Promise<ValidationResult>
Validate a license online.
const result = await client.validate({
activationKey: 'XXXX-XXXX-XXXX-XXXX',
hardwareId
});
if (result.isValid) {
console.log(`License valid until: ${result.expirationDate}`);
console.log(`Features: ${result.features.join(', ')}`);
}validateSmart(params): Promise<SmartValidationResult>
Smart validation that auto-detects offline vs online keys.
// Works with both online keys and offline codes
const result = await client.validateSmart({
activationKeyOrOfflineCode: 'XXXX-XXXX-XXXX-XXXX',
hardwareId
});
console.log(`Valid: ${result.isValid}`);
console.log(`Was offline: ${result.wasOffline}`);deactivate(params): Promise<boolean>
Deactivate a license.
const success = await client.deactivate({
activationKey: 'XXXX-XXXX-XXXX-XXXX',
hardwareId,
productName: 'MyProduct'
});validateOffline(offlineCode, hardwareId): OfflineValidationResult
Validate an offline activation code locally (requires offlinePublicKey).
const client = new ExisOneClient({
baseUrl: 'https://www.exisone.com',
accessToken: 'your-token',
offlinePublicKey: `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----`
});
const result = client.validateOffline(offlineCode, hardwareId);
if (result.isValid) {
console.log(`Product: ${result.productName}`);
console.log(`Expires: ${result.expirationDate}`);
}generateActivationKey(params): Promise<string>
Generate a new activation key (requires admin token with generate permission).
const key = await client.generateActivationKey({
productName: 'MyProduct',
email: '[email protected]',
validityDays: 365
});getLicensedFeatures(activationKey): Promise<string[]>
Get the features enabled for a license.
const features = await client.getLicensedFeatures('XXXX-XXXX-XXXX-XXXX');
// ['Export', 'API Access', 'Analytics']sendSupportTicket(params): Promise<void>
Send a support ticket.
await client.sendSupportTicket({
productName: 'MyProduct',
email: '[email protected]',
subject: 'Help needed',
message: 'I need assistance with...'
});Environment Variables
| Variable | Description |
|----------|-------------|
| EXISONE_BASEURL | Default base URL if not specified in options |
Error Handling
import { ExisOneClient } from 'exisone-client';
const client = new ExisOneClient(options);
try {
const result = await client.validate({ activationKey, hardwareId });
} catch (err) {
if (err instanceof Error) {
console.log(`Error: ${err.message}`);
}
}CommonJS Usage
const { ExisOneClient } = require('exisone-client');
const client = new ExisOneClient({
baseUrl: 'https://www.exisone.com',
accessToken: 'your-api-token'
});Compatibility
- Node.js 18+ (uses native fetch)
- Windows, Linux, macOS
- ESM and CommonJS
Documentation
License
MIT License - see LICENSE file for details.
Support
- Email: [email protected]
- Documentation: https://www.exisone.com/docs.html
- Issues: https://github.com/ExisLLC/SoftwareActivationProject/issues
