Liam O'BrienandClaude Sonnet 4.6 c230dab083 Add provider-level rate limit backoff for third-party references (#35035)
* Throwing 429 errors when ref manager responds with 429

* respecting the APIs retry-after first

* Handle 429 on linked file refresh path

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Show rate-limited message on linked file refresh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Consolidate backoff helpers into ProviderBackoffStore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix EX 0 crash, null guard, BackoffProvider type, test fixes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add unit tests for rate limiting implementation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* update ZoteroProviderTests for new signedGet return shape

getCollections now returns { collections, backoff, retryAfter } instead
of a bare array. getUsersItemsChanges reads backoff/retryAfter from the
signedGet return tuple, not from response.headers (extraction moved to
the transport layer in OAuth1Transport).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix tpr-webmodule unit test regressions

ZoteroSyncClient: collectionsResponseSchema now requires backoff/retryAfter
as number|null; stub responses were missing these fields causing ZodError.
Assertions updated since getCollections returns CollectionsResult (object)
not a bare array.

ReferencesApiController: vi.doMock for @overleaf/fetch-utils was missing
RequestFailedError; the three 429 propagation tests inline-import it from
the mocked module.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* address PR review comments

- ReferencesApiController: add fallback 500 status and optional-chain
  response in all catch blocks where err.response may be absent
- OAuth1Transport: guard Number(header) with Number.isFinite to prevent
  NaN propagating as backoff/retryAfter when header value is non-numeric
- ZoteroProvider: same Number.isFinite guard for lastModifiedVersion

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix prettier formatting in ZoteroSyncManager.test.mjs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* show rate-limited message in groups modal and Write & Cite

use-provider-groups: detect 429/rateLimited response and set error to
'rate_limited' instead of generic 'loading_groups'

file-tree-import-bibliography: add rate_limited key to all three
providers' translation maps so the import modal renders the rate-limited
message when groups loading is blocked

reference-manager-source: add RateLimitedError, throw it on 429 from
search, block further searches and show a toast notification

toasts: add write-and-cite:rate-limited toast and showRateLimitedToast()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fixup! fix tpr-webmodule unit test regressions

* fixing CI failures

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: 158c2b92c557caacef337b89f68c91c47569151f
2026-09-17 11:21:20 +00:00
2026-03-09 09:06:41 +00:00
2026-09-17 11:17:47 +00:00


Overleaf

An open-source online real-time collaborative LaTeX editor.

Wiki • Server Pro • Contributing • Mailing List • Authors • License

A screenshot of a project being edited in Overleaf Community Edition

Figure 1: A screenshot of a project being edited in Overleaf Community Edition.

Community Edition

Overleaf is an open-source online real-time collaborative LaTeX editor. We run a hosted version at www.overleaf.com, but you can also run your own local version, and contribute to the development of Overleaf.

Caution

Overleaf Community Edition is intended for use in environments where all users are trusted. Community Edition is not appropriate for scenarios where isolation of users is required due to Sandbox Compiles not being available. When not using Sandboxed Compiles, users have full read and write access to the sharelatex container resources (filesystem, network, environment variables) when running LaTeX compiles.

For more information on Sandbox Compiles check out our documentation.

Enterprise

If you want help installing and maintaining Overleaf in your lab or workplace, we offer an officially supported version called Overleaf Server Pro. It also includes more features for security (SSO with LDAP or SAML), administration and collaboration (e.g. tracked changes). Find out more!

Keeping up to date

Sign up to the mailing list to get updates on Overleaf releases and development.

Installation

We have detailed installation instructions in the Overleaf Toolkit.

Upgrading

If you are upgrading from a previous version of Overleaf, please see the Release Notes section on the Wiki for all of the versions between your current version and the version you are upgrading to.

Overleaf Docker Image

This repo contains two dockerfiles, Dockerfile-base, which builds the sharelatex/sharelatex-base image, and Dockerfile which builds the sharelatex/sharelatex (or "community") image.

The Base image generally contains the basic dependencies like wget, plus texlive. We split this out because it's a pretty heavy set of dependencies, and it's nice to not have to rebuild all of that every time.

The sharelatex/sharelatex image extends the base image and adds the actual Overleaf code and services.

Use make build-base and make build-community from server-ce/ to build these images.

We use the Phusion base-image (which is extended by our base image) to provide us with a VM-like container in which to run the Overleaf services. Baseimage uses the runit service manager to manage services, and we add our init-scripts from the server-ce/runit folder.

Contributing

Please see the CONTRIBUTING file for information on contributing to the development of Overleaf.

Authors

The Overleaf Team

License

The code in this repository is released under the GNU AFFERO GENERAL PUBLIC LICENSE, version 3. A copy can be found in the LICENSE file.

Copyright (c) Overleaf, 2014-2025.

Languages
JavaScript 61.6%
TypeScript 31.8%
SCSS 2.5%
Java 2%
Pug 0.7%
Other 1.2%