Files
Lawrence Hook d6e642b962 version 4.3.71
2026-02-15 18:52:44 -05:00

1.9 KiB

RYS Premium Server

Backend server for the premium subscription system.

Quick Start

# Install dependencies
npm install

# Copy env and fill in values
cp .env.example .env

# Run tests
npm test

# Start development server
npm run dev

# Start production server
npm start

API Endpoints

Endpoint Method Auth Description
/health GET No Health check
/auth/send-magic-link POST No Send magic link email
/auth/verify GET No Magic link target (HTML)
/auth/poll GET No Poll for verification status
/license/check GET Yes Check premium status
/checkout/create POST Yes Create Stripe checkout session
/checkout/success GET No Success page (HTML)
/checkout/cancel GET No Cancel page (HTML)
/billing/portal POST Yes Create billing portal session
/billing/return GET No Return page (HTML)
/webhook/stripe POST No* Stripe webhook

*Authenticated via Stripe signature

File Structure

server/
├── src/
│   ├── index.js        # Entry point
│   ├── config.js       # Configuration
│   ├── routes/         # Express routes
│   ├── services/       # Stripe, JWT, email
│   └── storage/        # File-based storage
├── data/
│   ├── grandfathered.json   # Donor emails (gitignored)
│   ├── auth-requests/       # Pending auth (auto-created)
│   └── rate-limits/         # Rate limit counters (auto-created)
├── tests/
└── package.json

Grandfathered Users

Past donors get lifetime premium. Store emails in data/grandfathered.json:

["donor1@example.com", "donor2@example.com"]

This file is gitignored. See data.example/ for format.

Full Documentation

See DEPLOYMENT.md for complete setup, deployment, and testing instructions.