[{"data":1,"prerenderedAt":1136},["ShallowReactive",2],{"docs-list-fr":3,"docs-fr-cli":913},[4,345,564,664,709,776],{"id":5,"title":6,"body":7,"description":17,"extension":338,"meta":339,"navigation":340,"path":341,"seo":342,"stem":343,"__hash__":344},"docs_fr\u002Ffr\u002Fdocs\u002Fcli.md","Référence CLI",{"type":8,"value":9,"toc":327},"minimark",[10,14,18,23,128,131,138,144,217,219,223,230,235,242,270,273,289,293,296,323],[11,12,6],"h1",{"id":13},"référence-cli",[15,16,17],"p",{},"Passerelle inclut un CLI puissant pour gérer votre daemon local, votre UI interactive, et vos configurations.",[19,20,22],"h2",{"id":21},"commandes-principales","Commandes Principales",[24,25,26,39],"table",{},[27,28,29],"thead",{},[30,31,32,36],"tr",{},[33,34,35],"th",{},"Commande",[33,37,38],{},"Description",[40,41,42,54,64,74,84,98,108,118],"tbody",{},[30,43,44,51],{},[45,46,47],"td",{},[48,49,50],"code",{},"passerelle setup",[45,52,53],{},"Installe et démarre le daemon en arrière-plan via PM2.",[30,55,56,61],{},[45,57,58],{},[48,59,60],{},"passerelle link",[45,62,63],{},"Affiche l'URL de login directe ou le QR Code terminal pour le Handoff.",[30,65,66,71],{},[45,67,68],{},[48,69,70],{},"passerelle status",[45,72,73],{},"Affiche l'état du service et des diagnostics en temps réel.",[30,75,76,81],{},[45,77,78],{},[48,79,80],{},"passerelle ui",[45,82,83],{},"Se connecte directement au tableau de bord terminal interactif.",[30,85,86,91],{},[45,87,88],{},[48,89,90],{},"passerelle version",[45,92,93,94,97],{},"Affiche la version et le commit (",[48,95,96],{},"--json"," disponible).",[30,99,100,105],{},[45,101,102],{},[48,103,104],{},"passerelle config",[45,106,107],{},"Consulte ou modifie les paramètres locaux persistants.",[30,109,110,115],{},[45,111,112],{},[48,113,114],{},"passerelle register",[45,116,117],{},"Re-déclare instantanément le daemon auprès de la Gateway.",[30,119,120,125],{},[45,121,122],{},[48,123,124],{},"passerelle restart",[45,126,127],{},"Redémarre le daemon PM2 en arrière-plan.",[129,130],"hr",{},[19,132,134,135,137],{"id":133},"console-interactive-passerelle-ui","Console Interactive (",[48,136,80],{},")",[15,139,140,141,143],{},"Lancer ",[48,142,80],{}," ouvre une console de gestion en temps réel dans votre terminal. Vous pouvez invoquer ces actions instantanément via les raccourcis clavier :",[145,146,147,159,168,181,190,199,208],"ul",{},[148,149,150,153,154,158],"li",{},[48,151,152],{},"[r]"," ",[155,156,157],"strong",{},"Renouveler le PIN"," : Génère immédiatement un nouveau code PIN et expire les accès existants.",[148,160,161,153,164,167],{},[48,162,163],{},"[s]",[155,165,166],{},"Copier le lien"," : Copie l'URL de connexion directe dans le presse-papier.",[148,169,170,173,174,153,177,180],{},[48,171,172],{},"[c]"," \u002F ",[48,175,176],{},"[l]",[155,178,179],{},"Voir le Statut"," : Inspecte les sessions à distance actives et les serveurs locaux en cours d'exécution.",[148,182,183,153,186,189],{},[48,184,185],{},"[h]",[155,187,188],{},"Mode Privé"," : Masque le QR code et le PIN (utile lors des partages d'écran en réunion).",[148,191,192,153,195,198],{},[48,193,194],{},"[k]",[155,196,197],{},"Tuer les sessions"," : Coupe toutes les sessions distantes instantanément.",[148,200,201,153,204,207],{},[48,202,203],{},"[p]",[155,205,206],{},"Re-déclarer"," : Synchronise à nouveau la présence du daemon avec la Gateway.",[148,209,210,153,213,216],{},[48,211,212],{},"[d]",[155,214,215],{},"Détacher"," : Quitte la console interactive en laissant le daemon PM2 tourner en fond.",[129,218],{},[19,220,222],{"id":221},"configuration","Configuration",[15,224,225,226,229],{},"Les paramètres sont stockés dans ",[48,227,228],{},"~\u002F.config\u002Fpasserelle\u002Fpasserelle-config.json",".",[231,232,234],"h3",{"id":233},"liste-blanche-allowlist","Liste Blanche (Allowlist)",[15,236,237,238,241],{},"Par défaut, tout client web authentifié peut lancer n'importe quel service listé dans votre ",[48,239,240],{},"services.json",". Pour restreindre les commandes autorisées via l'API, définissez une liste blanche stricte :",[243,244,249],"pre",{"className":245,"code":246,"language":247,"meta":248,"style":248},"language-bash shiki shiki-themes github-dark","passerelle config command_allowlist \"opencode,kilo,pm2\"\n","bash","",[48,250,251],{"__ignoreMap":248},[252,253,256,260,264,267],"span",{"class":254,"line":255},"line",1,[252,257,259],{"class":258},"svObZ","passerelle",[252,261,263],{"class":262},"sU2Wk"," config",[252,265,266],{"class":262}," command_allowlist",[252,268,269],{"class":262}," \"opencode,kilo,pm2\"\n",[15,271,272],{},"Pour supprimer toutes les restrictions, videz la liste :",[243,274,276],{"className":245,"code":275,"language":247,"meta":248,"style":248},"passerelle config command_allowlist \"\"\n",[48,277,278],{"__ignoreMap":248},[252,279,280,282,284,286],{"class":254,"line":255},[252,281,259],{"class":258},[252,283,263],{"class":262},[252,285,266],{"class":262},[252,287,288],{"class":262}," \"\"\n",[231,290,292],{"id":291},"révocation-daccès-api","Révocation d'Accès API",[15,294,295],{},"Pour révoquer immédiatement tous les tokens API (durée fixe de 30 jours, utilisés pour les scripts), définissez la date de révocation à maintenant :",[243,297,299],{"className":245,"code":298,"language":247,"meta":248,"style":248},"passerelle config api_revoked_before $(date +%s)\n",[48,300,301],{"__ignoreMap":248},[252,302,303,305,307,310,314,317,320],{"class":254,"line":255},[252,304,259],{"class":258},[252,306,263],{"class":262},[252,308,309],{"class":262}," api_revoked_before",[252,311,313],{"class":312},"s95oV"," $(",[252,315,316],{"class":258},"date",[252,318,319],{"class":262}," +%s",[252,321,322],{"class":312},")\n",[324,325,326],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}",{"title":248,"searchDepth":328,"depth":328,"links":329},2,[330,331,333],{"id":21,"depth":328,"text":22},{"id":133,"depth":328,"text":332},"Console Interactive (passerelle ui)",{"id":221,"depth":328,"text":222,"children":334},[335,337],{"id":233,"depth":336,"text":234},3,{"id":291,"depth":336,"text":292},"md",{},true,"\u002Ffr\u002Fdocs\u002Fcli",{"title":6,"description":17},"fr\u002Fdocs\u002Fcli","8-exWFEE1SmY9wCK1rvhKEI799HGc51qTzvW6J0VAuo",{"id":346,"title":347,"body":348,"description":355,"extension":338,"meta":559,"navigation":340,"path":560,"seo":561,"stem":562,"__hash__":563},"docs_fr\u002Ffr\u002Fdocs\u002Fcontribution.md","Contribuer",{"type":8,"value":349,"toc":553},[350,353,356,360,363,443,447,450,511,515,543,547,550],[11,351,347],{"id":352},"contribuer",[15,354,355],{},"Merci de l'intérêt que vous portez à Passerelle ! Nous accueillons toutes les contributions, des rapports de bugs aux nouvelles fonctionnalités.",[19,357,359],{"id":358},"démarrage-rapide","Démarrage Rapide",[15,361,362],{},"Pour configurer l'environnement de développement, vous aurez besoin de Docker et Node.js.",[364,365,366,397,425],"ol",{},[148,367,368,371,372],{},[155,369,370],{},"Cloner le dépôt"," :",[243,373,375],{"className":245,"code":374,"language":247,"meta":248,"style":248},"git clone https:\u002F\u002Fgithub.com\u002Fjules-gd-dev\u002Fpasserelle.git\ncd passerelle\n",[48,376,377,388],{"__ignoreMap":248},[252,378,379,382,385],{"class":254,"line":255},[252,380,381],{"class":258},"git",[252,383,384],{"class":262}," clone",[252,386,387],{"class":262}," https:\u002F\u002Fgithub.com\u002Fjules-gd-dev\u002Fpasserelle.git\n",[252,389,390,394],{"class":254,"line":328},[252,391,393],{"class":392},"sDLfK","cd",[252,395,396],{"class":262}," passerelle\n",[148,398,399,402,403],{},[155,400,401],{},"Lancer l'environnement de développement"," :\nPasserelle utilise Docker Compose pour orchestrer l'API Gateway, le Dashboard Web et le tunnel Cloudflare.",[243,404,406],{"className":245,"code":405,"language":247,"meta":248,"style":248},"docker compose -f docker-compose.dev.yml up\n",[48,407,408],{"__ignoreMap":248},[252,409,410,413,416,419,422],{"class":254,"line":255},[252,411,412],{"class":258},"docker",[252,414,415],{"class":262}," compose",[252,417,418],{"class":392}," -f",[252,420,421],{"class":262}," docker-compose.dev.yml",[252,423,424],{"class":262}," up\n",[148,426,427,371,430],{},[155,428,429],{},"Installer les dépendances du CLI",[243,431,433],{"className":245,"code":432,"language":247,"meta":248,"style":248},"npm install\n",[48,434,435],{"__ignoreMap":248},[252,436,437,440],{"class":254,"line":255},[252,438,439],{"class":258},"npm",[252,441,442],{"class":262}," install\n",[19,444,446],{"id":445},"qualité-du-code","Qualité du Code",[15,448,449],{},"Nous appliquons des règles strictes de formatage et de linting. Avant d'ouvrir une Pull Request, assurez-vous que votre code passe toutes les vérifications :",[243,451,453],{"className":245,"code":452,"language":247,"meta":248,"style":248},"# Formater le code\nnpm run format\n\n# Lancer le linter\nnpm run lint\n\n# Lancer les tests\nnpm test\n",[48,454,455,461,471,476,482,492,497,503],{"__ignoreMap":248},[252,456,457],{"class":254,"line":255},[252,458,460],{"class":459},"sAwPA","# Formater le code\n",[252,462,463,465,468],{"class":254,"line":328},[252,464,439],{"class":258},[252,466,467],{"class":262}," run",[252,469,470],{"class":262}," format\n",[252,472,473],{"class":254,"line":336},[252,474,475],{"emptyLinePlaceholder":340},"\n",[252,477,479],{"class":254,"line":478},4,[252,480,481],{"class":459},"# Lancer le linter\n",[252,483,485,487,489],{"class":254,"line":484},5,[252,486,439],{"class":258},[252,488,467],{"class":262},[252,490,491],{"class":262}," lint\n",[252,493,495],{"class":254,"line":494},6,[252,496,475],{"emptyLinePlaceholder":340},[252,498,500],{"class":254,"line":499},7,[252,501,502],{"class":459},"# Lancer les tests\n",[252,504,506,508],{"class":254,"line":505},8,[252,507,439],{"class":258},[252,509,510],{"class":262}," test\n",[19,512,514],{"id":513},"soumettre-des-modifications","Soumettre des Modifications",[364,516,517,523,533,536],{},[148,518,519,520],{},"Créez une branche de fonctionnalité : ",[48,521,522],{},"git checkout -b feature\u002Fma-fonctionnalite",[148,524,525,526,229],{},"Poussez vos commits en respectant la spécification ",[527,528,532],"a",{"href":529,"rel":530},"https:\u002F\u002Fwww.conventionalcommits.org\u002F",[531],"nofollow","Conventional Commits",[148,534,535],{},"Ouvrez une Pull Request.",[148,537,538,539,542],{},"Une fois fusionnée, n'hésitez pas à ajouter votre nom au fichier ",[48,540,541],{},"AUTHORS.md"," à la racine du dépôt !",[19,544,546],{"id":545},"agents-ia-automatisation","Agents IA & Automatisation",[15,548,549],{},"Les contributions générées par l'IA et les Pull Requests d'agents autonomes sont explicitement les bienvenues ! Tant que le code respecte scrupuleusement les règles de linting, de formatage et les directives de design du projet, nous les acceptons avec plaisir. Nous avons conscience que ces règles, ainsi que l'évolution même du métier, sont amenées à changer rapidement, et nous sommes ravis d'évoluer avec l'écosystème.",[324,551,552],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":248,"searchDepth":328,"depth":328,"links":554},[555,556,557,558],{"id":358,"depth":328,"text":359},{"id":445,"depth":328,"text":446},{"id":513,"depth":328,"text":514},{"id":545,"depth":328,"text":546},{},"\u002Ffr\u002Fdocs\u002Fcontribution",{"title":347,"description":355},"fr\u002Fdocs\u002Fcontribution","pw9Ty5iV7no4zXMjsRUqXPMPn3EOxhUkCG58hnfD2Mo",{"id":565,"title":566,"body":567,"description":658,"extension":338,"meta":659,"navigation":340,"path":660,"seo":661,"stem":662,"__hash__":663},"docs_fr\u002Ffr\u002Fdocs\u002Finstall.md","Installation",{"type":8,"value":568,"toc":653},[569,572,579,583,608,615,619,631,634,638,650],[11,570,566],{"id":571},"installation",[15,573,574,575,578],{},"Prérequis: Node.js 20+. ",[48,576,577],{},"cloudflared"," est téléchargé automatiquement.",[19,580,582],{"id":581},"démon","Démon",[243,584,586],{"className":245,"code":585,"language":247,"meta":248,"style":248},"npm install -g @julesgd\u002Fpasserelle\npasserelle setup\n",[48,587,588,601],{"__ignoreMap":248},[252,589,590,592,595,598],{"class":254,"line":255},[252,591,439],{"class":258},[252,593,594],{"class":262}," install",[252,596,597],{"class":392}," -g",[252,599,600],{"class":262}," @julesgd\u002Fpasserelle\n",[252,602,603,605],{"class":254,"line":328},[252,604,259],{"class":258},[252,606,607],{"class":262}," setup\n",[15,609,610,611,614],{},"S'enregistre auprès de la passerelle, génère une identité, démarre sous PM2. Retourne un ",[155,612,613],{},"PIN"," à valider dans le tableau de bord.",[19,616,618],{"id":617},"lien-de-validation","Lien de validation",[243,620,622],{"className":245,"code":621,"language":247,"meta":248,"style":248},"passerelle link\n",[48,623,624],{"__ignoreMap":248},[252,625,626,628],{"class":254,"line":255},[252,627,259],{"class":258},[252,629,630],{"class":262}," link\n",[15,632,633],{},"Affiche un lien à usage unique pour ouvrir le dashboard. Le PIN est roté après usage.",[19,635,637],{"id":636},"statut","Statut",[243,639,641],{"className":245,"code":640,"language":247,"meta":248,"style":248},"passerelle status\n",[48,642,643],{"__ignoreMap":248},[252,644,645,647],{"class":254,"line":255},[252,646,259],{"class":258},[252,648,649],{"class":262}," status\n",[324,651,652],{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":248,"searchDepth":328,"depth":328,"links":654},[655,656,657],{"id":581,"depth":328,"text":582},{"id":617,"depth":328,"text":618},{"id":636,"depth":328,"text":637},"Prérequis: Node.js 20+. cloudflared est téléchargé automatiquement.",{},"\u002Ffr\u002Fdocs\u002Finstall",{"title":566,"description":658},"fr\u002Fdocs\u002Finstall","hA2Mg0ZIReh-l0j8rQggmXbx4rHzSihox8D9zcTiLFI",{"id":665,"title":666,"body":667,"description":674,"extension":338,"meta":704,"navigation":340,"path":705,"seo":706,"stem":707,"__hash__":708},"docs_fr\u002Ffr\u002Fdocs\u002Fintroduction.md","Introduction",{"type":8,"value":668,"toc":701},[669,672,675,679],[11,670,671],{"id":259},"Passerelle",[15,673,674],{},"Passerelle expose des services locaux via des tunnels Cloudflare éphémères orchestrés par une passerelle auto-hébergée.",[19,676,678],{"id":677},"architecture","Architecture",[364,680,681,690,695],{},[148,682,683,685,686,689],{},[155,684,582],{}," (",[48,687,688],{},"@julesgd\u002Fpasserelle",") : Tourne sur la machine cible. Ouvre un tunnel Cloudflare et proxifie les requêtes vers les services locaux.",[148,691,692,694],{},[155,693,671],{}," (gateway) : Serveur Hono auto-hébergé. Authentifie les démons via WebSocket, émet des codes à usage unique et sert la PWA.",[148,696,697,700],{},[155,698,699],{},"Tableau de bord"," : PWA pour lier les machines, gérer les accès et valider les PINs.",{"title":248,"searchDepth":328,"depth":328,"links":702},[703],{"id":677,"depth":328,"text":678},{},"\u002Ffr\u002Fdocs\u002Fintroduction",{"title":666,"description":674},"fr\u002Fdocs\u002Fintroduction","Qa2jIzEKHopQJ2zGQeTIL10i1g5ZOX-B181bj8xZpFQ",{"id":710,"title":711,"body":712,"description":248,"extension":338,"meta":771,"navigation":340,"path":772,"seo":773,"stem":774,"__hash__":775},"docs_fr\u002Ffr\u002Fdocs\u002Fsecurity.md","Modèle de sécurité",{"type":8,"value":713,"toc":769},[714,717],[11,715,711],{"id":716},"modèle-de-sécurité",[145,718,719,729,739,745,751,757,763],{},[148,720,721,724,725,728],{},[155,722,723],{},"Authentification"," : Enregistrement via secret machine. Ré-enregistrement avec même ",[48,726,727],{},"machineId"," et secret différent rejeté.",[148,730,731,734,735,738],{},[155,732,733],{},"Tokens"," : Le token de session est stocké dans un cookie httpOnly chiffré AES-256-GCM (",[48,736,737],{},"__Host-passerelle_sessions","). Jamais accessible au navigateur.",[148,740,741,744],{},[155,742,743],{},"Ouverture de service"," : Utilise un code handoff à usage unique transmis via WebSocket. Les tokens n'apparaissent jamais dans les URLs.",[148,746,747,750],{},[155,748,749],{},"PINs"," : Invalidés immédiatement après usage.",[148,752,753,756],{},[155,754,755],{},"SSRF"," : Le proxy rejette les adresses privées et link-local.",[148,758,759,762],{},[155,760,761],{},"Rate Limit"," : Validation PIN, proxy et API publiques limités par IP.",[148,764,765,768],{},[155,766,767],{},"Défense"," : Démon sous PM2 (moindre privilège), conteneur passerelle durci (capabilities droppées).",{"title":248,"searchDepth":328,"depth":328,"links":770},[],{},"\u002Ffr\u002Fdocs\u002Fsecurity",{"title":711,"description":248},"fr\u002Fdocs\u002Fsecurity","LQxGJ9g0M6pch8rjQzwhKoBGXq4SUUK1hcAAIPFDTCs",{"id":777,"title":778,"body":779,"description":248,"extension":338,"meta":908,"navigation":340,"path":909,"seo":910,"stem":911,"__hash__":912},"docs_fr\u002Ffr\u002Fdocs\u002Fself-host.md","Auto-héberger la passerelle",{"type":8,"value":780,"toc":903},[781,784,786,793,838,847,851,873,888,892,900],[11,782,778],{"id":783},"auto-héberger-la-passerelle",[19,785,222],{"id":221},[15,787,788,789,792],{},"Nécessite: tunnel Cloudflare (",[48,790,791],{},"cloudflared tunnel create",").",[243,794,798],{"className":795,"code":796,"language":797,"meta":248,"style":248},"language-ini shiki shiki-themes github-dark","# .env\nTUNNEL_UUID=\u003Cvotre-uuid-tunnel>\nTUNNEL_CREDENTIALS_PATH=\u002Fetc\u002Fcloudflared\u002F\u003Cvotre-uuid-tunnel>.json\nTUNNEL_HOSTNAME=\u003Cvotre-hostname-tunnel>\nSESSION_COOKIE_KEY=\u003Cclé-hex-32-octets>\n","ini",[48,799,800,805,814,822,830],{"__ignoreMap":248},[252,801,802],{"class":254,"line":255},[252,803,804],{"class":459},"# .env\n",[252,806,807,811],{"class":254,"line":328},[252,808,810],{"class":809},"snl16","TUNNEL_UUID",[252,812,813],{"class":312},"=\u003Cvotre-uuid-tunnel>\n",[252,815,816,819],{"class":254,"line":336},[252,817,818],{"class":809},"TUNNEL_CREDENTIALS_PATH",[252,820,821],{"class":312},"=\u002Fetc\u002Fcloudflared\u002F\u003Cvotre-uuid-tunnel>.json\n",[252,823,824,827],{"class":254,"line":478},[252,825,826],{"class":809},"TUNNEL_HOSTNAME",[252,828,829],{"class":312},"=\u003Cvotre-hostname-tunnel>\n",[252,831,832,835],{"class":254,"line":484},[252,833,834],{"class":809},"SESSION_COOKIE_KEY",[252,836,837],{"class":312},"=\u003Cclé-hex-32-octets>\n",[839,840,841],"blockquote",{},[15,842,843,844],{},"Générer une clé: ",[48,845,846],{},"node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"",[19,848,850],{"id":849},"démarrage","Démarrage",[243,852,854],{"className":245,"code":853,"language":247,"meta":248,"style":248},"docker compose -f docker-compose.prod.yml up -d\n",[48,855,856],{"__ignoreMap":248},[252,857,858,860,862,864,867,870],{"class":254,"line":255},[252,859,412],{"class":258},[252,861,415],{"class":262},[252,863,418],{"class":392},[252,865,866],{"class":262}," docker-compose.prod.yml",[252,868,869],{"class":262}," up",[252,871,872],{"class":392}," -d\n",[15,874,875,876,879,880,883,884,887],{},"Services: ",[48,877,878],{},"app"," (API + PWA), ",[48,881,882],{},"tunnel"," (cloudflared). Volume ",[48,885,886],{},"passerelle-data"," stocke les identités.",[19,889,891],{"id":890},"utilisation","Utilisation",[15,893,894,895,897,898,229],{},"Fournir l'URL au démon lors du ",[48,896,50],{},", ou éditer avec ",[48,899,104],{},[324,901,902],{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":248,"searchDepth":328,"depth":328,"links":904},[905,906,907],{"id":221,"depth":328,"text":222},{"id":849,"depth":328,"text":850},{"id":890,"depth":328,"text":891},{},"\u002Ffr\u002Fdocs\u002Fself-host",{"title":778,"description":248},"fr\u002Fdocs\u002Fself-host","zQZyELYCCmFR2K5FZcnD77e8OAgGlMaNUKpAyAgdWGY",{"id":5,"title":6,"body":914,"description":17,"extension":338,"meta":1134,"navigation":340,"path":341,"seo":1135,"stem":343,"__hash__":344},{"type":8,"value":915,"toc":1126},[916,918,920,922,1000,1002,1006,1010,1056,1058,1060,1064,1066,1070,1084,1086,1100,1102,1104,1124],[11,917,6],{"id":13},[15,919,17],{},[19,921,22],{"id":21},[24,923,924,932],{},[27,925,926],{},[30,927,928,930],{},[33,929,35],{},[33,931,38],{},[40,933,934,942,950,958,966,976,984,992],{},[30,935,936,940],{},[45,937,938],{},[48,939,50],{},[45,941,53],{},[30,943,944,948],{},[45,945,946],{},[48,947,60],{},[45,949,63],{},[30,951,952,956],{},[45,953,954],{},[48,955,70],{},[45,957,73],{},[30,959,960,964],{},[45,961,962],{},[48,963,80],{},[45,965,83],{},[30,967,968,972],{},[45,969,970],{},[48,971,90],{},[45,973,93,974,97],{},[48,975,96],{},[30,977,978,982],{},[45,979,980],{},[48,981,104],{},[45,983,107],{},[30,985,986,990],{},[45,987,988],{},[48,989,114],{},[45,991,117],{},[30,993,994,998],{},[45,995,996],{},[48,997,124],{},[45,999,127],{},[129,1001],{},[19,1003,134,1004,137],{"id":133},[48,1005,80],{},[15,1007,140,1008,143],{},[48,1009,80],{},[145,1011,1012,1018,1024,1032,1038,1044,1050],{},[148,1013,1014,153,1016,158],{},[48,1015,152],{},[155,1017,157],{},[148,1019,1020,153,1022,167],{},[48,1021,163],{},[155,1023,166],{},[148,1025,1026,173,1028,153,1030,180],{},[48,1027,172],{},[48,1029,176],{},[155,1031,179],{},[148,1033,1034,153,1036,189],{},[48,1035,185],{},[155,1037,188],{},[148,1039,1040,153,1042,198],{},[48,1041,194],{},[155,1043,197],{},[148,1045,1046,153,1048,207],{},[48,1047,203],{},[155,1049,206],{},[148,1051,1052,153,1054,216],{},[48,1053,212],{},[155,1055,215],{},[129,1057],{},[19,1059,222],{"id":221},[15,1061,225,1062,229],{},[48,1063,228],{},[231,1065,234],{"id":233},[15,1067,237,1068,241],{},[48,1069,240],{},[243,1071,1072],{"className":245,"code":246,"language":247,"meta":248,"style":248},[48,1073,1074],{"__ignoreMap":248},[252,1075,1076,1078,1080,1082],{"class":254,"line":255},[252,1077,259],{"class":258},[252,1079,263],{"class":262},[252,1081,266],{"class":262},[252,1083,269],{"class":262},[15,1085,272],{},[243,1087,1088],{"className":245,"code":275,"language":247,"meta":248,"style":248},[48,1089,1090],{"__ignoreMap":248},[252,1091,1092,1094,1096,1098],{"class":254,"line":255},[252,1093,259],{"class":258},[252,1095,263],{"class":262},[252,1097,266],{"class":262},[252,1099,288],{"class":262},[231,1101,292],{"id":291},[15,1103,295],{},[243,1105,1106],{"className":245,"code":298,"language":247,"meta":248,"style":248},[48,1107,1108],{"__ignoreMap":248},[252,1109,1110,1112,1114,1116,1118,1120,1122],{"class":254,"line":255},[252,1111,259],{"class":258},[252,1113,263],{"class":262},[252,1115,309],{"class":262},[252,1117,313],{"class":312},[252,1119,316],{"class":258},[252,1121,319],{"class":262},[252,1123,322],{"class":312},[324,1125,326],{},{"title":248,"searchDepth":328,"depth":328,"links":1127},[1128,1129,1130],{"id":21,"depth":328,"text":22},{"id":133,"depth":328,"text":332},{"id":221,"depth":328,"text":222,"children":1131},[1132,1133],{"id":233,"depth":336,"text":234},{"id":291,"depth":336,"text":292},{},{"title":6,"description":17},1785698531703]