UNPKG

rsshub

Version:
65 lines (63 loc) 2.11 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { t as isValidHost } from "./valid-host-C-u5eW3j.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 invalid_parameter_default("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 };