# acanthe-wishlist-service

Service de l'App Proxy des favoris Acanthe (boutique Shopify `acanthe-paris-uniforme`, app custom « Acanthe Wishlist »).
Node 22, aucune dépendance, aucune base de données, aucun fichier écrit.

## Ce qu'il fait

La boutique transmet `https://<boutique>/apps/wishlist/<action>` vers `https://<ce service>/proxy/<action>`,
avec une signature HMAC. Le service vérifie la signature (secret de l'app), puis lit ou écrit, pour le seul
client connecté signé par Shopify :

- le métachamp client `$app:favoris` (json, favoris datés, expiration J+30) ;
- le tag client `wishlist`.

| Route | Rôle |
|---|---|
| `GET /sante` | Contrôle de vie : `{"ok":true,"compteurs":{...}}` |
| `GET /proxy/liste` | Favoris actifs du client connecté |
| `POST /proxy/toggle` | Ajout ou retrait d'un favori `{id, handle, on}` |
| `POST /proxy/merge` | Fusion des favoris du navigateur à la connexion `{items}` |

Toute requête `/proxy/*` sans signature valide répond 401. Aucune donnée client n'est journalisée
(seulement des compteurs et les messages d'erreur).

## Variables d'environnement

Voir `.env.example`. `SHOPIFY_CLIENT_SECRET` est un secret : variable secrète de l'hébergeur ou fichier
`.env` non versionné, jamais dans le dépôt.

## Lancer

```bash
node --env-file=.env serveur.mjs      # ou : npm start avec les variables dans l'environnement
docker build -t acanthe-wishlist . && docker run --env-file .env -p 8787:8787 acanthe-wishlist
```

Sans Docker (pm2), aucune installation ni build : le service n'a pas de dépendance.

```bash
git clone git@github.com:m781gsf/acanthe-wishlist-service.git && cd acanthe-wishlist-service
cp .env.example .env    # renseigner SHOPIFY_CLIENT_SECRET (et PORT si besoin)
pm2 start serveur.mjs --name acanthe-wishlist --node-args="--env-file=.env"
pm2 save
# mise à jour : git pull && pm2 restart acanthe-wishlist
```

Le service écoute en HTTP sur `HOST:PORT` (défaut `0.0.0.0:8787`). Le HTTPS est assuré par le reverse proxy
de l'hébergeur (Shopify n'appelle l'App Proxy qu'en HTTPS).

## Mise en service

1. Déployer, puis vérifier `https://<domaine>/sante`.
2. Côté app Shopify (`shopify.app.toml`, géré par GSF) : `[app_proxy] url = "https://<domaine>/proxy"`, puis
   `shopify app deploy`.
3. Sur la boutique, en visiteur : `fetch('/apps/wishlist/liste')` doit répondre 401 « non connecte ».
