feat(mobile): proxie le téléchargement de l'APK via l'API (pas de CORS) #77
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/mobile-download-proxy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Suite au fix de
/releases/latest(précédent), l'utilisateur voulait un lien qui déclenche le téléchargement du.apkdirectement, sans quitter l'appli web.Vérifié en direct :
fetch("https://git.dev.kyuno.fr/api/...")depuis le navigateur échoue avecFailed to fetch(confirmé via un essai en modeno-cors: la requête réseau aboutit bien, seule la réponse est bloquée) — Forgejo n'envoie aucun header CORS sur son API Releases, publique ou non.Ça ne concerne pas que la page d'accueil : le hook de vérification de mise à jour (#66,
useAppUpdateCheck) faisait exactement le même fetch cross-origin depuis la WebView native, et échouait donc tout aussi silencieusement en production sans que personne ne puisse s'en rendre compte (le hook avale toute erreur réseau par design).Fix : petit module
apps/api/src/modules/mobile/(2 routes publiques, aucune ne touche la base de données) :GET /mobile/latest-release→{ version }(proxy JSON, remplace le fetch direct deuseAppUpdateCheck)GET /mobile/download→ redirection 302 vers l'asset.apkréel de la dernière release (ou vers la page/releases/latesten repli si Forgejo est injoignable ou qu'aucun.apkn'est encore attaché)Côté frontend :
LandingPage.tsxetUpdateBanner.tsxpointent maintenant vers ce proxy (${API_BASE_URL}/mobile/download,target="_blank") au lieu d'une URL Forgejo directe — un clic, téléchargement immédiat, jamais de navigation hors de l'appli.Vérifié en local (sans Postgres, ces routes n'en ont pas besoin) contre les vraies données Forgejo :
pnpm lint/tsc(api + web) /pnpm --filter web build: tous verts. Le scénario Cypress "offers the Android app download" échoue encore en local (même souci pré-existant déjà documenté sur la PR précédente, confirmé indépendant du code par la vraie CI) — mis à jour pour asserter le nouveauhrefrelatif.🤖 Generated with Claude Code
Suite au fix de /releases/latest (precedent), l'utilisateur voulait un lien qui declenche le telechargement du .apk directement, sans quitter l'appli web. Verifie en direct : fetch("https://git.dev.kyuno.fr/api/...") depuis le navigateur echoue avec "Failed to fetch" (confirme via un essai en mode no-cors : la requete reseau aboutit bien, seule la reponse est bloquee) — Forgejo n'envoie aucun header CORS sur son API Releases, publique ou non. Ca ne concerne pas que la page d'accueil : le hook de verification de mise a jour (#66, useAppUpdateCheck) faisait exactement le meme fetch cross-origin depuis la WebView native, et echouait donc tout aussi silencieusement en production sans que personne ne puisse s'en rendre compte (le hook avale toute erreur reseau par design). Ajoute un petit module apps/api/src/modules/mobile/ (2 routes publiques, aucune ne touche la base de donnees) : - GET /mobile/latest-release -> { version } (proxy JSON, remplace le fetch direct de useAppUpdateCheck) - GET /mobile/download -> redirection 302 vers l'asset .apk reel de la derniere release (ou vers la page /releases/latest en repli si Forgejo est injoignable ou qu'aucun .apk n'est encore attache) Cote frontend : LandingPage.tsx et UpdateBanner.tsx pointent maintenant vers ce proxy (`${API_BASE_URL}/mobile/download`, target="_blank") au lieu d'une URL Forgejo directe — un clic, telechargement immediat, jamais de navigation hors de l'appli. useAppUpdateCheck.ts appelle desormais apiClient.getLatestMobileVersion() au lieu d'un fetch direct. Verifie en local (sans Postgres, ces routes n'en ont pas besoin) contre les vraies donnees Forgejo : GET /mobile/latest-release -> {"version":"v0.2.0"} GET /mobile/download -> 302, Location vers le vrai .apk signe pnpm lint / tsc (api + web) / pnpm --filter web build : tous verts. Le scenario Cypress "offers the Android app download" echoue encore en local (meme souci pre-existant deja documente sur la PR precedente, confirme independant du code par CI reel) ; mis a jour pour asserter le nouveau href relatif. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>