Files
sgse-app/apps/web/src/lib/utils/jitsiPolyfill.ts

77 lines
2.3 KiB
TypeScript

/**
* Polyfill global para BlobBuilder
* Deve ser executado ANTES de qualquer import de lib-jitsi-meet
*
* BlobBuilder é uma API antiga dos navegadores que foi substituída pelo construtor Blob
* A biblioteca lib-jitsi-meet pode tentar usar BlobBuilder em navegadores modernos
*/
export function adicionarBlobBuilderPolyfill(): void {
if (typeof window === 'undefined') return;
// Verificar se já foi adicionado (evitar múltiplas execuções)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if ((window as any).__blobBuilderPolyfillAdded) {
return;
}
// Implementar BlobBuilder usando Blob moderno
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const BlobBuilderClass = class BlobBuilder {
private parts: BlobPart[] = [];
append(data: BlobPart): void {
this.parts.push(data);
}
getBlob(contentType?: string): Blob {
return new Blob(this.parts, contentType ? { type: contentType } : undefined);
}
};
// Adicionar em todos os possíveis locais onde a biblioteca pode procurar
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const win = window as any;
// Definir BlobBuilder se não existir
if (typeof win.BlobBuilder === 'undefined') {
win.BlobBuilder = BlobBuilderClass;
}
// Variantes de navegadores antigos
if (typeof win.WebKitBlobBuilder === 'undefined') {
win.WebKitBlobBuilder = BlobBuilderClass;
}
if (typeof win.MozBlobBuilder === 'undefined') {
win.MozBlobBuilder = BlobBuilderClass;
}
if (typeof win.MSBlobBuilder === 'undefined') {
win.MSBlobBuilder = BlobBuilderClass;
}
// Adicionar no global scope
if (typeof globalThis !== 'undefined') {
if (typeof (globalThis as any).BlobBuilder === 'undefined') {
(globalThis as any).BlobBuilder = BlobBuilderClass;
}
if (typeof (globalThis as any).WebKitBlobBuilder === 'undefined') {
(globalThis as any).WebKitBlobBuilder = BlobBuilderClass;
}
if (typeof (globalThis as any).MozBlobBuilder === 'undefined') {
(globalThis as any).MozBlobBuilder = BlobBuilderClass;
}
}
// Marcar que o polyfill foi adicionado
win.__blobBuilderPolyfillAdded = true;
console.log('✅ Polyfill BlobBuilder adicionado globalmente');
}
// Executar imediatamente se estiver no browser
if (typeof window !== 'undefined') {
adicionarBlobBuilderPolyfill();
}