00:00:00Voici Valor, un outil open source de gestion de variables d'environnement qui fait en sorte que vous
00:00:04n'ayez plus jamais à stocker de secrets en texte brut sur votre disque. Il résout les variables
00:00:10localement ou via un gestionnaire de mots de passe comme 1Password, Bitwarden, AWS et bien d'autres,
00:00:16en utilisant un schéma de type sécurisé, puis injecte vos secrets dans votre application au moment de l'exécution.
00:00:21Votre fichier .env devient ainsi sĂ»r pour l'IA et peut mĂȘme ĂȘtre publiĂ© sur GitHub. Mais comment ça marche
00:00:27et c'est quoi cette syntaxe bizarre ? Abonnez-vous et découvrons cela ensemble.
00:00:31Combien de fois avez-vous commencé un nouveau job de dév, accédé au code, tenté de le lancer en local
00:00:39et constaté que ça ne marche pas, pour finalement réaliser qu'il vous manque un fichier .env à récupérer
00:00:45auprÚs d'un collÚgue ou d'un stockage chiffré ? Et vous devez répéter ce processus
00:00:50Ă chaque mise Ă jour du fichier .env. C'est ce problĂšme que Valor veut rĂ©soudre, tout en empĂȘchant
00:00:56les agents IA victimes d'injections de prompts de voler des secrets. Voyons comment ça fonctionne.
00:01:02Voici un petit projet sur lequel je travaille : il génÚre des articles à partir de vidéos Twitter
00:01:06en utilisant Whisper d'OpenAI pour la transcription et Claude pour la rédaction de l'article.
00:01:12Mais commençons par quelque chose de simple : utiliser Valor pour changer le numéro de port.
00:01:17Valor étant déjà installé, nous devrions avoir un fichier .env.schema actuellement vide. Ce sera la source
00:01:23de vĂ©ritĂ© pour toutes nos variables et il pourra ĂȘtre commitĂ© sur un dĂ©pĂŽt public GitHub.
00:01:28Ajoutons d'abord une variable d'environnement simple "appenv" et donnons-lui la valeur
00:01:33"testing". Maintenant, j'ouvre un onglet pour lancer "varlock load" afin de valider notre schéma.
00:01:39On voit ici qu'il a lu notre variable d'environnement et l'a marquée comme "sensitive" (sensible).
00:01:43C'est parce que par défaut, toutes les variables dans Varlock sont considérées comme sensibles.
00:01:48Dans ce fichier, je vais ajouter notre premier décorateur. Ce sera un décorateur "root"
00:01:52(racine) car il affectera toutes les variables du fichier, et nous mettrons "default sensitive" Ă false.
00:01:56Notez que la syntaxe utilise un hashtag devant, et les variables racines sont souvent séparées par un trait.
00:02:02Tout ce fichier utilise un langage spécifique appelé mspec, une spécification ouverte de l'équipe Varlock.
00:02:08Si je valide à nouveau mon schéma, on peut maintenant voir la valeur de la variable
00:02:14car elle n'est plus marquée comme sensible. On peut faire d'autres choses sympas dans le fichier
00:02:19comme définir le type de notre variable. Je vais lui donner le type "string" (chaßne),
00:02:24tout devrait fonctionner, mais si je le change en "number", on voit qu'une erreur apparaĂźt
00:02:29car il attendait une chaßne. Je peux aussi ajouter le décorateur "required" (requis)
00:02:33puis supprimer la valeur. Si on vérifie le fichier, on obtient une erreur car une valeur est attendue.
00:02:39Ce sont des décorateurs d'éléments. Vous en trouverez la liste complÚte dans la doc de Varlock,
00:02:44ainsi que tous les types disponibles. Ajoutons maintenant une autre variable,
00:02:50nommée "port" avec la valeur 3002. Je lui donne le type "port". Je vais aussi
00:02:55remettre celle du haut en sensible et en type string. Désormais, il a détecté
00:03:01nos deux variables et a masqué celle-ci car elle est sensible. Mais comment
00:03:05injecter ces valeurs dans notre application ? Il suffit de lancer
00:03:10"varlock run" suivi de la commande pour démarrer l'appli. Si je regarde le fichier package.json,
00:03:15on voit qu'il faut lancer la commande "vite". Donc si je lance "varlock run vite",
00:03:21il devrait charger la config, la résoudre, puis l'injecter dans nos variables d'environnement.
00:03:27C'est exactement ce qu'il a fait : le port est maintenant 3002, ce qui fonctionne dans le code
00:03:33car il vérifie d'abord la variable d'environnement injectée par Varlock.
00:03:38Cela ne se limite pas au JavaScript car Varlock fonctionne pour n'importe quel projet :
00:03:43Python, Go, Rust... Tout fonctionnera comme prévu. Et si vous ne voulez pas
00:03:48l'installer via npm, il existe aussi une CLI Varlock qui marche de la mĂȘme maniĂšre.
00:03:54C'est parfait pour les variables locales, mais voyons comment les récupérer depuis 1Password
00:03:59au lieu d'utiliser les variables de mon shell pour les clés API d'OpenAI et d'Anthropic.
00:04:05Je n'utilise pas 1Password personnellement, j'ai créé un compte d'essai pour cette vidéo,
00:04:11mais comme vous le voyez, j'ai créé un nouveau coffre (c'est trÚs important, j'expliquerai pourquoi plus tard).
00:04:16Dans ce coffre, il y a deux éléments : une clé OpenAI et une clé Anthropic.
00:04:24Je peux les montrer car elles sont fictives. Si je les révÚle, vous verrez que ce sont de fausses clés.
00:04:30Pour intégrer ces valeurs dans notre schéma Varlock, il faut d'abord installer le plugin 1Password.
00:04:36Notez que les plugins Varlock peuvent ajouter leurs propres décorateurs. Vous en verrez
00:04:42peut-ĂȘtre de nouveaux ici, comme ce dĂ©corateur "init-1password". AprĂšs
00:04:49avoir installé varlock-1password, on charge le décorateur racine du plugin
00:04:55et on lance l'initialisation. Tout ce dont j'ai besoin maintenant, c'est du jeton (token)
00:05:01que je récupÚre ici. Pour obtenir ce jeton, vous devez le connecter à un nouveau coffre,
00:05:06pas le vÎtre, et aller dans les paramÚtres de compte de service pour développeur.
00:05:11Comme je vais supprimer mon jeton et mon compte 1Password aprÚs cette vidéo,
00:05:15ça ne me dérange pas de le montrer. Je lui donne le type "1password-service-token",
00:05:21qui est un type sensible provenant de ce plugin. Vous remarquerez peut-ĂȘtre que ce fichier
00:05:26n'a pas de coloration syntaxique. L'équipe Varlock a créé une extension VS Code
00:05:32qui le supporte, mais il n'y en a pas encore pour Neovim. J'en crĂ©erai peut-ĂȘtre une
00:05:37plus tard, ou je demanderai à Claude de le faire. Créons une variable "openai_api_key_id"
00:05:43et pour la récupérer de 1Password, j'utilise la fonction "1password"
00:05:49suivie du protocole, du nom de mon coffre ("test"), du nom de
00:05:55l'élément ("openai") et enfin du nom du champ qui est "credential" (identifiant).
00:06:02Je la mets aussi en sensible. Maintenant, si on lance "varlock load", cela prend quelques secondes
00:06:08pour récupérer ma clé OpenAI depuis 1Password. On peut vérifier que ça marche en changeant
00:06:14la valeur, par exemple "1234", et en relançant "varlock load" : il récupÚre bien les bonnes valeurs.
00:06:20Et voilĂ , notre fichier de schĂ©ma est prĂȘt Ă ĂȘtre commitĂ©. Mais je vous vois venir :
00:06:25est-ce que ce jeton 1Password est sĂ»r ? Pour ĂȘtre honnĂȘte, si vous dĂ©veloppez
00:06:31localement et que vous avez 1Password, vous avez sûrement l'appli de bureau ou la CLI.
00:06:38Dans ce cas, vous pouvez configurer le déverrouillage par empreinte digitale plutÎt que par jeton.
00:06:43Varlock supporte aussi d'autres plugins pour AWS, GCP et mĂȘme Bitwarden,
00:06:52ainsi que de nombreuses intégrations comme Vite, Next.js ou Cloudflare Workers. Il y a
00:06:57plein d'autres fonctionnalités que je n'ai pas eu le temps d'aborder, comme la génération de types TypeScript,
00:07:03l'importation de variables depuis d'autres fichiers ou mĂȘme le masquage des donnĂ©es sensibles
00:07:08dans les logs et les rĂ©ponses HTTP, ce qui est trĂšs pratique. Il y a mĂȘme un serveur MCP
00:07:15pour aider votre agent de codage à configurer automatiquement votre schéma, et une GitHub Action
00:07:21pour charger et valider vos variables dans votre processus CI/CD. Mais malgré tout,
00:07:27il y a quelques bémols. Par exemple, on ne peut pas l'utiliser hors ligne. Si vous codez à l'aéroport,
00:07:32vous devrez utiliser des variables codées en dur. Mais bon, qui code vraiment sans internet ?
00:07:37En parlant d'internet, il y a un léger délai lors de la récupération des mots de passe
00:07:41auprÚs d'un fournisseur tiers, donc vos scripts mettront un peu plus de temps à démarrer.
00:07:46Il manque aussi certains fournisseurs comme Dashlane. J'ai aussi rencontré un bug bizarre
00:07:53oĂč si j'utilisais le mĂȘme nom dans mon schĂ©ma que dans mon shell local, il utilisait la variable
00:07:59locale au lieu de celle de 1Password. Mais Varlock est en plein développement
00:08:05et je suis sûr que beaucoup de ces points seront corrigés. Quoi qu'il en soit,
00:08:10le produit actuel est déjà incroyablement utile pour moi et je pense que je vais l'utiliser
00:08:16pour tous mes projets personnels Ă l'avenir, et peut-ĂȘtre mĂȘme remplacer mes fichiers shell locaux
00:08:21par des schémas Varlock si c'est possible. J'espÚre que ça l'est, car je ne veux pas que
00:08:26des agents puissent aspirer mes informations.