Repository navigation
Conversation
* feat(konek): add namespace * feat(konek): add newest posts route * fix(konek): type handler response as Data * fix: move to hn.plus ---------
* feat(route/hotukdeals): add tag route * fix: drop evaluate-script ---------
The site moved to a new CMS: column pages now load their list through a unit API, and the old recall paths serve the homepage, so the route returned an empty feed. Read the list through that API in a shared helper, read article bodies from #zoom, and map the documented type IDs to their new columns so existing feed URLs keep working. Closes #23665
Same redesign as the recall route: use the shared list helper and the new article layout, take the publish time from the article page in UTC+8, and replace the retired column IDs, default column, radar rules and logo with the new site's. Refs #23665
#23666) Bumps the nix group with 1 update: [nixpkgs](https://github.com/NixOS/nixpkgs). Updates `nixpkgs` from `fe13242` to `09063bd` - [Commits](NixOS/nixpkgs@fe13242...09063bd) --- updated-dependencies: - dependency-name: nixpkgs dependency-version: '09063bd1f2b36fd9fd793c36dfade7bd40a93dfc' dependency-type: direct:production dependency-group: nix ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…WGX/6eA9MmyvoOF5J36sA=
Add /theatlantic/author/:id for an author's latest articles. The author page carries the same article river as the section pages, so it reuses the section route's Cloudflare cookie step and article parser, and photo stories keep their pictures and captions. Closes #23668
* feat(route): add Oaktree Capital insights * feat(route/oaktree): expose media type in categories * fix: remove deadcode ---------
* feat(panasonic): add camera and lens firmware feed * fix: remove deadcode --------
…23672) * fix(route/telegram): pass media range limit to iterDownload in bytes iterDownload counts limit in bytes, but streamDocument passed the number of 512 KiB blocks. Every Range request therefore stopped after a single block while Content-Length promised the whole range, so players stalled and retried on each seek. * fix: ignore HEAD instead of holding download slot ---------
DataDome now answers the default macOS Chrome header preset with a 401 captcha on the section API, the topic API and article pages, and the arc outboundfeeds fallback returns 404, so every category feed failed. The iOS preset still gets the data from two networks, so use it for those requests. Refs #23484
The topic API behind the authors and tags feeds no longer returns the topic itself, so reading its name crashed every author feed. Name the feed after the topic in the URL instead. Refs #23484
Dropping process-only made lock-threads fall back to its default of issues, PRs and discussions. The workflow token has no discussions permission, so the lock job failed with "Resource not accessible by integration" after locking the issues and PRs. List issues and PRs explicitly so discussions stay out, as they were before.
* fix(proxy): fix pac parsing * feat(proxy)!: drop multi proxy * feat: pac in playwright * fix(proxy): cache dispatcher * fix(proxy): prevent resolver failing if config change * fix: use agent from undici
…23683) Bumps [cachix/install-nix-action](https://github.com/cachix/install-nix-action) from 31.11.2 to 31.11.3. - [Release notes](https://github.com/cachix/install-nix-action/releases) - [Changelog](https://github.com/cachix/install-nix-action/blob/master/RELEASE.md) - [Commits](cachix/install-nix-action@448cde7...75c75c3) --- updated-dependencies: - dependency-name: cachix/install-nix-action dependency-version: 31.11.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [undici](https://github.com/nodejs/undici) from 8.12.2 to 8.12.3. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](nodejs/undici@v8.12.2...v8.12.3) --- updated-dependencies: - dependency-name: undici dependency-version: 8.12.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [@j178/prek](https://github.com/j178/prek) from 0.5.6 to 0.5.7. - [Release notes](https://github.com/j178/prek/releases) - [Changelog](https://github.com/j178/prek/blob/main/CHANGELOG.md) - [Commits](j178/prek@v0.5.6...v0.5.7) --- updated-dependencies: - dependency-name: "@j178/prek" dependency-version: 0.5.7 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…MYrLiL9Sq3xxiK/NZEIeY=
Bumps the cloudflare group with 1 update in the / directory: [@cloudflare/workers-types](https://github.com/cloudflare/workerd). Updates `@cloudflare/workers-types` from 5.20261030.1 to 5.20261031.1 - [Release notes](https://github.com/cloudflare/workerd/releases) - [Changelog](https://github.com/cloudflare/workerd/blob/main/RELEASE.md) - [Commits](https://github.com/cloudflare/workerd/commits) --- updated-dependencies: - dependency-name: "@cloudflare/workers-types" dependency-version: 5.20261031.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: cloudflare ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
The sports route reads https://sports.sina.com.cn/others/<type>.shtml and only works with a type such as volley or swim. The original docs said so and listed the types, but the v3 migration made `type` optional, dropped the table and used /sina/sports as the example. That example requested others/undefined.shtml, which 404s. Make `type` required again, restore the type table and use /sina/sports/volley as the example. The volley page also lists some stories in more than one block (31 of 151 on 2026-11-03), so keep the first entry per link before fetching articles.
Bumps the eslint group with 1 update in the / directory: [eslint](https://github.com/eslint/eslint). Updates `eslint` from 10.13.0 to 10.14.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.13.0...v10.14.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 10.14.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ing category The news index (page-data/news/page-data.json) lists every article since 2018, 393 on 2026-11-03, in no particular order, and the route fetched the page data of each one. That takes well over a minute on a cold cache. The newest article, "Terrifier | Everything to Know", also has no category, so reading `article_category.name` threw and the whole feed failed. Sort the index by publication date, fetch the newest 20 by default (or as many as `limit` asks for), and read the category with optional chaining.
The route returns works from the last two weeks, and the example asked for Nature Communications papers in subfield 2604 (Applied Mathematics). The journal has only 8 such papers in total, the latest from July 2025, so the example feed was empty almost every time and the full-route test reported "this route is empty". Use subfield 1312 (Molecular Biology) in the example and the docs. It returned 50 works from the last two weeks on 2026-11-03.
The region route's path was `/:region{cn|kr|eu|us|ru|en}/:type?`. Hono
copies the parameter pattern into the route regex as is, so the bare
alternation split the whole regex instead of only the parameter. The
route then matched paths it should not, and dropped `type`:
- /aqara/cn/blog redirected to /aqara/cn/category/news, not blog
- /aqara/us/category/news matched this route and redirected to itself
Wrap the alternation in a non-capturing group. /aqara/cn/blog now
redirects to category/blog, and three-segment paths reach the category
and tag route again.
The collection route's path was
`/:collection{jobs|seminars|conferences|institutions|experiments|journals}/:q?`.
Hono copies the parameter pattern into the route regex as is, so the
bare alternation split the whole regex and the optional query was never
captured: /inspirehep/jobs/postdoc returned the same unfiltered feed as
/inspirehep/jobs.
Wrap the alternation in a non-capturing group, so `q` reaches the
search again ("Jobs: postdoc - INSPIRE").
header-generator resolves a preset's browserListQuery with browserslist and caniuse-lite. When they name newer versions than header-generator's data has, a generator for them makes no headers at all, and every request that asks for generated headers fails with "No headers based on this input can be generated". The repository pins both through pnpm overrides, which an install of the npm package doesn't get. Fall back to the same browsers in any version header-generator knows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without git, or outside a repository (as installed from npm), every start printed "git: not found" or "not a git repository". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The npm package is now a magpie (https://github.com/yetone/magpie) plugin, through exports["./server"] and package.json's magpie field: - it runs a local RSSHub server (127.0.0.1:1200 by default) as a child process of magpie's plugin host, which ends with the host; - it gives every agent three tools through magpie's MCP server of plugin tools: search_routes, lookup_url (RSSHub Radar rules) and get_feed; - it adds a page to magpie's window that shows the server. Options: port, publicUrl and env (RSSHub's environment variables, also read from a .env file in the rsshub folder of magpie's config folder). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.5.0 to 0.5.1. - [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases) - [Commits](SamVerschueren/decode-uri-component@v0.5.0...v0.5.1) --- updated-dependencies: - dependency-name: decode-uri-component dependency-version: 0.5.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Deku Deals rebuilt its list pages. Each game is now a `.col` inside `.search-main .browse-cards`, the title is an `h6` inside `.main-link`, and the cover image sits in a `picture` next to the link. The route still looked for `.item-grid2 > div.cell`, found nothing and returned an empty feed. Select the new cards, read the title from `.main-link h6` and the image from `picture img`. most-wanted and recent-drops list 36 games each again, with link, cover and price.
* chore(deps): bump vite from 7.3.1 to 8.3.5 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 8.3.5. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.3.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * chore: bump transitive deps --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(route/bandcamp): add Bandcamp Daily latest articles route Co-Authored-By: Claude Code <noreply@anthropic.com> * refactor(route/bandcamp): fetch Bandcamp Daily with ofetch Co-Authored-By: Claude Code <noreply@anthropic.com> --------- Co-authored-by: ashi-koki <274328227+ashi-koki@users.noreply.github.com> Co-authored-by: Claude Code <noreply@anthropic.com>
The tag pages on news.gamme.com.tw and sexynews.gamme.com.tw now link each article with a relative path such as /1773549. The route passed that href to the client as is, which failed with "Failed to parse URL", and the whole feed went down. Resolve the href with `new URL(href, baseUrl)`. The 歐派 tag example lists 10 articles again with body and date.
Shinagawa moved its 食品衛生許可施設一覧 page to /kenko/eisei/1003077/1003132.html; the old /PC/kenkou/... URL now redirects there. The page links its monthly CSVs with relative paths (`../../../_res/...`), and the route resolved them against the old URL, which gave /PC/_res/... and a 404 for every file, so the Shinagawa feed and the all-ward feed failed. Point the Shinagawa source and its docs link at the new page, so the CSV links resolve to /_res/... again. Shinagawa lists 100 permits again and the all-ward feed 426. The other wards' pages have not moved.
Le Phocéen rebuilt its site and the chrono page no longer embeds
__NEXT_DATA__, so JSON.parse got an empty string and the route failed
with "Unexpected end of JSON input".
Read the feed cards for title, link, category, image and excerpt. The
cards only show relative times ("il y a 4 heures"), so take the date
from each page's first time[datetime] and the body from
.article-content, keeping the excerpt for video pages, which have none.
The feed lists 30 items again, all dated.
The 空间科学研究与应用 list on cmse.gov.cn still links articles whose pages the site has removed, such as "今日太空实验室|从咖啡一窥微重力流体 科学研究" (t20230920_54339). Those pages answer 404, and that one error took down the whole feed; 3 of the 15 newest entries are like this now. Keep such an entry with its title, link and date from the list when its page answers 404, as the ff14 route does. Other errors still fail as before. The list returns 15 entries again, all dated.
The route requested the news list at `index.php?MkBAMkAxQA==` (2@@2@1@), which rodong.rep.kp now answers with an empty 200 in every language, so the feed was empty. The site's own "more" link for the same section is `index.php?MUBAMkAxQA==` (1@@2@1@), and that page has the same `.date_news_list` rows the route already parses. Article pages moved to a new template as well: the body is now in `#ContDIV`, with the headline in `.TitleP` and the byline in `.WriterP`, and the old `.col-sm-8` column is gone. Read `#ContDIV` without those two, so quotes, subheadings and inline photos stay. The Korean feed lists 39 articles again and the English and Chinese feeds 6 each, all with dates and bodies.
Some 弘毅学堂 notices now open a 系统提示 page that says `暂无权限,请咨询管理员。` in place of the article. The shared detail helper used by /whu/hyxt and /whu/news only recognised the captcha page, so these threw "Article body not found" and /whu/hyxt failed. Treat the no-permission page as a restricted article, the same check /whu/gs, /whu/rsgis and /whu/swrh already do, so the entry keeps its list title and date. /whu/hyxt lists 10 notices again, 2 of them restricted.
yxy.zcmu.edu.cn moved its list pages to a new template: the notices are now `.sp-list li` rows with the date in `.sp-list-time`, and the old `.lm_list` is gone, so every channel of the route came back empty. Read the new rows, and resolve each link with new URL, since the hrefs are relative (`../info/1078/8687.htm`) and string concatenation gave `/../info/...` links. 通知公告, 评优评奖 and 日常通知 each list 20 notices again, all dated.
Sogou's result pages no longer have a `.citeurl` block. The source
name and the page date now sit in `a.citeLinkClass`, with the date in
`.cite-date`, so the route read an empty string for every result and
`parseDate('')` gave an invalid date. The weekly full-route test failed
on it with "expected NaN to be greater than -432000000".
Read the site name and date from `.citeLinkClass`, and leave pubDate
unset for results Sogou shows without a date (3 of the 9 results for
"rss" right now) instead of passing an empty string to parseDate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…y once (#23769) * fix(route/twitter): refresh x-client-transaction keys on 404 and retry once UserTweetsAndReplies and SearchTimeline send an x-client-transaction-id generated from keys cached for CACHE_CONTENT_EXPIRE. When X stops accepting the cached keys it answers 404, and every request fails until the cache entry expires. Refetch the keys, overwrite the cache and retry the request once. * test(route/twitter): remove route test rejected by orphan file check The route build rejects test files under lib/routes/, which fails the Docker build and closes the PR automatically. * Update lib/routes/twitter/api/web-api/client-transaction-id.ts Co-authored-by: Tony <TonyRL@users.noreply.github.com> ---------
) Bumps the hono group with 1 update: [hono](https://github.com/honojs/hono). Updates `hono` from 4.13.14 to 4.13.16 - [Release notes](https://github.com/honojs/hono/releases) - [Commits](honojs/hono@v4.13.14...v4.13.16) --- updated-dependencies: - dependency-name: hono dependency-version: 4.13.16 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: hono ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [teleproto](https://github.com/sanyok12345/teleproto) from 1.232.0 to 1.232.1. - [Release notes](https://github.com/sanyok12345/teleproto/releases) - [Commits](sanyok12345/teleproto@v1.232.0...v1.232.1) --- updated-dependencies: - dependency-name: teleproto dependency-version: 1.232.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the msw group with 1 update: [@mswjs/interceptors](https://github.com/mswjs/interceptors). Updates `@mswjs/interceptors` from 0.45.10 to 0.45.11 - [Release notes](https://github.com/mswjs/interceptors/releases) - [Commits](mswjs/interceptors@v0.45.10...v0.45.11) --- updated-dependencies: - dependency-name: "@mswjs/interceptors" dependency-version: 0.45.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: msw ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Rumble now answers a video page request without cookies with a 307 to the same URL that sets `RNSC` and `__cf_bm`. The route asked for the page to collect those cookies, but fetch followed the redirect without sending them, looped until "redirect count exceeded", and every channel feed timed out. Stop following redirects on that first request, so the cookies come from the 307 itself; the second request already sends them and gets the full page. The MikhailaPeterson channel lists 25 videos again, all dated and with descriptions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )