require('../config/config'); const fs = require('fs'); const { google } = require('googleapis'); // const drive = google.drive('v3'); // const credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8')); // const jwtClient = new google.auth.JWT( // credenciales.client_email, // null, // credenciales.private_key, // ['https://www.googleapis.com/auth/drive'] // ); /* const loadCredentials = () => { try { const credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8')); return google.auth.fromJSON(credenciales); } catch (err) { return null; } }; */ const loadCredentials = () => { try { const credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8')); credenciales.private_key = credenciales.private_key.replace(/\\n/g, '\n'); // Asegurar formato correcto return new google.auth.JWT( credenciales.client_email, null, credenciales.private_key, ['https://www.googleapis.com/auth/drive'] ); } catch (err) { console.error('❌ Error cargando credenciales:', err); return null; } }; const list = (pageToken) => { return new Promise(async (resolve, reject) => { // jwtClient.authorize((err, tokens) => { // if (err) reject('Error de autorización: ' + err); const authClient = await loadCredentials(); const drive = google.drive({ version: 'v3', auth: authClient }); drive.files.list( { // auth: jwtClient, corpora: 'user', supportsTeamDrives: true, includeTeamDriveItems: true, spaces: 'drive', pageSize: 1000, pageToken, // fields: '*', orderBy: 'name', }, (err, resp) => { console.log(resp); if (err) reject('Ha habido un error en la petición: ' + err); resolve(resp.data); } ); // }); }); }; // Borrar archivo const deleteFile = (fileId) => { if (fileId === process.env.CARPETA) throw new Error('No se puede eliminar este archivo/carpeta.'); return new Promise(async (resolve, reject) => { // jwtClient.authorize(async (err, tokens) => { // if (err) reject(err); const authClient = await loadCredentials(); const drive = google.drive({ version: 'v3', auth: authClient }); drive.files.delete( { fileId, // auth: jwtClient, }, (err, resp) => { if (err) reject(err); resolve(resp); } ); // }); }); }; // SUBIR ARCHIVO const uploadFile = (path, name, mimeType, parent) => { return new Promise(async (resolve, reject) => { const requestBody = { name, parents: [parent], }; const media = { mimeType, body: fs.createReadStream(`${path}`), }; // jwtClient.authorize(function (err, tokens) { // if (err) reject('Error de autorización: ' + err); const authClient = await loadCredentials(); const drive = google.drive({ version: 'v3', auth: authClient }); drive.files.create( { media, requestBody, fields: 'id', // auth: jwtClient, }, (err, file) => { if (err) reject(err); fs.unlinkSync(path); resolve(file.data.id); } ); // }); }); }; // CREAR CARPETA const mkDir = (name) => { return new Promise(async (resolve, reject) => { const authClient = await loadCredentials(); const drive = google.drive({ version: 'v3', auth: authClient }); const requestBody = { name, mimeType: 'application/vnd.google-apps.folder', parents: [process.env.CARPETA], }; // jwtClient.authorize((err, tokens) => { // if (err) reject('Error de autorización: ' + err); drive.files.create( { fields: 'id', // auth: jwtClient, requestBody, }, (err, res) => { console.log(err); console.log("variable res "); console.log(res); if (err) reject(err); resolve(res.data.id); } ); // }); }); }; // Update File const update = (fileId, addParents, removeParents) => { return new Promise(async (resolve, reject) => { // jwtClient.authorize((err, tokens) => { // if (err) reject('Error de autorización: ' + err); const authClient = await loadCredentials(); const drive = google.drive({ version: 'v3', auth: authClient }); drive.files.update( { auth: jwtClient, fileId, addParents, removeParents }, (err, resp) => { if (err) reject('Ha habido un error en la petición: ' + err); resolve(resp.data); } ); // }); }); }; const folder = async (numeroCuenta) => { let pageToken = ''; do { let res = await list(pageToken); for (let i = 0; i < res.files.length; i++) if ( res.files[i].name === numeroCuenta && res.files[i].mimeType === 'application/vnd.google-apps.folder' ) return res.files[i].id; pageToken = res.nextPageToken ? res.nextPageToken : ''; } while (pageToken); return mkDir(numeroCuenta); }; // const borrarTodo = () => { // return list().then(async (res) => { // for (let i = 0; i < res.files.length; i++) // if (res.files[i].id !== process.env.CARPETA) // await deleteFile(res.files[i].id); // }); // }; const findAll = async () => { const folders = []; const pdfs = []; let pageToken = ''; do { await list(pageToken).then((res) => { for (let i = 0; i < res.files.length; i++) { if (res.files[i].id !== process.env.CARPETA) { if (res.files[i].mimeType === 'application/vnd.google-apps.folder') folders.push(res.files[i].id); if (res.files[i].mimeType === 'application/pdf') pdfs.push(res.files[i].id); } } pageToken = res.nextPageToken ? res.nextPageToken : ''; }); } while (pageToken); return { folders, pdfs }; }; module.exports = { folder, uploadFile, deleteFile, mkDir, };