UNPKG

vlibras-player-webjs

Version:

Biblioteca JavaScript moderna para integração do VLibras Player com React, Vue, Angular e vanilla JS

88 lines 2.66 kB
import { config } from '../config/config'; /** * Classe responsável por traduzir texto para glosa (linguagem de sinais) */ export class GlosaTranslator { constructor(translatorUrl = config.translatorUrl, timeout = config.requestTimeout) { this.translatorUrl = translatorUrl; this.timeout = timeout; } /** * Traduz texto para glosa * @param text Texto a ser traduzido * @param host Host da requisição * @param callback Callback executado após tradução */ async translate(text, host, callback) { try { const response = await this.makeTranslationRequest(text, host); if (response.ok) { const gloss = await response.text(); callback(gloss, null); } else { const error = `HTTP ${response.status}: ${response.statusText}`; callback(null, error); } } catch (error) { const errorMessage = error instanceof Error ? error.message : 'unknown_error'; // Mantém compatibilidade com erro de timeout if (errorMessage.includes('timeout') || errorMessage.includes('aborted')) { callback(null, 'timeout_error'); } else { callback(null, errorMessage); } } } /** * Faz a requisição de tradução para o serviço */ async makeTranslationRequest(text, host) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), this.timeout); try { const formData = new FormData(); formData.append('texto', text); formData.append('host', host); const response = await fetch(this.translatorUrl, { method: 'POST', body: formData, signal: controller.signal, headers: { 'Accept': 'text/plain, */*', } }); return response; } finally { clearTimeout(timeoutId); } } /** * Atualiza a URL do tradutor */ setTranslatorUrl(url) { this.translatorUrl = url; } /** * Atualiza o timeout das requisições */ setTimeout(timeout) { this.timeout = timeout; } /** * Obtém a URL atual do tradutor */ getTranslatorUrl() { return this.translatorUrl; } /** * Obtém o timeout atual */ getTimeout() { return this.timeout; } } //# sourceMappingURL=GlosaTranslator.js.map