# Avisos de software de terceros — AINA ONE Chat

**Producto**: AINA ONE Chat (`220-DSK-Products-Desktop`) · **Titular**: AINTECH
**Alcance**: dependencias **directas** declaradas en `api/package.json` y `web/package.json`,
más los motores de código abierto que los paquetes propios `@ain/*` incorporan y que viajan
dentro de la imagen de la API.
**Origen de los datos**: campos `name`, `version` y `license` de cada `package.json` resuelto
en `node_modules` sobre este árbol, y los ficheros de licencia que acompañan a cada paquete.
No se ha consultado ninguna fuente de red.

Este fichero se enlaza desde el pie de la pantalla de acceso y desde las páginas legales
(`/legal/terminos.html`, `/legal/privacidad.html`, `/legal/cookies.html`).

> Alcance honesto: se relacionan las dependencias **directas**. El árbol transitivo completo
> no está enumerado aquí. Para una relación exhaustiva por versión resuelta, la fuente son
> `api/pnpm-lock.yaml` y `web/pnpm-lock.yaml`.

---

## 1. Aviso destacado — axe-core (MPL-2.0)

`axe-core` es el motor de auditoría de accesibilidad que usa el linter de artefactos del
servidor (`@ain/a11y-lint`) y, con la **misma versión fijada**, la auditoría end-to-end.
Su licencia es **copyleft débil por fichero**, por lo que se documenta aparte.

| Campo | Valor |
|---|---|
| Componente | `axe-core` |
| Versión | `4.12.1` |
| Licencia | **MPL-2.0** (Mozilla Public License, versión 2.0) |
| Titular | Deque Systems, Inc. y colaboradores |
| Modificado por AINTECH | **No.** Se consume sin parchear ningún fichero. |
| Texto de la licencia | `api/node_modules/.pnpm/axe-core@4.12.1/node_modules/axe-core/LICENSE` (más `LICENSE-3RD-PARTY.txt` del propio paquete) |
| Dónde se ejecuta | Solo en el servidor (BFF). No entra en el bundle del navegador. |

**Aviso MPL-2.0 requerido.** Este producto incorpora software cubierto por la Mozilla Public
License 2.0. El código fuente correspondiente de `axe-core` está disponible bajo esa misma
licencia y puede obtenerse del proyecto original. La MPL-2.0 es copyleft **por fichero**: sus
obligaciones alcanzan a los ficheros cubiertos, no a la obra que los usa. Como los ficheros de
`axe-core` **no se modifican ni se mezclan** con código propio de AINTECH, el copyleft no
alcanza al resto del producto.

**Obligación viva si algo cambia**: el día que se parchee un fichero de `axe-core`, **ese
fichero** queda bajo MPL-2.0 y su fuente modificada debe publicarse. Esa condición está escrita
en el propio manifiesto del envoltorio (`packages/ain-a11y-lint/package.json`, campo
`aintech.engineLicenseDuty`) para que no dependa de que alguien recuerde este documento.

---

## 2. API (`api/package.json`)

### 2.1 Dependencias de ejecución — terceros

| Componente | Versión | Licencia |
|---|---|---|
| `better-sqlite3` | 11.10.0 | MIT |
| `exceljs` | 4.4.0 | MIT |
| `express` | 4.22.2 | MIT |
| `helmet` | 7.2.0 | MIT |
| `mammoth` | 1.12.1 | BSD-2-Clause |
| `pdfjs-dist` | 6.2.108 | Apache-2.0 |
| `pg` | 8.20.0 | MIT |
| `sqlite-vec` | 0.1.9 | MIT OR Apache-2.0 (declarada `MIT OR Apache` en el paquete) |
| `tesseract.js` | 7.0.0 | Apache-2.0 |
| `xlsx` (SheetJS Community Edition) | 0.20.3 | Apache-2.0 |
| `zod` | 3.25.76 | MIT |

Nota sobre `xlsx`: se instala desde el tarball oficial de SheetJS
(`https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz`), no desde el registro público de npm.
Es la edición comunitaria, Apache-2.0.

Nota sobre `pdfjs-dist` y `tesseract.js` (Apache-2.0): la licencia exige conservar los avisos de
copyright y el fichero `NOTICE` cuando exista. Ambos se distribuyen sin modificar dentro de la
imagen de la API, con sus ficheros de licencia intactos.

### 2.2 Dependencias de desarrollo — terceros

| Componente | Versión | Licencia |
|---|---|---|
| `yaml` | 2.9.0 | ISC |

### 2.3 Paquetes propios de AINTECH (no son terceros)

| Componente | Versión | Licencia |
|---|---|---|
| `@ain/a11y-lint` | 0.1.0 | Propietaria (`UNLICENSED`) |
| `@ain/export-docx` | 0.1.0 | Propietaria (`UNLICENSED`) |
| `@ain/export-pdf` | 0.1.0 | Propietaria (`UNLICENSED`) |
| `@ain/lang-detect` | 0.1.0 | Propietaria (`UNLICENSED`) |
| `@aintech/aina-one-chat-contracts` | 1.0.0 | Propietaria (`UNLICENSED`) |
| `@aintech/aina-pii-detector` | 1.0.0 | Propietaria (`UNLICENSED`) |
| `@aintechcorporation/aina-auth` | 3.0.0 | MIT (titularidad AINTECH) |

### 2.4 Motores de terceros incorporados por los paquetes propios

Estos componentes no aparecen en `api/package.json`, pero viajan dentro de la imagen de la API
porque son dependencia directa de un paquete `@ain/*`. Se declaran por eso.

| Componente | Versión | Licencia | Lo incorpora |
|---|---|---|---|
| `axe-core` | 4.12.1 | **MPL-2.0** — ver §1 | `@ain/a11y-lint` |
| `jsdom` | 30.0.1 | MIT | `@ain/a11y-lint` |
| `docx` | 9.7.1 | MIT | `@ain/export-docx` |
| `pdf-lib` | 1.17.1 | MIT | `@ain/export-pdf` |
| `franc` | 6.2.0 | MIT | `@ain/lang-detect` |

---

## 3. Web (`web/package.json`)

### 3.1 Dependencias que llegan al navegador

| Componente | Versión | Licencia |
|---|---|---|
| `react` | 18.3.1 | MIT |
| `react-dom` | 18.3.1 | MIT |
| `react-router-dom` | 7.18.2 | MIT |

### 3.2 Dependencias de construcción (no se sirven al navegador)

| Componente | Versión | Licencia |
|---|---|---|
| `@playwright/test` | 1.62.1 | Apache-2.0 |
| `@types/react` | 18.3.31 | MIT |
| `@types/react-dom` | 18.3.7 | MIT |
| `@vitejs/plugin-react` | 4.7.0 | MIT |
| `typescript` | 5.9.3 | Apache-2.0 |
| `vite` | 6.4.3 | MIT |

---

## 4. Textos de licencia

Las licencias MIT, ISC, BSD-2-Clause, Apache-2.0 y MPL-2.0 exigen conservar el aviso de
copyright y el texto de la licencia. Ambos viajan **dentro de cada paquete**, en su propio
directorio (`LICENSE`, `LICENCE`, `LICENSE.md` o equivalente), sin modificar, tanto en el
árbol de desarrollo como en las imágenes que se despliegan. Este documento no los reproduce
para no crear una segunda copia que pueda divergir de la que realmente se distribuye.

Copia de un texto de licencia concreto, a partir de este árbol:

```sh
cat api/node_modules/<paquete>/LICENSE
cat web/node_modules/<paquete>/LICENSE
```

---

## 5. Mantenimiento

Este fichero debe regenerarse cuando cambie cualquier dependencia **directa** de `api` o `web`,
o cuando un paquete `@ain/*` incorpore un motor nuevo. La comprobación mínima —qué versión y
qué licencia resuelve hoy cada dependencia directa— es reproducible sin red:

```sh
node -e '
const fs=require("fs"),path=require("path");
for(const pkg of ["api","web"]){
  const j=JSON.parse(fs.readFileSync(path.join(pkg,"package.json"),"utf8"));
  for(const kind of ["dependencies","devDependencies"])
    for(const name of Object.keys(j[kind]||{})){
      const p=path.join(pkg,"node_modules",name,"package.json");
      if(!fs.existsSync(p)){console.log(pkg,kind,name,"NO_DISPONIBLE");continue}
      const m=JSON.parse(fs.readFileSync(p,"utf8"));
      console.log(pkg,kind,m.name,m.version,m.license||"NO_DISPONIBLE");
    }
}'
```

**Estado del documento**: REAL en cuanto a versiones y licencias declaradas —cada fila procede
de un `package.json` leído en este árbol—. La suficiencia jurídica del conjunto de avisos
(qué debe reproducirse y dónde, para la distribución concreta que se haga del producto) es
**PENDIENTE_VALIDAR** con asesoría.
