# 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

# Generar claves de firma
./scripts/generate-keys.sh

# Probar en Firefox
npm run start:firefox

# O probar en Chrome
npm run start:chrome

# Construir paquetes sin firmar
./build.sh

# Construir y firmar
./build.sh --sign           # Ambos navegadores
./build.sh --sign-firefox   # Solo Firefox
./build.sh --sign-chrome    # Solo Chrome

# Usando npm
npm run build              # Sin firmar
npm run build:sign         # Con firma
npm run keys:generate      # Generar claves
```

**Más información sobre firma**: Ver [SIGNING.md](SIGNING.md)

## 📁 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)
- OpenSSL (para firma de extensiones)

### Setup

```bash
# Instalar dependencias de desarrollo
npm install

# Generar claves de firma (primera vez)
./scripts/generate-keys.sh

# 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
```

**Nota**: `web-ext` se instala automáticamente como dependencia local del proyecto.

### 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

# Ambos con el script bash
./build.sh

# Con firma (requiere claves configuradas)
./build.sh --sign
npm run build:sign
```

**📝 Documentación de firma**: Ver [SIGNING.md](SIGNING.md) para instrucciones completas sobre:
- Generación de claves privadas
- Configuración de credenciales AMO (Firefox)
- Firma para Firefox y Chrome
- Distribución en stores oficiales

## 🐛 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
- `<all_urls>` - 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)
