uade-mcp 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -7
- package/SECURITY.md +17 -6
- package/dist/auth/login.js +8 -0
- package/dist/auth/login.js.map +1 -1
- package/dist/cli/doctor.js +28 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/error-de-uso.js +11 -0
- package/dist/error-de-uso.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/net/browser.js +2 -1
- package/dist/net/browser.js.map +1 -1
- package/dist/net/open-browser.js +47 -9
- package/dist/net/open-browser.js.map +1 -1
- package/dist/net/policy.js +9 -1
- package/dist/net/policy.js.map +1 -1
- package/dist/report/errores.js +17 -6
- package/dist/report/errores.js.map +1 -1
- package/dist/sources/docs/leer.js +9 -1
- package/dist/sources/docs/leer.js.map +1 -1
- package/dist/sources/docs/pdf-imagenes.js +278 -0
- package/dist/sources/docs/pdf-imagenes.js.map +1 -0
- package/dist/sources/inscripciones/index.js +60 -2
- package/dist/sources/inscripciones/index.js.map +1 -1
- package/dist/sources/mail/draft.js +3 -2
- package/dist/sources/mail/draft.js.map +1 -1
- package/dist/sources/pia/alta.js +4 -3
- package/dist/sources/pia/alta.js.map +1 -1
- package/dist/sources/pia/index.js +4 -3
- package/dist/sources/pia/index.js.map +1 -1
- package/dist/sources/pia/parse.js +2 -1
- package/dist/sources/pia/parse.js.map +1 -1
- package/dist/sources/planificador/elegibilidad.js +2 -1
- package/dist/sources/planificador/elegibilidad.js.map +1 -1
- package/dist/sources/sharepoint/index.js +16 -4
- package/dist/sources/sharepoint/index.js.map +1 -1
- package/dist/sources/teams/index.js +5 -3
- package/dist/sources/teams/index.js.map +1 -1
- package/dist/sources/webcampus/consultas.js +38 -0
- package/dist/sources/webcampus/consultas.js.map +1 -0
- package/dist/sources/webcampus/index.js +34 -2
- package/dist/sources/webcampus/index.js.map +1 -1
- package/dist/sources/webcampus/novedades.js +44 -0
- package/dist/sources/webcampus/novedades.js.map +1 -1
- package/dist/sources/webcampus/parse.js +14 -0
- package/dist/sources/webcampus/parse.js.map +1 -1
- package/dist/sources/webcampus/previos.js +3 -3
- package/dist/sources/webcampus/previos.js.map +1 -1
- package/dist/sources/webcampus/secciones.js +30 -8
- package/dist/sources/webcampus/secciones.js.map +1 -1
- package/dist/tools/common.js +21 -3
- package/dist/tools/common.js.map +1 -1
- package/dist/tools/inscripciones.js +90 -1
- package/dist/tools/inscripciones.js.map +1 -1
- package/dist/tools/materiales.js +64 -32
- package/dist/tools/materiales.js.map +1 -1
- package/dist/tools/novedades.js +33 -10
- package/dist/tools/novedades.js.map +1 -1
- package/dist/tools/pia.js +1 -1
- package/dist/tools/pia.js.map +1 -1
- package/dist/tools/secciones.js +8 -5
- package/dist/tools/secciones.js.map +1 -1
- package/dist/tools/teams.js +3 -2
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/webcampus.js +16 -2
- package/dist/tools/webcampus.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errores.js","sourceRoot":"","sources":["../../src/report/errores.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,iGAAiG;AACjG,
|
|
1
|
+
{"version":3,"file":"errores.js","sourceRoot":"","sources":["../../src/report/errores.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,17 @@ import { readSheet } from 'read-excel-file/node';
|
|
|
6
6
|
import WordExtractor from 'word-extractor';
|
|
7
7
|
import { read as leerXls, utils as xlsUtils } from 'xlsx';
|
|
8
8
|
import { leerPdf } from '../calendario/index.js';
|
|
9
|
+
import { assertXlsxRazonable, MAX_DESCOMPRIMIDO } from '../webcampus/previos.js';
|
|
9
10
|
const MAX_TEXTO = 12000;
|
|
10
11
|
export function tipoLegible(nombre) {
|
|
11
12
|
return /\.(pdf|xlsx|xls|docx|doc|pptx|txt|csv|md)$/i.test(nombre);
|
|
12
13
|
}
|
|
13
|
-
// Lee archivos de un zip (docx/pptx
|
|
14
|
+
// Lee archivos de un zip (docx/pptx) cuyo nombre matchea `filtro`, concatenando su contenido.
|
|
15
|
+
// Cuenta los bytes REALES que salen (los tamaños que declara el zip se pueden falsear) y corta al
|
|
16
|
+
// pasar el tope: un "zip bomb" disfrazado de apunte no agota la memoria.
|
|
14
17
|
function partesDeZip(bytes, filtro) {
|
|
15
18
|
const partes = [];
|
|
19
|
+
let total = 0;
|
|
16
20
|
const unzip = new Unzip((file) => {
|
|
17
21
|
if (!filtro.test(file.name))
|
|
18
22
|
return; // no se arranca: fflate lo saltea
|
|
@@ -20,6 +24,9 @@ function partesDeZip(bytes, filtro) {
|
|
|
20
24
|
file.ondata = (err, chunk, final) => {
|
|
21
25
|
if (err)
|
|
22
26
|
throw err;
|
|
27
|
+
total += chunk.length;
|
|
28
|
+
if (total > MAX_DESCOMPRIMIDO)
|
|
29
|
+
throw new Error('El documento es sospechosamente grande al descomprimirlo; no se abrió.');
|
|
23
30
|
trozos.push(chunk);
|
|
24
31
|
if (final) {
|
|
25
32
|
const total = trozos.reduce((n, c) => n + c.length, 0);
|
|
@@ -62,6 +69,7 @@ export async function leerDocumento(nombre, bytes) {
|
|
|
62
69
|
texto = slides.map((x, i) => `[Diapositiva ${i + 1}] ${textoDeXml(x, 'a:t')}`).join('\n');
|
|
63
70
|
}
|
|
64
71
|
else if (ext === 'xlsx') {
|
|
72
|
+
assertXlsxRazonable(bytes, 'El Excel');
|
|
65
73
|
const rows = await readSheet(Buffer.from(bytes));
|
|
66
74
|
texto = rows.map((r) => r.map((c) => (c == null ? '' : String(c))).join('\t')).join('\n');
|
|
67
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leer.js","sourceRoot":"","sources":["../../../src/sources/docs/leer.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,8FAA8F;AAC9F,4FAA4F;AAC5F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"leer.js","sourceRoot":"","sources":["../../../src/sources/docs/leer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
// Imágenes de un PDF escaneado (sin texto), para que el modelo las mire: algunos documentos de
|
|
2
|
+
// UADE (números ante emergencias, algunos cronogramas) son una foto pegada en un PDF. No se
|
|
3
|
+
// renderiza la página (eso pediría un motor gráfico): se sacan las imágenes tal como están
|
|
4
|
+
// guardadas. JPEG (DCTDecode) sale como está; las de píxeles crudos (FlateDecode, 8 bits, gris,
|
|
5
|
+
// RGB o paleta) se envuelven en un PNG con zlib. Los escáneres suelen cortar la hoja en tiras del
|
|
6
|
+
// mismo ancho: las tiras consecutivas se pegan en una sola imagen.
|
|
7
|
+
import { deflateSync, inflateSync } from 'node:zlib';
|
|
8
|
+
const MAX_IMAGENES = 6;
|
|
9
|
+
const MIN_LADO = 200; // íconos y logos chicos no sirven para leer nada
|
|
10
|
+
// 20 megapíxeles en RGB son 60 MB crudos: el mismo tope que los demás formatos (SECURITY.md).
|
|
11
|
+
const MAX_PIXELES = 20_000_000;
|
|
12
|
+
export const MAX_CRUDO = 60 * 1024 * 1024; // bytes descomprimidos por PDF, entre todas sus imágenes
|
|
13
|
+
const MAX_OBJETOS = 20_000; // objetos revisados por PDF
|
|
14
|
+
const MAX_DICT = 4096; // un diccionario de imagen mide unas decenas de bytes; más es otra cosa
|
|
15
|
+
// Recorre el PDF objeto por objeto con indexOf y un diccionario acotado: lineal en el tamaño del
|
|
16
|
+
// archivo, aunque el PDF esté armado a propósito con miles de "N 0 obj <<" sin cerrar.
|
|
17
|
+
function* objetosConStream(s) {
|
|
18
|
+
let pos = 0;
|
|
19
|
+
for (let vistos = 0; vistos < MAX_OBJETOS; vistos++) {
|
|
20
|
+
const i = s.indexOf(' 0 obj', pos);
|
|
21
|
+
if (i < 0)
|
|
22
|
+
return;
|
|
23
|
+
pos = i + 6;
|
|
24
|
+
// Número del objeto: los dígitos justo antes de " 0 obj", y antes de ellos nada que sea un dígito.
|
|
25
|
+
let d = i;
|
|
26
|
+
while (d > 0 && s.charCodeAt(d - 1) >= 48 && s.charCodeAt(d - 1) <= 57)
|
|
27
|
+
d--;
|
|
28
|
+
if (d === i)
|
|
29
|
+
continue;
|
|
30
|
+
const n = s.slice(d, i);
|
|
31
|
+
let j = saltarBlancos(s, pos);
|
|
32
|
+
if (s.startsWith('<<', j)) {
|
|
33
|
+
const fin = finDeDiccionario(s, j);
|
|
34
|
+
if (fin < 0)
|
|
35
|
+
continue;
|
|
36
|
+
const dict = s.slice(j + 2, fin - 2);
|
|
37
|
+
j = saltarBlancos(s, fin);
|
|
38
|
+
if (!s.startsWith('stream', j))
|
|
39
|
+
continue;
|
|
40
|
+
j += 6;
|
|
41
|
+
if (s[j] === '\r')
|
|
42
|
+
j++;
|
|
43
|
+
if (s[j] !== '\n')
|
|
44
|
+
continue;
|
|
45
|
+
yield { n, dict, inicio: j + 1 };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function saltarBlancos(s, i) {
|
|
50
|
+
while (i < s.length && /\s/.test(s[i]))
|
|
51
|
+
i++;
|
|
52
|
+
return i;
|
|
53
|
+
}
|
|
54
|
+
// Índice justo después del ">>" que cierra el diccionario que empieza en `i` (anidados incluidos),
|
|
55
|
+
// o -1 si no cierra dentro del tope.
|
|
56
|
+
function finDeDiccionario(s, i) {
|
|
57
|
+
const tope = Math.min(s.length, i + MAX_DICT);
|
|
58
|
+
let prof = 0;
|
|
59
|
+
for (let k = i; k < tope - 1; k++) {
|
|
60
|
+
if (s[k] === '<' && s[k + 1] === '<') {
|
|
61
|
+
prof++;
|
|
62
|
+
k++;
|
|
63
|
+
}
|
|
64
|
+
else if (s[k] === '>' && s[k + 1] === '>') {
|
|
65
|
+
prof--;
|
|
66
|
+
k++;
|
|
67
|
+
if (prof === 0)
|
|
68
|
+
return k + 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return -1;
|
|
72
|
+
}
|
|
73
|
+
export function imagenesDePdf(bytes, max = MAX_IMAGENES) {
|
|
74
|
+
const buf = Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
75
|
+
const s = buf.toString('latin1');
|
|
76
|
+
const out = [];
|
|
77
|
+
let tiras = [];
|
|
78
|
+
let presupuesto = MAX_CRUDO;
|
|
79
|
+
const cerrarTiras = () => {
|
|
80
|
+
if (tiras.length)
|
|
81
|
+
out.push(pngDe(pegar(tiras)));
|
|
82
|
+
tiras = [];
|
|
83
|
+
};
|
|
84
|
+
// Las máscaras de transparencia (/SMask N 0 R) son imágenes aparte que no hay que mostrar.
|
|
85
|
+
const mascaras = new Set([...s.matchAll(/\/SMask\s+(\d+) 0 R/g)].map((x) => x[1]));
|
|
86
|
+
for (const { n, dict, inicio } of objetosConStream(s)) {
|
|
87
|
+
if (out.length + (tiras.length ? 1 : 0) >= max)
|
|
88
|
+
break;
|
|
89
|
+
// Una imagen con su propia máscara (/SMask) es un gráfico compuesto (fondos de un diseño, no un
|
|
90
|
+
// escaneo): sola, sin la máscara, se vería como una mancha de color. Se saltea.
|
|
91
|
+
if (!/\/Subtype\s*\/Image\b/.test(dict) || /\/ImageMask\s+true/.test(dict) || /\/SMask\s+\d+ 0 R/.test(dict) || mascaras.has(n))
|
|
92
|
+
continue;
|
|
93
|
+
const ancho = num(dict, 'Width'), alto = num(dict, 'Height'), largo = num(dict, 'Length');
|
|
94
|
+
if (!ancho || !alto || !largo || ancho < MIN_LADO || alto < 50 || ancho * alto > MAX_PIXELES)
|
|
95
|
+
continue;
|
|
96
|
+
const datos = buf.subarray(inicio, inicio + largo);
|
|
97
|
+
const filtro = dict.match(/\/Filter\s*\[?\s*\/(\w+)/)?.[1];
|
|
98
|
+
if (filtro === 'DCTDecode') {
|
|
99
|
+
cerrarTiras();
|
|
100
|
+
if (datos[0] === 0xff && datos[1] === 0xd8)
|
|
101
|
+
out.push({ mimeType: 'image/jpeg', bytes: new Uint8Array(datos), ancho, alto });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (filtro !== 'FlateDecode' || num(dict, 'BitsPerComponent') !== 8)
|
|
105
|
+
continue;
|
|
106
|
+
const cs = colorSpace(dict, s);
|
|
107
|
+
if (!cs)
|
|
108
|
+
continue;
|
|
109
|
+
// Tope de salida: lo que mide la imagen declarada (y nunca más que el presupuesto del PDF). Un
|
|
110
|
+
// stream chico que infla a cientos de MB corta acá, sin reservar memoria.
|
|
111
|
+
const esperado = ancho * alto * (cs.tipo === 'rgb' ? 3 : 1);
|
|
112
|
+
if (esperado > presupuesto)
|
|
113
|
+
break;
|
|
114
|
+
let raw;
|
|
115
|
+
try {
|
|
116
|
+
raw = inflateSync(datos, { maxOutputLength: esperado + 1024 });
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
presupuesto -= raw.length;
|
|
122
|
+
const cruda = aRgb(raw, ancho, alto, cs);
|
|
123
|
+
if (!cruda)
|
|
124
|
+
continue;
|
|
125
|
+
if (tiras.length && tiras[0].ancho !== ancho)
|
|
126
|
+
cerrarTiras();
|
|
127
|
+
tiras.push(cruda);
|
|
128
|
+
}
|
|
129
|
+
cerrarTiras();
|
|
130
|
+
return out.slice(0, max);
|
|
131
|
+
}
|
|
132
|
+
const num = (dict, clave) => Number(dict.match(new RegExp(`/${clave}\\s+(\\d+)`))?.[1] ?? 0);
|
|
133
|
+
function colorSpace(dict, pdf) {
|
|
134
|
+
let cs = dict.match(/\/ColorSpace\s*(\/\w+|\[[^\]]*\]|\d+ 0 R)/)?.[1] ?? '';
|
|
135
|
+
if (/^\d+ 0 R$/.test(cs))
|
|
136
|
+
cs = objeto(pdf, cs) ?? '';
|
|
137
|
+
if (/^\/DeviceGray|^\/CalGray/.test(cs))
|
|
138
|
+
return { tipo: 'gris' };
|
|
139
|
+
if (/^\/DeviceRGB|^\/CalRGB/.test(cs))
|
|
140
|
+
return { tipo: 'rgb' };
|
|
141
|
+
const idx = cs.match(/^\[\s*\/Indexed\s*\/(\w+)\s+(\d+)\s+(<[0-9a-fA-F\s]*>|\d+ 0 R)/);
|
|
142
|
+
if (!idx || idx[1] !== 'DeviceRGB')
|
|
143
|
+
return null;
|
|
144
|
+
const tabla = idx[3].startsWith('<') ? Buffer.from(idx[3].replace(/[<>\s]/g, ''), 'hex') : streamDe(pdf, idx[3]);
|
|
145
|
+
return tabla ? { tipo: 'paleta', tabla } : null;
|
|
146
|
+
}
|
|
147
|
+
// Objeto "N 0 obj" (el primero con ese número), con su diccionario si lo tiene, por indexOf.
|
|
148
|
+
function buscarObjeto(pdf, n) {
|
|
149
|
+
let pos = 0;
|
|
150
|
+
for (let intentos = 0; intentos < 100; intentos++) {
|
|
151
|
+
const i = pdf.indexOf(`${n} 0 obj`, pos);
|
|
152
|
+
if (i < 0)
|
|
153
|
+
return null;
|
|
154
|
+
pos = i + 1;
|
|
155
|
+
if (i > 0 && /\d/.test(pdf[i - 1]))
|
|
156
|
+
continue;
|
|
157
|
+
const j = saltarBlancos(pdf, i + n.length + 6);
|
|
158
|
+
if (pdf.startsWith('<<', j)) {
|
|
159
|
+
const fin = finDeDiccionario(pdf, j);
|
|
160
|
+
if (fin < 0)
|
|
161
|
+
return null;
|
|
162
|
+
let k = saltarBlancos(pdf, fin);
|
|
163
|
+
const dict = pdf.slice(j + 2, fin - 2);
|
|
164
|
+
if (!pdf.startsWith('stream', k))
|
|
165
|
+
return { dict, cuerpo: dict, inicioStream: -1 };
|
|
166
|
+
k += 6;
|
|
167
|
+
if (pdf[k] === '\r')
|
|
168
|
+
k++;
|
|
169
|
+
return pdf[k] === '\n' ? { dict, cuerpo: dict, inicioStream: k + 1 } : null;
|
|
170
|
+
}
|
|
171
|
+
// Sin diccionario (un array de ColorSpace, por ejemplo): el cuerpo hasta endobj, acotado.
|
|
172
|
+
const fin = pdf.indexOf('endobj', j);
|
|
173
|
+
return { dict: null, cuerpo: pdf.slice(j, fin < 0 ? Math.min(pdf.length, j + MAX_DICT) : Math.min(fin, j + MAX_DICT)).trim(), inicioStream: -1 };
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// Cuerpo (sin stream) de "N 0 obj".
|
|
178
|
+
function objeto(pdf, ref) {
|
|
179
|
+
return buscarObjeto(pdf, ref.split(' ')[0])?.cuerpo ?? null;
|
|
180
|
+
}
|
|
181
|
+
const MAX_PALETA = 256 * 3 + 64; // una tabla /Indexed de 8 bits tiene a lo sumo 256 colores RGB
|
|
182
|
+
function streamDe(pdf, ref) {
|
|
183
|
+
const o = buscarObjeto(pdf, ref.split(' ')[0]);
|
|
184
|
+
if (!o || !o.dict || o.inicioStream < 0)
|
|
185
|
+
return null;
|
|
186
|
+
const largo = Math.min(num(o.dict, 'Length'), MAX_DICT * 4);
|
|
187
|
+
const datos = Buffer.from(pdf.slice(o.inicioStream, o.inicioStream + largo), 'latin1');
|
|
188
|
+
if (!/\/FlateDecode/.test(o.dict))
|
|
189
|
+
return datos.subarray(0, MAX_PALETA);
|
|
190
|
+
try {
|
|
191
|
+
return inflateSync(datos, { maxOutputLength: MAX_PALETA });
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function aRgb(raw, ancho, alto, cs) {
|
|
198
|
+
const px = ancho * alto;
|
|
199
|
+
const rgb = Buffer.alloc(px * 3);
|
|
200
|
+
if (cs.tipo === 'rgb') {
|
|
201
|
+
if (raw.length < px * 3)
|
|
202
|
+
return null;
|
|
203
|
+
raw.copy(rgb, 0, 0, px * 3);
|
|
204
|
+
}
|
|
205
|
+
else if (cs.tipo === 'gris') {
|
|
206
|
+
if (raw.length < px)
|
|
207
|
+
return null;
|
|
208
|
+
for (let i = 0; i < px; i++)
|
|
209
|
+
rgb[i * 3] = rgb[i * 3 + 1] = rgb[i * 3 + 2] = raw[i];
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
if (raw.length < px)
|
|
213
|
+
return null;
|
|
214
|
+
const t = cs.tabla;
|
|
215
|
+
for (let i = 0; i < px; i++) {
|
|
216
|
+
const k = Math.min(raw[i], t.length / 3 - 1) * 3;
|
|
217
|
+
rgb[i * 3] = t[k] ?? 0;
|
|
218
|
+
rgb[i * 3 + 1] = t[k + 1] ?? 0;
|
|
219
|
+
rgb[i * 3 + 2] = t[k + 2] ?? 0;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return { ancho, alto, rgb };
|
|
223
|
+
}
|
|
224
|
+
function pegar(tiras) {
|
|
225
|
+
if (tiras.length === 1)
|
|
226
|
+
return tiras[0];
|
|
227
|
+
const ancho = tiras[0].ancho;
|
|
228
|
+
const alto = tiras.reduce((n, t) => n + t.alto, 0);
|
|
229
|
+
return { ancho, alto, rgb: Buffer.concat(tiras.map((t) => t.rgb)) };
|
|
230
|
+
}
|
|
231
|
+
// PNG mínimo: cabecera, IHDR (RGB 8 bits), un IDAT con las filas (filtro 0) y IEND.
|
|
232
|
+
export function pngDe(img) {
|
|
233
|
+
const filas = Buffer.alloc((img.ancho * 3 + 1) * img.alto);
|
|
234
|
+
for (let y = 0; y < img.alto; y++) {
|
|
235
|
+
const o = y * (img.ancho * 3 + 1);
|
|
236
|
+
filas[o] = 0;
|
|
237
|
+
Buffer.from(img.rgb.buffer, img.rgb.byteOffset + y * img.ancho * 3, img.ancho * 3).copy(filas, o + 1);
|
|
238
|
+
}
|
|
239
|
+
const ihdr = Buffer.alloc(13);
|
|
240
|
+
ihdr.writeUInt32BE(img.ancho, 0);
|
|
241
|
+
ihdr.writeUInt32BE(img.alto, 4);
|
|
242
|
+
ihdr[8] = 8;
|
|
243
|
+
ihdr[9] = 2;
|
|
244
|
+
ihdr[10] = 0;
|
|
245
|
+
ihdr[11] = 0;
|
|
246
|
+
ihdr[12] = 0;
|
|
247
|
+
const png = Buffer.concat([
|
|
248
|
+
Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]),
|
|
249
|
+
chunk('IHDR', ihdr), chunk('IDAT', deflateSync(filas)), chunk('IEND', Buffer.alloc(0)),
|
|
250
|
+
]);
|
|
251
|
+
return { mimeType: 'image/png', bytes: new Uint8Array(png), ancho: img.ancho, alto: img.alto };
|
|
252
|
+
}
|
|
253
|
+
function chunk(tipo, datos) {
|
|
254
|
+
const len = Buffer.alloc(4);
|
|
255
|
+
len.writeUInt32BE(datos.length, 0);
|
|
256
|
+
const cuerpo = Buffer.concat([Buffer.from(tipo, 'latin1'), datos]);
|
|
257
|
+
const crc = Buffer.alloc(4);
|
|
258
|
+
crc.writeUInt32BE(crc32(cuerpo), 0);
|
|
259
|
+
return Buffer.concat([len, cuerpo, crc]);
|
|
260
|
+
}
|
|
261
|
+
let TABLA_CRC = null;
|
|
262
|
+
function crc32(b) {
|
|
263
|
+
if (!TABLA_CRC) {
|
|
264
|
+
TABLA_CRC = new Uint32Array(256);
|
|
265
|
+
for (let n = 0; n < 256; n++) {
|
|
266
|
+
let c = n;
|
|
267
|
+
for (let k = 0; k < 8; k++)
|
|
268
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
269
|
+
TABLA_CRC[n] = c >>> 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
let c = 0xffffffff;
|
|
273
|
+
for (const x of b)
|
|
274
|
+
c = TABLA_CRC[(c ^ x) & 0xff] ^ (c >>> 8);
|
|
275
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
276
|
+
}
|
|
277
|
+
export const aBase64 = (b) => Buffer.from(b.buffer, b.byteOffset, b.byteLength).toString('base64');
|
|
278
|
+
//# sourceMappingURL=pdf-imagenes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf-imagenes.js","sourceRoot":"","sources":["../../../src/sources/docs/pdf-imagenes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
// Sitio de inscripciones (inscripciones.uade.edu.ar): ventanas de inscripción con sus fechas
|
|
2
|
-
//
|
|
1
|
+
// Sitio de inscripciones (inscripciones.uade.edu.ar): ventanas de inscripción con sus fechas, el
|
|
2
|
+
// cronograma por turno y cantidad de aprobadas (una imagen), el link a la Programación de Clases
|
|
3
|
+
// de WebCampus, y las pestañas Importante e Instructivos (avisos, tutoriales, preguntas
|
|
4
|
+
// frecuentes). Solo lectura: no abre PIA ni inscribe.
|
|
3
5
|
import * as cheerio from 'cheerio';
|
|
4
6
|
import { keychainStore, renovarSesion, SessionClient, SessionExpiredError } from '../../net/session.js';
|
|
5
7
|
import { PageChangedError, parseFecha } from '../webcampus/parse.js';
|
|
@@ -64,6 +66,48 @@ export function parseLinkProgramacion(html) {
|
|
|
64
66
|
return null;
|
|
65
67
|
return u.pathname + u.search;
|
|
66
68
|
}
|
|
69
|
+
export function parseCronograma(html) {
|
|
70
|
+
const $ = cheerio.load(html);
|
|
71
|
+
const img = $('#menu2 img').first();
|
|
72
|
+
const src = img.attr('src');
|
|
73
|
+
if (!src)
|
|
74
|
+
throw new PageChangedError('cronograma de inscripción (imagen)', $.html());
|
|
75
|
+
const u = new URL(src.replace(/^~/, ''), INSCRIPCIONES);
|
|
76
|
+
if (u.origin !== INSCRIPCIONES)
|
|
77
|
+
throw new PageChangedError('cronograma de inscripción (imagen)', $.html());
|
|
78
|
+
return { imagen: u.pathname + u.search, alt: clean(img.attr('alt')) || null };
|
|
79
|
+
}
|
|
80
|
+
export function parseGuia(html) {
|
|
81
|
+
const $ = cheerio.load(html);
|
|
82
|
+
if (!$('.nav-tabs').length || !$('#home, #menuImportante').length)
|
|
83
|
+
throw new PageChangedError('guía del sitio de inscripciones', $.html());
|
|
84
|
+
$('script, style, noscript, img').remove();
|
|
85
|
+
$('p, div, li, br, h1, h2, h3, h4, h5, td, tr').append(' ');
|
|
86
|
+
const importante = [];
|
|
87
|
+
$('#menuImportante .alert').each((_, a) => {
|
|
88
|
+
$(a).find('ol li, ul li').each((_, li) => { $(li).prepend('• '); });
|
|
89
|
+
$(a).find('a, button').filter((_, b) => /^(ver m[aá]s|inscribite)/i.test(clean($(b).text()))).remove();
|
|
90
|
+
const t = clean($(a).text());
|
|
91
|
+
if (t)
|
|
92
|
+
importante.push(t);
|
|
93
|
+
});
|
|
94
|
+
const instructivos = [];
|
|
95
|
+
$('#home a[href]').each((_, a) => {
|
|
96
|
+
const titulo = clean($(a).text());
|
|
97
|
+
const link = $(a).attr('href') ?? '';
|
|
98
|
+
if (titulo && /^https?:\/\//.test(link))
|
|
99
|
+
instructivos.push({ titulo, link });
|
|
100
|
+
});
|
|
101
|
+
const preguntasFrecuentes = [];
|
|
102
|
+
$('.panel-group .panel').each((_, p) => {
|
|
103
|
+
const pregunta = clean($(p).find('.panel-title').text());
|
|
104
|
+
const respuesta = clean($(p).find('.panel-body').text());
|
|
105
|
+
if (pregunta && respuesta)
|
|
106
|
+
preguntasFrecuentes.push({ pregunta, respuesta });
|
|
107
|
+
});
|
|
108
|
+
const ayuda = $('.nav-tabs a[href^="http"]').first().attr('href') ?? null;
|
|
109
|
+
return { importante, instructivos, preguntasFrecuentes, ayuda };
|
|
110
|
+
}
|
|
67
111
|
export class InscripcionesClient extends SessionClient {
|
|
68
112
|
constructor(store = keychainStore(INSCRIPCIONES_ACCOUNT)) {
|
|
69
113
|
super({ nombre: 'Inscripciones', origin: INSCRIPCIONES, esLogin: (u) => /^\/account\/login/i.test(u.pathname) }, store);
|
|
@@ -97,6 +141,20 @@ export class Inscripciones {
|
|
|
97
141
|
return false;
|
|
98
142
|
}
|
|
99
143
|
}
|
|
144
|
+
// La imagen del cronograma, tal cual (JPEG/PNG), con su URL.
|
|
145
|
+
async cronograma() {
|
|
146
|
+
const home = await this.client.get('/');
|
|
147
|
+
const c = parseCronograma(home.html);
|
|
148
|
+
const img = await this.client.get(c.imagen);
|
|
149
|
+
const b = img.bytes;
|
|
150
|
+
const mimeType = b[0] === 0xff && b[1] === 0xd8 ? 'image/jpeg' : b[0] === 0x89 && b[1] === 0x50 ? 'image/png' : null;
|
|
151
|
+
if (!mimeType)
|
|
152
|
+
throw new PageChangedError('cronograma de inscripción (imagen)');
|
|
153
|
+
return { url: INSCRIPCIONES + c.imagen, alt: c.alt, mimeType, bytes: b };
|
|
154
|
+
}
|
|
155
|
+
async guia() {
|
|
156
|
+
return parseGuia((await this.client.get('/')).html);
|
|
157
|
+
}
|
|
100
158
|
async linkProgramacion() {
|
|
101
159
|
const link = parseLinkProgramacion((await this.client.get('/')).html);
|
|
102
160
|
if (!link)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/inscripciones/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/inscripciones/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// agent to put the student's data in an email to an outside address.
|
|
5
5
|
// outlook.cloud.microsoft es el dominio actual de Outlook web; con outlook.office.com Microsoft
|
|
6
6
|
// pide iniciar sesión de nuevo aunque ya estés adentro en la otra dirección.
|
|
7
|
+
import { ErrorDeUso } from '../../error-de-uso.js';
|
|
7
8
|
export const COMPOSE_URL = 'https://outlook.cloud.microsoft/mail/deeplink/compose';
|
|
8
9
|
const ALLOWED_DOMAIN = /@uade\.edu\.ar$/i;
|
|
9
10
|
const EMAIL = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
|
|
@@ -12,9 +13,9 @@ function checkRecipients(list, field) {
|
|
|
12
13
|
const out = (list ?? []).map((e) => e.trim()).filter(Boolean);
|
|
13
14
|
for (const e of out) {
|
|
14
15
|
if (!EMAIL.test(e))
|
|
15
|
-
throw new
|
|
16
|
+
throw new ErrorDeUso(`"${e}" no es un mail válido (${field}).`);
|
|
16
17
|
if (!ALLOWED_DOMAIN.test(e)) {
|
|
17
|
-
throw new
|
|
18
|
+
throw new ErrorDeUso(`Solo se pueden armar borradores para direcciones @uade.edu.ar ("${e}" no lo es).`);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
return [...new Set(out.map((e) => e.toLowerCase()))];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../../src/sources/mail/draft.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,8FAA8F;AAC9F,mGAAmG;AACnG,qEAAqE;AAErE,gGAAgG;AAChG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,uDAAuD,CAAC;AACnF,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,KAAK,GAAG,kDAAkD,CAAC;AACjE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,4CAA4C;AASlE,SAAS,eAAe,CAAC,IAA0B,EAAE,KAAa;IAChE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../../src/sources/mail/draft.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,8FAA8F;AAC9F,mGAAmG;AACnG,qEAAqE;AAErE,gGAAgG;AAChG,6EAA6E;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG,uDAAuD,CAAC;AACnF,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,KAAK,GAAG,kDAAkD,CAAC;AACjE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,4CAA4C;AASlE,SAAS,eAAe,CAAC,IAA0B,EAAE,KAAa;IAChE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,2BAA2B,KAAK,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,UAAU,CAAC,mEAAmE,CAAC,cAAc,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAQ;IACpC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAElD,gGAAgG;IAChG,MAAM,MAAM,GAAG,CAAC,MAAM,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,GAAG,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACjD,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IACtH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/sources/pia/alta.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ErrorDeUso } from '../../error-de-uso.js';
|
|
1
2
|
const ddmmaaaa = (iso) => {
|
|
2
3
|
if (!iso)
|
|
3
4
|
return 'sin fecha';
|
|
@@ -13,7 +14,7 @@ export async function resumenClase(fuentes, materia, clase) {
|
|
|
13
14
|
const elegida = clases.find((c) => c.clase === clase);
|
|
14
15
|
if (!elegida) {
|
|
15
16
|
const lista = clases.map((c) => `${c.clase} (${c.sede}, ${c.turno}, ${c.dias.join('/')} ${c.horario ?? ''})`).join('; ');
|
|
16
|
-
throw new
|
|
17
|
+
throw new ErrorDeUso(`No encontré la clase ${clase} de ${materia}. Clases programadas: ${lista || 'ninguna'}.`);
|
|
17
18
|
}
|
|
18
19
|
return [
|
|
19
20
|
'INSCRIPCIÓN A MATERIA: todavía no se hizo nada.',
|
|
@@ -31,10 +32,10 @@ export async function resumenPrevio(fuentes, materia) {
|
|
|
31
32
|
throw new Error('No hay ninguna ventana de inscripción a exámenes previos abierta ahora.');
|
|
32
33
|
const puede = await fuentes.puedeRendir(materia);
|
|
33
34
|
if (!puede.ok)
|
|
34
|
-
throw new
|
|
35
|
+
throw new ErrorDeUso(`Según tu historial y las correlativas no podés rendir ${materia}: ${puede.motivo}.`);
|
|
35
36
|
const examenes = await fuentes.examenes(materia);
|
|
36
37
|
if (!examenes.length)
|
|
37
|
-
throw new
|
|
38
|
+
throw new ErrorDeUso(`No encontré ${materia} en el cronograma de previos publicado.`);
|
|
38
39
|
const lineas = examenes.map((e) => `${e.sede} · ${ddmmaaaa(e.fecha)}${e.hora ? ` ${e.hora}` : ''}${e.clase ? ` · clase ${e.clase}` : ''}${e.aula ? ` · aula ${e.aula}` : ''}`);
|
|
39
40
|
return [
|
|
40
41
|
'INSCRIPCIÓN A EXAMEN PREVIO: todavía no se hizo nada.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alta.js","sourceRoot":"","sources":["../../../src/sources/pia/alta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alta.js","sourceRoot":"","sources":["../../../src/sources/pia/alta.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import * as cheerio from 'cheerio';
|
|
|
6
6
|
import { memoryStore, SessionClient } from '../../net/session.js';
|
|
7
7
|
import { PIA } from '../inscripciones/index.js';
|
|
8
8
|
import { CONTROLES, DIAS_PIA, htmlDe, leerFormulario, parseBuscador, parseClases, parseMaterias } from './parse.js';
|
|
9
|
+
import { ErrorDeUso } from '../../error-de-uso.js';
|
|
9
10
|
export class PiaClient extends SessionClient {
|
|
10
11
|
constructor(store = memoryStore()) {
|
|
11
12
|
super({ nombre: 'PIA (inscripciones)', origin: PIA, esLogin: (u) => /login/i.test(u.pathname), sesionPorUrl: true }, store);
|
|
@@ -44,7 +45,7 @@ export class Pia {
|
|
|
44
45
|
for (const codigo of b.materias) {
|
|
45
46
|
const m = materias.find((x) => x.codigo === codigo);
|
|
46
47
|
if (!m)
|
|
47
|
-
throw new
|
|
48
|
+
throw new ErrorDeUso(`La materia ${codigo} no está en la lista de PIA para esta ventana. Hay ${materias.length} materias: ${materias.map((x) => x.codigo).join(', ')}.`);
|
|
48
49
|
pedidas.push(m);
|
|
49
50
|
if (m.chk)
|
|
50
51
|
form[m.chk] = 'on';
|
|
@@ -57,12 +58,12 @@ export class Pia {
|
|
|
57
58
|
if (!turno && !b.turno && buscador.turnos.length === 1)
|
|
58
59
|
turno = buscador.turnos[0];
|
|
59
60
|
if (!turno)
|
|
60
|
-
throw new
|
|
61
|
+
throw new ErrorDeUso(`PIA pide un turno. Opciones para esta ventana: ${buscador.turnos.map((t) => t.nombre).join(', ') || 'ninguna'}.`);
|
|
61
62
|
form[CONTROLES.turno] = turno.id;
|
|
62
63
|
for (const d of b.dias ?? []) {
|
|
63
64
|
const chk = DIAS_PIA[norm(d)];
|
|
64
65
|
if (!chk)
|
|
65
|
-
throw new
|
|
66
|
+
throw new ErrorDeUso(`Día inválido: ${d}. Usá L, M, MI, J, V o S.`);
|
|
66
67
|
form[chk] = 'on';
|
|
67
68
|
}
|
|
68
69
|
// "Buscar" es un botón común: va como campo del formulario, sin __EVENTTARGET.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/pia/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,iGAAiG;AACjG,6FAA6F;AAC7F,uFAAuF;AACvF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAiD,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/pia/index.ts"],"names":[],"mappings":"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"}
|