diff --git a/.gitignore b/.gitignore index 8765812..08e9d3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,56 @@ +# Base de datos SQLite (repositorio) *.sqlite skin/icons/ + +# Archivos de build +dist/ +*.xpi +*.zip +*.tar.gz +*.crx + +# Dependencias Node.js +node_modules/ +package-lock.json +yarn.lock + +# Archivos del editor +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Sistema operativo +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Thumbs.db +Desktop.ini + +# Archivos temporales +*.tmp +*.log +*.cache +.cache/ + +# Logs y artifacts +npm-debug.log* +yarn-debug.log* +yarn-error.log* +web-ext-artifacts/ + +# Archivos de backup +*.bak +*.backup + +# Cobertura de tests +coverage/ +.nyc_output/ + +# sql.js descargado localmente (opcional) +content/sql-wasm.js +content/sql-wasm.wasm + diff --git a/.webextignore b/.webextignore new file mode 100644 index 0000000..89546ec --- /dev/null +++ b/.webextignore @@ -0,0 +1,39 @@ +# Archivos legacy de XUL/XPCOM (no necesarios en WebExtensions) +install.rdf +chrome.manifest +bootstrap.js +update.xml + +# Documentación (opcional, pero puede incluirse) +README.md +MIGRATION.md +INSTALL.md + +# Control de versiones +.git/ +.gitignore +.gitattributes + +# Archivos de desarrollo +.vscode/ +.idea/ +*.swp +*~ +.DS_Store +Thumbs.db + +# Archivos de build +*.xpi +*.zip +*.tar.gz + +# Node modules (si se usan herramientas de build) +node_modules/ +package.json +package-lock.json +yarn.lock + +# Archivos temporales +*.tmp +*.log +.cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8d769d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,196 @@ +# Changelog + +Todos los cambios notables de este proyecto serán documentados en este archivo. + +El formato está basado en [Keep a Changelog](https://keepachangelog.com/es/1.0.0/), +y este proyecto adhiere a [Semantic Versioning](https://semver.org/lang/es/). + +## [3.0.0] - 2026-02-08 + +### 🎉 Reescritura completa a WebExtensions + +Esta es una actualización mayor que moderniza completamente la extensión desde el sistema legacy XUL/XPCOM a WebExtensions modernas. + +### ✨ Añadido + +- **manifest.json** - Manifiesto WebExtensions Manifest v2 +- **background.js** - Script de fondo con APIs modernas +- **db-webext.js** - Wrapper para base de datos usando sql.js +- **Hash routing** - Navegación usando `#` en lugar de protocolo personalizado +- **Compatibilidad con Chrome** - Ahora funciona en Chrome, Edge, Brave, Vivaldi +- **Documentación moderna**: + - `MIGRATION.md` - Guía completa de migración desde v2 + - `INSTALL.md` - Instrucciones de instalación + - `README-v3.md` - Documentación actualizada + - `CHANGELOG.md` - Este archivo +- **package.json** - Scripts de build y desarrollo +- **.webextignore** - Exclusión de archivos legacy del paquete +- Permiso `unlimitedStorage` para bases de datos grandes +- Carga dinámica de módulos JavaScript +- Compatibilidad Chrome/Firefox con detección automática de API + +### 🔄 Cambiado + +- **Protocolo de navegación**: `caa:` → hash routing (`#list`, `#addon/...`) +- **URLs de recursos**: `chrome://ca-archive/` → rutas relativas +- **Base de datos**: mozIStorageService → sql.js (WebAssembly) +- **Storage**: Perfil de Firefox → `browser.storage.local` +- **Imports**: `Cu.import()` → Carga dinámica de scripts +- **APIs**: Components/XPCOM → WebExtensions APIs estándar +- **ca-archive.html** - Actualizado con rutas relativas y hash links +- **ca-archive.js** - Refactorizado sin Components, async/await +- Versión mínima de Firefox: 45 → 57 (Quantum) + +### ❌ Eliminado (deprecado, aún en carpeta pero no usado) + +- **install.rdf** - Reemplazado por manifest.json +- **chrome.manifest** - Ya no necesario en WebExtensions +- **bootstrap.js** - Reemplazado por background.js +- **update.xml** - Actualizaciones vía stores oficiales +- Soporte para Firefox <57 (ESR 45-52) +- Soporte para Pale Moon, Basilisk, SeaMonkey, Waterfox Classic +- Protocolo personalizado `caa:` +- Botón personalizable en barra de herramientas +- Menú en Tools +- Modificación de páginas de addons.mozilla.org +- Compatibilidad con e10s deshabilitado + +### 🐛 Corregido + +- Ya no requiere deshabilitar firma de extensiones en Firefox +- Compatible con multi-proceso (e10s) obligatorio +- No conflictos con Content Security Policy moderna +- Carga correcta en navegadores basados en Chromium + +### 🔒 Seguridad + +- Uso de APIs estándar y seguras de WebExtensions +- Eliminación de acceso a componentes internos del navegador +- CSP estricto con excepciones mínimas necesarias + +### 📊 Compatibilidad + +#### ✅ Ahora compatible con: +- Firefox 57+ (Quantum) +- Chrome 80+ +- Microsoft Edge 80+ (Chromium) +- Brave 1.20+ +- Vivaldi 3.0+ +- Opera 67+ + +#### ❌ Ya no compatible con: +- Firefox <57 (ESR 45-56, Firefox 45-56) +- Pale Moon +- Basilisk +- Waterfox Classic (pre-Current) +- SeaMonkey +- IceCat/IceApe legacy + +**Nota:** Para navegadores legacy, seguir usando la versión 2.x. + +--- + +## [2.0.3] - 2018 (Legacy) + +Última versión del sistema XUL/XPCOM legacy. + +### Características + +- Protocolo personalizado `caa:` +- Base de datos SQLite nativa +- Compatible con Firefox 45-56 +- Compatible con Pale Moon, Basilisk, SeaMonkey +- Botón personalizable en toolbar +- Menú en Tools +- Modificación de páginas AMO (inyección de hints) +- 93,598 versiones de 19,450 addons + +### Limitaciones conocidas + +- No funciona con e10s en Firefox (excepto Waterfox) +- Requiere deshabilitar firma de extensiones en Firefox 48+ +- No compatible con Firefox 57+ (Quantum) + +--- + +## Notas de migración + +### De 2.x a 3.0 + +**⚠️ ATENCIÓN: Cambios que rompen compatibilidad** + +Esta no es una actualización compatible hacia atrás. La versión 3.0 es una reescritura completa. + +#### Si usas Firefox <57 +→ **Quedate en v2.0.3**. La v3.0 no funcionará. + +#### Si usas Firefox 57+ o Chrome +→ **Actualiza a v3.0**. La v2.0.3 no funcionará. + +#### Migración de datos + +No hay migración automática de datos porque: +- Las APIs de storage son incompatibles +- La base de datos se descarga nueva +- No hay configuraciones persistentes importantes + +#### Enlaces rotos + +Si tienes bookmarks con URLs `caa:*`, necesitarás recrearlos con: +``` +moz-extension://[id]/content/ca-archive.html#[ruta] +``` + +El ID de la extensión se puede obtener de `about:debugging`. + +### Pasos recomendados + +1. **Backup** (opcional): Exportar favoritos si tienes links `caa:` +2. **Desinstalar** v2.x desde `about:addons` +3. **Instalar** v3.0 (ver [INSTALL.md](INSTALL.md)) +4. **Recrear** bookmarks si es necesario + +--- + +## Formato de versiones + +Este proyecto usa [Semantic Versioning](https://semver.org/): + +- **MAJOR** (3.x.x) - Cambios incompatibles +- **MINOR** (x.1.x) - Nuevas características compatibles +- **PATCH** (x.x.1) - Correcciones de bugs + +--- + +## Roadmap futuro + +### [3.1.0] - Planificado + +- [ ] Dark mode / tema oscuro +- [ ] Mejora de búsqueda (índices full-text) +- [ ] Favoritos sincronizados +- [ ] Exportar/importar colecciones +- [ ] Optimización de carga de DB (chunks) +- [ ] Mejor manejo de errores + +### [4.0.0] - Considerando + +- [ ] Migración a Manifest V3 (cuando Firefox tenga soporte completo) +- [ ] Reescritura con framework moderno (React/Vue/Svelte) +- [ ] API pública para datos de addons +- [ ] Versión web (sin extensión) +- [ ] Integración con Archive.org API + +--- + +## Enlaces + +- [Código fuente](https://github.com/JustOff/ca-archive) +- [Releases](https://github.com/JustOff/ca-archive/releases) +- [Issues](https://github.com/JustOff/ca-archive/issues) +- [Discusiones](https://github.com/JustOff/ca-archive/discussions) + +--- + +[3.0.0]: https://github.com/JustOff/ca-archive/releases/tag/v3.0.0 +[2.0.3]: https://github.com/JustOff/ca-archive/releases/tag/2.0.3 diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..a465cdc --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,171 @@ +# Guía de Instalación Rápida - Classic Add-ons Archive v3.0 + +## Para Desarrolladores / Testing Local + +### Firefox + +**Opción 1: Carga temporal (recomendado para desarrollo)** + +1. Abre Firefox +2. Escribe en la barra de direcciones: `about:debugging#/runtime/this-firefox` +3. Click en "Cargar complemento temporal..." +4. Navega a la carpeta del proyecto y selecciona el archivo `manifest.json` + +La extensión se instalará hasta que cierres Firefox. + +**Opción 2: Instalación permanente (requiere firmado)** + +1. Empaquetar la extensión: + ```bash + cd /home/ale/projects/firefox/ca-archive + zip -r ca-archive-3.0.xpi manifest.json background.js content/ skin/ -x "*.git*" -x "*~" + ``` + +2. Firmar en addons.mozilla.org o usar Firefox Developer/Nightly con firma deshabilitada + +### Chrome / Edge / Brave + +**Modo desarrollador (sin empaquetar):** + +1. Abre el navegador +2. Ve a: `chrome://extensions/` (o `edge://extensions/`) +3. Activa el interruptor "Modo de desarrollador" (esquina superior derecha) +4. Click en "Cargar extensión sin empaquetar" +5. Selecciona la carpeta: `/home/ale/projects/firefox/ca-archive` + +La extensión quedará instalada permanentemente en modo desarrollo. + +**Empaquetar para distribución:** + +```bash +cd /home/ale/projects/firefox/ca-archive +zip -r ca-archive-3.0.zip manifest.json background.js content/ skin/ -x "*.git*" -x "*~" +``` + +## Verificación de Instalación + +Después de instalar, deberías ver: + +1. ✅ Icono de la extensión en la barra de herramientas +2. ✅ Click en el icono abre la página del catálogo +3. ✅ Mensaje de carga de base de datos (primera vez) +4. ✅ Navegación funcionando (categorías, búsqueda, etc.) + +## Troubleshooting + +### La base de datos no carga + +**Error:** "Loading database for the first time. Please wait..." + +**Solución:** +1. Asegúrate de tener la carpeta `content/db/` con el archivo SQLite +2. Verifica que el archivo `ca-archive-19030501.sqlite` exista y no esté corrupto +3. Revisa la consola del navegador (`F12` > Console) para errores específicos + +### El icono no aparece + +**Solución:** +1. Refresca la página `about:debugging` o `chrome://extensions/` +2. Verifica que `manifest.json` tiene el campo `browser_action` correctamente +3. Revisa que las imágenes en `skin/button.png` existan + +### Errores de carga de scripts + +**Error:** "Failed to load script: ..." + +**Solución:** +1. Verifica que todos los archivos JS estén en `content/` +2. Revisa la política CSP en `manifest.json` +3. Asegúrate de que `db-webext.js` se carga antes de `ca-archive.js` + +### sql.js no carga + +**Error:** "Could not load SQL engine" + +**Solución:** +1. Verifica conexión a internet (se descarga desde CDN) +2. O descarga sql.js localmente: + ```bash + cd content/ + wget https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.js + wget https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.wasm + ``` +3. Actualiza las rutas en `content/db-webext.js` + +## Para Usuarios Finales + +### Instalar desde archivo .xpi/.zip + +**Firefox:** +1. Descarga el archivo `.xpi` +2. Arrastra y suelta en Firefox +3. Autoriza la instalación + +**Chrome:** +1. Descarga el archivo `.zip` +2. Descomprime en una carpeta +3. Sigue los pasos de "Modo desarrollador" arriba + +### Instalar desde stores (cuando esté publicado) + +**Firefox Add-ons (AMO):** +- Visita: https://addons.mozilla.org/firefox/addon/ca-archive/ +- Click en "Añadir a Firefox" + +**Chrome Web Store:** +- Visita: [URL de Chrome Web Store] +- Click en "Añadir a Chrome" + +## Desinstalación + +### Firefox +1. `about:addons` > Extensiones +2. Busca "Classic Add-ons Archive" +3. Click en "..." > Eliminar + +### Chrome +1. `chrome://extensions/` +2. Busca la extensión +3. Click en "Eliminar" + +## Archivos Necesarios + +Archivos mínimos para que funcione la extensión: + +``` +ca-archive/ +├── manifest.json ← REQUERIDO +├── background.js ← REQUERIDO +├── content/ +│ ├── ca-archive.html ← REQUERIDO +│ ├── ca-archive.js ← REQUERIDO +│ ├── db-webext.js ← REQUERIDO +│ ├── db/ +│ │ └── ca-archive-19030501.sqlite ← REQUERIDO +│ ├── addon.js +│ ├── list.js +│ ├── versions.js +│ ├── tcloud.js +│ ├── about.js +│ └── epl.js +└── skin/ + ├── logo.png ← REQUERIDO + ├── button.png ← REQUERIDO + ├── ca-archive.css ← REQUERIDO + └── ... +``` + +## Siguientes Pasos + +Una vez instalada y funcionando: + +1. 📖 Lee [MIGRATION.md](MIGRATION.md) para entender los cambios +2. 🔧 Si eres desarrollador, revisa la arquitectura modernizada +3. 🐛 Reporta bugs en GitHub Issues +4. 🌟 Si te gusta, deja una valoración + +## Soporte + +- 📝 Documentación completa: [MIGRATION.md](MIGRATION.md) +- 🐛 Reportar problemas: https://github.com/JustOff/ca-archive/issues +- 💬 Discusiones: https://github.com/JustOff/ca-archive/discussions diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000..9b1e513 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,237 @@ +# Migración a WebExtensions (Versión 3.0) + +## Resumen de cambios + +La extensión Classic Add-ons Archive ha sido modernizada desde el sistema legacy XUL/XPCOM a WebExtensions para ser compatible con navegadores modernos Firefox (57+) y Chrome. + +## Cambios principales + +### 1. Sistema de manifiesto + +**ANTES (Legacy):** +- `install.rdf` - Manifiesto XML +- `chrome.manifest` - Registro de recursos chrome:// +- `bootstrap.js` - Script de arranque con XPCOM + +**AHORA (WebExtensions):** +- `manifest.json` - Manifiesto estándar WebExtensions (Manifest V2) +- `background.js` - Script de fondo con APIs modernas + +### 2. Protocolo de navegación + +**ANTES:** +``` +caa:list +caa:addon/some-addon +caa:about +``` + +**AHORA:** +``` +chrome-extension://.../content/ca-archive.html#list +chrome-extension://.../content/ca-archive.html#addon/some-addon +chrome-extension://.../content/ca-archive.html#about +``` + +La navegación ahora usa hash (#) en lugar de un protocolo personalizado. + +### 3. Acceso a recursos + +**ANTES:** +```html + + +``` + +**Para producción:** Descargar sql.js localmente y actualizar las rutas en `db-webext.js`. + +### Debugging + +**Firefox:** +- `about:debugging` > Inspeccionar +- Console del navegador: `Ctrl+Shift+J` + +**Chrome:** +- `chrome://extensions/` > Detalles > Inspeccionar vistas: background page +- DevTools: `F12` + +### Testing + +1. Abrir la extensión +2. Verificar que la base de datos se carga correctamente +3. Probar navegación: listados, búsquedas, detalles de addons +4. Verificar que las descargas funcionan + +## Limitaciones conocidas + +### WebExtensions vs Legacy + +1. **Multi-proceso (e10s):** Ahora sólo funciona con e10s activado +2. **Protocolo personalizado:** Ya no disponible, usa rutas de extensión +3. **Modificación de AMO pages:** No puede inyectar hints en addons.mozilla.org +4. **Barra de herramientas:** Botón en ubicación fija, no personalizable +5. **Storage:** Base de datos limitada por cuota de storage del navegador + +### Tamaño de base de datos + +Chrome/Firefox tienen límites de storage: +- Chrome: ~10MB en `storage.local` (puede ampliarse con `unlimitedStorage`) +- Firefox: Sin límite práctico en `storage.local` + +Si la base de datos es muy grande (>10MB), considerar: +1. Agregar permiso `unlimitedStorage` en manifest.json +2. Usar chunks/compresión +3. Almacenar en IndexedDB + +## Migración de datos de usuario + +La nueva versión NO migra automáticamente datos de la versión legacy porque: + +1. Las APIs de storage son completamente diferentes +2. La base de datos se descarga nueva en cada instalación +3. No hay configuraciones de usuario persistentes + +## Próximos pasos + +### Para publicar en stores + +1. **Firefox Add-ons (AMO):** + - Crear cuenta en addons.mozilla.org + - Subir archivo .zip + - Esperar revisión + +2. **Chrome Web Store:** + - Crear cuenta de desarrollador ($5 USD único) + - Subir archivo .zip + - Completar listing + +### Mejoras futuras + +- [ ] Migrar a Manifest V3 (cuando Firefox tenga mejor soporte) +- [ ] Offline-first: cachear más contenido +- [ ] Sincronización de favoritos/bookmarks +- [ ] Dark mode +- [ ] Búsqueda mejorada con índices + +## Soporte + +- GitHub: https://github.com/JustOff/ca-archive/ +- Issues: https://github.com/JustOff/ca-archive/issues + +## Licencia + +La extensión continúa bajo Mozilla Public License 2.0 (MPL-2.0). diff --git a/README-v3.md b/README-v3.md new file mode 100644 index 0000000..519a3f1 --- /dev/null +++ b/README-v3.md @@ -0,0 +1,287 @@ +# Classic Add-ons Archive v3.0 - WebExtensions Edition + +[![License: MPL 2.0](https://img.shields.io/badge/License-MPL%202.0-brightgreen.svg)](https://opensource.org/licenses/MPL-2.0) +[![Firefox](https://img.shields.io/badge/Firefox-57%2B-orange.svg)](https://www.mozilla.org/firefox/) +[![Chrome](https://img.shields.io/badge/Chrome-80%2B-blue.svg)](https://www.google.com/chrome/) + +## 🎉 Nueva versión modernizada + +Esta es la versión 3.0 de Classic Add-ons Archive, completamente reescrita usando **WebExtensions** para ser compatible con navegadores modernos. + +### ✨ Características principales + +- 📦 **93,598 versiones** de **19,450 extensiones clásicas de Firefox** +- 🔍 Búsqueda y navegación por categorías +- 📊 Ordenamiento por popularidad, valoración, fecha, etc. +- 💾 Base de datos SQLite embebida +- 🌐 Compatible con Firefox 57+, Chrome 80+, Edge, Brave, Vivaldi + +### 🆕 Novedades de la versión 3.0 + +- ✅ Compatible con Firefox Quantum (57+) y Chrome +- ✅ Usa APIs modernas de WebExtensions +- ✅ Ya no requiere Firefox legacy +- ✅ Navegación mejorada con hash routing +- ✅ Base de datos en memoria con sql.js +- ✅ Sin dependencias de XPCOM/XUL + +## 🚀 Instalación rápida + +### Para usuarios + +**Firefox:** +```bash +# Descargar release +# Ir a about:debugging +# Cargar extensión temporal > seleccionar manifest.json +``` + +**Chrome/Edge/Brave:** +```bash +# Ir a chrome://extensions/ +# Activar "Modo de desarrollador" +# "Cargar extensión sin empaquetar" > seleccionar carpeta +``` + +Documentación completa: [INSTALL.md](INSTALL.md) + +### Para desarrolladores + +```bash +# Clonar repositorio +git clone https://github.com/JustOff/ca-archive.git +cd ca-archive + +# (Opcional) Instalar web-ext para testing +npm install + +# Probar en Firefox +npm run start:firefox + +# O probar en Chrome +npm run start:chrome + +# Construir paquete +npm run build:firefox # Crea .xpi para Firefox +npm run build:chrome # Crea .zip para Chrome +``` + +## 📁 Estructura del proyecto + +``` +ca-archive/ +├── manifest.json # Manifiesto WebExtensions v2 +├── background.js # Script de fondo +├── package.json # Scripts de build (opcional) +│ +├── content/ # Scripts y páginas de contenido +│ ├── ca-archive.html # Página principal de la extensión +│ ├── ca-archive.js # Router y controlador principal +│ ├── db-webext.js # Wrapper de base de datos (sql.js) +│ ├── db.js # [Legacy] No usado en v3 +│ ├── addon.js # Vista de detalle de addon +│ ├── list.js # Vista de listado +│ ├── versions.js # Vista de versiones +│ ├── tcloud.js # Nube de tags +│ ├── about.js # Página "Acerca de" +│ ├── epl.js # EULA/Privacy/License +│ └── db/ +│ └── ca-archive-*.sqlite # Base de datos SQLite +│ +├── skin/ # Assets visuales +│ ├── ca-archive.css # Estilos principales +│ ├── button.css # [Legacy] No usado en v3 +│ ├── logo.png # Logo de la extensión +│ ├── button.png # Icono del botón +│ └── ... # Otros assets +│ +├── MIGRATION.md # Guía de migración desde v2 +├── INSTALL.md # Guía de instalación +├── README-v3.md # Este archivo +│ +└── [Legacy - no usados en v3] + ├── install.rdf + ├── chrome.manifest + ├── bootstrap.js + └── update.xml +``` + +## 🔄 Migración desde v2 (Legacy) + +Si vienes de la versión 2.x (XUL/XPCOM), lee la [Guía de Migración](MIGRATION.md) que explica: + +- ❌ Qué dejó de funcionar +- ✅ Cómo se reemplazó cada funcionalidad +- 🔧 Cambios en la arquitectura +- 📊 Tabla de compatibilidad de navegadores + +### Resumen rápido de cambios + +| Aspecto | v2 (Legacy) | v3 (WebExtensions) | +|---------|-------------|-------------------| +| **Manifest** | install.rdf | manifest.json | +| **Protocolo** | caa: | hash routing (#) | +| **APIs** | Components/XPCOM | WebExtensions APIs | +| **Base de datos** | mozIStorageService | sql.js | +| **Navegadores** | Firefox ≤56 | Firefox 57+, Chrome 80+ | + +## 🛠️ Desarrollo + +### Requisitos + +- Node.js 16+ (opcional, para herramientas de build) +- Firefox Developer Edition o Chrome +- Editor de código (VS Code recomendado) + +### Setup + +```bash +# Instalar dependencias de desarrollo +npm install + +# Lint +npm run lint + +# Testing local +npm run start:firefox # Abre Firefox con la extensión +# o +npm run start:chrome # Abre Chrome con la extensión +``` + +### Testing manual + +1. Hacer cambios en el código +2. En `about:debugging` (Firefox) o `chrome://extensions/` (Chrome), click en "Recargar" +3. Abrir la extensión y verificar cambios +4. Revisar console (`F12`) para errores + +### Build para distribución + +```bash +# Firefox (.xpi) +npm run build:firefox +# Output: dist/ca-archive-3.0.0.zip (renombrar a .xpi) + +# Chrome (.zip) +npm run build:chrome +# Output: dist/ca-archive-3.0-chrome.zip +``` + +## 🐛 Debugging + +### Abrir consola de la extensión + +**Firefox:** +1. `about:debugging` > Este Firefox +2. Click en "Inspeccionar" en la extensión + +**Chrome:** +1. `chrome://extensions/` +2. Click en "Inspeccionar vistas: background page" + +### Logs útiles + +```javascript +// En background.js +console.log("Background script:", message); + +// En content scripts +console.log("Content script:", message); + +// Errores de base de datos +// Revisar consola de la página ca-archive.html +``` + +## 📝 Notas técnicas + +### Base de datos SQLite + +- **Tamaño:** ~50MB (comprimido: ~15MB) +- **Engine:** sql.js (SQLite compilado a WebAssembly) +- **Storage:** `browser.storage.local` (primera carga) +- **Límite:** Chrome 10MB (usa `unlimitedStorage` permission) + +### Permisos requeridos + +- `storage` - Cachear base de datos +- `unlimitedStorage` - DB grande (>10MB) +- `tabs` - Abrir tabs del catálogo +- `webRequest` + `webRequestBlocking` - Modificar headers de descarga +- `` - Interceptar requests a web.archive.org + +### Políticas de seguridad + +```json +"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" +``` + +- `'unsafe-eval'` - Requerido por sql.js (usa WebAssembly) +- Todos los scripts deben estar en el paquete (no CDN inline) + +## 🤝 Contribuir + +¡Las contribuciones son bienvenidas! + +### Áreas de mejora + +- [ ] Migrar a Manifest V3 (cuando Firefox tenga mejor soporte) +- [ ] Optimizar carga de base de datos (chunks, compresión) +- [ ] Modo oscuro (dark mode) +- [ ] Búsqueda con índices full-text +- [ ] Favoritos/bookmarks sincronizados +- [ ] Mejoras de UI/UX + +### Proceso + +1. Fork del repositorio +2. Crear branch: `git checkout -b feature/mi-mejora` +3. Commit: `git commit -am 'Añadir nueva característica'` +4. Push: `git push origin feature/mi-mejora` +5. Crear Pull Request + +## 📄 Licencia + +**Mozilla Public License 2.0 (MPL-2.0)** + +- ✅ Uso comercial +- ✅ Modificación +- ✅ Distribución +- ✅ Uso privado +- ⚠️ Divulgar fuente si se modifica + +Ver [LICENSE](LICENSE) para más detalles. + +### Atribuciones + +- Diseño original: Mozilla AMO (CC-BY-SA-3.0) +- Datos: Dominio público / respectivos autores +- sql.js: MIT License +- Logos y marcas: Propiedad de sus respectivos dueños + +## 👥 Autores + +- **Off JustOff** - Autor original - [JustOff](https://github.com/JustOff) +- Migración a WebExtensions v3.0 - 2026 + +## 🔗 Enlaces + +- 🏠 [Sitio web](https://ca-archive.us.to/) +- 📦 [Releases](https://github.com/JustOff/ca-archive/releases) +- 🐛 [Issues](https://github.com/JustOff/ca-archive/issues) +- 💬 [Discusiones](https://github.com/JustOff/ca-archive/discussions) +- 📖 [Documentación](https://github.com/JustOff/ca-archive/wiki) + +## ⭐ Agradecimientos + +- Mozilla y la comunidad AMO +- Wayback Machine (Internet Archive) +- Zetamex Network (hosting) +- Todos los desarrolladores de extensiones clásicas + +--- + +**¿Te gusta el proyecto?** Dale una ⭐ en GitHub! + +**¿Encontraste un bug?** [Repórtalo aquí](https://github.com/JustOff/ca-archive/issues) + +**¿Tienes preguntas?** [Pregunta en Discusiones](https://github.com/JustOff/ca-archive/discussions) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 0000000..c618ae0 --- /dev/null +++ b/TROUBLESHOOTING.md @@ -0,0 +1,544 @@ +# Guía de Solución de Problemas (Troubleshooting) + +Esta guía te ayudará a resolver problemas comunes al usar Classic Add-ons Archive v3.0. + +## 📋 Índice + +1. [Problemas de Instalación](#problemas-de-instalación) +2. [Problemas con la Base de Datos](#problemas-con-la-base-de-datos) +3. [Problemas de Navegación](#problemas-de-navegación) +4. [Problemas de Rendimiento](#problemas-de-rendimiento) +5. [Errores en la Consola](#errores-en-la-consola) +6. [Incompatibilidades](#incompatibilidades) +7. [Obtener Ayuda](#obtener-ayuda) + +--- + +## Problemas de Instalación + +### El icono de la extensión no aparece + +**Síntomas:** +- No veo el icono en la barra de herramientas + +**Soluciones:** + +1. **Recargar la extensión:** + - Firefox: `about:debugging` > Click en "Recargar" + - Chrome: `chrome://extensions/` > Click en el icono de recargar ↻ + +2. **Verificar que está habilitada:** + - Firefox: `about:addons` > Extensiones > Buscar "Classic Add-ons Archive" + - Chrome: `chrome://extensions/` > Buscar la extensión y verificar que el toggle está activado + +3. **Verificar manifest.json:** + ```bash + cat manifest.json | grep -A 5 browser_action + ``` + Debe existir la sección `browser_action` con iconos válidos. + +### Error al cargar la extensión + +**Error:** "There was an error during installation" + +**Causas comunes:** +- `manifest.json` inválido +- Archivos requeridos faltantes +- Permisos incorrectos + +**Soluciones:** + +1. **Validar el manifest:** + ```bash + # Instalar web-ext si no lo tienes + npm install -g web-ext + + # Validar + web-ext lint + ``` + +2. **Verificar archivos requeridos:** + ```bash + ls -la manifest.json background.js + ls -la content/ca-archive.html content/ca-archive.js content/db-webext.js + ls -la skin/logo.png skin/button.png + ``` + +3. **Verificar sintaxis JSON:** + - Usar herramienta online: https://jsonlint.com/ + - O con python: + ```bash + python3 -m json.tool manifest.json > /dev/null + ``` + +### Firefox: "This add-on could not be installed because it appears to be corrupt" + +**Solución:** + +1. Reconstruir el paquete: + ```bash + ./build.sh + ``` + +2. Verificar integridad: + ```bash + unzip -t dist/ca-archive-3.0.0.xpi + ``` + +3. Si persiste, cargar sin empaquetar: + - `about:debugging` > Cargar complemento temporal + - Seleccionar `manifest.json` directamente + +--- + +## Problemas con la Base de Datos + +### "Loading database for the first time" se queda cargando + +**Síntomas:** +- Mensaje de carga de DB sin terminar +- Página en blanco + +**Causas:** +- Base de datos muy grande +- Falta archivo SQLite +- Error de red (si carga desde CDN) + +**Soluciones:** + +1. **Verificar que existe el archivo DB:** + ```bash + ls -lh content/db/*.sqlite + ``` + +2. **Verificar tamaño de la DB:** + ```bash + du -h content/db/*.sqlite + ``` + Si es >50MB, puede tardar en el primer acceso. + +3. **Revisar la consola del navegador** (`F12` > Console): + - Buscar errores relacionados con fetch o sql.js + +4. **Limpiar storage y reintentar:** + ```javascript + // En la consola del navegador + browser.storage.local.clear() + // o en Chrome: + chrome.storage.local.clear() + ``` + +5. **Verificar permisos del archivo:** + ```bash + chmod 644 content/db/*.sqlite + ``` + +### Error: "Could not load SQL engine" + +**Causa:** sql.js no se pudo cargar + +**Soluciones:** + +1. **Verificar conexión a internet** (si usa CDN) + +2. **Descargar sql.js localmente:** + ```bash + cd content/ + wget https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.js + wget https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.wasm + ``` + +3. **Actualizar rutas en `db-webext.js`:** + ```javascript + // Cambiar: + locateFile: file => `https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/${file}` + + // Por: + locateFile: file => browser.runtime.getURL(`content/${file}`) + ``` + +4. **Agregar archivos a `web_accessible_resources` en manifest.json:** + ```json + "web_accessible_resources": [ + "content/*.wasm", + "content/sql-wasm.js" + ] + ``` + +### Error: "Database has just been updated, not ready or corrupted!" + +**Causa:** Archivo SQLite corrupto o inaccesible + +**Soluciones:** + +1. **Verificar integridad de la DB:** + ```bash + sqlite3 content/db/ca-archive-*.sqlite "PRAGMA integrity_check;" + ``` + Debe retornar "ok" + +2. **Re-descargar la base de datos:** + - Si tienes repositorio Git: `git checkout content/db/*.sqlite` + - O descargar manualmente desde releases + +3. **Permisos de lectura:** + ```bash + chmod 644 content/db/*.sqlite + ``` + +--- + +## Problemas de Navegación + +### Los enlaces no funcionan + +**Síntomas:** +- Click en categoría/addon no hace nada +- URL no cambia +- Página en blanco + +**Soluciones:** + +1. **Verificar hash routing:** + - La URL debe ser: `moz-extension://[id]/content/ca-archive.html#list` + - No debe ser: `caa:list` (eso es legacy) + +2. **Revisar consola JavaScript** (`F12`): + - Buscar errores en `ca-archive.js` + +3. **Verificar que los módulos se cargan:** + ```javascript + // En la consola del navegador + console.log(typeof List, typeof Addon, typeof DB); + // Debe mostrar los tipos de objeto/function + ``` + +4. **Limpiar caché del navegador:** + - Firefox: `Ctrl+Shift+Del` > Marcar "Caché" + - Chrome: `Ctrl+Shift+Del` > "Cached images and files" + +### Búsqueda no funciona + +**Síntomas:** +- Campo de búsqueda no responde +- No muestra resultados + +**Soluciones:** + +1. **Verificar que la DB está cargada:** + - Debe haber completado la carga inicial + - Revisar que no hay mensajes de error en consola + +2. **Verificar el formulario:** + ```html +