mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* Hero banner: move 'explorer' to new ENV Resolves #3290 * [skip ci] update docs
69 lines
2.7 KiB
JavaScript
Executable File
69 lines
2.7 KiB
JavaScript
Executable File
/* eslint-disable no-console */
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
console.log('🎨 Generating OG image...');
|
|
|
|
const targetFile = path.resolve(process.cwd(), 'public/static/og_image.png');
|
|
|
|
function copyPlaceholderImage() {
|
|
const sourceFile = path.resolve(process.cwd(), 'public/static/og_placeholder.png');
|
|
fs.copyFileSync(sourceFile, targetFile);
|
|
}
|
|
|
|
if (process.env.NEXT_PUBLIC_OG_IMAGE_URL) {
|
|
console.log('⏩ NEXT_PUBLIC_OG_IMAGE_URL is set. Skipping OG image generation...');
|
|
} else if (!process.env.NEXT_PUBLIC_NETWORK_NAME) {
|
|
console.log('⏩ NEXT_PUBLIC_NETWORK_NAME is not set. Copying placeholder image...');
|
|
copyPlaceholderImage();
|
|
} else if (!process.env.NEXT_PUBLIC_NETWORK_LOGO && !process.env.NEXT_PUBLIC_HOMEPAGE_HERO_BANNER_CONFIG) {
|
|
console.log('⏩ Neither NEXT_PUBLIC_NETWORK_LOGO nor NEXT_PUBLIC_HOMEPAGE_HERO_BANNER_CONFIG is set. Copying placeholder image...');
|
|
copyPlaceholderImage();
|
|
} else {
|
|
try {
|
|
const bannerConfig = JSON.parse(process.env.NEXT_PUBLIC_HOMEPAGE_HERO_BANNER_CONFIG?.replaceAll('\'', '"') || '{}');
|
|
const data = {
|
|
title: bannerConfig.text || `${ process.env.NEXT_PUBLIC_NETWORK_NAME } explorer`,
|
|
logo_url: process.env.NEXT_PUBLIC_NETWORK_LOGO_DARK ?? process.env.NEXT_PUBLIC_NETWORK_LOGO,
|
|
background: bannerConfig.background?.[0],
|
|
title_color: bannerConfig.text_color?.[0],
|
|
invert_logo: !process.env.NEXT_PUBLIC_NETWORK_LOGO_DARK,
|
|
app_url: process.env.NEXT_PUBLIC_APP_HOST,
|
|
};
|
|
|
|
console.log('⏳ Making request to OG image generator service...');
|
|
|
|
const controller = new AbortController();
|
|
const timeoutId = setTimeout(() => controller.abort(), 30_000);
|
|
|
|
const response = await fetch('https://bigs.services.blockscout.com/generate/og', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(data),
|
|
signal: controller.signal,
|
|
});
|
|
|
|
clearTimeout(timeoutId);
|
|
|
|
if (response.ok) {
|
|
console.log('⬇️ Downloading the image...');
|
|
const buffer = await response.arrayBuffer();
|
|
const imageBuffer = Buffer.from(buffer);
|
|
fs.writeFileSync(targetFile, imageBuffer);
|
|
} else {
|
|
const payload = response.headers.get('Content-type')?.includes('application/json') ? await response.json() : await response.text();
|
|
console.error('🛑 Failed to generate OG image. Response:', payload);
|
|
console.log('Copying placeholder image...');
|
|
copyPlaceholderImage();
|
|
}
|
|
} catch (error) {
|
|
console.error('🛑 Failed to generate OG image. Error:', error?.message);
|
|
console.log('Copying placeholder image...');
|
|
copyPlaceholderImage();
|
|
}
|
|
}
|
|
|
|
console.log('✅ Done.');
|