TL;DR Estoy construyendo SandpackVM, una máquina virtual JavaScript ligera que permite que Workers aislados invoquen funciones del host de forma segura usando funciones proxy, TypeScript y mensajería asíncrona. En este artículo explico cómo convertí una limitación técnica en un patrón de diseño práctico.

El problema que lo inició todo es común: cuando ejecutas código no confiable en un playground, un sistema de plugins o un REPL no puedes simplemente pasar funciones del proceso padre al sandbox. Workers y worker_threads serializan datos pero no pasan closures ni funciones. La comunicación se reduce a mensajes y serialización, lo que complica mucho la experiencia de desarrollo.

La idea central de SandpackVM fue sencilla: si no podemos enviar funciones, vamos a simularlas. Creamos funciones proxy dentro del Worker que convierten llamadas locales en mensajes postMessage hacia el host. El host actúa como un enrutador RPC que ejecuta la función real, captura resultados o errores y responde al Worker para resolver o rechazar Promises.

Por qué TypeScript. Construir una VM exige control de tipos, contratos de API y experiencia de IDE. TypeScript aporta seguridad en tiempo de compilación y documentación implícita de las interfaces públicas, además de generar JavaScript limpio que corre en cualquier entorno.

Arquitectura de alto nivel: el código del usuario en el Worker llama await log(hello). Esa llamada invoca una función proxy que crea un ID único, registra resolvers en pendingCalls y envía un mensaje al padre. El proceso padre recibe el mensaje, ejecuta la función real registrada en apis, y responde con un mensaje que contiene resultado o error. El Worker recibe la respuesta y resuelve la Promise correspondiente. Así se mantiene aislamiento con un puente controlado.

Implementación por pasos. Paso 1: generar dinámicamente el código proxy para cada API disponible. Paso 2: en el proceso padre escuchar los mensajes tipo apiCall, localizar la función en el mapa de apis y ejecutar con manejo de errores, luego enviar apiResult con resultado o error. Paso 3: en el Worker escuchar apiResult y resolver o rechazar la llamada pendiente. Con este protocolo se crea un canal RPC asíncrono robusto sobre postMessage.

Principios que surgieron. 1 Asincronía no es negociable: la frontera exige promesas, por eso todas las APIs expuestas son awaitables. 2 El patrón proxy es clave: facilita control de acceso, observabilidad, validación de argumentos y trazabilidad mediante IDs únicos. 3 Comunicación basada en Promises es clara y elegante: cada llamada es simplemente una Promise con un canal lateral para la respuesta.

Qué puede mejorar: APIs anidadas como fs.readFile, cuotas de recursos para CPU y memoria, capa de observabilidad para timeline y métricas, protección contra bucles infinitos mediante heartbeats y límites y endurecimiento de seguridad para bloquear fetch, importScripts o acceso a filesystem no autorizado.

Aplicaciones reales. Este enfoque es crucial en documentación interactiva, sistemas de plugins, agentes de IA que ejecutan código generado por usuarios, entornos educativos con REPLs aislados y sandboxes de desarrollo en la nube. SandpackVM facilita ejecutar snippets arbitrarios sin perder flexibilidad ni seguridad.

Sobre Q2BSTUDIO. En Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida, con experiencia en inteligencia artificial, ciberseguridad y servicios cloud aws y azure. Diseñamos soluciones seguras y escalables que integran servicios de inteligencia de negocio y Power BI para ofrecer analítica avanzada. Si buscas crear una solución a medida para tu negocio descubre nuestro servicio de desarrollo de aplicaciones a medida y conoce cómo aplicamos técnicas de sandboxing y ejecución segura en entornos productivos. También ofrecemos consultoría en inteligencia artificial para empresas, agentes IA y automatización para mejorar procesos y reducir riesgos.

Palabras clave integradas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

Conclusión. SandpackVM demuestra que el aislamiento y la conectividad no son incompatibles. Con proxies, mensajería asíncrona y tipos claros podemos ofrecer una experiencia de sandbox que es segura, observable y extensible. Si quieres hablar sobre cómo aplicar estas ideas en tu proyecto o explorar servicios de ciberseguridad o integración cloud, en Q2BSTUDIO podemos ayudarte a diseñar la arquitectura adecuada.