streamflix-api / .env.example
Akshar2325
✨ feat(hls): add hls video processing completion notification
d6edde0
Raw
History Blame
10.4 kB
# ===========================================
# NestJS Starter Template - Environment Config
# ===========================================
# Copy this file to .env and fill in your values
# cp .env.example .env
# Application
APP_URL="http://localhost:3000"
PORT=3000
NODE_ENV="development"
# Render or Hugging Face Deployment (optional)
# BRANCH_NAME=dev
# Database (PostgreSQL)
DATABASE_URL="postgresql://username:password@localhost:5432/database_name?schema=public"
# JWT Configuration
JWT_ACCESS_SECRET="your-super-secret-access-key-min-32-chars"
JWT_REFRESH_SECRET="your-super-secret-refresh-key-min-32-chars"
JWT_ACCESS_EXPIRES_IN="24h"
JWT_REFRESH_EXPIRES_IN="7d"
# Swagger Documentation
SWAGGER_PASSWORD="admin123"
# ===========================================
# GLOBAL API TOKEN PROTECTION
# ===========================================
# Enable/Disable Global API Token Authentication
# Set to "true" to require API token for all endpoints (useful for public deployments on Hugging Face/Render)
# Set to "false" to disable (for local development or trusted environments)
API_TOKEN_ENABLED="false"
# The secret API token that clients must provide in the "x-api-token" header
# Generate a strong random token: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
# Example: API_SECRET_TOKEN="a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"
API_SECRET_TOKEN="your-permanent-api-secret-token-min-64-chars"
# Application
PORT=3000
NODE_ENV="development"
# Brevo Email Service
BREVO_API_KEY="your-brevo-api-key"
BREVO_OTP_EMAIL="noreply@aksharbhesaniya.dev"
BREVO_OTP_TEMPLATE_ID="1"
BREVO_WELCOME_EMAIL="welcome@aksharbhesaniya.dev"
BREVO_WELCOME_TEMPLATE_ID="2"
# Authkey SMS Service (Using Default Template)
AUTHKEY_API_KEY="your-authkey-api-key"
AUTHKEY_COMPANY_NAME="StreamFlix"
# ImageKit.io Credentials
IMAGEKIT_PUBLIC_KEY="your-imagekit-public-key"
IMAGEKIT_PRIVATE_KEY="your-imagekit-private-key"
IMAGEKIT_URL_ENDPOINT="https://ik.imagekit.io/your-imagekit-id"
# Cloudinary Credentials
CLOUDINARY_CLOUD_NAME="your-cloud-name"
CLOUDINARY_API_KEY="your-api-key"
CLOUDINARY_API_SECRET="your-api-secret"
CLOUDINARY_UPLOAD_FOLDER="StreamFlix"
# Uploadcare Storage Configuration
# ===========================
# Uploadcare projects for different file types with signed upload enabled
# Get credentials from: https://app.uploadcare.com/
# Create separate projects for images, videos, and documents
# Project 1: For Images
UPLOADCARE_IMAGE_PUBLIC_KEY=your_image_project_public_key
UPLOADCARE_IMAGE_PRIVATE_KEY=your_image_project_private_key
# Project 2: For Videos
UPLOADCARE_VIDEO_PUBLIC_KEY=your_video_project_public_key
UPLOADCARE_VIDEO_PRIVATE_KEY=your_video_project_private_key
# Project 3: For Documents
UPLOADCARE_DOCUMENT_PUBLIC_KEY=your_document_project_public_key
UPLOADCARE_DOCUMENT_PRIVATE_KEY=your_document_project_private_key
# Supabase Storage Credentials
SUPABASE_PROJECT_URL="https://your-project.supabase.co"
SUPABASE_S3_URL="https://your-project.storage.supabase.co/storage/v1/s3"
SUPABASE_S3_ACCESS_KEY="your-access-key"
SUPABASE_S3_SECRET_KEY="your-secret-key"
SUPABASE_BUCKET="Streamflix"
# Backblaze B2 Storage Credentials
B2_BUCKET_NAME="StreamflixAkshar"
B2_REGION="us-west-004"
B2_S3_ENDPOINT="https://s3.us-west-004.backblazeb2.com"
B2_ACCESS_KEY_ID="your-access-key-id"
B2_SECRET_ACCESS_KEY="your-secret-access-key"
B2_CDN_URL="https://cdn.aksharbhesaniya.dev"
# Cloudflare Cache Purge (for purging cache on delete)
CLOUDFLARE_ZONE_ID="your-zone-id"
CLOUDFLARE_API_TOKEN="your-api-token"
# Filestack Credentials
FILESTACK_API_KEY_DEV="your-filestack-api-key"
FILESTACK_APP_SECRET_DEV="your-filestack-app-secret"
# NewMinio Storage Credentials
NEWMINIO_PROJECT_URL="https://your-minio-instance.com"
NEWMINIO_S3_ENDPOINT="https://your-minio-instance.com"
NEWMINIO_S3_ACCESS_KEY="your-access-key"
NEWMINIO_S3_SECRET_KEY="your-secret-key"
NEWMINIO_BUCKET="streamflix"
NEWMINIO_REGION="us-east-1"
# OldMinio Storage Credentials
OLDMINIO_PROJECT_URL="https://your-old-minio-instance.com"
OLDMINIO_S3_ENDPOINT="https://your-old-minio-instance.com"
OLDMINIO_S3_ACCESS_KEY="your-access-key"
OLDMINIO_S3_SECRET_KEY="your-secret-key"
OLDMINIO_BUCKET="streamflix"
OLDMINIO_REGION="us-east-1"
# SeaweedFS Storage Credentials
SEAWEEDFS_FILER_ENDPOINT="https://your-seaweedfs-instance.com/filer/buckets/your-bucket"
SEAWEEDFS_PUBLIC_URL="https://your-seaweedfs-instance.com/your-bucket"
SEAWEEDFS_ACCESS_KEY="your-access-key"
SEAWEEDFS_SECRET_KEY="your-secret-key"
# Garage Storage Credentials
GARAGE_ENDPOINT="https://your-garage-instance.com"
GARAGE_ACCESS_KEY="your-garage-access-key"
GARAGE_SECRET_KEY="your-garage-secret-key"
GARAGE_BUCKET="stremflix"
# RustFS Storage Credentials (Hugging Face S3-compatible)
RUSTFS_ENDPOINT="https://your-rustfs-instance.hf.space"
RUSTFS_ACCESS_KEY="your-rustfs-access-key"
RUSTFS_SECRET_KEY="your-rustfs-secret-key"
RUSTFS_BUCKET="streamflix"
RUSTFS_REGION="us-east-1"
# IDrive e2 Storage Credentials
IDRIVE_E2_ENDPOINT="https://s3.ap-southeast-1.idrivee2.com"
IDRIVE_E2_REGION="ap-southeast-1"
IDRIVE_E2_ACCESS_KEY="your-idrive-access-key"
IDRIVE_E2_SECRET_KEY="your-idrive-secret-key"
IDRIVE_E2_BUCKET="streamflix"
IDRIVE_E2_CDN_URL="https://idrive-e2-ap-southeast.aksharbhesaniya.dev"
# Wasabi Storage Credentials
WASABI_ENDPOINT="https://s3.us-west-1.wasabisys.com"
WASABI_REGION="us-west-1"
WASABI_ACCESS_KEY_ID="your-wasabi-access-key"
WASABI_SECRET_ACCESS_KEY="your-wasabi-secret-key"
WASABI_BUCKET_NAME="streamflix-backed"
# Dropbox Storage Credentials
DROPBOX_ACCESS_TOKEN="your-dropbox-access-token"
DROPBOX_APP_FOLDER="/StreamflixDev"
# Box.com Storage Credentials (OAuth 2.0)
# Setup: Create a Box Custom App with OAuth 2.0 User Authentication
# Get credentials from: https://app.box.com/developers/console
# Tokens are automatically stored in box-tokens.json after OAuth authorization
BOX_CLIENT_ID="your-box-client-id"
BOX_CLIENT_SECRET="your-box-client-secret"
BOX_REDIRECT_URI="http://localhost:3000/box/oauth/callback"
# To get tokens: Start your server and visit http://localhost:3000/box/oauth/authorize
# Box Folder IDs for organizing uploads (automatically selected based on fileType)
# Get folder IDs from Box.com URL: https://app.box.com/folder/123456789
BOX_STREAMFLIX_FOLDER_ID="358198319436" # Main Streamflix folder (default when no fileType)
BOX_IMAGES_FOLDER_ID="358197066267" # Used when fileType=IMAGE
BOX_VIDEOS_FOLDER_ID="358199692412" # Used when fileType=VIDEO
BOX_DOCUMENTS_FOLDER_ID="358199056099" # Used when fileType=DOCUMENT
# Google Drive Storage Credentials - OAuth2 (For Personal Accounts)
# Follow setup guide in GOOGLE_DRIVE_OAUTH2_SETUP.md
# Step 1: Create OAuth2 credentials in Google Cloud Console
# Step 2: Get authorization by visiting: http://localhost:5119/google-drive/oauth2/authorize
# Step 3: Copy the refresh token and paste it here
GOOGLE_OAUTH2_CLIENT_ID="your-client-id.apps.googleusercontent.com"
GOOGLE_OAUTH2_CLIENT_SECRET="your-client-secret"
GOOGLE_OAUTH2_REDIRECT_URI="http://localhost:5119/google-drive/oauth2callback"
GOOGLE_OAUTH2_REFRESH_TOKEN="your-refresh-token"
GOOGLE_DRIVE_FOLDER_MAIN="your-main-folder-id"
GOOGLE_DRIVE_FOLDER_IMAGES="your-images-folder-id"
GOOGLE_DRIVE_FOLDER_VIDEOS="your-videos-folder-id"
GOOGLE_DRIVE_FOLDER_DOCUMENTS="your-documents-folder-id"
# ============================================
# TWO-FACTOR AUTHENTICATION (2FA) CONFIG
# ============================================
# Brevo Email Template for 2FA Codes
BREVO_2FA_CODE_TEMPLATE_ID="4"
# General 2FA Settings
TWO_FA_CODE_EXPIRY_MINUTES=10
TWO_FA_MAX_ATTEMPTS=5
TWO_FA_CODE_LENGTH=6
# Pending 2FA Token (short-lived JWT issued after password verification)
# Generate: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
PENDING_2FA_TOKEN_SECRET="your_random_secret_min_64_chars_change_this_use_command_above"
PENDING_2FA_TOKEN_EXPIRY="10m"
# TOTP/Authenticator App Configuration
TOTP_APP_NAME="Streamflix Admin"
TOTP_ISSUER="Streamflix"
# Secret encryption key for storing TOTP secrets in DB (AES-256 needs 32 bytes)
# Generate: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
TOTP_ENCRYPTION_KEY="your_encryption_key_64_chars_hex_change_this_use_command_above"
# Recovery Codes
RECOVERY_CODES_COUNT=10
RECOVERY_CODE_LENGTH=8
# Trusted Device Token (long-lived token to skip 2FA on known devices)
# Generate: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
TRUSTED_DEVICE_TOKEN_SECRET="another_random_secret_min_64_chars_change_this_use_command_above"
TRUSTED_DEVICE_TOKEN_EXPIRY="30d"
# Email Template URLs (for template variables)
SUPPORT_URL="https://support.streamflix.com"
SECURITY_URL="https://streamflix.com/security"
PRIVACY_URL="https://streamflix.com/privacy"
COMPANY_ADDRESS="Mumbai, Maharashtra, India"
# WebAuthn/Passkey Configuration (Optional - for future)
WEBAUTHN_RP_NAME="Streamflix Admin"
WEBAUTHN_RP_ID="yourdomain.com"
WEBAUTHN_ORIGIN="https://admin.yourdomain.com"
# For development use localhost
# WEBAUTHN_RP_ID="localhost"
# WEBAUTHN_ORIGIN="http://localhost:3000"
# Push Notification Configuration (Optional - for future)
FCM_SERVER_KEY="your_fcm_server_key_here"
FCM_PROJECT_ID="your_firebase_project_id"
PUSH_APPROVAL_TIMEOUT_MINUTES=2
# Discord Logging via n8n
# ===========================
# These webhook URLs should point to your n8n instance
# Enable/Disable Discord Logging
DISCORD_LOGGING_ENABLED=false
# Webhook for successful API calls (status 200-399)
N8N_DISCORD_LOOGING_WEBHOOK_SUCCESS_URL=https://your-n8n-instance.com/webhook/api-success-log
# Webhook for error API calls (status 400+)
N8N_DISCORD_LOOGING_WEBHOOK_ERROR_URL=https://your-n8n-instance.com/webhook/api-error-log
# Webhook for HLS video processing completion
N8N_DISCORD_HLS_COMPLETE_WEBHOOK_URL=https://your-n8n-instance.com/webhook/hls-processing-complete
# Shlink URL Shortener Configuration
# ===========================
# Shlink instance URL and API key for URL shortening service
SHLINK_URL=https://sasuke734-shlink-shortener.hf.space
SHLINK_API_KEY=33707705d3fc4449b5b468fe4829d6c95cee1e70889a45f39d265a1b654c860a7927ea0b6d234181b46f1cb8232d791f611c35bf681c415895e
# Trim Kutt URL Shortener Configuration
# ===========================
# Kutt instance URL and API key for URL shortening service
TRIM_KUTT_URL=https://trim.aksharbhesaniya.dev
TRIM_KUTT_API_KEY=ABC