@inotechxyz/protected-license
v1.0.3
Published
Helix Licensing System - Token-based license validation and management
Readme
@inotechxyz/protected-license
Token-based license validation and management for the Helix ITSM platform.
Installation
npm install @inotechxyz/protected-licenseOverview
This package provides the core licensing logic for validating and managing Helix ITSM licenses. It handles:
- JWT token validation with signature verification
- License tier and module resolution
- License expiry checking
- Caching with configurable TTL
Usage
1. Implement Adapters
First, implement the required adapter interfaces for your database and cache:
import { DatabaseAdapter, CacheAdapter, LicenseService } from '@inotechxyz/protected-license';
// Database adapter - implement for your ORM (Prisma, TypeORM, etc.)
const databaseAdapter: DatabaseAdapter = {
async findOrganization(id: string) {
const org = await prisma.organization.findUnique({
where: { id },
select: { slug: true, licenseToken: true }
});
return org;
}
};
// Cache adapter - implement for your cache (Redis, Memcached, etc.)
const cacheAdapter: CacheAdapter = {
async get<T>(key: string): Promise<T | null> { /* ... */ },
async set(key: string, value: any, ttlSeconds: number): Promise<void> { /* ... */ },
async del(key: string): Promise<void> { /* ... */ }
};2. Configure Environment
Set the LICENSE_SECRET environment variable (obtained from your commercial license):
LICENSE_SECRET=your-license-secret-from-purchase3. Use LicenseService
import { LicenseService } from '@inotechxyz/protected-license';
const licenseService = new LicenseService(configService, databaseAdapter, cacheAdapter);
// Check if license is valid
const isExpired = await licenseService.isExpired(organizationId);
// Get license details
const license = await licenseService.getLicense(organizationId);
console.log(`Tier: ${license.tier}, Modules: ${license.modules.join(', ')}`);
// Check if module is enabled
const canAccess = await licenseService.isModuleEnabled('reports', organizationId);4. Use LicenseGuard
Protect routes with the license guard:
import { LicenseGuard } from '@inotechxyz/protected-license';
// In your module providers
{
provide: APP_GUARD,
useClass: LicenseGuard,
}License Tiers
| Tier | Modules | |------|---------| | basic | tickets, service_catalog | | standard | tickets, problems, knowledge_base, service_catalog | | premium | tickets, problems, changes, assets, knowledge_base, service_catalog, software_licenses, reports | | enterprise | All premium modules + sla_policies, ola_policies |
API Reference
LicenseService
| Method | Description |
|--------|-------------|
| getLicense(organizationId) | Get full license details with caching |
| isExpired(organizationId) | Check if license is expired |
| isExpiringSoon(organizationId) | Check if license expires within 30 days |
| isModuleEnabled(moduleKey, organizationId) | Check if specific module is enabled |
| getEnabledModules(organizationId) | Get list of all enabled modules |
| generateToken(payload) | Generate a license token (requires LICENSE_SECRET) |
Interfaces
interface LicensePayload {
orgSlug: string;
tier: LicenseTier;
modules?: string[];
expiresAt: string;
issuedAt: string;
issuedBy?: string;
}
interface CachedLicense {
tier: LicenseTier | null;
modules: string[];
expiresAt: string | null;
validatedAt: string;
}Commercial License
This package requires a commercial license for production use. Contact us to obtain your LICENSE_SECRET and licensing terms.
Support
For licensing questions and support, please contact your Helix representative.
