'use strict'; const bhttp = require('bhttp'); const redgifs = require('./redgifs'); async function gfycat(host) { const res = await bhttp.get(`https://api.gfycat.com/v1/gfycats/${host.id}`); const data = await res.body; if (data.errorMessage) { const redirectRes = await bhttp.head(host.url, { followRedirects: false, }); if (redirectRes.statusCode === 301) { // Gfycat redirects all NSFW gifs to RedGifs, likely the case return redgifs({ ...host, url: `https://www.redgifs.com/watch/${host.id}`, method: 'redgifs', label: 'redgifs', }); } throw new Error(`Gfycat API returned error for source '${host.url}' (${res.status}): ${data.errorMessage}`); } return { album: null, items: [{ id: data.gfyItem.gfyName, url: data.gfyItem.webmUrl, title: data.gfyItem.title, description: data.gfyItem.description, type: 'video/webm', datetime: new Date(data.gfyItem.createDate * 1000), original: data.gfyItem, }], }; } module.exports = gfycat;