* feat xhamster
* style: auto format
* add maintainers
* remove useless header
* replace html() to text()
* Use U+002d instead of U+2013
* Use regex to match the string instead of replacing it
* no author
* remove link & author from description
* remove caching
* Apply suggestion
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Evilmass <21218296+Evilmass@users.noreply.github.com>
* fix(telegram): preserve access auth params in media links
* test(telegram): sort imports in channel regression test
* chore: remove channel.test.ts
---------
Co-authored-by: jack <jack@example.com>
* feat: add Polymarket
* feat(route): add Polymarket routes using Gamma API
Routes:
- /polymarket/events/:tag_slug? - List events by category
- /polymarket/event/:slug - Event details with markets
- /polymarket/search/:query - Keyword subscription
- /polymarket/series/:slug? - Recurring event series
- /polymarket/user/:address - User trading activity
- /polymarket/positions/:address - User positions
- /polymarket/leaderboard/:category?/:timePeriod? - Trader rankings
APIs used:
- Gamma API (gamma-api.polymarket.com): events, series
- Data API (data-api.polymarket.com): activity, positions, leaderboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(route): add Polymarket routes using Gamma API and Data API
Routes:
- /polymarket/events/:tagSlug? - List events by category
- /polymarket/event/:slug - Event details with markets
- /polymarket/search/:query - Keyword subscription
- /polymarket/series/:slug? - Recurring event series
- /polymarket/user/:address - User trading activity
- /polymarket/positions/:address - User positions
- /polymarket/leaderboard/:category?/:timePeriod? - Trader rankings
APIs used:
- Gamma API (gamma-api.polymarket.com): /events/pagination, /events/slug, /series, /public-search
- Data API (data-api.polymarket.com): /activity, /positions, /v1/leaderboard
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* route(thinkingmachines): add news route for Thinking Machines Lab
Add route for Thinking Machines Lab (thinkingmachines.ai) news page.
Founded by Mira Murati (ex-OpenAI CTO), the lab publishes news about
their AI research and products.
Closes#0
* fix: use import type and sort imports for oxlint
* fix: correct import sort order per simple-import-sort
* fix: strip title/author/pubDate heading from description, remove unnecessary try/catch
Address review feedback:
- Remove .post-heading block from description (title, author, pubDate have dedicated fields)
- Remove try/catch wrapper (requests do not throw errors)
* fix: remove article fallback and strip paginator from description
* fix(route/twitter): dynamically resolve GraphQL query IDs from Twitter JS bundles
Twitter rotates GraphQL query IDs every 2-4 weeks, causing 404 errors.
Instead of relying solely on hardcoded IDs, fetch and cache the latest
query IDs from Twitter's client-web main.js bundle at runtime.
- Add gql-id-resolver module to extract queryId/operationName pairs
- Cache resolved IDs using CACHE_CONTENT_EXPIRE (Redis supported)
- Fall back to hardcoded IDs if dynamic resolution fails
- Update init() to trigger resolution before first API call
Signed-off-by: yuguorui <yuguorui@pku.edu.cn>
* fix(route/twitter): use undici.fetch directly to preserve CookieAgent dispatcher
Both ofetch and the global wrappedFetch (request-rewriter) drop the
dispatcher option when constructing a new Request object, which prevents
the CookieAgent from attaching cookies in production builds. Use
undici.fetch directly for Twitter API requests to preserve the dispatcher.
Signed-off-by: yuguorui <yuguorui@pku.edu.cn>
---------
Signed-off-by: yuguorui <yuguorui@pku.edu.cn>
* use puppeteer
* fix typo
* fix fetch page one by one
* use deprecated method
* bypass Disallow await inside of loops
* use one browser for the whole route
* bypass Disallow await inside of loops
* use one browser even if marked deprecated by doc
* use Promise.all()
* fix new destory -> destroy
* feat(core): add honeybadger support
* feat(honeybadger): configure Honeybadger to disable uncaught error tracking
* feat(tests): add info logger mock to app-bootstrap tests
* test: fix mock value
* test: mock honeybadger as well