Commit Graph

8807 Commits

Author SHA1 Message Date
Tony 282ea912cf
fix(route/asus): update API address (#22424) 2026-07-03 20:18:58 +08:00
dependabot[bot] a4002fa587
chore(deps): bump docker/build-push-action from 7.2.0 to 7.3.0 (#22403)
* chore(deps): bump docker/build-push-action from 7.2.0 to 7.3.0

Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](f9f3042f7e...53b7df96c9)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: fix prefer-object-iterable-methods

* chore: update unicorn-js/isolated-functions rule to include global overrides

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: TonyRL <TonyRL@users.noreply.github.com>
2026-07-02 20:10:27 +08:00
dependabot[bot] f17e026de6
chore(deps-dev): bump eslint-plugin-unicorn from 69.0.0 to 70.0.0 (#22405)
* chore(deps-dev): bump eslint-plugin-unicorn from 69.0.0 to 70.0.0

Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 69.0.0 to 70.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v69.0.0...v70.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-unicorn
  dependency-version: 70.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: fix prefer-simplified-conditions

* style: fix prefer-block-statement-over-iife

* style: fix no-unsafe-promise-all-settled-values

* style: add unicorn v70 recommded preset

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: TonyRL <TonyRL@users.noreply.github.com>
2026-07-02 18:48:44 +08:00
Tony 00eb86272e
fix(route/kadokawa): fix image attr (#22394) 2026-06-30 21:00:37 +08:00
github-actions[bot] 659e76c802 style: auto format 2026-06-29 11:55:02 +00:00
Tony dd92228476
fix(route/uestc): fix selector (#22349)
* feat(route): add pawchive

* fix(route/uestc): fix url
2026-06-28 20:13:56 +08:00
github-actions[bot] 17e7c16139 style: auto format 2026-06-27 16:09:22 +00:00
sirius60111 a510ea3f24
fix(route/xueqiu): fix stock_info failure caused by WAF challenge (#22346)
The /xueqiu/stock_info route was broken by Alibaba Cloud WAF: the cookie
acquisition could not pass the challenge, and the data request was sent
to xueqiu.com which the WAF blocks for these endpoints.

- cookies.ts: allow the `script` resource type in the page.route filter
  so the WAF challenge scripts can execute, enabling cookie extraction
  via Patchright
- stock-info.ts: request data from api.xueqiu.com instead of xueqiu.com
  to bypass the WAF
- stock-info.ts: align the supported types with the tabs on the stock
  page (all / discuss / trans / news / announcement). all / discuss /
  trans use the symbol search endpoint; news / announcement use the
  stock timeline endpoint. The previously broken research type is removed
- stock-info.ts: fetch the stock name from the lightweight quote API
  since it is rendered client-side and cannot be scraped from the HTML
- stock-info.ts: throw InvalidParameterError for unsupported types

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 00:07:48 +08:00
Tony aa46e600e1
feat(route): add pawchive (#22340) 2026-06-26 19:48:11 +08:00
Tony c70d087a9a
feat(route): nppa (#22335) 2026-06-25 01:34:49 +08:00
Tony 6355b9b597
feat(route): cefco (#22333) 2026-06-24 09:03:51 +08:00
Tony b1ac83372c
feat(route): add zfcg (#22320) 2026-06-22 14:10:26 +08:00
DIYgod 00c2fe9b26 test(route/weibo): keep utils test out of routes tree 2026-06-22 11:26:04 +08:00
DIYgod 452558d096 fix(route/weibo): share visitor cookie fetches 2026-06-22 10:44:13 +08:00
Tony 9807609a4d
refactor: use cache utils directly (#22316) 2026-06-20 23:36:02 +08:00
github-actions[bot] b24e8736b5 style: auto format 2026-06-20 15:12:58 +00:00
dependabot[bot] 417ab04f06
chore(deps-dev): bump eslint-plugin-unicorn from 66.0.0 to 68.0.0 (#22310)
* chore(deps-dev): bump eslint-plugin-unicorn from 66.0.0 to 68.0.0

Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 66.0.0 to 68.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v66.0.0...v68.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-unicorn
  dependency-version: 68.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: fix no-useless-coercion

* style: fix prefer-boolean-return

* style: fix no-useless-logical-operand

* style: fix prefer-single-replace

* style: fix consistent-conditional-object-spread

* style: fix no-useless-else

* style: fix prefer-unicode-code-point-escapes

* style: fix operator-assignment

* style: fix prefer-continue

* style: fix prefer-math-constants

* style: fix prefer-hoisting-branch-code

* style: fix prefer-array-slice

* style: fix consistent-class-member-order

* style: fix no-return-array-push

* style: fix prefer-promise-with-resolvers

* style: fix no-array-concat-in-loop

* style: fix no-loop-iterable-mutation

* style: fix no-invalid-argument-count

* style: fix no-duplicate-if-branches

* style: fix prefer-else-if

* style: fix no-unreadable-for-of-expression

* style: fix logical-assignment-operators

* style: fix default-export-style

* style: revert false positve in prefer-type-literal-last in #22274

* style: fix arrow-body-style

* style: add v68 recommended preset

* style: refactor GraphQL queries to use template literals for better readability

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2026-06-20 23:11:27 +08:00
Tony 2fb207b58b fix(route/bluestack): proper cache saving 2026-06-18 06:45:57 +08:00
Tony 140734a680 fix(route/youtube): filter deleted channel
fix #14805
2026-06-18 05:36:28 +08:00
Tony b70b4b83b2 refactor: remove aes-js 2026-06-17 01:04:54 +08:00
github-actions[bot] ce4ffa75b0 style: auto format 2026-06-16 12:14:09 +00:00
dependabot[bot] f4a49d429e
chore(deps-dev): bump the oxc group across 1 directory with 4 updates (#22282)
* chore(deps-dev): bump the oxc group across 1 directory with 4 updates

Bumps the oxc group with 4 updates in the / directory: [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins), [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt), [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) and [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint).


Updates `@oxlint/plugins` from 1.69.0 to 1.70.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.70.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.54.0 to 0.55.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.55.0/npm/oxfmt)

Updates `oxlint` from 1.69.0 to 1.70.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.70.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.69.0 to 1.70.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint-plugin-eslint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.70.0/npm/oxlint-plugin-eslint)

---
updated-dependencies:
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.70.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.55.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.70.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.70.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: update oxlint-plugin-eslint js plugin name

https://github.com/oxc-project/oxc/pull/23495
https://github.com/oxc-project/oxc/pull/23335

* chore: use native no-array-fill-with-reference-type, prefer-export-from, prefer-single-call

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-16 20:12:39 +08:00
Tony ff27ed8ab6 refactor: remove dead code 2026-06-16 19:10:47 +08:00
github-actions[bot] 9f37d05ab6 style: auto format 2026-06-16 06:45:07 +00:00
dependabot[bot] 873618e99d
chore(deps-dev): bump eslint-plugin-unicorn from 65.0.1 to 66.0.0 (#22274)
* chore(deps-dev): bump eslint-plugin-unicorn from 65.0.1 to 66.0.0

Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 65.0.1 to 66.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v65.0.1...v66.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-unicorn
  dependency-version: 66.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: fix unicorn-js/prefer-url-href

* style: oxlint disable

* style: fix unicorn-js/no-useless-else

* style: no-unsafe-string-replacement

* style: fix no-duplicate-loops

* style: fix prefer-number-is-safe-integer

* style: fix prefer-single-array-predicate

* style: fix no-object-methods-with-collections

* style: fix no-useless-boolean-cast

* style: fix no-useless-template-literals

* style: fix no-negated-array-predicate

* style: fix prefer-direct-iteration

* style: fix consistent-optional-chaining

* style: fix prefer-simple-sort-comparator

* style: fix prefer-global-number-constants

* style: fix prefer-type-literal-last

* style: fix require-array-sort-compare.

* style: fix prefer-early-return

* style: fix prefer-short-arrow-method

* style: fix prefer-array-from-map

* style: fix prefer-scoped-selector

* style: fix no-global-object-property-assignment

* style: fix no-unnecessary-global-this

* style: fix no-unreadable-object-destructuring

* style: fix no-invalid-argument-count

* style: fix prefer-smaller-scope

* style: fix prefer-iterator-to-array.

* style: fix prefer-object-iterable-methods

* style: fix typo

* style: fix max-nested-calls

* style: fix no-incorrect-template-string-interpolation

* style: fix no-break-in-nested-loop

* style: fix prefer-await

* style: fix no-computed-property-existence-check

* style: fix prefer-number-coercion

* style: fix no-empty-file

* style: update eslint unicorn v66 recommended preset

* style: add unicorn/prefer-spread to oxlint-disable comments

* style: fix no-array-reduce

* style: delete github/no-then as it's covered by unicorn/prefer-await

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2026-06-16 14:43:42 +08:00
github-actions[bot] 4d2e5fe799 style: auto format 2026-06-16 04:08:27 +00:00
Jagger.H b10a33b191
fix(route): repair u3c3 search and drop sticky promo rows (#22268)
* fix(route): repair u3c3 search and drop sticky promo rows

The handler destructured `keywoard` (typo for `keyword`), so the search
branch never ran and every query fell through to the homepage listing.
u3c3 has also added an anti-scrape token (`search2=<token>`, rotated and
embedded in the homepage `search21()` JS) — `?search=<kw>` alone silently
returns the homepage, so scrape the token live with a graceful fallback.

Also skip the sticky promo rows (category-nav and external-ad rows, e.g.
the "國產原创" entries) shown on every page including search; real torrent
rows always link to /view.

* refactor(route): use filter+map instead of flatMap in u3c3

Address review feedback: the flatMap returning []/[obj] was just a
filter+map in disguise. Skip non-/view rows up front, then map.
2026-06-16 12:07:12 +08:00
Tony adbe1b59bb docs: fix example namespace 2026-06-15 04:27:54 +08:00
Tony 0f8f12a891 docs: fix table 2026-06-15 03:09:40 +08:00
Tony 3f9eb757b5 fix(route): update route path syntax 2026-06-15 00:53:33 +08:00
Tony a1946363f5 fix: correct GUID generation for routes 2026-06-13 03:11:03 +08:00
Jiamin c453c3323f
fix: modify list for now/future to get the right data (#22256) 2026-06-12 22:48:42 +08:00
Jiamin d3086acfe0
feat(route): add Shan Dong Museum exhibition and news route (#22187)
* feat(route): add Shan Dong Museum exhibition and news route

* fix: replaceAll to replace

* fix: replace for fullDurationDate

* fix: change xmlmode to xml

* fix: oxlint warning

---------

Co-authored-by: Bian Jiamin <jiamin@BiandeMac-mini.local>
2026-06-12 12:20:38 +08:00
Jiamin cdf95e67fe
feat(route): add Hebei Museum Exhibition route (#22185)
* WIP: transfer

* feat(route): add Hebei Museum Exhibition route

* fix: Apply suggestions from code review

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* fix: oxlint warning

---------

Co-authored-by: Bian Jiamin <jiamin@BiandeMac-mini.local>
2026-06-12 12:09:50 +08:00
Tony 7c229947f7
perf: lazyload sentry (#22249) 2026-06-12 12:01:11 +08:00
github-actions[bot] 77e742edd4 style: auto format 2026-06-11 06:48:23 +00:00
Tony 3a56432e3f
feat: allow nested namespace (#22243) 2026-06-11 14:47:00 +08:00
Clementina Lam Choi 20c832842f
feat(route): add EFE Noticias route (#22165)
* feat(route): add EFE Noticias route

Add route for EFE (Agencia EFE) Spanish news agency with 10 categories:
mundo, espana, economia, cultura, ciencia-y-tecnologia, deportes,
salud, medio-ambiente, educacion, euro-efe.

Features:
- Article images via enclosure and inline in description
- Ad filtering (auto-banner, srr-main, promotional logos)
- Clean img attributes for RSS reader compatibility
- Configurable item limit via query parameter

* fix(route/efe): address review comments

- Remove `limit` from `parameters` (query param, not path param)
- Scope article link selector to `.elementor-loop-container` to avoid anti-pattern #1
- Remove unnecessary `.first()` on `.elementor-widget-theme-post-content`
- Remove `.srr-main` from cleanup (not inside content area), keep `decoding`/`loading` on images

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: address review comments for EFE route

- Fix parameters to structured object with only path params
- Scope selector to .elementor-post article links only
- Remove unnecessary .first() on title
- Stop stripping image attributes (decoding, loading, width, etc.)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: revert overly specific selector that broke all routes

.elementor-post class doesn't exist on EFE site, use attribute
selector to pre-filter article URLs instead.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: fetch articles sequentially to avoid 429 rate limiting

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: suppress no-await-in-loop lint for sequential rate-limited fetches

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: use specific selector for article title links only

Select only .elementor-widget-theme-post-title a inside .e-loop-item
to avoid matching image links, category links, or duplicate entries.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: use single quotes for static string (oxlint stylistic/quotes)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: use Promise.all and remove Set (selector matches once per article)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* refactor: use Array.map instead of push for link collection

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(efe): use pMap to limit concurrency and avoid 429 rate limiting

---------

Co-authored-by: mlkgrnt <mlkgrnt@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 03:10:50 +00:00
github-actions[bot] a5573cdcac style: auto format 2026-06-08 16:09:35 +00:00
dependabot[bot] 07834413f5
chore(deps-dev): bump eslint-plugin-unicorn from 64.0.0 to 65.0.0 (#22219)
* chore(deps-dev): bump eslint-plugin-unicorn from 64.0.0 to 65.0.0

Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 64.0.0 to 65.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v64.0.0...v65.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-unicorn
  dependency-version: 65.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: no-array-from-fill

* fix: unicorn-js/no-duplicate-set-values

* fix: no-this-outside-of-class

* fix: no-unnecessary-nested-ternary

* fix: prefer-array-last-methods

* fix: prefer-queue-microtask

* fix: prefer-split-limit

* fix: no-array-from-fill

* fix: no-unused-array-method-return

* fix: prefer-single-call

* fix: prefer-includes-over-repeated-comparisons

* fix: consistent-compound-words

* fix: prefer-includes-over-repeated-comparisons

* chore: add eslint-plugin-unicorn v65 recommended preset

* fix: correct duration parsing logic in parseDuration function

* fix: update oxlint-disable

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2026-06-09 00:08:15 +08:00
slowmande ad4b89c3d9
feat(route): add Naver search RSS route (#22025)
* route(naver): add Naver search RSS route

Supports all search categories: all (통합검색), blog (블로그), cafe (카페), news (뉴스), video (동영상)

* fix: use string replaceAll instead of regex in cleanText

Replace regex patterns with plain strings to satisfy oxlint unicorn/prefer-string-replace-all rule.

* fix: remove console.log and fix cleanText double-unescaping

- Remove console.log to satisfy oxlint no-console rule
- Use single-pass regex replaceAll to prevent HTML entity double-unescaping (CodeQL)

* fix(naver): address review comments and fix cafe/all category bugs

- Fix ALL category: use templateIds array to extract all content types (web, blog, news, video) instead of only webItem
- Fix CAFE category: change URL to ssc=tab.m_cafe.all format and use cheerio HTML parsing since cafe page returns pure HTML instead of JSON SSR
- Address Rule 11: move author/source metadata from description to dedicated author field
- Address Rule 14: return undefined for unparseable dates instead of fake current time
- Use single route path instead of array
- Add maintainer GitHub ID
- Fix cleanText double-unescaping issue with single-pass regex callback

* refactor(naver): split extractItems to reduce cyclomatic complexity

Split the 37-complexity extractItems into extractVideoItem and extractGenericItem.
Fixes CodeFactor "Complex Method" warning.

* refactor(naver): split functions to pass CodeFactor complexity check

Extract extractLink, buildItemFromTemplate, buildVideoDescription, and
buildVideoResult helpers to bring all methods under complexity threshold.

* fix(route): address review - use DataItem, Array.map, and entities package

- Replace manual item type with DataItem from @/types
- Use toArray().map().filter() instead of each() + push()
- Use decodeHTML from 'entities' instead of manual replaceAll

* fix(route): fix oxlint regex warnings

- Use non-capturing groups for regex used only with .test()
- Escape { } in regex literal
- Use character class [분일주] for single-char alternatives
2026-06-08 12:23:11 +08:00
Tony 4390cabb21
feat(utils/playwright): add PLAYWRIGHT_CDP_ENDPOINT support (#22212)
* feat(utils/playwright): add PLAYWRIGHT_CDP_ENDPOINT support

* fix: close browser
2026-06-08 10:31:39 +08:00
Kovin 983ee11419
feat(route): add Grupo Animal (#22196)
* feat(route): add Animal Politico

* fix(route/animalpolitico): shorter name for politica route, replaced correct feed link

* fix(route/animalpolitico): shorter name for estados route

* fix(route/animalpolitico): replaced wrong route category

* fix(route/animalpolitico): used template literals for better readability on GraphQL query

* fix(route/animalpolitico): change namespace (1/2)

* fix(route/animalpolitico): change namespace (2/2)
2026-06-07 06:13:49 +08:00
Tony 66d05d2644 docs: fix picnob metadata 2026-06-07 04:47:50 +08:00
Tony 055c5b7c9e
fix: restore picnob (#22204)
* fix: restore picnob

* feat: redirect `/picnob.info` to `/picnob`

* style: fix indent
2026-06-07 04:44:20 +08:00
Tony cfcdc34e1f
refactor: replace playwright with patchright (#21976)
* refactor: use patchwright

* refactor: migrate setRequestInterception and waitUntil

* fix: overwrite ua

* refactor: drop puppeteer cookie/requestfinished shims

Migrate page.cookies/setCookie and browser.cookies/setCookie call sites to the native context APIs (page.context().cookies/addCookies), rewrite requestfinished handlers to await request.response() instead of consuming the synchronous puppeteer-shaped payload, and remove the now-redundant browser.close context-cleanup wrapper. Playwright already handles all of these natively; the shims existed only for the puppeteer -> playwright migration.

* refactor: remove page.authenticate, page.setUserAgent,  browser.newPage(), browser.userAgent() shims

update cookie utility tests

* refactor: replace browser instance with context in Playwright usage across multiple routes

- Updated all instances of `browser` to `context` in Playwright-related functions for consistency and improved resource management.
- Ensured proper closure of context after operations to prevent memory leaks.
- Adjusted request interception methods to utilize the new context variable.

* fix: direct type import

* refactor: remove Puppeteer compatibility layers and unify page handling with Playwright

* fix: test case

* chore: bump patchright to v1.60.0

* chore: pin patchright to 1.59.1

nft can't resolve browser.json due to https://github.com/microsoft/playwright/pull/40093

* chore: pin to node 24.15 for playwright

browser install on node 24.16 stucks due to https://github.com/microsoft/playwright/issues/40724

* fix: update patchright and patchright-core to version 1.60.2 and adjust minify-docker.js for compatibility

* fix: import BrowserContext from patchright
2026-06-07 02:43:20 +08:00
Clementina Lam Choi 6886265f1b
feat(route): add Le Monde & Le Monde in English (#22175)
* feat(route): add Le Monde route

* feat(route): add Le Monde in English route

Add English version of Le Monde RSS route with 40+ categories
covering World, Europe, France, Economy, Culture, Sports, etc.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(route/le-monde): remove unnecessary cache.tryGet wrapper

cache.tryGet was wrapping a synchronous callback with no async work,
making it a no-op. The items are already fully parsed from the RSS
feed, so direct assignment is sufficient.

* fix: address review comments for Le Monde route

- Rename namespace from le-monde/le-monde-en to lemonde
- Remove unnecessary .first() calls on RSS elements
- Remove default ofetch responseType option
- Use static cheerio import instead of dynamic import
- Extract <category> tags into category field

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: sort imports to satisfy oxlint

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: update example paths to match lemonde namespace

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore: trigger CI to re-test with updated route paths

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: remove non-existent <content> element fallback from image URL

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: mlkgrnt <mlkgrnt@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 23:16:17 +08:00
an-lee cae03809c0
fix(route/patreon): creator ID extraction and render content from JSON (#22188)
* fix(route/patreon): Fix creator ID extraction

* fix(route/patreon): render content from content_json_string

* fix(route/patreon): satisfy oxlint and use trueUA for creator fetches

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(route/patreon): resolve review comments

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 12:54:26 +08:00
BeaCox 6c52888af2
fix(route/sjtu/cs/tzgg): add category description table for docs (#22197) 2026-06-06 12:14:47 +08:00
Tinko 5542e787e3
feat(route): add Shanghai weather alert (#22087)
* feat: add Shanghai weather alert

* chore: update `updated` field by alert deactivate time

* chore: fix import path

* chore: remove cache time

* fix: disable cache age extend

---------

Co-authored-by: Tinko <24890691+TinkoLiu@users.noreply.github.com>
2026-06-06 11:33:59 +08:00