👋 Bienvenido, {{ currentUsername }}
Panel de gestión de tus clientes
⚡ Acceso rápido
⚠️ Sin créditos disponibles. Contactá al administrador para recargar.
🔌 CONEXIONES ACTIVAS {{ filteredConnections.length }}
| 👤 Usuario | 🌐 IP | 📺 Canal | 📱 Dispositivo | ⏱️ Tiempo |
|---|---|---|---|---|
| {{ conn.username }} | {{ conn.ip }} | {{ conn.stream || '—' }} | {{ conn.deviceIcon }} {{ conn.deviceType }} | {{ conn.since ? formatDuration(Math.round((Date.now() - new Date(conn.since).getTime()) / 1000)) : '—' }} |
Ningún cliente conectado
📊 Distribución Usuarios
📡 Streams por Tipo
🏆 Top Streams
Sin datos
📈 Actividad (3 días)
📡 Ancho de Banda
🔌 CONEXIONES ACTIVAS {{ filteredConnections.length }}
| 👤 Usuario | 🌐 IP | 📺 Canal | 📱 Dispositivo | 📡 Servidor | ⚡ Acciones |
|---|---|---|---|---|---|
| {{ conn.username }} | {{ conn.ip }} | {{ conn.stream }} | {{ conn.deviceIcon }} {{ conn.deviceType }} | 🌐 {{ conn.edge_id }} 🏠 Main |
|
No hay conexiones activas
👥 Gestión de Usuarios
{{ filteredUsers.length }} de {{ users.length }} usuarios
| 👤 Usuario | ⚡ Estado | 📦 Pack | 🔌 Max Conexiones | ⏰ Expira | 🏪 Sector | ⚙️ Acciones | |
|---|---|---|---|---|---|---|---|
|
{{ user.username.charAt(0).toUpperCase() }}
{{ user.username }}
|
{{ user.email || '-' }} | {{ user.status === 'active' ? '✓ Activo' : user.status === 'suspended' ? '⏸ Suspendido' : '✕ Inactivo' }} | {{ getPackageName(user.package_id) }} Sin pack | {{ user.max_connections }} | {{ formatDate(user.expires_at) }} | {{ getSellerName(user.seller_id) }} - |
📺 Live TV - Canales en Vivo 🎬 VOD - Películas 📺 Series 📺 Gestión de Streams
{{ filteredStreams.length }} canales en vivo {{ filteredStreams.length }} películas {{ filteredStreams.length }} series {{ filteredStreams.length }} de {{ streams.length }} items
| #️⃣ ID | 📺 Nombre | 🎭 Tipo | 📁 Categoría | 🏥 Health | ⚡ Estado | ⚙️ Acciones | |
|---|---|---|---|---|---|---|---|
| 📺 Serie | 🎭 Género | 📅 Año | ⭐ Rating | 📊 Temporadas | ⚙️ Acciones | ||
| {{ stream.stream_id }} |
{{ stream.type === 'live' ? '📡' : stream.type === 'vod' ? '🎬' : '📺' }}
{{ stream.name }}
|
{{ stream.type === 'live' ? '📡 LIVE' : stream.type === 'vod' ? '🎬 VOD' : '📺 SERIES' }} | {{ getCategoryName(stream.category_id) }} |
🟢
🔴
🟡
⚪
{{ stream.check_status || 'Sin verificar' }}
{{ stream.response_time_ms }}ms
{{ stream.codec_info.video }} / {{ stream.codec_info.audio }}
{{ stream.codec_info.resolution }}
|
{{ stream.status === 'active' ? '✓ Activo' : '✕ Inactivo' }} ⚡ Always On 🌐 Edges 🏠 Main ↗️ Source 📼 DVR ⏸️ Off |
|
|
|
🎬
{{ serie.name }}
✅ TMDB
|
{{ serie.genre || '-' }} | {{ serie.release_date || '-' }} | ⭐ {{ serie.rating || 'N/A' }} | {{ getSeriesSeasonCount(serie.id) || '0' }} |
|
📁 Gestión de Categorías
{{ filteredCategories.length }} de {{ categories.length }} categorías
| 📁 Nombre | 🎭 Tipo | 🔢 Orden | ⚙️ Acciones |
|---|---|---|---|
|
📁
{{ category.name }}
|
{{ category.type === 'live' ? '📡 LIVE' : category.type === 'vod' ? '🎬 VOD' : '📺 SERIES' }} | #{{ category.sort_order }} |
|
🎬 Gestión de Series
{{ series.length }} series disponibles
| 📺 Serie | 🎭 Género | 📅 Año | ⭐ Rating | 📊 Temporadas | ⚙️ Acciones |
|---|---|---|---|---|---|
|
🎬
{{ serie.name }}
✅ TMDB: {{ serie.tmdb_id }}
⚠️ Sin metadata TMDB
|
{{ serie.genre || '-' }} | {{ serie.release_date || '-' }} | ⭐ {{ serie.rating || 'N/A' }} | {{ getSeriesSeasonCount(serie.id) || '0' }} |
|
⚙️ Configuración del Sistema
{{ systemConfig.length }} parámetros configurables
{{ config.key }}
{{ config.category }}
⚠️ Nota: Cambiar puertos de servicios requiere reiniciar el sistema para aplicar los cambios.
🔧 Configuración de Buffering
Controla el rendimiento y velocidad de streaming
Tamaño del buffer para canales en vivo desde URLs remotas (bytes)
Tamaño del buffer para películas y series locales (bytes)
Límite de dispositivos conectados al mismo tiempo
Tiempo de validez del token de streaming antes de expirar
ℹ️ Nota: Los cambios se aplican inmediatamente a nuevas conexiones. Las sesiones activas mantienen su configuración actual.
📡 Gestión EPG
Editá la URL fuente, guardá con el ícono ✏️ arriba y ejecutá la actualización manual.
⏰ Actualización automática: todos los días a las 04:00 AM
📊 Monitoreo del Sistema
🚦 Estado de Servicios
🔒 Seguridad y Control de Acceso
Gestiona conexiones, bloqueos y límites
🔌 Conexiones Activas
| 👤 Usuario | 🌐 IP | 📺 Canal | 📡 Servidor | 🕒 Desde | ⚡ Acciones |
|---|---|---|---|---|---|
| {{ conn.username }} | {{ conn.ip }} | {{ conn.stream }} | 🌐 {{ conn.edge_id }} 🏠 Main | {{ formatDateTime(conn.since) }} |
|
🚫 IPs Bloqueadas
| IP Address | Razón | Bloqueado | Expira | Estado | Acciones |
|---|---|---|---|---|---|
| {{ entry.ip_address }} | {{ entry.reason || '-' }} | {{ formatDateTime(entry.blocked_at) }} | {{ entry.expires_at ? formatDateTime(entry.expires_at) : 'Permanente' }} | BLOQUEADO EXPIRADO |
|
| No hay IPs bloqueadas | |||||
⚠️ Intentos de Conexión Bloqueados
Registro de intentos rechazados por límite de conexiones o IP bloqueada
| Fecha | Usuario | IP | Razón | Stream | Acciones |
|---|---|---|---|---|---|
| {{ formatDateTime(attempt.attempted_at) }} | {{ attempt.username }} | {{ attempt.ip_address }} | LÍMITE EXCEDIDO IP BLOQUEADA {{ attempt.reason }} | {{ attempt.stream_name || '-' }} |
|
| No hay intentos bloqueados registrados | |||||
📊 Límites de Conexión por Usuario
Configura cuántos dispositivos pueden conectarse simultáneamente
| Usuario | Límite Actual | Modo | Acciones | |
|---|---|---|---|---|
| {{ user.username }} | {{ user.email || '-' }} | {{ user.max_connections || 1 }} | 🔒 ESTRICTO 🏠 HOUSEHOLD 🌐 FLEXIBLE |
|
| No hay usuarios registrados | ||||
🚫 Bloquear Dirección IP
Dejar vacío para bloqueo permanente
📊 Configurar Límite de Conexión
Usuario: {{ limitForm.username }}
Dispositivos que pueden reproducir al mismo tiempo
🔒 El usuario solo puede conectarse desde un mismo IP. Si cambia de red, la sesión anterior se corta. 🏠 Se permiten hasta N IPs distintos. Configurable globalmente en Tab Configuración → Conexiones. 🌐 Sin restricción de origen. El usuario puede conectarse desde cualquier red o dispositivo.
🔐 Cambiar mi contraseña
{{ currentUsername }}
📦 Gestión de Packs
Definí qué contenido ve cada tipo de usuario
| Pack | Categorías | 🎬 VOD | 📺 Series | 👥 Usuarios | Acciones | |
|---|---|---|---|---|---|---|
|
{{ pkg.name }}
{{ pkg.description }}
Default
|
{{ cat.category_name }}
Ninguna
|
{{ pkg.include_vod ? '✅' : '❌' }} | {{ pkg.include_series ? '✅' : '❌' }} | {{ pkg.user_count || 0 }} |
|
|
| No hay packs creados | ||||||
{{ editingPackage ? '✏️ Editar Pack' : '➕ Nuevo Pack' }}
🏪 Gestión de Sectores
Administrá tus sectores y sus créditos
| Sector | Estado | 💳 Créditos | Registrado | Acciones | |
|---|---|---|---|---|---|
| No hay sectores registrados | |||||
|
{{ seller.username }}
|
{{ seller.email }} | {{ seller.status === 'active' ? 'Activo' : 'Inactivo' }} | {{ seller.credits_balance }} | {{ formatDate(seller.created_at) }} |
|
{{ editingSeller ? '✏️ Editar Sector' : '🏪 Nuevo Sector' }}
Cada crédito permite crear 1 usuario por 30 días
💳 Agregar Créditos
Sector: {{ selectedSeller?.username }}
Balance actual: {{ selectedSeller?.credits_balance }} créditos
Nuevo balance: {{ (selectedSeller?.credits_balance || 0) + addCreditsAmount }} créditos
🌐 Edge CDN
Nodos de distribución de contenido
Sin Edge Nodes
Agregá un nodo CDN para distribuir el contenido geográficamente
{{ edge.name }}
{{ edge.id }} · {{ edge.region || 'Sin región' }}
{{ edge.url }}
📡 Sesiones de Streaming
Historial de reproducciones
| 📅 Fecha/Hora | 👤 Usuario | 📺 Canal | 🌐 IP | 📱 Dispositivo | ⏱️ Duración | Estado |
|---|---|---|---|---|---|---|
| {{ formatLogDate(log.started_at) }} | {{ log.username }} | {{ log.stream_name }} | {{ log.ip_address }} | {{ log.device_type === 'phone' ? '📱' : log.device_type === 'tv' ? '📺' : '💻' }} {{ log.device_name || log.device_type }} — | {{ formatSessionDuration(log.started_at, log.ended_at) }} | 🟢 Vivo Finalizado |
No hay registros
🔑 Intentos de Activación
Códigos de activación utilizados
| 📅 Fecha/Hora | 🔑 Código | 🌐 IP | Resultado |
|---|---|---|---|
| {{ formatLogDate(log.attempted_at) }} | {{ log.code_tried || '—' }} | {{ log.ip_address }} | ✅ OK ❌ Fallo |
No hay intentos de activación registrados
🔐 Accesos al Sistema
Login exitosos y fallidos (panel + app)
| 📅 Fecha/Hora | 👤 Usuario | 🌐 IP | 📱 User-Agent | Resultado | Motivo |
|---|---|---|---|---|---|
| {{ formatLogDate(log.created_at) }} | {{ log.username || '—' }} | {{ log.ip_address }} | ✅ OK ❌ Fallo | {{ log.failure_reason || '—' }} |
No hay registros de acceso
📝 Auditoría
Cambios administrativos (crear, editar, eliminar)
| 📅 Fecha/Hora | 👤 Quién | 🏷️ Rol | ⚡ Acción | 📦 Recurso | 🌐 IP | 📋 Detalle |
|---|---|---|---|---|---|---|
| {{ formatLogDate(log.created_at) }} | {{ log.actor_username || '—' }} | {{ log.actor_role }} | {{ log.action }} | {{ log.resource_type }} ({{ log.resource_name }}) | {{ log.ip_address || '—' }} |
No hay registros de auditoría
⚠️ Eventos de Seguridad
IPs bloqueadas, tokens rechazados, actividad sospechosa
| 📅 Fecha/Hora | Severidad | Tipo | 🌐 IP | 👤 Usuario | Descripción |
|---|---|---|---|---|---|
| {{ formatLogDate(ev.created_at) }} | {{ ev.severity === 'critical' ? '🔴' : ev.severity === 'warning' ? '🟡' : '🔵' }} {{ ev.severity }} | {{ ev.event_type }} | {{ ev.ip_address || '—' }} | {{ ev.username || '—' }} | {{ ev.description }} |
No hay eventos de seguridad registrados
{{ editingEdge ? '✏️ Editar Edge' : '➕ Nuevo Edge' }}
Identificador único (no se puede cambiar)
▶️ Reproductor Web
{{ currentStreamName }}