# Paiements (payments)

> Module payments : Abonnements RevenueCat : paywall, statut Pro, restauration (paywall souple ou bloquant).

Abonnements RevenueCat : paywall, statut Pro, restauration (paywall souple ou bloquant).

:::note[Page générée]
Générée depuis `modules/payments/README.md`, `module.json`, `config.ts`, `index.ts` à chaque build du site : modifier la source, pas cette page.
:::

## Fiche technique

| | |
|---|---|
| Paquet | `@daroms/module-payments` |
| Activer | `bun daroms module add payments` |
| Requiert | aucun module |
| Dépendances natives | `react-native-purchases` |
| Routes ajoutées | `app/paywall.tsx` (`PaywallScreen`) |
| Onglets | aucun |
| Migrations | aucune |
| Edge functions | aucune |
| Variables d'environnement | `EXPO_PUBLIC_REVENUECAT_IOS_KEY`, `EXPO_PUBLIC_REVENUECAT_ANDROID_KEY` |
| Gate de navigation | oui (décide de la redirection au démarrage) |
| Section de réglages | oui (ajoutée au module settings) |
| Modales | `paywall` |

## Mise en place et usage

Abonnements et achats avec RevenueCat (`react-native-purchases`).

- Activer : `bun daroms module add payments` (route modale `app/paywall.tsx`).
- `.env` : `EXPO_PUBLIC_REVENUECAT_IOS_KEY`, `EXPO_PUBLIC_REVENUECAT_ANDROID_KEY` (clés publiques du SDK).
- RevenueCat : créer l'entitlement (`pro` par défaut), les produits et l'offering courante.
- Config : `entitlement`, `mode` (`soft` : paywall à la demande ; `hard` : obligatoire), `offering`, `features` (clés i18n).
- Code : `usePro()` (statut), `<ProGate>` (contenu réservé), `router.push('/paywall')`.
- Expo Go : RevenueCat fonctionne en mode aperçu ; achats réels uniquement en build de dev ou de prod.

## Configuration

Dans `app.manifest.ts > modules['payments']`, validée par `modules/payments/config.ts` au démarrage.

| Clé | Schéma zod | Rôle |
|---|---|---|
| `entitlement` | `z.string().default('pro')` | Identifiant d'entitlement RevenueCat qui débloque la version Pro. |
| `mode` | `z.enum(['soft', 'hard']).default('soft')` | soft : paywall à la demande ; hard : paywall obligatoire après connexion. |
| `offering` | `z.string().optional()` | Offering RevenueCat (défaut : l'offering courante). |
| `features` | `z.array(z.string()).default(['paywall.feature1', 'paywall.feature2', 'paywall.feature3'])` | Clés i18n (namespace app) des avantages listés sur le paywall. |

Valeurs écrites par `module add` :

```json
{
  "entitlement": "pro",
  "mode": "soft",
  "features": [
    "paywall.feature1",
    "paywall.feature2",
    "paywall.feature3"
  ]
}
```

## Exports

```ts
import { usePro, PaywallScreen, ProGate } from '@daroms/module-payments'
```

- Valeurs : `usePro`, `PaywallScreen`, `ProGate`

---

Page HTML : https://daromsartof.github.io/daroms-speedapp/reference/modules/payments/
Index de la documentation : https://daromsartof.github.io/daroms-speedapp/llms.txt
