* fix(route/substack): clean up xml before parsing
* fix(route/substack): use ofetch directly to avoid xml parse errors
* fix(route/substack): use isValidHost to validate the user
* feat(route/weibo): Fetch visitor Cookies before accessing some APIs
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/weibo/utils): getCookies: return too early on slow connection
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/weibo/utils): getCookies: Redirection assertion is too loose
Signed-off-by: Rongrong <i@rong.moe>
---------
Signed-off-by: Rongrong <i@rong.moe>
The `rss-parser`'s internal `parseURL` method can fail with an "Error:
Non-whitespace before first tag" on feeds that are gzipped or contain a
Byte Order Mark (BOM), as it lacks robust decompression and encoding
handling.
This change switches the Phoronix route to:
Fetch the raw XML string using `ofetch`, which handles compression and
encoding correctly.
Pass the resulting clean string to `parser.parseString()`.
This resolves the parsing issue and ensures the route is reliable.
* ci(docker-release): enable ZRAM to reduce memory pressure
This should hopefully help reduce stuck build jobs. Note that this can't
completely eliminate stuck builds since this is usually caused by
synchronization issues in QEMU.
Signed-off-by: Rongrong <i@rong.moe>
* build(Dockerfile): Add support for puppeteer-real-browser
Sets CHROMIUM_EXECUTABLE_PATH on AMD64 and installs essential
dependencies.
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/picnob): bring back support for diygod/rsshub:chromium-bundled
The support for puppeteer-real-browser on diygod/rsshub:chromium-bundled
was improperly implemented in 400fb1fa49 ("fix(route/picnob): use
puppeteer-real-browser to pass cf check (#20478)") and was then removed
in 2cb11d7c7e ("fix(route/picnob): support img not in slide").
With proper support for puppeteer-real-browser added to Dockerfile, this
patch brings back the support for diygod/rsshub:chromium-bundled.
This partially reverts commit 2cb11d7c7e ("fix(route/picnob): support
img not in slide").
Signed-off-by: Rongrong <i@rong.moe>
* chore(route/picnob): add myself as maintainer
This route explicitly consult CHROMIUM_EXECUTABLE_PATH from the docker
image variant `diygod/rsshub:chromium-bundled`. Since I am the author of
the image variant, add myself as one of route maintainers so that I am
mentioned when the route is broken.
Signed-off-by: Rongrong <i@rong.moe>
# Conflicts:
# lib/routes/picnob/user.ts
---------
Signed-off-by: Rongrong <i@rong.moe>
The original code directly accessed nested properties on
`post.hero_image`, which is not guaranteed to exist.
This cause a TypeError when the image object was nil.
This commit introduces safe access by:
- Prioritizing `hero_image` but falling back to `og_image`
- Only rendering the banner if a valid image URL was resolved
* Initial plan
* Replace @tonyrl/rand-user-agent with header-generator and add sec-ch-* headers
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
* Extract unwanted UA validation into standalone isValidUserAgent function
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
* Add headerGeneratorPreset option to got and ofetch utilities
* Replace randUserAgent usage in lib/routes with headerGeneratorPreset option
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
* chore: pin header-generator to exact match
* fix: replace randUserAgent with a static user agent string in config
* Remove deprecated _randUserAgent function and related tests
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
* refactor: rename to header-generator
* Changes before error encountered
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
* fix: update generateHeaders parameter type to Partial<HeaderGeneratorOptions>
* fix: add ios preset
* fix: rename headerGeneratorPreset to headerGeneratorOptions
* feat: add MODERN_IOS preset and update header-generator patch hash
* fix: use ios preset
* fix: update FetchOptions to include headerGeneratorOptions type
* refactor: simplify header generation and update header inclusion list
* fix: remove header-generator patch
* refactor: update user-agent handling in requests and tests
* test: remove redundant headerGeneratorOptions test and add new ofetch header preset test
* test: add custom user-agent test for ofetch
* test: update user-agent expectation in ofetch headers test
* Update lib/utils/ofetch.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* refactor: replace hardcoded headers with generatedHeaders in fetch and get request handlers
* refactor: rename test suite from rand-user-agent to header-generator and remove unused dependency
* Update lib/utils/header-generator.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: TonyRL <11386903+TonyRL@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat(route): add netflix
* feat: add research
* fix: remove migrated entries
* fix: clean up
* fix: remove optional chaining for embedLink and title in render function
* fix: remove optional chaining for embedLink
* fix: image url
* fix: remove empty target field in radar configuration