fix(number-fields): избегаем потери точности длинных чисел
- number-поля теперь рендерятся как text + inputMode=numeric, чтобы браузер не округлял значения через input type=number - пробелы при вставке в number-поля удаляются - бэкенд нормализует значения number-полей в строку перед сохранением - добавлен хелпер normalizeFieldValueForStorage Closes: искажение расчётного счёта и других длинных числовых полей
This commit is contained in:
113
.env.example
Normal file
113
.env.example
Normal file
@@ -0,0 +1,113 @@
|
||||
# =============================================
|
||||
# Application secrets (required)
|
||||
# =============================================
|
||||
|
||||
# JWT secrets — each token type has its own key (generate with: openssl rand -hex 32)
|
||||
# FATAL: app will NOT start if these are missing
|
||||
JWT_ACCESS_SECRET=your-access-secret-here
|
||||
JWT_REFRESH_SECRET=your-refresh-secret-here
|
||||
JWT_SUPERADMIN_SECRET=your-superadmin-secret-here
|
||||
# Optional: separate secret for bot service tokens (falls back to JWT_ACCESS_SECRET)
|
||||
# JWT_BOT_SECRET=your-bot-secret-here
|
||||
|
||||
# Token expiry (optional — these are the defaults)
|
||||
# JWT_ACCESS_EXPIRES=14d
|
||||
# JWT_REFRESH_EXPIRES_REMEMBER=90d
|
||||
# JWT_REFRESH_EXPIRES_SESSION=30d
|
||||
# JWT_SUPERADMIN_EXPIRES=1h
|
||||
# JWT_BOT_EXPIRES=10m
|
||||
|
||||
# Session secret for express-session (generate with: openssl rand -hex 32)
|
||||
SESSION_SECRET=your-session-secret-here
|
||||
|
||||
# HMAC secret for API key hashing (generate with: openssl rand -hex 32)
|
||||
# Required if using MCP/RAG API keys. Without it the server will throw on key creation/lookup.
|
||||
API_KEY_HMAC_SECRET=your-api-key-hmac-secret-here
|
||||
|
||||
# Web Push VAPID keys (generate with: npx web-push generate-vapid-keys)
|
||||
VAPID_PUBLIC_KEY=your-vapid-public-key
|
||||
VAPID_PRIVATE_KEY=your-vapid-private-key
|
||||
|
||||
# SendGrid API key for transactional email (optional — app works without it)
|
||||
# SENDGRID_API_KEY=SG.xxxxxxxxxxxx
|
||||
|
||||
# =============================================
|
||||
# Database — choose ONE of the two modes below
|
||||
# =============================================
|
||||
|
||||
# --- MODE 1: Neon Cloud (default) ---
|
||||
# Run with: docker compose up --build
|
||||
# Set DATABASE_URL to your Neon connection string:
|
||||
DATABASE_URL=postgresql://user:password@host/dbname?sslmode=require
|
||||
|
||||
# --- MODE 2: Self-hosted PostgreSQL ---
|
||||
# Run with: docker compose --profile with-postgres up --build
|
||||
# Set POSTGRES_* variables below AND update DATABASE_URL above to point
|
||||
# to the Docker "db" service (e.g. postgresql://appuser:password@db:5432/appdb).
|
||||
# DATABASE_URL is NOT auto-constructed — it must be set manually.
|
||||
|
||||
# POSTGRES_DB=appdb
|
||||
# POSTGRES_USER=appuser
|
||||
# POSTGRES_PASSWORD=your-strong-db-password
|
||||
|
||||
# =============================================
|
||||
# File storage — choose ONE of the two modes
|
||||
# =============================================
|
||||
|
||||
# --- MODE 1: Local disk (default, Replit/dev) ---
|
||||
# Files are stored in the uploads/ folder on disk.
|
||||
# No extra variables needed.
|
||||
|
||||
# --- MODE 2: MinIO S3 (recommended for production / "device in a box") ---
|
||||
# Run with: docker compose --profile with-minio up --build
|
||||
# The app automatically switches to S3 mode when MINIO_ENDPOINT is set.
|
||||
|
||||
# MINIO_ENDPOINT=http://minio:9000 # use "minio" as hostname inside Docker network
|
||||
# MINIO_ACCESS_KEY=minioadmin # same as MINIO_ROOT_USER in docker-compose
|
||||
# MINIO_SECRET_KEY=your-strong-minio-password
|
||||
# MINIO_BUCKET=files
|
||||
|
||||
# =============================================
|
||||
# WebDAV (optional, only with with-minio profile)
|
||||
# =============================================
|
||||
# Allows browsing/uploading files via Windows Explorer, Finder, Cyberduck
|
||||
# Access: http://device-ip:8080 (user/pass below)
|
||||
|
||||
# WEBDAV_USER=admin
|
||||
# WEBDAV_PASSWORD=your-webdav-password
|
||||
|
||||
# =============================================
|
||||
# Ollama / Local LLM (optional)
|
||||
# =============================================
|
||||
# Base URL for Ollama server (default: http://localhost:11434)
|
||||
# OLLAMA_BASE_URL=http://ollama:11434
|
||||
|
||||
# Number of CPU threads Ollama should use for inference.
|
||||
# Default: (CPU cores - 1), e.g. 3 on a 4-core server.
|
||||
# OLLAMA_NUM_THREAD=3
|
||||
|
||||
# Context window size (default: 2048). Increase only if you have enough RAM.
|
||||
# OLLAMA_NUM_CTX=2048
|
||||
|
||||
# Allow private/loopback URLs for RAG providers (required for local Ollama)
|
||||
# ALLOW_PRIVATE_RAG_URLS=true
|
||||
|
||||
# =============================================
|
||||
# MCP API Keys (required for external MCP clients like n8n, Cursor, etc.)
|
||||
# =============================================
|
||||
# HMAC secret for hashing API keys. Generate with: openssl rand -hex 32
|
||||
# FATAL: MCP key creation will fail if this is missing
|
||||
# API_KEY_HMAC_SECRET=your-hmac-secret-here
|
||||
|
||||
# =============================================
|
||||
# Public URL of CRM itself — used for presigned document URLs
|
||||
# APP_URL=https://iistwin.ru
|
||||
|
||||
# =============================================
|
||||
# Document Worker (optional — for PDF/DOCX generation)
|
||||
# =============================================
|
||||
# URL of the document-worker microservice (Chromium + LibreOffice).
|
||||
# Inside Docker Compose use the service name:
|
||||
# DOC_WORKER_URL=http://document-worker:3000
|
||||
# For local development without Docker, you can point to an external service:
|
||||
# DOC_WORKER_URL=http://localhost:3000
|
||||
Reference in New Issue
Block a user