Files
RSync-Studio/Docs/PADDLE_SANDBOX_CHECKOUT.md

52 lines
2.4 KiB
Markdown
Executable File

# Paddle sandbox checkout
Rsync Studio's licensing site now hosts a Paddle sandbox checkout at:
- `https://rsync.stage.absdev.net/buy`
The macOS app opens this page from the Licence and General settings screens.
## Stage environment
The stage `.env` must contain:
```dotenv
PADDLE_CLIENT_SIDE_TOKEN=test_...
PADDLE_ENVIRONMENT=sandbox
RSYNC_STUDIO_PURCHASE_URL=https://rsync.stage.absdev.net/buy
RSYNC_STUDIO_PORTAL_URL=https://rsync.stage.absdev.net/portal
RSYNC_STUDIO_SUPPORT_URL=https://rsync.stage.absdev.net/support
```
Keep `PADDLE_API_KEY` server-side. It must never be added to the macOS app or browser JavaScript.
The four Paddle catalog IDs remain configured through `PADDLE_PERSONAL_*` and `PADDLE_PROFESSIONAL_*` variables.
## Checkout behavior
- Paddle.js is initialized with the sandbox client-side token.
- Prices are localized with `Paddle.PricePreview()` when available, with the agreed GBP prices as a fallback.
- Each plan opens Paddle's overlay checkout using the configured price ID.
- All plans advertise the configured 7-day Paddle trial.
- A successful Paddle subscription webhook provisions the licence and creates the encrypted delivery outbox record.
- After webhook processing, pending licence keys are sent by email on a best-effort basis without rolling back the verified webhook if mail delivery is temporarily unavailable.
## macOS stage configuration
The app is configured for:
- API: `https://rsync.stage.absdev.net/api/`
- Buy: `https://rsync.stage.absdev.net/buy`
- Portal: `https://rsync.stage.absdev.net/portal`
- Support: `https://rsync.stage.absdev.net/support`
- The current stage Ed25519 licence public key is embedded in `Info.plist`.
The signing private seed remains server-only.
## Remote portal deactivation
Rsync Studio revalidates an installed licence against `POST /api/v1/validate` on launch/resume and every 24 hours while running. The validation endpoint reads only the local licensing database; it does **not** call Paddle and therefore does not add Paddle API usage or transaction charges.
A successful validation refreshes the signed licence token so subscription entitlement changes are picked up. If an installation was deactivated in the customer portal, the server returns HTTP 403 and the app removes its local token immediately. Temporary network/server failures retain the locally signed licence for up to three days; after that grace period the app requires an online validation.