/* eslint-disable @next/next/no-img-element */ import crypto from "node:crypto" import { env } from "@/env/server" import { StaticMapProps } from "@/types/components/maps/staticMap/staticMap" function removeWebSafe(safeEncodedString: string) { return safeEncodedString.replace(/-/g, "+").replace(/_/g, "/") } function makeWebSafe(encodedString: string) { return encodedString.replace(/\+/g, "-").replace(/\//g, "_") } function decodeBase64Hash(code: string) { return Buffer.from(code, "base64") } function encodeBase64Hash(key: Buffer, data: string) { return crypto.createHmac("sha1", key).update(data).digest("base64") } export default function StaticMap({ city, width, height, zoomLevel, mapType, }: StaticMapProps) { const key = env.GOOGLE_STATIC_MAP_KEY const secret = env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET const safeSecret = decodeBase64Hash(removeWebSafe(secret ?? "")) const url = new URL( `https://maps.googleapis.com/maps/api/staticmap?center=${city}&zoom=${zoomLevel}&size=${width}x${height}&maptype=${mapType}&key=${key}` ) const hashedSignature = makeWebSafe( encodeBase64Hash(safeSecret, url.pathname + url.search) ) const src = url.toString() + "&signature=" + hashedSignature return {`Map }