rsshub
Version:
Make RSS Great Again!
65 lines (63 loc) • 2.11 kB
JavaScript
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 };