const sdk = require('node-appwrite'); require('dotenv').config({ path: '.env.local' }); // Script para inicializar la colección "SocialAccounts" en Appwrite para la Gestión Multistreaming async function setupMultistreamAppwrite() { console.log("Iniciando setup de Multistreaming en Appwrite..."); const client = new sdk.Client() .setEndpoint(process.env.APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1') .setProject(process.env.APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c') .setKey(process.env.APPWRITE_API_KEY); const databases = new sdk.Databases(client); const DATABASE_ID = process.env.APPWRITE_DATABASE_ID || 'almeira_db'; const COLLECTION_ID = 'social_accounts'; const COLLECTION_NAME = 'Social Accounts (Multistreaming)'; try { // 1. Crear Colección try { await databases.createCollection(DATABASE_ID, COLLECTION_ID, COLLECTION_NAME, [ sdk.Permission.read(sdk.Role.users()), sdk.Permission.write(sdk.Role.users()), // Solo el propio usuario mediante validación de API ]); console.log(`Colección '${COLLECTION_NAME}' creada exitosamente.`); } catch (e) { if (e.code === 409) { console.log(`La colección '${COLLECTION_NAME}' ya existe. Procediendo a verificar atributos...`); } else { throw e; } } // 2. Crear Atributos (Columnas) console.log("Creando atributos para Social Accounts..."); // Identificador del Usuario dueño de la cuenta await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'userId', 255, true); // Plataforma (YOUTUBE, FACEBOOK, TWITCH, TIKTOK, INSTAGRAM, CUSTOM) await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'provider', 50, true); // Tokens de OAuth (Deberían cifrarse antes de guardarse) await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'accessToken', 2048, false); await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'refreshToken', 2048, false); await databases.createDatetimeAttribute(DATABASE_ID, COLLECTION_ID, 'tokenExpiresAt', false); // Perfil en la Plataforma await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAccountId', 255, false); await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAccountName', 255, false); await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAvatarUrl', 1024, false); // Conexión RTMP Directa (Para configuraciones manuales o fallback) await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'rtmpServerUrl', 1024, false); await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'streamKey', 1024, false); // Estado y Metadata await databases.createBooleanAttribute(DATABASE_ID, COLLECTION_ID, 'isActive', false, true, false); console.log("Esperando inicialización de atributos..."); await new Promise(resolve => setTimeout(resolve, 3000)); // 3. Crear Índices console.log("Creando índices..."); // Índice de búsqueda por usuario para obtener sus plataformas rápidamente await databases.createIndex(DATABASE_ID, COLLECTION_ID, 'idx_user_provider', sdk.IndexType.Unique, ['userId', 'provider', 'providerAccountId'], ['ASC', 'ASC', 'ASC']); console.log("¡Setup de Multistreaming finalizado con éxito!"); } catch (error) { console.error("Error durante el setup:", error); } } setupMultistreamAppwrite();