The web API helpers built their own ProxyAgent from proxy.proxyUri,
which throws for a socks5h PROXY_URI that the shared dispatcher now
supports, and also dropped the PROXY_AUTH token and TLS options that
the shared dispatcher sets. Compose the cookie agent on top of
proxy.dispatcher instead, so these requests use the same proxy setup
as every other fetch.
Since #22401 every socks* PROXY_URI is handed to undici's ProxyAgent,
which only accepts socks5: and socks:. A socks5h, socks4 or socks4a
URI fell through to its HTTP proxy path and threw "Invalid URL
protocol" while the proxy module loaded, so the server never started,
even though unify-proxy listed all of them as supported.
Pass socks5h to undici as socks5: its SOCKS5 client sends host names
to the proxy, so DNS still resolves there, as playwright.ts already
assumes. undici has no SOCKS4 support, so drop socks4 and socks4a from
the accepted protocols, which logs the supported list and disables the
proxy like any other unsupported protocol.
Read the Premium Bandai new item list, which covers the last 10 days,
with each item's image, price and start of sales or reservations. The
page is Shift_JIS and gives no year, so a date ahead of now is taken
from the previous year.
Premium Bandai redirects requests from outside Japan to its
international site, so the route reports a configuration error then and
the docs point to PROXY_URI with PROXY_URL_REGEX. Item pages sit behind
a browser check even from Japan, so full names and delivery dates are
not included.
Closes#4517
The old product route read Sony's Valkyrie API, which now returns 404,
so PlayStation Store prices had no route since it was removed. Concept
and product pages still embed the store's Apollo cache, with each
edition, its SKUs and the purchase buttons that carry the price.
List every edition for a concept ID, or the one product for a product
ID, priced from the button whose upsell service is NONE, since the
default button can be a PlayStation Plus catalog or trial offer. The
guid includes the base price, the discounted price and the offer end,
so each price change becomes a new item.
Closes#1110
oxlint applies fixes in a single pass and reports the problems it saw
before fixing, so a fix that creates a new problem still exits 0. In
60dd77d75 the prefer-switch fix left an unbraced `else switch` with
braced cases, the bot committed it, and every later Format run failed
on code it could no longer fix in one pass.
After `npm run format`, repeat oxlint --fix and oxfmt on the changed
files until they stop changing, then lint them without --fix so the
job fails instead of committing what lint rejects. Pushes without
fixes skip the loop. Remove the step once oxlint applies fixes
recursively (oxc-project/oxc#16118).
The MTProto path cached the resolved input entity for the default 5
minutes, so every process that started later or missed the cache called
contacts.ResolveUsername again for each channel. That method is heavily
rate limited, and once the account hit a flood wait the route failed
with "A wait of N seconds is required" even for channels that the public
web preview serves fine.
Keep the channel ID and access hash for 30 days, since they do not
change, and fall back to the web preview when MTProto raises a
FloodWaitError. Other MTProto errors are still reported.
Closes#20454
Read the posts from the recent-activity API, as requested in the review
of #23262. The profile page only server-renders the latest two posts,
while the API returns the user's post activity without authentication.
Keep the social-post entries (the activity also lists comments and
reactions on other posts), render rawContent as Markdown and append the
image and video attachments.
Closes#23059
Co-authored-by: qqc20043 <147302501+qqc20043@users.noreply.github.com>
Douban lists replies from oldest to newest, 100 per page, so the route
only ever saw the first 100 replies of a long topic and missed every
new one. When the topic has more than one page, fetch the page that the
paginator's last link points to and use its replies instead. Reply
links now open that page (with author=1 in author-only mode), while the
guid keeps the old format so existing items are not duplicated.
Closes#17743
Same autofix as in seu: the prefer-switch fixer left braced cases that
unicorn/switch-case-braces "avoid" rejects. The Format workflow fixed
these in its own checkout but stopped on the seu errors before
committing, so lint without --fix still fails here.
The Format workflow rewrote the if/else chain into a switch through
unicorn prefer-switch, whose fixer adds braces to every case. The
repo config sets unicorn/switch-case-braces to "avoid", and oxlint
applies fixes in a single pass, so the braces were committed and every
later Format run failed on them without being able to fix them.
The docs site only builds pages for namespace keys, so the category
links written into radar-rules.json/js pointed at missing pages.
0a3a66a1c fixed the API rules; do the same for the build output.
Refs #17785
Filtered requests keep a distinct source candidate cache. Expect the first
unfiltered request to miss that cache, and verify that repeating the same
unfiltered request returns all entries with a cache hit.
Merge current master while retaining the completed route review and retired
service removals. Keep upstream source migrations and new feed functionality,
including the ACEA API, Xiaomi data helpers, Yahoo Finance topic helper,
Bilibili list URLs, Douban IP locations, and Douyin live-stream handling.
Resolve overlapping changes without losing existing limit validation, bounded
detail requests, stable item metadata, or route configuration corrections.
Keep RSS image MIME inference and explicit media precedence alongside upstream
attachment extraction, emitting a single enclosure per item.