redirecter for ao3 that adds opengraph metadata

cache ao3.js calls so it goes faster

Changed files
+38 -6
src
app
api
series
[seriesId]
preview
works
[workId]
chapters
[chapterId]
preview
series
[seriesId]
preview
works
[workId]
chapters
[chapterId]
preview
preview
src/app/api/series/[seriesId]/preview/route.js

This is a binary file and will not be displayed.

+7 -1
src/app/api/series/[seriesId]/route.js
···
import { getSeries } from "@fujocoded/ao3.js"
+
import { cache } from 'react'
+
+
const getItem = cache(async (seriesID) => {
+
const series = await getSeries({seriesId: seriesId})
+
return series
+
})
export async function GET(_req, ctx) {
const { seriesId } = await ctx.params
-
const series = await getSeries({seriesId: seriesId})
+
const series = await getItem(seriesId)
return Response.json(series)
}
src/app/api/works/[workId]/chapters/[chapterId]/preview/route.js

This is a binary file and will not be displayed.

+6 -1
src/app/api/works/[workId]/chapters/[chapterId]/route.js
···
import { getWork } from "@fujocoded/ao3.js"
+
const getItem = cache(async (workId, chapterId) => {
+
const work = await getWork({workId: workId, chapterId: chapterId})
+
return work
+
})
+
export async function GET(_req, ctx) {
const { workId, chapterId } = await ctx.params
-
const work = await getWork({workId: workId, chapterId: chapterId})
+
const work = await getItem(workId, chapterId)
return Response.json(work)
}
+6 -1
src/app/api/works/[workId]/route.js
···
import { getWork } from "@fujocoded/ao3.js"
+
const getItem = cache(async (workId) => {
+
const work = await getWork({workId: workId})
+
return work
+
})
+
export async function GET(_req, ctx) {
const { workId } = await ctx.params
-
const work = await getWork({workId: workId})
+
const work = await getItem(id)
return Response.json(work)
}
+6 -1
src/app/series/[seriesId]/preview/route.js
···
export const contentType = 'image/webp'
+
const getItem = cache(async (seriesId) => {
+
const series = await getSeries({seriesId: seriesId})
+
return series
+
})
+
export async function GET(req, ctx) {
const { seriesId } = await ctx.params
const p = await req.nextUrl.searchParams
const props = querystring.parse(p.toString())
const addr = `series/${seriesId}`
-
const data = await getSeries({seriesId: seriesId})
+
const data = await getItem(seriesId)
const imageParams = await sanitizeData({type: 'series', data: data, props: props})
const theme = imageParams.theme
const baseFont = baseFonts[imageParams.baseFont].displayName
+7 -1
src/app/works/[workId]/chapters/[chapterId]/preview/route.js
···
import { getWork } from "@fujocoded/ao3.js"
+
import { cache } from 'react'
import querystring from 'node:querystring'
import sanitizeData from "@/lib/sanitizeData.js"
import OGImage from "@/lib/ogimage.js"
···
export const contentType = 'image/webp'
+
const getItem = cache(async (workId, chapterId) => {
+
const work = await getWork({workId: workId, chapterId: chapterId})
+
return work
+
})
+
export async function GET(req, ctx) {
const { workId, chapterId } = await ctx.params
const p = await req.nextUrl.searchParams
const props = querystring.parse(p.toString())
const addr = `works/${workId}/chapters/${chapterId}`
-
const data = await getWork({workId: workId, chapterId: chapterId})
+
const data = getItem(workId, chapterId)
const imageParams = await sanitizeData({type: 'work', data: data, props: props})
const theme = imageParams.theme
const baseFont = baseFonts[imageParams.baseFont].displayName
+6 -1
src/app/works/[workId]/preview/route.js
···
export const contentType = 'image/webp'
+
const getItem = cache(async (workId) => {
+
const work = await getWork({workId: workId})
+
return work
+
})
+
export async function GET(req, ctx) {
const { workId } = await ctx.params
const p = await req.nextUrl.searchParams
const props = querystring.parse(p.toString())
const addr = `works/${workId}`
-
const data = await getWork({workId: workId})
+
const data = await getItem(workId)
const imageParams = await sanitizeData({type: 'work', data: data, props: props})
const theme = imageParams.theme
const baseFont = baseFonts[imageParams.baseFont].displayName