Skip to content

fix(plugin-typescript): add a timeout to the Algolia auto-types lookup#7206

Open
sebdanielsson wants to merge 1 commit into
yarnpkg:masterfrom
sebdanielsson:claude/berry-7111-fix-8doaul
Open

fix(plugin-typescript): add a timeout to the Algolia auto-types lookup#7206
sebdanielsson wants to merge 1 commit into
yarnpkg:masterfrom
sebdanielsson:claude/berry-7111-fix-8doaul

Conversation

@sebdanielsson

@sebdanielsson sebdanielsson commented Jun 27, 2026

Copy link
Copy Markdown

What's the problem this PR addresses?

Closes #7111

yarn add queries Algolia's npm-search index to detect whether the added package needs a matching @types package. In our corporate network, all egress traffic traverses our HTTP proxy. If this is set globally using HTTPS_PROXY, HTTP_PROXY, and NO_PROXY, but not explicitly with Yarn's HTTP proxy config, this query will not go through the proxy but will instead try to make a direct connection. In our case, this means the firewall silently drops the connection.

httpTimeout is not what's bounding a single attempt. I dropped it from 15s to 10s and got an identical ~135s per attempt. The wait is the Linux kernel's TCP SYN-retry exhaustion (default tcp_syn_retries=6, ~127–135s in my tests). Because the TCP socket never establishes, got's timeout.socket (which is socket-inactivity-after-connect) never starts. Got then retries httpRetry times, which multiplies the dead time.

My tests:

Settings Total Per attempt Attempts
httpTimeout=10s httpRetry=0 135s ~135s 1
httpTimeout=10s httpRetry=1 269s ~135s 2
httpTimeout=15s httpRetry=1 270s ~135s 2
Defaults (httpTimeout=1m httpRetry=3) 546s (~9m) ~135s 4

How did you fix it?

This caps the lookup at 10s and, on timeout or network failure, warns the user (pointing at the tsEnableAutoTypes: false / YARN_TS_ENABLE_AUTO_TYPES="false" escape hatch) before letting the install proceed without the @types package. It also hardens the Algolia requester so a connection error without a response no longer throws an unrelated TypeError.

Future fixes

My last comment in the linked issue proposes additional fixes to make this more stable, but I wanted to keep this PR small and easy to review. A future enhancement would be to have the Algolia lookup respect the global HTTP environments, just like the installation does today.

Checklist

  • I have set the packages that need to be released for my changes to be effective.
  • I will check that all automated PR checks pass before the PR gets reviewed.

@sebdanielsson

Copy link
Copy Markdown
Author

CI failures seem to be pre-existing.

`yarn add` queries Algolia's `npm-search` index to detect whether the added
package needs a matching `@types` package. On restricted networks (eg. a
corporate proxy that drops or refuses the request) this lookup had no timeout
and could make `yarn add` hang indefinitely, while `yarn install` kept working
against the configured registry.

This caps the lookup at 10s and, on timeout or network failure, warns the user
(pointing at the `tsEnableAutoTypes: false` / `YARN_TS_ENABLE_AUTO_TYPES="false"`
escape hatch) before letting the install proceed without the `@types` package.
It also hardens the Algolia requester so a connection error without a `response`
no longer throws an unrelated `TypeError`.

Closes yarnpkg#7111

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NS1JKnVAz9uPwdyUhfub2g
@sebdanielsson sebdanielsson force-pushed the claude/berry-7111-fix-8doaul branch from 2ac69a6 to 0749d72 Compare July 1, 2026 17:04
Copilot AI review requested due to automatic review settings July 1, 2026 17:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses yarn add hanging in network-restricted environments by bounding the optional Algolia lookup used by @yarnpkg/plugin-typescript to decide whether to add a matching @types/* dependency, and by improving resilience to connection errors.

Changes:

  • Add a 10s timeout wrapper around the Algolia npm-search lookup and warn (then continue) on timeout/network failure.
  • Harden the Algolia requester error path to avoid throwing when error.response is missing.
  • Add a versioning file to release @yarnpkg/plugin-typescript as a patch.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
packages/plugin-typescript/sources/typescriptUtils.ts Adds a timeout + warning path for the Algolia auto-types lookup and guards requester error handling.
.yarn/versions/7111fix0.yml Declares a patch release for @yarnpkg/plugin-typescript.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +41 to +48
const packageInfo = await Promise.race([
index.getObject<AlgoliaObj>(stringifiedIdent, {attributesToRetrieve: [`types`]}),
new Promise<never>((resolve, reject) => {
timeout = setTimeout(() => {
reject(new AlgoliaTimeoutError());
}, ALGOLIA_TIMEOUT);
}),
]);
Comment on lines +67 to +70
process.emitWarning(
`Couldn't reach the npm search registry to check whether ${prettyIdent} needs a matching @types package (${error.message}); the package will be added without it.\n` +
`You can disable this lookup by setting ${formatUtils.pretty(configuration, `tsEnableAutoTypes`, formatUtils.Type.SETTING)} to false in your .yarnrc.yml (or by setting the YARN_TS_ENABLE_AUTO_TYPES="false" environment variable).`,
);
Comment on lines +51 to +56
} catch (error) {
// A timeout or a network error (eg. a proxy blocking the request) shouldn't
// prevent the package from being added - we just can't tell whether it needs
// a matching `@types` package, so we let the user know and carry on.
if (error instanceof AlgoliaTimeoutError || error?.name === `RetryError`)
reportAutoTypesError(configuration, descriptor, error);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug?]: yarn add unexpectedly hangs in network restricted environments

3 participants