Ok, muchas veces las cosas se complican un poco más de la cuenta, y es en ese momento cuando requerimos el uso de accesos alternativos a diversos servicios. En este paso, requerimos actualizar un archivo almacenado en el servicio S3 de IBM Cloud.
Lo primero que debemos hacer, es solicitar el token para autenticarnos y que nos autorice a realizar los cambios, para ello ocupamos la función getToken...
const fs = require('fs');
const axios = require('axios').default;
const FormData = require('form-data');
require('dotenv').config()
const getToken = async () => {
    const headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    const bodyFormData = new URLSearchParams()
    bodyFormData.append('grant_type', process.env.GRANT_TYPE);
    bodyFormData.append('apikey', process.env.API_KEY);
    const url = process.env.URL_TOKEN;
        
    try {
            
        const resp = await axios.post(url, bodyFormData, { headers: headers});
        return(resp.data.access_token)
    } catch (err) {
    
        console.error(err);
    
    }
};
Luego, con el token, debemos borrar el archivo. Lo cual realizaremos con la función deleteReport, a la cual le pasamos el token y el nombre del archivo a borrar:
const deleteReport = async (token, file) => {
    const headers = {
        'Content-Type': 'application/pdf',
        'ibm-service-instance-id': process.env.IBM_SERVICE_INSTANCE_ID,
        'Authorization': `Bearer ${token}`
    }
    const url = process.env.URL_S3 + file;
    try {
            
        const resp = await axios.delete(url, { headers: headers });
    
    } catch (err) {
    
        console.error(err);
    
    }
};
Finalmente, usamos la función putReport, pasándole el token y el archivo a subir para que se almacene en nuestro servicio S3 de IBM.
const putReport = async (token, reportFile) => {
    const headers = {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/pdf'
    }
    const bodyFormData = new FormData()
    bodyFormData.append('file', fs.createReadStream(reportFile)); 
    const url = process.env.URL_S3 + reportFile;
        
    try {
            
        const resp = await axios.put(url, bodyFormData, { headers: headers });
    } catch (err) {
    
        console.error(err);
    
    }
};
