UNPKG

rsshub

Version:
58 lines (57 loc) 1.91 kB
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs"; import { t as got_default } from "./got-BTowW50G.mjs"; import { t as InvalidParameterError } from "./invalid-parameter-CGxhjomn.mjs"; import { t as isValidHost } from "./valid-host-BH9Dd2Pf.mjs"; import markdownit from "markdown-it"; //#region lib/routes/mirror/index.ts const md = markdownit({ html: true, linkify: true }); const route = { path: "/:id", categories: ["new-media"], example: "/mirror/tingfei.eth", parameters: { id: "user id" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "User", maintainers: [ "fifteen42", "rde9", "nczitzk" ], handler }; async function handler(ctx) { const id = ctx.req.param("id"); if (!id.endsWith(".eth") && !isValidHost(id)) throw new InvalidParameterError("Invalid id"); const currentUrl = id.endsWith(".eth") ? `https://mirror.xyz/${id}` : `https://${id}.mirror.xyz`; const response = await got_default(currentUrl); const data = JSON.parse(response.data.match(/"__NEXT_DATA__" type="application\/json">(\{"props":.*\})<\/script>/)[1]); const items = Object.keys(data.props.pageProps.__APOLLO_STATE__).filter((key) => key.startsWith("entry:")).map((key) => { const item = data.props.pageProps.__APOLLO_STATE__[key]; return { title: item.title, description: md.render(item.body), link: `${currentUrl}/${item._id}`, pubDate: parseDate(item.publishedAtTimestamp, "X"), author: data.props.pageProps.publicationLayoutProject.displayName }; }); return { title: `${data.props.pageProps.publicationLayoutProject.displayName} - Mirror`, description: data.props.pageProps.publicationLayoutProject.description, image: data.props.pageProps.publicationLayoutProject.avatarURL, link: currentUrl, item: items }; } //#endregion export { route };