Ir para o conteúdo
LICENTIVO / INTEGRATION

Licenciamento de software JavaScript para Node.js e Electron

Instale o Node.js SDK, ative uma chave de cliente e proteja uma exportação assíncrona. No Electron, mantenha o cliente de licenciamento no processo principal para identidade e pulsações do dispositivo.

Node.js 20+ / ElectronAtualizado

1. Prepare o produto e licencie

Comece com uma licença bloqueada por nó e um recurso de exportação comum. Adicione o uso medido somente depois que o fluxo de autorização básico funcionar.

A cota conta as ativações atuais e retorna ao liberá-las. Licenças comuns continuam contando offline; licenças flutuantes também devolvem a cota quando a concessão expira.

  1. Copie o ID do produto em Console > Produtos. Abra as chaves públicas de assinatura do mesmo produto e insira todos os pares ID da chave/chave pública no código de inicialização, substituindo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. A integração rápida pode gerar esse código. Não é necessário um arquivo de configuração; o SDK usa https://www.licentivo.com por padrão.
  2. Em Integração rápida, crie ou selecione um produto. Habilite um recurso denominado exportação em sua política e prepare uma licença de teste.

2. Instale o SDK

Instale o SDK 0.11.6 com o comando abaixo no seu projeto ou adicione a dependência de compilação. O gerenciador de pacotes obtém o SDK; não é preciso baixar e extrair código-fonte nem configurar caminhos locais.

Terminal
npm install @licentivo/sdk@0.11.6

3. Proteja uma exportação real

Inicialize o SDK ao iniciar ou ativar seu software. Leia a chave do cliente no formulário e passe o ID do produto e as chaves confiáveis. Mantenha o cliente até o encerramento. Coloque RunFeature na operação real e substitua a exportação pela sua função.

Node.js 20+ / Electron · main.mjs
import {writeFile} from 'node:fs/promises';
import {Client} from '@licentivo/sdk'; // Installed package: import from '@licentivo/sdk'.

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const PRODUCT_ID = 'YOUR_PRODUCT_ID';
const TRUSTED_KEYS = {'YOUR_KEY_ID': 'YOUR_PUBLIC_KEY'};
// END LICENTIVO PRODUCT

export async function exportReport(path) {
  // Replace this write with your existing, non-metered export operation.
  await writeFile(path, 'A report generated by the licensed application.\n', {mode: 0o600});
}

async function main() {
  // In Electron, create this in the main process, using customer activation input.
  const client = await Client.openProduct(
    PRODUCT_ID, TRUSTED_KEYS,
    process.env.LICENTIVO_LICENSE_KEY ?? '',
    error => console.error('Background verification:', error.message),
  );
  try {
    const feature = process.env.LICENTIVO_FEATURE ?? 'export';
    const path = process.env.LICENTIVO_OUTPUT ?? 'licensed-report.txt';
    const action = () => exportReport(path);
    if (process.env.LICENTIVO_METERED === '1') {
      await client.runMeteredFeature(feature, 1, process.env.LICENTIVO_OPERATION_ID ?? '', action);
    } else {
      await client.runFeature(feature, action);
    }
    console.log(`License OK: ${feature} is available\nExport completed: ${path}`);
  } finally {
    await client.close(); // In your application, close only when the app exits.
  }
}

main().catch(error => {console.error(error.message); process.exitCode = 2;});

4. Mantenha o cliente ativo até o desligamento

Este exemplo de linha de comando executa uma operação e sai. Em um aplicativo de desktop, abra um cliente na inicialização, invoque o retorno de chamada do recurso da ação de exportação e feche o cliente somente quando o aplicativo for encerrado.

Após a ativação, iniciações posteriores podem deixar LICENTIVO_LICENSE_KEY vazio e restaurar a credencial privada no mesmo usuário e local de cache. Mantenha essa credencial no diretório application-data do usuário. O fechamento interrompe os heartbeats e devolve os assentos flutuantes; a saída normal não deve desativar um dispositivo bloqueado por nó.

O acesso off-line está disponível somente quando a política permitir e a concessão assinada permanecer válida. Um recurso expirado ou negado deve permanecer bloqueado. As operações medidas requerem uma conexão de rede.

No Electron, possua o Cliente no processo principal e exponha apenas as ações protegidas necessárias por meio de uma interface estreita IPC. Aguarde runFeature e feche; manter o cliente ativo durante a vida útil do aplicativo. Um retorno de chamada assíncrono deve ser concluído antes de relatar sucesso.

5. Execute e verifique o resultado

Copie o ID do produto em Console > Produtos. Abra as chaves públicas de assinatura do mesmo produto e insira todos os pares ID da chave/chave pública no código de inicialização, substituindo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. A integração rápida pode gerar esse código. Não é necessário um arquivo de configuração; o SDK usa https://www.licentivo.com por padrão.

  1. Confirme se uma licença válida com acesso de exportação cria licensed-report.txt.
  2. Limpe LICENTIVO_LICENSE_KEY e execute novamente usando a mesma conta de usuário: a credencial salva deve ser restaurada.
  3. Defina LICENTIVO_FEATURE como um recurso ausente da licença e LICENTIVO_OUTPUT como um novo nome de arquivo. O programa deve reportar uma negação sem criar esse arquivo.
  4. Teste uma reinicialização offline apenas com uma concessão assinada permitida e não expirada. Não ignore uma verificação de recurso com falha após um erro de atualização em segundo plano.
Windows · PowerShell
$env:LICENTIVO_LICENSE_KEY = 'YOUR_LICENSE_KEY'
node main.mjs
Linux / macOS · Bash
LICENTIVO_LICENSE_KEY=YOUR_LICENSE_KEY node main.mjs

Problemas comuns de integração

Confira o ID do produto, todos os pares ID da chave/chave pública e a licença do cliente. As chaves públicas pertencem ao produto; licenças e credenciais de dispositivos são separadas. Não distribua chaves de teste ou API Keys de gerenciamento.

Recurso negado, limite de dispositivo atingido ou licença expirada: inspecione a licença e a política no console e mostre o erro SDK ao cliente. Uma autorização com falha não deve chamar a função de exportação.

RunFeature verifica o acesso ao recurso; a variante medida reserva e liquida o uso configurado. Use um ID de operação estável por trabalho comercial real e inspecione seu resultado durável antes de recuperar um trabalho interrompido.

Módulo não encontrado: instale @licentivo/sdk no mesmo projeto que contém main.mjs. Um proxy_url configurado precisa adicionalmente do pacote undici opcional compatível com sua versão Node.js.