Data Handling & Security
Technische Details zu Event-Processing, Token-Encryption, Quota-Accounting und Audit-Trails. Für Agenturen, Unternehmen und technische Entscheider.
Systemprinzipien
Replyra ist auf "minimale Speicherung + nachvollziehbare Aktionen" ausgelegt.
Keine vollständigen Webhook Bodies in der DB.
Dedup by constraint (keine race-prone SELECT-before-INSERT Logik).
Tokens application-layer verschlüsselt; Klartext nur in-memory.
Events, Dedup & Idempotency
Doppelte Antworten werden über DB-enforced Dedup verhindert.
Constraint: UNIQUE(profile_id, event_id, type)
Dedup Marker: type='event_received' (einziger authoritativer Claim)
Flow
1. Router → stabilen event_id berechnen (Meta-Felder, sonst deterministischer sha256-Fallback) 2. INSERT INTO activity_logs (…, type='event_received') ON CONFLICT DO NOTHING 3. Wenn bereits vorhanden: → 200 OK, keine Verarbeitung, kein n8n, keine Reply
Token Encryption
Tokens werden application-layer verschlüsselt gespeichert.
Algorithm: AES-256-GCM
Stored: ciphertext (base64), iv (96-bit), tag (128-bit), key_version
AAD: profile_id (bindet Ciphertext an Profil, verhindert Swapping)
Key Rotation: ENCRYPTION_KEY_Vn + LATEST_ENCRYPTION_KEY_VERSION
Invariante: Plaintext existiert nur in-memory zur Laufzeit (für API Calls). Wird nicht persistiert, nicht geloggt.
Quota Accounting
Abrechnung erfolgt auf Basis der durchgeführten Antworten.
Zähler: stats_replies_today auf Profil-Ebene
Limit Source: DB-authoritative (profiles → app_users.subscription_tier)
Tier Limit Authority: Limits kommen ausschließlich aus der DB. Client-supplied tier/limit Felder werden ignoriert.
Audit Trail
activity_logs dient als Audit Trail.
Log Types
event_received(immutable)comment_received(incoming comment)message_received(incoming DM)n8n_job(processing state)reply_out(confirmation)Access, RLS & Service Role
Frontend
RLS enforced: auth.uid() = user_id
Router / Jobs
Service Role (Bypass RLS) für Webhook Processing, Retry, Global Ops
Profile Killswitch: is_active stoppt Verarbeitung auf Router-Ebene. Nutzer können die Automatisierung jederzeit im Dashboard deaktivieren.
Retention
Audit Logs: 30 Tage, danach automatisch gelöscht/purged
Ziel: Nachvollziehbarkeit ohne dauerhafte Datensammlung
