00:00:00Este es Valor, una herramienta de código abierto para gestionar variables de entorno que logra que
00:00:04nunca más tengas que guardar secretos en texto plano en el disco, y funciona resolviendo variables
00:00:10localmente o mediante un gestor de contraseñas como 1Password, Bitwarden, AWS y muchos más,
00:00:16usando un esquema de tipos seguros para inyectar tus secretos en la aplicación en tiempo de ejecución,
00:00:21haciendo que tu archivo .env sea seguro para la IA e incluso para subirlo públicamente a GitHub.
00:00:27Pero, ¿cómo funciona esto realmente y a qué se debe esta sintaxis extraña? Suscríbete y veámoslo.
00:00:31¿Cuántas veces has empezado un nuevo rol de dev, accedes al código, intentas ejecutarlo localmente
00:00:39y no funciona, solo para descubrir que te falta un archivo .env que debes pedirle a otro desarrollador
00:00:45o sacar de algún almacenamiento cifrado? Y tienes que repetir este proceso una y otra vez
00:00:50cada vez que se actualiza ese archivo .env. Este es el problema que Valor viene a resolver, además
00:00:56de evitar que agentes de IA mediante inyección de prompts accedan a secretos que no deberían. Veamos
00:01:02cómo funciona. Aquí tengo un pequeño proyecto en el que he estado trabajando que genera artículos
00:01:06desde videos de Twitter usando Whisper de OpenAI para transcribir y Claude para escribir el artículo.
00:01:12Pero empezaremos con algo simple usando Valor para cambiar el número de puerto. Con Valor
00:01:17ya instalado, deberíamos tener un archivo de esquema .env que actualmente está vacío. Este será
00:01:23la fuente de verdad para todas nuestras variables de entorno y podrá subirse a un repo público de GitHub.
00:01:28Empezaremos añadiendo una variable simple "appenv" y le asignaremos el valor "testing".
00:01:33Ahora puedo crear una nueva pestaña para ejecutar "varlock load", que validará nuestro esquema.
00:01:39Como vemos aquí, ha leído nuestra variable de entorno y la ha marcado como "sensitive" (sensible).
00:01:43Esto es porque todas las variables en Valor son sensibles por defecto, pero podemos cambiarlo.
00:01:48En este archivo añadiré nuestro primer decorador, que será un decorador de raíz (root)
00:01:52porque afectará a todas las variables del archivo, y pondremos "default sensitive" en falso.
00:01:56Noten que la sintaxis lleva un hashtag delante y las variables raíz suelen separarse con un divisor.
00:02:02Todo este archivo usa un lenguaje específico de dominio llamado mspec, que es una especificación
00:02:08abierta del equipo de varlock. Si vuelvo a validar el esquema, ahora sí podemos ver el valor
00:02:14de la variable de entorno porque ya no está configurada como sensible.
00:02:19Pero podemos hacer otras cosas geniales en el esquema, como asignar un tipo a la variable.
00:02:24Le daré el tipo "string", así que todo debería seguir funcionando, pero si lo cambio a
00:02:29"number", vemos que obtenemos un error porque está esperando una cadena de texto.
00:02:33También puedo usar el decorador "required" y quitar este texto; si revisamos el archivo,
00:02:39da error porque espera un valor. Estos se llaman decoradores de elementos y hay una lista
00:02:44completa en la documentación de varlock, junto con todos los tipos disponibles.
00:02:50Añadamos otra variable, esta vez llamada "port" con el valor 3002. Le asignaré el
00:02:55tipo "port" y arriba volveré a ponerlo como sensible y cambiaré esto de nuevo a string.
00:03:01Ahora ha detectado ambas variables y ha ocultado esta por ser sensible.
00:03:05Pero, ¿cómo llevamos estos valores a la aplicación? Solo tenemos que ejecutar
00:03:10"varlock run" seguido de los comandos necesarios. Si reviso el archivo package.json,
00:03:15vemos que necesitamos ejecutar el comando "vite" para el frontend. Así que, si ejecuto
00:03:21"varlock run" seguido de "vite", debería cargar la config, resolverla e inyectarla
00:03:27en nuestras variables de entorno, y eso es justo lo que ha hecho: el puerto ahora es 3002,
00:03:33lo cual funciona porque el código primero busca la variable de puerto inyectada por varlock.
00:03:38Esto no tiene por qué ser solo un archivo de JavaScript; varlock funciona con cualquier proyecto,
00:03:43ya sea Python, Go o Rust; todo funcionará igual. Y si no quieres instalarlo
00:03:48con npm, también hay una CLI de varlock que funciona exactamente igual.
00:03:54Esto está muy bien para variables locales, pero ahora veamos cómo traerlas desde 1Password
00:03:59en lugar de usar mis variables locales de la terminal para las claves de OpenAI o Anthropic.
00:04:05Yo no uso 1Password normalmente, me he registrado para una prueba para este video, pero como
00:04:11ven, he creado una nueva bóveda (vault), lo cual es muy importante y luego explicaré por qué.
00:04:16Dentro hay dos elementos: la clave de OpenAI y la de Anthropic, que no me importa
00:04:24mostrar porque son inventadas; si revelo esta, verán que no es una clave real.
00:04:30Para meter esos valores en nuestro esquema de varlock, primero instalamos el plugin de 1Password.
00:04:36Tengan en cuenta que los plugins en varlock pueden añadir sus propios decoradores raíz y de elemento,
00:04:42así que verán algunos nuevos que no están en la documentación, como este de "init 1password".
00:04:49Tras instalar varlock-1password, cargamos el decorador raíz del plugin que acabamos de
00:04:55instalar y ejecutamos el decorador de inicialización. Solo necesito el token
00:05:01que puedo cargar desde aquí. Para obtener este token, debes conectarlo a una nueva bóveda,
00:05:06no a la personal, y lo encontrarás en la cuenta de servicio para desarrolladores.
00:05:11Como voy a borrar mi token y mi cuenta después de este video, no me importa mostrarlo.
00:05:15Le daré el tipo "onepassword service token", que es sensible y proviene del plugin.
00:05:21Quizás noten que este archivo no tiene resaltado de sintaxis, y es porque el equipo de varlock
00:05:26ha creado un plugin para VS Code que sí lo soporta, pero de momento no hay uno para Neovim,
00:05:32así que puede que cree uno en el futuro o que le pida a Claude que lo haga.
00:05:37Ahora crearé una nueva variable de entorno llamada "openai api key id" y, para traerla
00:05:43de 1Password, tengo que ejecutar la función "onepassword" seguida de este protocolo,
00:05:49luego el nombre de mi bóveda ("test"), el nombre del elemento ("openai") y, finalmente,
00:05:55el nombre del campo que, si revisamos aquí, podemos ver que es "credential".
00:06:02También la marcaré como sensible. Si ejecutamos "varlock load", tarda unos segundos
00:06:08en obtener mi clave de OpenAI de 1Password, y podemos comprobar que funciona incluso
00:06:14si cambio el valor aquí por algo como "1234". Al ejecutar de nuevo, obtiene los valores correctos.
00:06:20Ya está; nuestro esquema .env debería estar listo para subir. Pero sé lo que piensan,
00:06:25¿qué pasa con el token de 1Password? ¿Es seguro? Bueno, si estás desarrollando
00:06:31en local y tienes 1Password, puede que tengas la app de escritorio o uses la CLI.
00:06:38En ese caso, puedes usar esta configuración para desbloquear 1Password con tu huella
00:06:43en lugar de usar un token. Varock también soporta plugins para AWS, GCP e incluso Bitwarden,
00:06:52además de integraciones con Vite, Next.js y Cloudflare Workers. Hay muchas
00:06:57otras funciones que no me dio tiempo a ver, como generar tipos de TypeScript desde
00:07:03tu esquema, importar variables de otros archivos e incluso censurar datos sensibles
00:07:08en los logs y respuestas HTTP, lo cual es un gran detalle. Incluso hay un servidor MCP
00:07:15para que tu agente de programación configure el esquema .env automáticamente,
00:07:21y una GitHub Action para cargar y validar tus variables en el proceso de CI/CD.
00:07:27Pero, por muy genial que sea varlock, tiene algunos inconvenientes. Por ejemplo,
00:07:32no puedes usarlo sin conexión; si programas en un aeropuerto, tendrás que usar tus variables fijas.
00:07:37Y hablando de internet, hay un pequeño retraso cuando trae las contraseñas
00:07:41de un proveedor externo, así que tus scripts tardarán un poquito más en arrancar.
00:07:46También faltan proveedores como Dashlane y otros, y experimenté un bug extraño:
00:07:53si usaba en mi esquema el mismo nombre que una variable de mi terminal local,
00:07:59usaba la variable local en lugar de la de 1Password. Pero varlock está en desarrollo activo
00:08:05y estoy seguro de que muchas de estas cosas se solucionarán en el futuro.
00:08:10Aun así, el producto tal como está ahora me resulta increíblemente útil y creo que
00:08:16lo voy a usar para todos mis proyectos personales de ahora en adelante, y quizás
00:08:21sustituya mis archivos de la terminal por esquemas de varlock si hay forma de hacerlo.
00:08:26Espero que sí, porque no quiero que ningún agente extraiga mi información.