- Rebuild JavaScript library with delayed control panel initialization - Update server assets to include latest UI behavior changes - Ensure built assets reflect invisible UI for regular visitors The control panel now only appears after gate activation, maintaining the invisible CMS principle for end users.
412 lines
10 KiB
Markdown
412 lines
10 KiB
Markdown
# Insertr Command Reference
|
|
|
|
Complete reference for the unified `insertr` binary commands, configuration, and usage patterns.
|
|
|
|
## 🔧 Command Overview
|
|
|
|
```bash
|
|
insertr [global-flags] <command> [command-flags] [arguments]
|
|
```
|
|
|
|
## 📚 Global Flags
|
|
|
|
Available for all commands:
|
|
|
|
| Flag | Environment Variable | Description | Default |
|
|
|------|---------------------|-------------|---------|
|
|
| `--config` | N/A | Config file path | `./insertr.yaml` |
|
|
| `--db` | `INSERTR_DB_PATH` | Database path or connection string | `./insertr.db` |
|
|
| `--api-url` | `INSERTR_API_URL` | Remote content API URL | `""` |
|
|
| `--api-key` | `INSERTR_API_KEY` | API authentication key | `""` |
|
|
| `--site-id` | `INSERTR_SITE_ID` | Site identifier for content | `"demo"` |
|
|
| `--help` | N/A | Show help information | N/A |
|
|
| `--version` | N/A | Show version information | N/A |
|
|
|
|
## 🔨 enhance Command
|
|
|
|
Build-time content injection - processes HTML files and injects database content.
|
|
|
|
```bash
|
|
insertr enhance [input-dir] [flags]
|
|
```
|
|
|
|
### Arguments
|
|
- `input-dir` - Directory containing HTML files to enhance (required)
|
|
|
|
### Flags
|
|
| Flag | Description | Default |
|
|
|------|-------------|---------|
|
|
| `--output`, `-o` | Output directory for enhanced files | `./dist` |
|
|
| `--mock` | Use mock content for development | `true` |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Basic enhancement with mock data
|
|
./insertr enhance demo-site/
|
|
|
|
# Production build with custom output
|
|
./insertr enhance src/ --output ./build --mock=false
|
|
|
|
# Use remote API for content
|
|
./insertr enhance src/ --api-url https://cms.example.com --api-key xyz123
|
|
|
|
# Use local database
|
|
./insertr enhance src/ --db ./content.db
|
|
|
|
# Custom site ID
|
|
./insertr enhance src/ --site-id production
|
|
```
|
|
|
|
### Content Sources Priority
|
|
1. Remote API (if `--api-url` provided)
|
|
2. Local database (if `--db` points to valid database)
|
|
3. Mock content (if `--mock=true` or fallback)
|
|
|
|
## 🔌 serve Command
|
|
|
|
Runtime API server - provides HTTP endpoints for content management and server-hosted static site enhancement.
|
|
|
|
```bash
|
|
insertr serve [flags]
|
|
```
|
|
|
|
### Flags
|
|
| Flag | Description | Default |
|
|
|------|-------------|---------|
|
|
| `--port`, `-p` | HTTP server port | `8080` |
|
|
| `--dev-mode` | Enable development mode features | `false` |
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Development server
|
|
./insertr serve --dev-mode
|
|
|
|
# Production server
|
|
./insertr serve --port 80
|
|
|
|
# Custom database
|
|
./insertr serve --db ./production.db
|
|
|
|
# PostgreSQL database
|
|
./insertr serve --db "postgresql://user:pass@localhost:5432/insertr"
|
|
|
|
# Custom configuration
|
|
./insertr --config production.yaml serve
|
|
```
|
|
|
|
### Server-Hosted Static Sites
|
|
|
|
When running `insertr serve`, the server automatically:
|
|
- **Registers sites** from `insertr.yaml` configuration
|
|
- **Enhances static files** with latest database content
|
|
- **Auto-updates files** when content changes via API
|
|
|
|
|
|
**Live Enhancement Process:**
|
|
1. Content updated via API → Database updated
|
|
2. If site has `auto_enhance: true` → File enhancement triggered
|
|
3. Static files updated in-place → Changes immediately live
|
|
|
|
### API Endpoints
|
|
|
|
When running `insertr serve`, these endpoints are available:
|
|
|
|
#### Health Check
|
|
- `GET /health` - Server health status
|
|
|
|
#### Content Management
|
|
- `GET /api/content?site_id={site}` - Get all content for site
|
|
- `GET /api/content/{id}?site_id={site}` - Get single content item
|
|
- `GET /api/content/bulk?site_id={site}&ids[]={id1}&ids[]={id2}` - Get multiple items
|
|
- `POST /api/content` - Create or update content (upsert)
|
|
- `DELETE /api/content/{id}?site_id={site}` - Delete content
|
|
|
|
#### Site Enhancement
|
|
- `POST /api/enhance?site_id={site}` - Manually trigger site file enhancement
|
|
|
|
#### Version Control
|
|
- `GET /api/content/{id}/versions?site_id={site}` - Get content history
|
|
- `POST /api/content/{id}/rollback` - Rollback to previous version
|
|
|
|
#### Authentication
|
|
- `GET /auth/login` - Initiate OAuth flow (returns redirect URL for Authentik)
|
|
- `GET /auth/callback` - OAuth callback handler (processes authorization code)
|
|
|
|
### Content Management API Details
|
|
|
|
#### Create/Update Content (Upsert)
|
|
```
|
|
POST /api/content[?site_id={site}]
|
|
```
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"id": "optional-content-id",
|
|
"site_id": "site-identifier",
|
|
"value": "content-value",
|
|
"type": "text|markdown|link",
|
|
"element_context": {
|
|
"tag": "h1",
|
|
"classes": ["insertr", "title"],
|
|
"original_content": "Default Title",
|
|
"parent_context": "hero-section"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Key Features:**
|
|
- **Automatic ID Generation**: If no `id` provided, generates deterministic ID from `element_context`
|
|
- **Content Type Detection**: Automatically determines type if not specified
|
|
- **Version History**: Preserves existing content as version before update
|
|
- **Flexible Site ID**: Can be provided in URL parameter or request body
|
|
- **Auto-Enhancement**: Triggers file enhancement if site has `auto_enhance: true`
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"id": "generated-or-provided-id",
|
|
"site_id": "site-identifier",
|
|
"value": "content-value",
|
|
"type": "text|markdown|link",
|
|
"created_at": "2024-01-01T00:00:00Z",
|
|
"updated_at": "2024-01-01T00:00:00Z",
|
|
"last_edited_by": "user-id"
|
|
}
|
|
```
|
|
|
|
**Usage Examples:**
|
|
|
|
```bash
|
|
# Create with automatic ID generation
|
|
curl -X POST http://localhost:8080/api/content?site_id=demo \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"value": "New Homepage Title",
|
|
"element_context": {
|
|
"tag": "h1",
|
|
"classes": ["insertr"],
|
|
"original_content": "Welcome"
|
|
}
|
|
}'
|
|
|
|
# Update existing content by ID
|
|
curl -X POST http://localhost:8080/api/content \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"id": "homepage-title-abc123",
|
|
"site_id": "demo",
|
|
"value": "Updated Title",
|
|
"type": "text"
|
|
}'
|
|
|
|
# Create markdown content
|
|
curl -X POST http://localhost:8080/api/content?site_id=demo \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"value": "# New Article\n\nThis is **markdown** content.",
|
|
"type": "markdown",
|
|
"element_context": {
|
|
"tag": "div",
|
|
"classes": ["insertr", "content"]
|
|
}
|
|
}'
|
|
```
|
|
|
|
## ⚙️ Configuration
|
|
|
|
### YAML Configuration File
|
|
|
|
Default file: `insertr.yaml`
|
|
|
|
```yaml
|
|
# Database configuration
|
|
database:
|
|
path: "./insertr.db" # SQLite file or PostgreSQL connection
|
|
|
|
# Remote API configuration
|
|
api:
|
|
url: "" # Content API URL
|
|
key: "" # API key
|
|
|
|
# Server configuration
|
|
server:
|
|
port: 8080 # HTTP port
|
|
dev_mode: false # Development mode
|
|
|
|
# Build configuration
|
|
build:
|
|
input: "./src" # Default input directory
|
|
output: "./dist" # Default output directory
|
|
|
|
# Authentication configuration
|
|
auth:
|
|
provider: "mock" # "mock", "authentik"
|
|
jwt_secret: "" # JWT signing secret (auto-generated in dev)
|
|
oidc: # Authentik OIDC configuration
|
|
endpoint: "" # https://auth.example.com/application/o/insertr/
|
|
client_id: "" # OAuth2 client ID
|
|
client_secret: "" # OAuth2 client secret
|
|
|
|
# Global settings
|
|
site_id: "demo" # Site identifier
|
|
mock_content: false # Use mock data
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
All configuration can be set via environment variables:
|
|
|
|
```bash
|
|
export INSERTR_DB_PATH="./content.db"
|
|
export INSERTR_API_URL="https://api.example.com"
|
|
export INSERTR_API_KEY="your-api-key"
|
|
export INSERTR_SITE_ID="production"
|
|
|
|
# Authentication environment variables (recommended for production)
|
|
export AUTHENTIK_CLIENT_SECRET="your-oidc-secret"
|
|
export AUTHENTIK_ENDPOINT="https://auth.example.com/application/o/insertr/"
|
|
|
|
./insertr serve
|
|
```
|
|
|
|
### Configuration Precedence
|
|
|
|
1. **CLI flags** (highest priority)
|
|
2. **Environment variables**
|
|
3. **YAML configuration file**
|
|
4. **Built-in defaults** (lowest priority)
|
|
|
|
## 📋 Usage Patterns
|
|
|
|
### Development Workflow
|
|
|
|
```bash
|
|
# Start full development environment
|
|
just dev # Uses justfile for convenience
|
|
|
|
# Manual development setup
|
|
./insertr serve --dev-mode --db ./dev.db &
|
|
npm run demo # Start demo site
|
|
|
|
# Hot reload development
|
|
air # Uses .air.toml configuration
|
|
```
|
|
|
|
### Production Deployment
|
|
|
|
```bash
|
|
# Build static site with content
|
|
./insertr enhance ./src --output ./dist --api-url https://api.prod.com
|
|
|
|
# Start production API server with authentication
|
|
export AUTHENTIK_CLIENT_SECRET="prod-secret"
|
|
./insertr serve --db "postgresql://user:pass@db:5432/prod"
|
|
|
|
# With custom configuration
|
|
./insertr --config ./production.yaml serve
|
|
```
|
|
|
|
### Authentication Setup
|
|
|
|
#### Mock Authentication (Development)
|
|
```bash
|
|
# Default - no setup required
|
|
./insertr serve --dev-mode
|
|
|
|
# Configuration
|
|
auth:
|
|
provider: "mock"
|
|
```
|
|
|
|
#### Authentik OIDC (Production)
|
|
```bash
|
|
# Set environment variables (recommended)
|
|
export AUTHENTIK_CLIENT_SECRET="your-secret-from-authentik"
|
|
export AUTHENTIK_ENDPOINT="https://auth.example.com/application/o/insertr/"
|
|
|
|
# Start server
|
|
./insertr serve
|
|
```
|
|
|
|
**Required Authentik Configuration:**
|
|
1. Create OAuth2/OIDC Provider in Authentik
|
|
2. Set redirect URI: `https://your-domain.com/auth/callback`
|
|
3. Note the endpoint URL and client credentials
|
|
4. Configure in `insertr.yaml` or environment variables
|
|
|
|
### CI/CD Integration
|
|
|
|
```yaml
|
|
# GitHub Actions example
|
|
- name: Build with Insertr
|
|
run: |
|
|
./insertr enhance ./public --output ./dist
|
|
|
|
- name: Deploy enhanced site
|
|
uses: peaceiris/actions-gh-pages@v3
|
|
with:
|
|
publish_dir: ./dist
|
|
```
|
|
|
|
## 🚨 Error Handling
|
|
|
|
### Common Issues
|
|
|
|
**Database Connection Errors:**
|
|
```bash
|
|
# Check database path
|
|
./insertr --db ./nonexistent.db serve
|
|
# Error: failed to initialize database
|
|
|
|
# Solution: Verify database path or use --mock for development
|
|
./insertr serve --dev-mode # Creates ./insertr.db automatically
|
|
```
|
|
|
|
**Port Already in Use:**
|
|
```bash
|
|
# Error: listen tcp :8080: bind: address already in use
|
|
|
|
# Solution: Use different port
|
|
./insertr serve --port 3001
|
|
```
|
|
|
|
**Missing Input Directory:**
|
|
```bash
|
|
# Error: Input directory does not exist
|
|
|
|
# Solution: Verify path exists
|
|
ls -la ./src
|
|
./insertr enhance ./src
|
|
```
|
|
|
|
## 🔍 Debugging
|
|
|
|
### Verbose Logging
|
|
|
|
```bash
|
|
# Enable development mode for more detailed output
|
|
./insertr serve --dev-mode
|
|
|
|
# Check server health
|
|
curl http://localhost:8080/health
|
|
```
|
|
|
|
### Configuration Validation
|
|
|
|
```bash
|
|
# Test configuration loading
|
|
./insertr --config ./test.yaml --help
|
|
|
|
# Verify environment variables
|
|
./insertr serve --help # Shows resolved configuration values
|
|
```
|
|
|
|
---
|
|
|
|
For more examples and integration patterns, see:
|
|
- [Main README](README.md) - Getting started and overview
|
|
- [Integration Summary](INTEGRATION-SUMMARY.md) - Architecture details
|
|
- [Development Guide](DEVELOPMENT.md) - Contributing and setup |