// const fetch = require('node-fetch') // // greets chatgpt // async function getFileDetailsFromUrl(url) { // const controller = new AbortController(); // const signal = controller.signal; // const options = { // signal, // }; // let retries = 10; // while (retries) { // console.log(`fetching ${url}`); // const timeoutId = setTimeout(() => { // console.log('fetch timed out, aborting...'); // controller.abort(); // }, 5000); // try { // const res = await fetch(url, options); // clearTimeout(timeoutId); // console.log('finished fetch'); // if (!res.ok) throw new Error(`problem while getting file from url with url ${url}`); // if (!res?.headers?.get('x-bz-file-name')) throw new Error(`${url} did not have a x-bz-file-name in the response headers`); // if (!res?.headers?.get('x-bz-file-id')) throw new Error(`${url} did not have a x-bz-file-id in the response headers`); // return { // key: res.headers.get('x-bz-file-name'), // url: url, // uploadId: res.headers.get('x-bz-file-id'), // }; // } catch (err) { // clearTimeout(timeoutId); // retries--; // if (retries === 0) { // console.error(`Could not fetch file details from URL: ${url}.`); // throw err; // } // console.warn(`Retrying fetch (${retries} attempts left)`); // } // } // } module.exports = { async up(knex) { // You have full access to the Knex.js API with an already initialized connection to the database // we iterate through the local, non-strapi backup db first. // get list of all tags // for each tag // * get list of related vods // * create relation in Strapi // * // Get all VODs from the database const vods = await knex.select('*').from('vods'); // Process each VOD for (const vod of vods) { // courtesy timer await new Promise((resolve) => setTimeout(resolve, 10)) // @todo console.log(vod) // Get the file details from the VOD's video source URL if (vod?.video_src) { try { const fileDetails = await getFileDetailsFromUrl(vod.video_src); // Insert the B2 file into the database const [file] = await knex('b2_files').insert({ url: fileDetails.url, key: fileDetails.key, upload_id: fileDetails.uploadId, }).returning('id'); console.log(file) console.log(`attempting to insert vod_id:${vod.id}, b_2_file_id:${file.id} for videoSrcB2`) // Link the B2 file to the VOD await knex('vods_video_src_b_2_links').insert({ vod_id: vod.id, b_2_file_id: file.id, }); } catch (e) { console.error(e) console.log(`there was an error so we are skipping vod ${vod.id}`) } } else { console.log(`${vod.id} has no video_src. skipping.`) } } }, };