redirecter for ao3 that adds opengraph metadata

FIX THE PREVIEWS AGAIN. LOL

Changed files
+19 -7
src
app
api
series
[seriesId]
works
[workId]
chapters
[chapterId]
generator
series
[seriesId]
preview
works
[workId]
chapters
[chapterId]
preview
lib
+1 -1
src/app/api/series/[seriesId]/route.js
···
console.log(seriesId)
console.log(archive)
const domain = await req.nextUrl.hostname
-
const subdomain = domain.split(".").length > 1 ? domain.split(".")[0] : null
+
const subdomain = domain.split(".").length > 2 ? domain.split(".")[0] : null
if (subdomain) setArchiveBaseUrl('https://'+subdomain)
if (archive) setArchiveBaseUrl(archive)
const series = await getSeries({seriesId: seriesId})
+1 -1
src/app/api/works/[workId]/chapters/[chapterId]/route.js
···
const { workId, chapterId } = await ctx.params
const params = await req.nextUrl.searchParams
const domain = await req.nextUrl.hostname
-
const subdomain = domain.split(".").length > 1 ? domain.split(".")[0] : null
+
const subdomain = domain.split(".").length > 2 ? domain.split(".")[0] : null
const archive = params ? params.get('archive') : null
if (subdomain) setArchiveBaseUrl('https://'+siteMap[subdomain])
if (archive) setArchiveBaseUrl(archive)
+1 -1
src/app/api/works/[workId]/route.js
···
const { workId } = await ctx.params
const params = await req.nextUrl.searchParams
const domain = await req.nextUrl.hostname
-
const subdomain = (domain.split(".").length > 1) ? domain.split(".")[0] : null
+
const subdomain = (domain.split(".").length > 2) ? domain.split(".")[0] : null
const archive = params ? params.get('archive') : null
if (subdomain) setArchiveBaseUrl('https://'+siteMap[subdomain])
if (archive) setArchiveBaseUrl(archive)
+2 -1
src/app/generator/page.js
···
import titleFonts from "@/lib/titleFonts.js"
import styles from "./page.module.css"
import defaults from "@/lib/ogdefaults.js"
+
import ao3CanonicalUrls from "@/lib/ao3Canonical.js"
export default function Generator() {
const [url, setUrl] = useState('')
···
const domainMatch = url.match(baseurl)
if (!domainMatch) return
setDomain(domainMatch.groups.domain)
-
const domainParam = domain && !(["ao3.org", "archiveofourown.org", "archive.transformativeworks.org"].includes(domain)) ? `?archive=${domain}` : ''
+
const domainParam = domain && !ao3CanonicalUrls.includes(domain) ? `?archive=${domain}` : ''
if (workMatch.test(url)) {
const match = url.match(workMatch)
const resp = match.groups.chapterId ? await fetch(`/api/works/${match.groups.workId}/chapters/${match.groups.chapterId}${domainParam}`) : await fetch(`/api/works/${match.groups.workId}${domainParam}`)
+2 -1
src/app/series/[seriesId]/preview/route.js
···
import OGImage from "@/lib/ogimage.js"
import baseFonts from "@/lib/baseFonts.js"
import titleFonts from "@/lib/titleFonts.js"
+
import ao3CanonicalUrls from "@/lib/ao3Canonical.js"
export const size = {
width: 1600,
···
const p = await req.nextUrl.searchParams
const props = querystring.parse(p.toString())
const addr = `series/${seriesId}`
-
const domainParam = p && p.has('archive') ? `?archive=${p.get('archive')}` : ''
+
const domainParam = p && p.has('archive') && !ao3CanonicalUrls.includes(p.get('archive')) ? `?archive=${p.get('archive')}` : ''
const work = await fetch(`http://${process.env.DOMAIN}/api/series/${seriesId}${domainParam}`)
const data = await work.json()
const imageParams = await sanitizeData({type: 'series', data: data, props: p})
+5 -2
src/app/works/[workId]/chapters/[chapterId]/preview/route.js
···
import OGImage from "@/lib/ogimage.js"
import baseFonts from "@/lib/baseFonts.js"
import titleFonts from "@/lib/titleFonts.js"
+
import siteMap from "@/lib/siteMap.js"
+
import ao3CanonicalUrls from "@/lib/ao3Canonical.js"
export const size = {
width: 1600,
···
const { workId, chapterId } = await ctx.params
const props = await req.nextUrl.searchParams
const addr = `${props && props.has('archive') ? props.get('archive').replace("https://", "")+"/" : 'archiveofourown.org/'}works/${workId}/chapters/${chapterId}`
-
const domainParam = props && props.has('archive') ? `?archive=${props.get('archive')}` : ''
-
const work = await fetch(`http://${process.env.DOMAIN}/api/works/${workId}${domainParam}`)
+
const domainParam = props && props.has('archive') && !ao3CanonicalUrls.includes(props.get('archive')) ? `?archive=${props.get('archive')}` : ''
+
const subdomain = props && props.has('archive') && Object.values(siteMap).includes(props.get('archive')) ? Object.keys(siteMap)[Object.values(siteMap).indexOf(props.get('archive'))]+'.' : ''
+
const work = await fetch(`http://${subdomain}${process.env.DOMAIN}/api/works/${workId}${domainParam}`)
const data = await work.json()
const imageParams = await sanitizeData({type: 'work', data: data, props: props})
const theme = imageParams.theme
+7
src/lib/ao3Canonical.js
···
+
const ao3CanonicalUrls = [
+
"https://archiveofourown.org",
+
"https://ao3.org",
+
"https://archive.transformativeworks.org"
+
]
+
+
export default ao3CanonicalUrls