xonecode 0.35.0 → 0.36.3
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/THIRD_PARTY_NOTICES.md +30 -0
- package/apps/web/dist/assets/{EditorDeFichero-CGZ6uZPa.js → EditorDeFichero-B9EyiuM6.js} +1 -1
- package/apps/web/dist/assets/index-C6MsC7A5.js +506 -0
- package/apps/web/dist/assets/index-DRNhZyYF.css +1 -0
- package/apps/web/dist/assets/{php-DTPkbJvq.js → php-DCP5mtTp.js} +1 -1
- package/apps/web/dist/assets/{ruby-D1wBOK7G.js → ruby-B41ayseU.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/config/settingsEnDisco.js +30 -0
- package/dist/agent/config/settingsEnDisco.js.map +1 -1
- package/dist/agent/dispositivos/instalacionEnMaquina.js +13 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.js.map +1 -1
- package/dist/agent/motores/trueforge/sesionTrueforge.js +39 -1
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/remoto/ngrokEnMaquina.js +113 -0
- package/dist/agent/remoto/ngrokEnMaquina.js.map +1 -0
- package/dist/agent/remoto/puenteWebSocket.js +175 -0
- package/dist/agent/remoto/puenteWebSocket.js.map +1 -0
- package/dist/agent/remoto/tunelNgrok.js +245 -0
- package/dist/agent/remoto/tunelNgrok.js.map +1 -0
- package/dist/core/dispositivos.js +53 -0
- package/dist/core/dispositivos.js.map +1 -1
- package/dist/core/idiomaDeLaRespuesta.js +38 -0
- package/dist/core/idiomaDeLaRespuesta.js.map +1 -0
- package/dist/core/panorama.js +93 -0
- package/dist/core/panorama.js.map +1 -0
- package/dist/core/ports.js +100 -0
- package/dist/core/ports.js.map +1 -1
- package/dist/core/remoto.js +117 -0
- package/dist/core/remoto.js.map +1 -0
- package/dist/core/settings.js +83 -0
- package/dist/core/settings.js.map +1 -1
- package/dist/core/tunel.js +92 -0
- package/dist/core/tunel.js.map +1 -0
- package/dist/web/servidor/arranque.js +597 -72
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/consolaWeb.js +52 -2
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/puenteRemoto.js +272 -0
- package/dist/web/servidor/puenteRemoto.js.map +1 -0
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +39 -1
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/node_modules/@xone/xonecode-remoto/dist/base64url.d.ts +2 -0
- package/node_modules/@xone/xonecode-remoto/dist/base64url.js +19 -0
- package/node_modules/@xone/xonecode-remoto/dist/cifrado.d.ts +25 -0
- package/node_modules/@xone/xonecode-remoto/dist/cifrado.js +75 -0
- package/node_modules/@xone/xonecode-remoto/dist/contenido.d.ts +121 -0
- package/node_modules/@xone/xonecode-remoto/dist/contenido.js +191 -0
- package/node_modules/@xone/xonecode-remoto/dist/index.d.ts +6 -0
- package/node_modules/@xone/xonecode-remoto/dist/index.js +6 -0
- package/node_modules/@xone/xonecode-remoto/dist/servidor/salas.d.ts +46 -0
- package/node_modules/@xone/xonecode-remoto/dist/servidor/salas.js +128 -0
- package/node_modules/@xone/xonecode-remoto/dist/servidor/servidor.d.ts +31 -0
- package/node_modules/@xone/xonecode-remoto/dist/servidor/servidor.js +198 -0
- package/node_modules/@xone/xonecode-remoto/dist/sobre.d.ts +53 -0
- package/node_modules/@xone/xonecode-remoto/dist/sobre.js +69 -0
- package/node_modules/@xone/xonecode-remoto/dist/url.d.ts +12 -0
- package/node_modules/@xone/xonecode-remoto/dist/url.js +35 -0
- package/node_modules/@xone/xonecode-remoto/dist/version.d.ts +2 -0
- package/node_modules/@xone/xonecode-remoto/dist/version.js +2 -0
- package/node_modules/@xone/xonecode-remoto/package.json +41 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/index-Bfa2gK3J.css +1 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/index-qBo9eRDN.js +77 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/node_modules/@xone/xonecode-remoto/web/index.html +14 -0
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +22 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +530 -0
- package/node_modules/ws/lib/receiver.js +743 -0
- package/node_modules/ws/lib/sender.js +607 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +562 -0
- package/node_modules/ws/lib/websocket.js +1407 -0
- package/node_modules/ws/package.json +74 -0
- package/node_modules/ws/wrapper.mjs +21 -0
- package/package.json +6 -1
- package/apps/web/dist/assets/index-BBQH-l_3.css +0 -1
- package/apps/web/dist/assets/index-DqYXrrxo.js +0 -499
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
export const NOMBRE_DEL_PAQUETE = "@xone/xonecode-remoto";
|
|
2
|
+
/** `undefined` = el paquete no está instalado: quien llama lo dice, aquí no se propaga el error. */
|
|
3
|
+
export async function cargarModuloRemoto(importar = (n) => import(n)) {
|
|
4
|
+
// En una VARIABLE `string`: un literal haría que tsc y los empaquetadores lo resolvieran.
|
|
5
|
+
const nombre = NOMBRE_DEL_PAQUETE;
|
|
6
|
+
try {
|
|
7
|
+
return (await importar(nombre));
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* La subruta del paquete con el PUENTE (el relé que `xonecode-server` corre en la nube), para la
|
|
15
|
+
* vía «túnel local»: xonecode lo arranca en loopback y ngrok lo publica (`tunelNgrok.ts`). Vive
|
|
16
|
+
* aquí para que el nombre del paquete siga en UN fichero.
|
|
17
|
+
*/
|
|
18
|
+
export const NOMBRE_DEL_SERVIDOR = `${NOMBRE_DEL_PAQUETE}/servidor`;
|
|
19
|
+
/**
|
|
20
|
+
* `undefined` = el paquete no está, o es una versión sin el puente (sin la subruta, o sin
|
|
21
|
+
* `arrancarServidor`): quien llama lo dice con su texto fijo.
|
|
22
|
+
*/
|
|
23
|
+
export async function cargarServidorRemoto(importar = (n) => import(n)) {
|
|
24
|
+
const nombre = NOMBRE_DEL_SERVIDOR;
|
|
25
|
+
try {
|
|
26
|
+
const m = (await importar(nombre));
|
|
27
|
+
return m !== null && typeof m === "object" && typeof m.arrancarServidor === "function" ? m : undefined;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Motivos del relé que acaban la sesión, con texto FIJO: lo que el relé diga no cruza el cable. */
|
|
34
|
+
const MOTIVOS = {
|
|
35
|
+
version: "la versión del protocolo no casa: actualiza xonecode",
|
|
36
|
+
"sala-ocupada": "esa sala ya tiene un anfitrión",
|
|
37
|
+
ritmo: "el puente cortó la conexión por exceso de mensajes",
|
|
38
|
+
"mensaje-ilegible": "el puente no entendió un mensaje",
|
|
39
|
+
};
|
|
40
|
+
const MOTIVO_DE_TAMANO = "un mensaje superó el tamaño máximo del puente";
|
|
41
|
+
/**
|
|
42
|
+
* Lo que `cerrar` espera, como mucho, a que el relé cierre el socket tras el «cerrar». Sin tope,
|
|
43
|
+
* un relé que no contesta colgaría el apagado; con él, lo peor es el comportamiento de antes.
|
|
44
|
+
*/
|
|
45
|
+
export const TOPE_DE_CIERRE_MS = 2_000;
|
|
46
|
+
/** Código de cierre WebSocket de «mensaje demasiado grande»: el relé cierra así, sin `error`. */
|
|
47
|
+
const CIERRE_MENSAJE_GRANDE = 1009;
|
|
48
|
+
export function crearPuenteWebSocket(modulo, opciones = {}) {
|
|
49
|
+
const esperas = opciones.esperasMs ?? [1_000, 2_000, 5_000, 10_000, 30_000];
|
|
50
|
+
const topeDeCierre = opciones.topeDeCierreMs ?? TOPE_DE_CIERRE_MS;
|
|
51
|
+
return {
|
|
52
|
+
async abrir(servidor, escuchas) {
|
|
53
|
+
const { sala, secreto } = modulo.generarCredenciales();
|
|
54
|
+
// UN canal cifrado por encendido, conservado en las reconexiones: uno nuevo al reconectar
|
|
55
|
+
// dejaría al relé repetir mensajes viejos del móvil.
|
|
56
|
+
const canal = await modulo.crearCanal({ secreto, sala, rol: "anfitrion" });
|
|
57
|
+
const url = modulo.urlDeSesion(modulo.baseHttpDe(servidor), sala, secreto);
|
|
58
|
+
let ws;
|
|
59
|
+
let cerrado = false;
|
|
60
|
+
let intento = 0;
|
|
61
|
+
let cola = Promise.resolve();
|
|
62
|
+
/**
|
|
63
|
+
* Lo que SALE, también en cola: el canal toma la secuencia al llamar a `cifrar` y el móvil
|
|
64
|
+
* descarta toda secuencia que no supere la última, así que cifrar en paralelo y mandar al
|
|
65
|
+
* terminar perdía un mensaje (una `reemision` o una `aprobacion` grandes, adelantadas por
|
|
66
|
+
* uno pequeño). Cifrar Y mandar van en el orden de llamada; un paso que falla no bloquea.
|
|
67
|
+
*/
|
|
68
|
+
let envios = Promise.resolve();
|
|
69
|
+
let temporizador;
|
|
70
|
+
const acabar = (motivo) => {
|
|
71
|
+
cerrado = true;
|
|
72
|
+
escuchas.alEstado({ estado: "cerrada", motivo });
|
|
73
|
+
};
|
|
74
|
+
const conectar = () => {
|
|
75
|
+
const socket = new WebSocket(servidor);
|
|
76
|
+
ws = socket;
|
|
77
|
+
socket.onopen = () => {
|
|
78
|
+
intento = 0;
|
|
79
|
+
socket.send(JSON.stringify({ t: "abrir", sala, v: modulo.VERSION_DEL_PROTOCOLO }));
|
|
80
|
+
};
|
|
81
|
+
const procesar = async (ev) => {
|
|
82
|
+
if (cerrado || ws !== socket)
|
|
83
|
+
return;
|
|
84
|
+
let s;
|
|
85
|
+
try {
|
|
86
|
+
s = JSON.parse(String(ev.data));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (s.t === "abierta")
|
|
92
|
+
escuchas.alEstado({ estado: "abierta", url });
|
|
93
|
+
else if (s.t === "presencia" && Array.isArray(s.moviles))
|
|
94
|
+
escuchas.alPresencia(s.moviles.filter((x) => typeof x === "string"));
|
|
95
|
+
else if (s.t === "dato" && typeof s.de === "string" && typeof s.carga === "string") {
|
|
96
|
+
let claro;
|
|
97
|
+
try {
|
|
98
|
+
claro = await canal.descifrar(s.carga);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return; // lo que no descifra no es del móvil: se descarta
|
|
102
|
+
}
|
|
103
|
+
if (claro !== undefined && !cerrado)
|
|
104
|
+
escuchas.alMensaje(s.de, claro);
|
|
105
|
+
}
|
|
106
|
+
else if (s.t === "error" && typeof s.motivo === "string" && s.motivo in MOTIVOS) {
|
|
107
|
+
acabar(MOTIVOS[s.motivo]);
|
|
108
|
+
socket.close();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
// En orden de llegada: el canal real descarta lo que no supera la última secuencia vista,
|
|
112
|
+
// y descifrar en paralelo desordenaría los mensajes legítimos del móvil.
|
|
113
|
+
socket.onmessage = (ev) => {
|
|
114
|
+
cola = cola.then(() => procesar(ev)).catch(() => { });
|
|
115
|
+
};
|
|
116
|
+
socket.onclose = (ev) => {
|
|
117
|
+
if (cerrado || ws !== socket)
|
|
118
|
+
return;
|
|
119
|
+
if (ev.code === CIERRE_MENSAJE_GRANDE) {
|
|
120
|
+
acabar(MOTIVO_DE_TAMANO);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
escuchas.alEstado({ estado: "reconectando" });
|
|
124
|
+
const espera = esperas[Math.min(intento, esperas.length - 1)];
|
|
125
|
+
intento += 1;
|
|
126
|
+
temporizador = setTimeout(() => {
|
|
127
|
+
if (!cerrado)
|
|
128
|
+
conectar();
|
|
129
|
+
}, espera);
|
|
130
|
+
};
|
|
131
|
+
// Un fallo de conexión llega también como `close`: aquí solo se evita que `error` sobre.
|
|
132
|
+
socket.onerror = () => { };
|
|
133
|
+
};
|
|
134
|
+
conectar();
|
|
135
|
+
return {
|
|
136
|
+
enviar(para, mensaje) {
|
|
137
|
+
const paso = envios.then(async () => {
|
|
138
|
+
const socket = ws;
|
|
139
|
+
if (cerrado || socket?.readyState !== WebSocket.OPEN)
|
|
140
|
+
return;
|
|
141
|
+
const carga = await canal.cifrar(mensaje);
|
|
142
|
+
if (cerrado || socket.readyState !== WebSocket.OPEN)
|
|
143
|
+
return;
|
|
144
|
+
socket.send(JSON.stringify(para === undefined ? { t: "dato", carga } : { t: "dato", para, carga }));
|
|
145
|
+
});
|
|
146
|
+
envios = paso.catch(() => { });
|
|
147
|
+
return paso;
|
|
148
|
+
},
|
|
149
|
+
cerrar() {
|
|
150
|
+
cerrado = true;
|
|
151
|
+
if (temporizador !== undefined)
|
|
152
|
+
clearTimeout(temporizador);
|
|
153
|
+
const socket = ws;
|
|
154
|
+
if (socket === undefined || socket.readyState === WebSocket.CLOSED)
|
|
155
|
+
return Promise.resolve();
|
|
156
|
+
// El relé contesta al «cerrar» avisando a los móviles y cortando: cuando el socket se
|
|
157
|
+
// cierra, ese aviso ya salió. Quien mate después lo que hay en medio (ngrok) no lo pierde.
|
|
158
|
+
const cerrandose = new Promise((resolver) => {
|
|
159
|
+
const tope = setTimeout(resolver, topeDeCierre);
|
|
160
|
+
tope.unref?.();
|
|
161
|
+
socket.addEventListener("close", () => {
|
|
162
|
+
clearTimeout(tope);
|
|
163
|
+
resolver();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
if (socket.readyState === WebSocket.OPEN)
|
|
167
|
+
socket.send(JSON.stringify({ t: "cerrar" }));
|
|
168
|
+
socket.close();
|
|
169
|
+
return cerrandose;
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=puenteWebSocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"puenteWebSocket.js","sourceRoot":"","sources":["../../../src/agent/remoto/puenteWebSocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El túnel REAL de la vía «ngrok» de la sesión remota: arranca el puente del paquete en un
|
|
3
|
+
* puerto libre de loopback, lanza `ngrok http` contra él con log JSON, y lee del log la
|
|
4
|
+
* dirección pública. Entra en el servidor por opción (un `TunelPort`), como el puente: ni
|
|
5
|
+
* `core/` ni `web/` importan este fichero.
|
|
6
|
+
*
|
|
7
|
+
* Reglas, todas por lo mismo —nada de la máquina cruza el cable—:
|
|
8
|
+
* - **Un fallo es un texto de `MOTIVOS_DEL_TUNEL`**, clasificado por el CÓDIGO `ERR_NGROK_xxx`
|
|
9
|
+
* de las líneas vistas (`motivoDeSalidaDeNgrok`). Lo que ngrok escribe se queda aquí: lleva la
|
|
10
|
+
* ruta de su configuración, el correo de la cuenta y, en un error de autenticación, el token.
|
|
11
|
+
* - **ngrok va `detached` y se mata el GRUPO** (`matarGrupoReal`), con `SIGTERM`, una espera, y
|
|
12
|
+
* `SIGKILL` si no salió; y también en el `exit` de este proceso (medido: con SIGINT y SIGTERM
|
|
13
|
+
* bajo `tsx` no queda ngrok; con un SIGKILL a este proceso, que no deja correr nada, sí queda
|
|
14
|
+
* huérfano). El cierre ordenado de la consola tiene que llamar a `cerrar()`. Su stdout y su
|
|
15
|
+
* stderr se consumen siempre: una tubería llena lo bloquearía.
|
|
16
|
+
* - **Cerrar: ngrok PRIMERO y luego el puente**, para que el móvil no vea un puente vivo detrás
|
|
17
|
+
* de un túnel ya muerto ni al revés un túnel que apunta a nada.
|
|
18
|
+
*/
|
|
19
|
+
import { StringDecoder } from "node:string_decoder";
|
|
20
|
+
import { entornoDeShell } from "../../core/shellDeAgente.js";
|
|
21
|
+
import { MOTIVOS_DEL_TUNEL, motivoDeDominioInaceptable, motivoDeSalidaDeNgrok, servidorDeTunel, urlPublicaDeLinea } from "../../core/tunel.js";
|
|
22
|
+
import { lanzarReal, matarGrupoReal } from "../dispositivos/procesosEnMaquina.js";
|
|
23
|
+
import { localizarNgrok } from "./ngrokEnMaquina.js";
|
|
24
|
+
import { cargarServidorRemoto } from "./puenteWebSocket.js";
|
|
25
|
+
/** Lo que se espera a que ngrok anuncie su dirección pública. */
|
|
26
|
+
export const TOPE_DE_TUNEL_MS = 30_000;
|
|
27
|
+
/** Lo que se espera a que ngrok salga tras `SIGTERM` antes del `SIGKILL`. */
|
|
28
|
+
export const ESPERA_AL_MATAR_MS = 3_000;
|
|
29
|
+
/**
|
|
30
|
+
* Las ÚLTIMAS líneas que se guardan para clasificar un fallo (el `ERR_NGROK_xxx` llega al final);
|
|
31
|
+
* después de la dirección, ninguna.
|
|
32
|
+
*/
|
|
33
|
+
const LINEAS_QUE_SE_GUARDAN = 200;
|
|
34
|
+
const alSalirReal = (f) => {
|
|
35
|
+
process.once("exit", f);
|
|
36
|
+
return () => process.removeListener("exit", f);
|
|
37
|
+
};
|
|
38
|
+
class FalloDelTunel extends Error {
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parte en líneas lo que llega por un flujo, guardando el trozo sin salto para el siguiente. Con
|
|
42
|
+
* un `StringDecoder`: un carácter de varios bytes partido entre dos trozos no se rompe.
|
|
43
|
+
*/
|
|
44
|
+
function porLineas(alLinea) {
|
|
45
|
+
let resto = "";
|
|
46
|
+
const decodificador = new StringDecoder("utf8");
|
|
47
|
+
return (dato) => {
|
|
48
|
+
resto += typeof dato === "string" ? dato : Buffer.isBuffer(dato) ? decodificador.write(dato) : String(dato);
|
|
49
|
+
const partes = resto.split(/\r?\n/);
|
|
50
|
+
resto = partes.pop() ?? "";
|
|
51
|
+
for (const p of partes)
|
|
52
|
+
if (p !== "")
|
|
53
|
+
alLinea(p);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function crearTunelNgrok(deps = {}) {
|
|
57
|
+
const entorno = deps.entorno ?? process.env;
|
|
58
|
+
const cargarServidor = deps.cargarServidor ?? (() => cargarServidorRemoto());
|
|
59
|
+
const localizar = deps.localizar ?? (() => localizarNgrok({ entorno }));
|
|
60
|
+
const lanzar = deps.lanzar ?? lanzarReal;
|
|
61
|
+
const matarGrupo = deps.matarGrupo ?? ((pid, senal) => matarGrupoReal(pid, senal));
|
|
62
|
+
const topeMs = deps.topeMs ?? TOPE_DE_TUNEL_MS;
|
|
63
|
+
const esperaAlMatarMs = deps.esperaAlMatarMs ?? ESPERA_AL_MATAR_MS;
|
|
64
|
+
const alSalirDelProceso = deps.alSalirDelProceso ?? alSalirReal;
|
|
65
|
+
return {
|
|
66
|
+
async abrir({ dominio }) {
|
|
67
|
+
if (dominio !== undefined && motivoDeDominioInaceptable(dominio) !== undefined) {
|
|
68
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.dominio);
|
|
69
|
+
}
|
|
70
|
+
const binario = localizar();
|
|
71
|
+
if (binario === undefined)
|
|
72
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.noInstalado);
|
|
73
|
+
const modulo = await cargarServidor();
|
|
74
|
+
if (modulo === undefined)
|
|
75
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.paqueteViejo);
|
|
76
|
+
let puente;
|
|
77
|
+
try {
|
|
78
|
+
puente = await modulo.arrancarServidor({ puerto: 0 });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.puente);
|
|
82
|
+
}
|
|
83
|
+
let puenteCerrado;
|
|
84
|
+
const cerrarPuente = () => (puenteCerrado ??= puente.cerrar().catch(() => { }));
|
|
85
|
+
// `host:puerto` tal como escucha el puente (127.0.0.1), y no «localhost», que puede
|
|
86
|
+
// resolver a ::1 y dejar a ngrok sin nadie al otro lado.
|
|
87
|
+
const destino = new URL(puente.urlHttp).host;
|
|
88
|
+
const args = ["http", destino, ...(dominio === undefined ? [] : ["--url", dominio]), "--log", "stdout", "--log-format", "json"];
|
|
89
|
+
let hijo;
|
|
90
|
+
try {
|
|
91
|
+
// Sin las claves de los proveedores, con la MISMA regla que la shell del agente: ngrok no
|
|
92
|
+
// las necesita, y `guardarCredencial` las escribe en `process.env`. `NGROK_*`, `PATH` y
|
|
93
|
+
// `HOME` siguen (el authtoken puede venir de `NGROK_AUTHTOKEN`).
|
|
94
|
+
hijo = lanzar(binario, args, { env: entornoDeShell({ entorno }) });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
await cerrarPuente();
|
|
98
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.noInstalado);
|
|
99
|
+
}
|
|
100
|
+
let vivo = true;
|
|
101
|
+
let alTerminar;
|
|
102
|
+
const terminado = new Promise((r) => (alTerminar = r));
|
|
103
|
+
const soltarSalida = alSalirDelProceso(() => {
|
|
104
|
+
if (vivo)
|
|
105
|
+
senal("SIGKILL");
|
|
106
|
+
});
|
|
107
|
+
const senal = (s) => {
|
|
108
|
+
const pid = hijo.pid;
|
|
109
|
+
try {
|
|
110
|
+
// Nunca con un pid que no sea de un hijo: `kill(-0)` mataría el grupo de quien llama.
|
|
111
|
+
if (typeof pid === "number" && pid > 1)
|
|
112
|
+
matarGrupo(pid, s);
|
|
113
|
+
else
|
|
114
|
+
hijo.kill(s);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// ESRCH: ya no estaba.
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const esperar = (ms) => Promise.race([terminado, new Promise((r) => setTimeout(r, ms).unref?.())]);
|
|
121
|
+
let matado;
|
|
122
|
+
const matar = () => (matado ??= (async () => {
|
|
123
|
+
if (!vivo)
|
|
124
|
+
return;
|
|
125
|
+
senal("SIGTERM");
|
|
126
|
+
await esperar(esperaAlMatarMs);
|
|
127
|
+
if (vivo) {
|
|
128
|
+
senal("SIGKILL");
|
|
129
|
+
await esperar(esperaAlMatarMs);
|
|
130
|
+
}
|
|
131
|
+
})());
|
|
132
|
+
const lineas = [];
|
|
133
|
+
let guardar = true;
|
|
134
|
+
let alUrl;
|
|
135
|
+
let alFallo;
|
|
136
|
+
const url = new Promise((resolver, rechazar) => {
|
|
137
|
+
alUrl = resolver;
|
|
138
|
+
alFallo = (m) => rechazar(new FalloDelTunel(m));
|
|
139
|
+
});
|
|
140
|
+
const alLinea = (linea) => {
|
|
141
|
+
if (!guardar)
|
|
142
|
+
return;
|
|
143
|
+
const publica = urlPublicaDeLinea(linea);
|
|
144
|
+
if (publica !== undefined) {
|
|
145
|
+
guardar = false;
|
|
146
|
+
lineas.length = 0;
|
|
147
|
+
alUrl(publica);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
lineas.push(linea);
|
|
151
|
+
if (lineas.length > LINEAS_QUE_SE_GUARDAN)
|
|
152
|
+
lineas.shift();
|
|
153
|
+
};
|
|
154
|
+
hijo.stdout.on("data", porLineas(alLinea));
|
|
155
|
+
hijo.stderr.on("data", porLineas(alLinea));
|
|
156
|
+
/** Resuelve con el motivo cuando el puente YA está cerrado: se avisa después, nunca antes. */
|
|
157
|
+
let caida;
|
|
158
|
+
const caidas = [];
|
|
159
|
+
/** Un oyente que lanza no tumba la consola ni deja sin aviso a los demás. */
|
|
160
|
+
const avisar = (f, motivo) => {
|
|
161
|
+
if (cerrando)
|
|
162
|
+
return;
|
|
163
|
+
try {
|
|
164
|
+
f(motivo);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// es de quien escucha
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
let cerrando = false;
|
|
171
|
+
hijo.on("error", ((e) => {
|
|
172
|
+
alFallo(e?.code === "ENOENT" || e?.code === "EACCES" ? MOTIVOS_DEL_TUNEL.noInstalado : MOTIVOS_DEL_TUNEL.otro);
|
|
173
|
+
// Un `spawn` que falla emite `error` y puede no emitir `close`.
|
|
174
|
+
if (hijo.pid === undefined) {
|
|
175
|
+
vivo = false;
|
|
176
|
+
soltarSalida();
|
|
177
|
+
alTerminar();
|
|
178
|
+
}
|
|
179
|
+
}));
|
|
180
|
+
hijo.on("close", (() => {
|
|
181
|
+
vivo = false;
|
|
182
|
+
soltarSalida();
|
|
183
|
+
alTerminar();
|
|
184
|
+
if (guardar) {
|
|
185
|
+
alFallo(MOTIVOS_DEL_TUNEL[motivoDeSalidaDeNgrok(lineas)]);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (cerrando || caida !== undefined)
|
|
189
|
+
return;
|
|
190
|
+
const motivo = MOTIVOS_DEL_TUNEL.seCerro;
|
|
191
|
+
caida = cerrarPuente().then(() => motivo);
|
|
192
|
+
void caida.then((m) => {
|
|
193
|
+
for (const f of caidas.splice(0))
|
|
194
|
+
avisar(f, m);
|
|
195
|
+
});
|
|
196
|
+
}));
|
|
197
|
+
const tope = setTimeout(() => alFallo(MOTIVOS_DEL_TUNEL.sinDireccion), topeMs);
|
|
198
|
+
let publica;
|
|
199
|
+
try {
|
|
200
|
+
publica = await url;
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
guardar = false;
|
|
204
|
+
lineas.length = 0;
|
|
205
|
+
cerrando = true;
|
|
206
|
+
await matar();
|
|
207
|
+
await cerrarPuente();
|
|
208
|
+
throw e instanceof FalloDelTunel ? e : new FalloDelTunel(MOTIVOS_DEL_TUNEL.otro);
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
clearTimeout(tope);
|
|
212
|
+
}
|
|
213
|
+
let servidor;
|
|
214
|
+
try {
|
|
215
|
+
servidor = servidorDeTunel(publica);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
cerrando = true;
|
|
219
|
+
await matar();
|
|
220
|
+
await cerrarPuente();
|
|
221
|
+
throw new FalloDelTunel(MOTIVOS_DEL_TUNEL.otro);
|
|
222
|
+
}
|
|
223
|
+
let cerrado;
|
|
224
|
+
return {
|
|
225
|
+
servidor,
|
|
226
|
+
cerrar: () => (cerrado ??= (async () => {
|
|
227
|
+
cerrando = true;
|
|
228
|
+
caidas.length = 0;
|
|
229
|
+
await matar();
|
|
230
|
+
await cerrarPuente();
|
|
231
|
+
})()),
|
|
232
|
+
alCaer: (f) => {
|
|
233
|
+
if (cerrando)
|
|
234
|
+
return;
|
|
235
|
+
if (caida !== undefined) {
|
|
236
|
+
void caida.then((m) => avisar(f, m));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
caidas.push(f);
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=tunelNgrok.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunelNgrok.js","sourceRoot":"","sources":["../../../src/agent/remoto/tunelNgrok.ts"],"names":[],"mappings":"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"}
|
|
@@ -336,6 +336,59 @@ export function recetaDeSimuladorIos(plataforma, estado) {
|
|
|
336
336
|
: `Runtime de iOS instalados: ${estado.runtimes.join(", ")}. Para arrancar un simulador, \`xcrun simctl boot <UDID>\`; arrancarlo desde esta ventana todavía no está cableado.`,
|
|
337
337
|
};
|
|
338
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* La receta para instalar ngrok, que es lo que necesita la sesión remota por túnel. NO es de un
|
|
341
|
+
* aparato: su `plataforma` es `herramienta` y no entra en `InformeDeDispositivos.recetas`; la
|
|
342
|
+
* lleva el mensaje `remoto`. Un solo paso. En macOS lo lanza xonecode (`ngrok:darwin:1` en
|
|
343
|
+
* `PASOS_EJECUTABLES`, solo con `brew`); en Windows y Linux es una guía sin botón, porque un
|
|
344
|
+
* instalador de esos sistemas puede pedir elevación o abrir una ventana.
|
|
345
|
+
*
|
|
346
|
+
* `hecho` sale de la medida (`ngrok version` contesta), nunca de un flag recordado.
|
|
347
|
+
*/
|
|
348
|
+
export function recetaDeNgrok(plataforma, medida) {
|
|
349
|
+
const hecho = medida.instalado;
|
|
350
|
+
let paso;
|
|
351
|
+
if (plataforma === "darwin") {
|
|
352
|
+
const hayBrew = medida.hayBrew === true;
|
|
353
|
+
paso = {
|
|
354
|
+
titulo: "Instalar ngrok",
|
|
355
|
+
comandos: ["brew install ngrok"],
|
|
356
|
+
nota: "Se instala con Homebrew y no pide contraseña de administrador.",
|
|
357
|
+
hecho,
|
|
358
|
+
ejecutable: hayBrew,
|
|
359
|
+
...(hayBrew ? {} : { porQueNo: "hace falta Homebrew (brew.sh)" }),
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
else if (plataforma === "win32") {
|
|
363
|
+
paso = {
|
|
364
|
+
titulo: "Instalar ngrok",
|
|
365
|
+
comandos: ["winget install ngrok.ngrok"],
|
|
366
|
+
nota: "Pégalo en una terminal; después, abre una terminal nueva para que ngrok esté en el PATH.",
|
|
367
|
+
hecho,
|
|
368
|
+
ejecutable: false,
|
|
369
|
+
porQueNo: "en Windows el instalador se lanza desde tu terminal",
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
paso = {
|
|
374
|
+
titulo: "Instalar ngrok",
|
|
375
|
+
comandos: ["# descarga ngrok de https://ngrok.com/download e instálalo con el gestor de tu distribución"],
|
|
376
|
+
nota: "Cada distribución lo instala distinto; la página de descarga trae el comando de la tuya.",
|
|
377
|
+
hecho,
|
|
378
|
+
ejecutable: false,
|
|
379
|
+
porQueNo: "depende de tu distribución y puede pedir administrador",
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
id: "ngrok",
|
|
384
|
+
plataforma: "herramienta",
|
|
385
|
+
titulo: "Instalar ngrok",
|
|
386
|
+
descripcion: "ngrok abre el túnel por el que el móvil llega a esta consola. Un paso, una vez por máquina.",
|
|
387
|
+
pasos: [paso],
|
|
388
|
+
completa: hecho,
|
|
389
|
+
despues: "Con ngrok instalado, falta tu authtoken (dashboard.ngrok.com): se pega desde la ventana de la sesión remota.",
|
|
390
|
+
};
|
|
391
|
+
}
|
|
339
392
|
/** El sistema, a partir de `process.platform`. */
|
|
340
393
|
export function sistemaDe(platform) {
|
|
341
394
|
if (platform === "darwin")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispositivos.js","sourceRoot":"","sources":["../../src/core/dispositivos.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dispositivos.js","sourceRoot":"","sources":["../../src/core/dispositivos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Una respuesta que se fue al CHINO**, medida con reglas de código y no con otro modelo.
|
|
3
|
+
*
|
|
4
|
+
* Medido en Maset: tras un turno largo, `deepseek-flash` escribió la respuesta FINAL entera en chino, con su propio
|
|
5
|
+
* razonamiento diciendo justo antes «write the final answer in Spanish». La regla del idioma (`IDIOMA_DE_LA_RESPUESTA`)
|
|
6
|
+
* le había llegado y la había entendido: es una deriva del modelo, no un prompt que falte, así que el arreglo es código.
|
|
7
|
+
* Solo se reconoce el chino (lo único visto); una deriva a otro idioma no la ve esta regla.
|
|
8
|
+
*/
|
|
9
|
+
/** Ideogramas CJK unificados: el chino escrito. El japonés los usa también, y entonces se mira la petición. */
|
|
10
|
+
const HAN = /[㐀-䶿一-鿿]/gu;
|
|
11
|
+
/** Letras de cualquier escritura: la base contra la que se mide la proporción. */
|
|
12
|
+
const LETRA = /\p{L}/gu;
|
|
13
|
+
/** Por debajo de esto no se juzga: un nombre de producto en chino no es una respuesta en chino. */
|
|
14
|
+
export const MINIMO_DE_IDEOGRAMAS = 20;
|
|
15
|
+
/** Qué parte de las letras de la respuesta tienen que ser ideogramas para darla por escrita en chino. */
|
|
16
|
+
export const PROPORCION_EN_CHINO = 0.3;
|
|
17
|
+
function proporcionHan(texto) {
|
|
18
|
+
const han = texto.match(HAN)?.length ?? 0;
|
|
19
|
+
const letras = texto.match(LETRA)?.length ?? 0;
|
|
20
|
+
return { han, proporcion: letras === 0 ? 0 : han / letras };
|
|
21
|
+
}
|
|
22
|
+
/** ¿La respuesta está escrita en chino y quien pide NO escribe en chino? Una petición con ideogramas no se corrige. */
|
|
23
|
+
export function respuestaEnChinoSinPedirlo(respuesta, peticion) {
|
|
24
|
+
const r = proporcionHan(respuesta);
|
|
25
|
+
if (r.han < MINIMO_DE_IDEOGRAMAS || r.proporcion < PROPORCION_EN_CHINO)
|
|
26
|
+
return false;
|
|
27
|
+
return (peticion.match(HAN)?.length ?? 0) === 0;
|
|
28
|
+
}
|
|
29
|
+
/** Hasta dónde se cita el mensaje del usuario en la orden de reescribir: lo justo para que se vea su idioma. */
|
|
30
|
+
export const TOPE_DE_CITA_DEL_USUARIO = 200;
|
|
31
|
+
/** El mensaje que le devuelve al modelo su respuesta para que la reescriba, sin herramientas y sin cambiar el contenido. */
|
|
32
|
+
export function textoDeReescritura(peticion) {
|
|
33
|
+
const cita = peticion.trim().slice(0, TOPE_DE_CITA_DEL_USUARIO);
|
|
34
|
+
return ("[Aviso del harness] Tu última respuesta salió escrita en chino, y el usuario no escribe en chino. Reescríbela ENTERA " +
|
|
35
|
+
"en el idioma en que te escribe el usuario, sin cambiar su contenido, sin añadir nada y sin llamar a ninguna herramienta. " +
|
|
36
|
+
`Su mensaje empezaba así: «${cita}»`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=idiomaDeLaRespuesta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idiomaDeLaRespuesta.js","sourceRoot":"","sources":["../../src/core/idiomaDeLaRespuesta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+GAA+G;AAC/G,MAAM,GAAG,GAAG,YAAY,CAAC;AACzB,kFAAkF;AAClF,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,mGAAmG;AACnG,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,yGAAyG;AACzG,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAC/C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC;AAC9D,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,QAAgB;IAC5E,MAAM,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,GAAG,GAAG,oBAAoB,IAAI,CAAC,CAAC,UAAU,GAAG,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACrF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,4HAA4H;AAC5H,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAChE,OAAO,CACL,uHAAuH;QACvH,2HAA2H;QAC3H,6BAA6B,IAAI,GAAG,CACrC,CAAC;AACJ,CAAC"}
|