#!/bin/sh # El lanzador del host nativo. Existe por UNA razón medida, no por gusto: # # ── EL MANIFIESTO DE NATIVE MESSAGING NO PUEDE LLEVAR ARGUMENTOS ────────────────────────────── # Comprobado dentro de nuestro propio artefacto (`omni.ja`, `modules/NativeMessaging.sys.mjs`): # # let command = hostInfo.manifest.path; # ... # arguments: [hostInfo.path, context.extension.id], # # O sea que Gecko ejecuta EXACTAMENTE el `path` del manifiesto y los únicos argumentos que le pasa # son la ruta del manifiesto y el id de la extensión. No hay campo para los nuestros. # # Y `puriy-costura` sin `--state` corre TODO EN MEMORIA: cada arranque del navegador volvería a la # fase «aprendiendo» y ningún cambio de script sería nunca un evento. O sea que sin este lanzador la # función existe, no falla, y no protege de nada — la peor de las tres. # # ── POR QUÉ LA RUTA LA DECIDE LA DISTRO Y NO EL CRATE ───────────────────────────────────────── # Dónde vive el estado de un usuario es layout del sistema de ficheros, que es asunto de takana; # `puriy-costura` no tiene por qué tener una opinión sobre el FHS de nadie. Se respeta # `XDG_STATE_HOME` porque es el estándar para estado que no es caché ni configuración. set -e DIR="${XDG_STATE_HOME:-$HOME/.local/state}/puriy-costura" mkdir -p "$DIR" 2>/dev/null || true # `exec` y no una llamada: el navegador le habla al proceso por stdin/stdout, así que el host TIENE # que heredar esos descriptores y ser el proceso que Gecko vigila. Con un `sh` de por medio, cerrar # el puerto mataría al shell y dejaría al host huérfano hablando a una tubería rota. exec /usr/bin/puriy-costura --state "$DIR"