xonecode 0.37.0 → 0.38.2
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/apps/web/dist/assets/{EditorDeFichero-DoFEF88O.js → EditorDeFichero-x5qYcQEQ.js} +1 -1
- package/apps/web/dist/assets/index-BE1a4adS.css +1 -0
- package/apps/web/dist/assets/index-DZea9YBh.js +506 -0
- package/apps/web/dist/assets/{php-D_qKPndv.js → php-BNj56OOc.js} +1 -1
- package/apps/web/dist/assets/{ruby-Dbo7pTDa.js → ruby-BtHXxdlK.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/sesiones/gitSync.js +10 -4
- package/dist/agent/sesiones/gitSync.js.map +1 -1
- package/dist/agent/sesiones/parcheEnTexto.js +31 -0
- package/dist/agent/sesiones/parcheEnTexto.js.map +1 -0
- package/dist/agent/sesiones/sesionGit.js +7 -2
- package/dist/agent/sesiones/sesionGit.js.map +1 -1
- package/dist/core/actos.js +3 -2
- package/dist/core/actos.js.map +1 -1
- package/dist/core/codificacion.js +24 -0
- package/dist/core/codificacion.js.map +1 -1
- package/dist/core/notify.js +19 -2
- package/dist/core/notify.js.map +1 -1
- package/dist/core/remoto.js +38 -1
- package/dist/core/remoto.js.map +1 -1
- package/dist/core/turno.js +4 -0
- package/dist/core/turno.js.map +1 -1
- package/dist/web/servidor/arranque.js +42 -1
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/puenteRemoto.js +1 -1
- package/dist/web/servidor/puenteRemoto.js.map +1 -1
- package/node_modules/@xone/xonecode-remoto/dist/contenido.d.ts +21 -0
- package/node_modules/@xone/xonecode-remoto/dist/contenido.js +15 -0
- package/node_modules/@xone/xonecode-remoto/web/assets/{index-qBo9eRDN.js → index-CGpR8WL1.js} +33 -33
- package/node_modules/@xone/xonecode-remoto/web/assets/{index-Bfa2gK3J.css → index-DDmoyp5d.css} +1 -1
- package/node_modules/@xone/xonecode-remoto/web/index.html +2 -2
- package/package.json +1 -1
- package/apps/web/dist/assets/index-DRNhZyYF.css +0 -1
- package/apps/web/dist/assets/index-WcouJw-n.js +0 -506
|
@@ -84,7 +84,8 @@ import { nombreDePersona } from "../../agent/config/persona.js";
|
|
|
84
84
|
import { cambiosDeSesion, fotoDeApertura, olvidarSesion, parcheDeSesion } from "../../agent/sesiones/sesionGit.js";
|
|
85
85
|
import { commitDeTurno, cambiosPendientes, parcheDeSubida, pendientesDeSubida, sinSeguir, trabajoSinCommitear, } from "../../agent/sesiones/gitSync.js";
|
|
86
86
|
import { marcarTareaDeSesion, sembrarConsumosPendientes } from "./sesiones.js";
|
|
87
|
-
import { RUTA_ARTEFACTOS, esRutaDeArtefacto } from "../../core/artefactos.js";
|
|
87
|
+
import { RUTA_ARTEFACTOS, esRutaDeArtefacto, rutaRelativaDeArtefacto } from "../../core/artefactos.js";
|
|
88
|
+
import { MIMES_DE_ARTEFACTO_AL_MOVIL, TOPE_DE_ARTEFACTO_AL_MOVIL, trozosDeArtefacto } from "../../core/remoto.js";
|
|
88
89
|
import { arbolDeProyecto, escribirFicheroDeProyecto, iconoDelProyecto, leerFicheroDeProyecto, mimeDeImagen, motivoDeRutaInaceptable, motivoParaNoEnsenar, } from "../../agent/grafo/arbolDeProyecto.js";
|
|
89
90
|
import { baseDeFichero } from "../../agent/sesiones/baseDeFichero.js";
|
|
90
91
|
import { modeloEnDisco } from "../../agent/navegacion/indiceEnDisco.js";
|
|
@@ -5615,6 +5616,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
5615
5616
|
else
|
|
5616
5617
|
darFeedbackATarea(m.tarea, m.texto);
|
|
5617
5618
|
}
|
|
5619
|
+
else if (m.clase === "artefacto")
|
|
5620
|
+
void enviarArtefactoAlMovil(m.ruta);
|
|
5618
5621
|
else
|
|
5619
5622
|
recibirEnLaConsola(m);
|
|
5620
5623
|
},
|
|
@@ -5637,6 +5640,44 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
|
|
|
5637
5640
|
cliente(mensajeDeRemoto(e));
|
|
5638
5641
|
},
|
|
5639
5642
|
});
|
|
5643
|
+
/**
|
|
5644
|
+
* Un artefacto del hilo, al MÓVIL que lo pidió (petición suya: ver las capturas desde la web móvil).
|
|
5645
|
+
*
|
|
5646
|
+
* Las MISMAS barreras que `GET /artefacto`: la ruta por `esRutaDeArtefacto` y el lector, que la
|
|
5647
|
+
* comprueba contra el disco (texto y `realpath`), sobre la conversación del FOCO —que es la que el
|
|
5648
|
+
* móvil sigue—. Y dos más, propias del móvil: solo IMÁGENES (un HTML se sirve en el escritorio dentro
|
|
5649
|
+
* de dos capas de sandbox, y en la web móvil no hay con qué aislarlo) y con tope de tamaño. Va en
|
|
5650
|
+
* trozos porque una captura no cabe en un solo mensaje del puente (`trozosDeArtefacto`), y a todos los
|
|
5651
|
+
* móviles: siguen la misma conversación, y un id de quién lo pidió no viaja hasta aquí.
|
|
5652
|
+
*
|
|
5653
|
+
* Un fallo se DEVUELVE al móvil como `artefacto.error` con un texto FIJO nuestro, nunca el de Node.
|
|
5654
|
+
*/
|
|
5655
|
+
const enviarArtefactoAlMovil = async (ruta) => {
|
|
5656
|
+
const fallo = (motivo) => sesionRemota?.difundir({ clase: "artefacto.error", ruta, motivo });
|
|
5657
|
+
if (!esRutaDeArtefacto(ruta))
|
|
5658
|
+
return fallo("esa ruta no es de un artefacto");
|
|
5659
|
+
const abierto = vestibulo.proyectoAbierto();
|
|
5660
|
+
if (abierto === undefined || opciones.leerArtefactoCrudo === undefined)
|
|
5661
|
+
return fallo("no hay ninguna conversación abierta");
|
|
5662
|
+
let leido;
|
|
5663
|
+
try {
|
|
5664
|
+
leido = await opciones.leerArtefactoCrudo(abierto.raiz, abierto.idDeHilo, rutaRelativaDeArtefacto(ruta));
|
|
5665
|
+
}
|
|
5666
|
+
catch (error) {
|
|
5667
|
+
informar(`sesión remota: no se pudo leer un artefacto para el móvil (${codigoDe(error)})`);
|
|
5668
|
+
return fallo("no se pudo leer");
|
|
5669
|
+
}
|
|
5670
|
+
if (!leido.ok) {
|
|
5671
|
+
const textos = { rechazado: "esa ruta no es de un artefacto", "no-existe": "ya no está", "demasiado-grande": "es demasiado grande" };
|
|
5672
|
+
return fallo(textos[leido.motivo]);
|
|
5673
|
+
}
|
|
5674
|
+
if (leido.mime === undefined || !MIMES_DE_ARTEFACTO_AL_MOVIL.has(leido.mime))
|
|
5675
|
+
return fallo("en el móvil solo se ven imágenes");
|
|
5676
|
+
if (leido.datos.length > TOPE_DE_ARTEFACTO_AL_MOVIL)
|
|
5677
|
+
return fallo("es demasiado grande para el móvil");
|
|
5678
|
+
for (const trozo of trozosDeArtefacto(ruta, leido.mime, leido.datos))
|
|
5679
|
+
sesionRemota?.difundir(trozo);
|
|
5680
|
+
};
|
|
5640
5681
|
/**
|
|
5641
5682
|
* Apagar solo si hay algo ENCENDIDO. `apagar()` anuncia `{estado:"apagada"}` a todas las
|
|
5642
5683
|
* pestañas, y `arrancarConsolaWeb` monta la opción SIEMPRE: con el interruptor apagado, un
|