# Billing Mode Switch (`sandbox` -> `live`)

This project supports two license verification modes via env:

- `DEWEMOJI_BILLING_MODE=sandbox`  
  Any non-empty license key is treated as valid Pro.
- `DEWEMOJI_BILLING_MODE=live`  
  Key must pass live validation rules (`DEWEMOJI_LICENSE_ACCEPT_ALL`, `DEWEMOJI_PRO_KEYS`, or provider validation).

## Recommended local setup

Use sandbox while building:

```env
DEWEMOJI_BILLING_MODE=sandbox
DEWEMOJI_LICENSE_ACCEPT_ALL=false
DEWEMOJI_PRO_KEYS=
```

## Staging/live setup

Use live mode:

```env
DEWEMOJI_BILLING_MODE=live
DEWEMOJI_LICENSE_ACCEPT_ALL=false
DEWEMOJI_PRO_KEYS=key_1,key_2,key_3
DEWEMOJI_VERIFY_CACHE_TTL=300
DEWEMOJI_GUMROAD_ENABLED=true
DEWEMOJI_GUMROAD_PRODUCT_IDS=prod_abc123
DEWEMOJI_MAYAR_ENABLED=false
DEWEMOJI_MAYAR_API_BASE=https://api.mayar.id
DEWEMOJI_MAYAR_ENDPOINT_VERIFY=/v1/license/verify
DEWEMOJI_MAYAR_SECRET_KEY=
```

## Provider notes

- Gumroad validation uses configured `DEWEMOJI_GUMROAD_VERIFY_URL` + first `DEWEMOJI_GUMROAD_PRODUCT_IDS`.
- Mayar validation uses `DEWEMOJI_MAYAR_VERIFY_URL` + `DEWEMOJI_MAYAR_API_KEY`.
  - Or use `DEWEMOJI_MAYAR_API_BASE` + `DEWEMOJI_MAYAR_ENDPOINT_VERIFY` + `DEWEMOJI_MAYAR_SECRET_KEY`.
- For local QA (no external billing call), you can define:
  - `DEWEMOJI_GUMROAD_TEST_KEYS=dev_key_1,dev_key_2`
  - `DEWEMOJI_MAYAR_TEST_KEYS=dev_key_3`

## API endpoints affected

- `POST /v1/license/verify`
- `POST /v1/license/activate`
- `POST /v1/license/deactivate`
- Tier-aware API access such as `GET /v1/emojis` (free/pro behavior)

## Notes

- Current provider integration is baseline and safe-fallback (`false` on network/API mismatch).
- Keep `DEWEMOJI_PRO_KEYS` for emergency fallback during migration cutover.
- `POST /v1/license/verify` includes provider fields on success: `source`, `plan`, `product_id`, `expires_at`.
- Invalid live checks include `details.gumroad` and `details.mayar` for diagnostics.
