Commit Graph
28591 Commits
Author SHA1 Message Date
Eric Mc Sween 528e587038 Merge pull request #35377 from overleaf/em-change-library-mongo-cluster
Add auxiliary Mongo cluster support for library collections

GitOrigin-RevId: 1cfdbe4bbeb6c95f1158834ae60a4e34bef7bb87
2026-09-17 11:26:00 +00:00
Mathias JakobsenandDavinder Singh 1acb00407e [web] Disable various editor buttons during network stall (#34247)
Co-authored-by: Davinder Singh <davibaweja@gmail.com>
GitOrigin-RevId: 9e169f3591cfff2fdae63b461b946fde4611f2d7
2026-09-17 11:25:49 +00:00
Kristina 8741846df8 [doc-updater] fix unbounded Redis key growth in project notifications cron (#35425)
* delete timestamp notification keys for solo projects
* add fallback 7d TTL for keys

GitOrigin-RevId: e0493e74b14b861863afc1d4ef5fa181432ad450
2026-09-17 11:25:41 +00:00
Kristina 7fe05140b0 [doc-updater] add mongo logging to project notifications cron (#35421)
GitOrigin-RevId: db8a84f2079c57b5d5f1ae5447f8526dfb0a6d67
2026-09-17 11:25:37 +00:00
ilkin-overleaf 6fd593ff86 Merge pull request #35312 from overleaf/ii-anonymous-project-access
[web] Restore anonymous read-only access for "Anyone with the link" sharing

GitOrigin-RevId: b17e30259f73d43f0febffeea8908eb47c98b7ee
2026-09-17 11:25:29 +00:00
Mathias Jakobsen 912fb2dcd8 Merge pull request #35056 from overleaf/mj-command-palette-improvements
[web] Command palette improvements

GitOrigin-RevId: 3d6e11697ed4726b7ecada1744d24a15291ad646
2026-09-17 11:25:26 +00:00
Copilot 4ef7324263 Merge pull request #35285 from overleaf/copilot/rename-ide-open-left-menu-once-event
Rename IDE settings open telemetry event

GitOrigin-RevId: 6240798d2d5309792471386ffd1612ebadd559ab
2026-09-17 11:25:23 +00:00
Mathias Jakobsen 3f38d1fefc Merge pull request #35404 from overleaf/mj-remove-nonblocking
[migrations] Remove nonblocking tag from breadcrumbs migration

GitOrigin-RevId: eb65c1b0fb3386972135a89eafdfb49d67306d28
2026-09-17 11:25:19 +00:00
Copybot 96fe5fba0a Merge pull request #1495 from MarkQuach12:bugfix/tag-star-linter-warning
GitOrigin-RevId: 3d66ca34c16e2820e3051ce81ab67abba54cde13
2026-09-17 11:25:09 +00:00
Copybot f72e36a492 Merge pull request #1494 from MarkQuach12:bugfix/proof
GitOrigin-RevId: 4d75435011f33ac9e56b7b2443ea359b2c8ced39
2026-09-17 11:25:01 +00:00
Domagoj Kriskovic 0ecf928249 Zotero sync: error handling & error UX (#35340)
* feat(zotero-sync): implement persistent sync state management and user notifications

* fix tests

* fix(sync): add accessOk flag to sync status recording

GitOrigin-RevId: 2da17038ad21691e7b184bb1494cf97fff8234f9
2026-09-17 11:24:50 +00:00
Jakob AckermannandAndrew Rumble 9519dc5e66 [fetch-utils] use default agent with a 1s timeout and 3 attempts in connect phase (#35406)
Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
GitOrigin-RevId: cb1e854d61ce623fa557ae003dc7159b096e1f86
2026-09-17 11:24:37 +00:00
Jakob Ackermann 89f12e6b1f [document-updater] wrap doc locks in project lock (#35416)
* [document-updater] wrap doc locks in project lock

* [document-updater] use BlockingProject as redis key prefix

* [redis-wrapper] update comment

GitOrigin-RevId: 0ce50e76386871e6c29481494febc8d6b37e7df5
2026-09-17 11:24:34 +00:00
ff72ccf5ba [web] set a few more explicit timeouts on fetch requests (#35402)
* [web] set a few more explicit timeouts on fetch requests

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [web] update test mocks to expect signal

---------

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: 356b97207f6e9a2628e54ff15b034a8e694a4524
2026-09-17 11:24:31 +00:00
Andrew Rumble 05423f1a1d Merge pull request #34344 from overleaf/copilot/convert-fetch-utils-to-es-modules
Convert @overleaf/fetch-utils to TypeScript ESM with Vitest, enable noImplicitAny, fix downstream regressions, and align buildscript generation

GitOrigin-RevId: e060152f056cbae31da0650fb22471525835bd5e
2026-09-17 11:24:05 +00:00
Andrew Rumble 152004a600 Merge pull request #35095 from overleaf/lg-node-24-17-platform-compat
[Node 24.17.0][Platform packages] Fix node-fetch keep-alive false positive and bump clsi yauzl for Node 24.17

GitOrigin-RevId: 9e0382533d45e1e3b3ed88d4ccfc577591666e10
2026-09-17 11:24:02 +00:00
David f1e3093ae3 Merge pull request #35268 from overleaf/dp-frontend-routing
[web] store project dashboard navigation state in the URL

GitOrigin-RevId: 76d95c5706fc196dac7c362e186c66c5334f35ac
2026-09-17 11:23:59 +00:00
Jakob Ackermann bccef96581 [editor-core] fix TextOperation.isNoop() for tracked-changes (#35389)
* [editor-core] add regression test for composing no-op tracked change

* [editor-core] fix TextOperation.isNoop() for tracked-changes

GitOrigin-RevId: 345ee20275db9bf32ad32037013dde2bda507027
2026-09-17 11:23:53 +00:00
Rebeka Dekany b384c06b99 Fix keyboard shortcut handlers to use event.key instead of event.code (#35187)
* Use event.key instead of event.code in keyboard shortcut handlers

* Fix remaining event.code usages in modules/ keyboard handlers

GitOrigin-RevId: 51ad1f3442f9ecfe900b75a3e2631abb4199bb8f
2026-09-17 11:23:49 +00:00
Rebeka Dekany bfd7bc7da5 capture IP address country in Stripe intent metadata (#34779)
GitOrigin-RevId: 6b22129818c17d209ade38093bdc304990e43124
2026-09-17 11:23:46 +00:00
Rebeka Dekany 1ee87a823d Unify component wrappers and OL-prefix dropdown components (#35152)
* Rename dropdown primitives to OL-prefixed components

* Migrate all consumers to OL-prefixed dropdown components

* Migrate subscription dropdown shells to OL components

* Update pdf-preview story to OL-prefixed dropdown components

* Migrate navbar and spelling dropdowns to OL components

* Move dropdown primitives to ol/ol-dropdown-menu, remove BS5 import aliases

* Rename dropdown prop types to OL-prefixed, clean up BS5 import aliases

* Widen OLDropdownItem/Toggle/Menu props to include AriaAttributes and data-*

GitOrigin-RevId: 0babce46867849b3f176bac8cf1652dc76fd34da
2026-09-17 11:23:43 +00:00
Antoine Clausse 882ca2f981 [web] Cleanup plans-2026-phase-1 - phase 4: rest of backend (#34771)
* Remove `plans-2026-phase-1` from subscription module

* Remove code related to `plans-2026-phase-1`

* Remove `SplitTestUserGetter.getProjection`

* Update tests

* Remove last mentions of `plans-2026-phase-1`

* In test, wait for `_updateCustomerIoSubscriptionProperties` to be done

* Remove `purchaseAddon` test

* Remove AI-addon tests

* Fix `_quotaTierToAllowance` throwing on zero-grant tiers

`!quota` treated `0` as invalid, so `basic` (grant 0) threw. Check `typeof quota !== 'number'` alone. Unmasked once branch removed the split-test branch that skipped this path.

* Extract `waitForCustomerIoSync` helper in FeaturesUpdater tests

* https://github.com/overleaf/internal/pull/34771#discussion_r3552882875

GitOrigin-RevId: 0fe0e41b7a4105a3c4739214e2fffb77e91dbc42
2026-09-17 11:23:39 +00:00
Malik Glossop 414027160d Merge pull request #35173 from overleaf/worktree-mg-ai-actions-position
Move floating menu and writefull AI actions to bottom of selection

GitOrigin-RevId: 2d94c2fc9513b8fd42b1904433382eca898d8d99
2026-09-17 11:23:36 +00:00
Mathias Jakobsen 63968ad775 Merge pull request #35381 from overleaf/mj-disable-ft-overlay
[web] Disable disconnected-overlay for flaky connections

GitOrigin-RevId: 1c49b89084d54945dcca86a8861ba89f5728e77f
2026-09-17 11:23:30 +00:00
Mathias Jakobsen fa2a646cc2 Merge pull request #34443 from overleaf/mj-disable-breadcrumbs
[web] Disable breadcrumbs for all users

GitOrigin-RevId: 31482279c86fa4812b5ca351aabdf29b3a635c05
2026-09-17 11:23:27 +00:00
John Lees-Miller e4dd97936a Remove mirror-documentation job (#35399)
* Remove mirror-documentation job

* Update yarn.lock after removing mirror-documentation

GitOrigin-RevId: b6be94f44ff4d2aaeda14798f7232cf89a54eeee
2026-09-17 11:23:23 +00:00
Chris Dryden 185611556f Merge pull request #35315 from overleaf/cd-library-reference-search
Search the account Library by cite key in simple \cite{} autocomplete

GitOrigin-RevId: 1ee7512869316220c42a0011aeafa2520b2d767a
2026-09-17 11:23:20 +00:00
Antoine ClausseandClaude Opus 4.8 894a652b39 [web] Add compile-timeout-interstitial split test (#35286)
* [web] Add compile-timeout-interstitial split test

Show targeted interstitial copy to users arriving from the compile
timeout paywall (paywall-type=compile-timeout). Mirrors the existing
ai-limit-upgrade-copy pattern.

When enabled:
- H1 becomes "Upgrade for 24x more compile time"
- Standard/Pro card descriptions become compile-time targeted
- "24x Basic compile timeout" feature is bolded and hoisted to the top
  of the includes list (all plan types)

Part of #34982

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

* Don't exclude trial users from the compile-timeout copy

* Add missing dot to translation

* Add "AI assistant" to student card

* Refactor how feature list is defined and ordered in pug file

* Replace `aiLimitUpgradeCopy` and `compileTimeoutInterstitial` boolean by `upgradeCopy` string

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: 6c7c7e0457f93284d6798be229da5513f92ca77c
2026-09-17 11:23:17 +00:00
Andrew Rumble 81b3731cde Merge pull request #35299 from overleaf/ar-map-resource_type_template_to_v1_template
[web/metrics] map resource type "template" to "v1_template"

GitOrigin-RevId: 58468f7629b7a327b24dedc1eb09b095a1e38838
2026-09-17 11:23:11 +00:00
Kristina 77ce277a8b [web] Add offline indicator to toolbar (#35368)
GitOrigin-RevId: 81127bff21afb6aadcf175ba1767a2629f01d747
2026-09-17 11:23:02 +00:00
Kristina d3920e76d3 [document-updater] log duration ms for project-notifications job (#35238)
GitOrigin-RevId: 6a654e4140a6640298d97fdff4f260d6a1be0d99
2026-09-17 11:22:59 +00:00
Domagoj Kriskovic e88cb2fd66 [web] add sync now button to library for syncing with zotero
GitOrigin-RevId: 6e848c148eead7a021a714cc90b2b023f64f15a7
2026-09-17 11:22:41 +00:00
Mathias Jakobsen 843aae01c9 Merge pull request #35350 from overleaf/mj-up-timeouts
[web] Increase reconnection window in editor

GitOrigin-RevId: e6ffb4ecda170eb171455a9c692900ce71309c88
2026-09-17 11:22:37 +00:00
ilkin-overleaf 6f8ecc7678 Merge pull request #35182 from overleaf/ii-use-event-listener
[web] Replace useScopeEventEmitter and useScopeEventListener with useEventListener

GitOrigin-RevId: 8348c8c980b01e172fee3371980176d2b58ceec6
2026-09-17 11:22:34 +00:00
Davinder Singh df4e336399 Merge pull request #34245 from overleaf/mj-unsaved-docs-context
[web] Move unsaved docs monitoring to context

GitOrigin-RevId: 6d2c778efb7a52616ba1a1d52c617d8170a7f798
2026-09-17 11:22:28 +00:00
Eric Mc Sween c4104f3bd7 Merge pull request #35235 from overleaf/em-library-size-limits
Add size and count limits to the reference library

GitOrigin-RevId: ec4fb333bbd02043a929f91a702bdfd3fd285785
2026-09-17 11:22:20 +00:00
Eric Mc Sween 5388f548ac Merge pull request #35294 from overleaf/em-drop-old-index
Drop obsolete libraryReferences searchValue index

GitOrigin-RevId: 9e6192aae888cd873a643b54c89a1db3398694cc
2026-09-17 11:22:16 +00:00
Liam O'Brien 1edff0e090 Fixing local build issues from stale branch merged to main (#35354)
GitOrigin-RevId: 09917d1ffceedcedb74b24ad1a8ab4ff5ded24b5
2026-09-17 11:22:08 +00:00
Liam O'BrienandClaude Sonnet 4.6 77970c98c9 Fix GitHub Sync unlink robustness and detect expired credentials (#35147)
* github-sync: only swallow permanent revocation failures during unlink

404 (token gone) and 422 (token issued under a mismatched client_id,
the confirmed cause of #35108) are treated as safe to proceed past;
any other revocation error now aborts the unlink instead of silently
deleting the local credential row, so a token that might still be
live isn't orphaned by a transient GitHub failure.

* web: surface genuine github-sync unlink failures instead of a 500

When GithubSyncApiHandler.unlink rejects for a reason other than the
permanent 404/422 cases now handled by github-sync, show an error
notification on the settings page instead of crashing the request,
mirroring the existing projectSyncSuccessMessage session-flash pattern.

* github-sync: detect expired credentials in user status check

getStatus now validates a stored token against GitHub (GET /user)
before reporting it as linked. A GithubInvalidCredentialsError (401)
now surfaces as expired: true alongside enabled: true, distinguishing
a dead token from a genuinely working link. Any other validation
failure fails open and reports enabled: true as before.

* web: propagate github-sync expired status through to the client

Thread the new expired field from github-sync's status endpoint
through GithubSyncController.getUserStatus and the settings-page
injectUserSettings middleware, and extend the corresponding
TypeScript types on both the app and frontend side.

* web: show a re-link path on the settings widget when github credentials expire

The widget now checks expired status: it shows an error indicator
with a "connection expired" message and renders the Link action
instead of a dead-end Unlink button, since relinking upserts a fresh
token regardless of the stale row.

* web: keep unlink available for expired github credentials

Some users just want to remove an expired connection rather than
relink it. Keep Unlink as the primary action regardless of expired
status, and surface the relink path as an inline link next to the
expired message instead of replacing the primary action.

* web: correct the github unlink confirmation warning

Unlinking never touches a project's githubSyncProjectStates row,
regardless of whether the credential was healthy or expired -
verified by tracing unlinkAccount/deleteUser and confirming no other
code path deletes project sync state on account unlink. Sync pauses
until relink, but no project loses its GitHub connection, so the
warning text was simply wrong; corrected rather than adding a
separate expired-specific message.

* web: add Storybook story for expired github-sync credentials

Covers the new expired state alongside the existing NoFeature,
Unlinked, Linked and Error stories for the settings widget.

* simplify: collapse duplicated branches and extract session-flash helper

- Merge the near-identical 404/422 checks in _revokeToken into one
  status-set check.
- Use optional chaining instead of null-guard ternaries in
  GithubSyncMiddleware.
- Extract popSessionValue() in UserPagesController to de-duplicate the
  read-then-delete session flash-message pattern, now used 3 times.

* review-self: close test coverage gaps found in self-review

- AuthenticationController: cover 401/403 revocation responses and a
  plain network error with no .response, alongside existing 404/422/500.
- GithubSyncController: assert projectSyncErrorMessage stays unset on
  the unlink success path.
- UserPagesController: cover projectSyncErrorMessage set-then-cleared
  and absent-stays-undefined cases.
- Add GithubSyncMiddleware.test.mjs (previously untested): not-logged-in,
  successful status fetch, and callback-error branches.
- Cypress: cover cancelling the unlink confirmation modal while expired.
- Storybook: add ErrorWhileUnlinked story for the disabled-Link +
  error-indicator combination.

* review-self: fix audit-log ordering, cache getStatus validation safely

- GithubSyncApiHandler: write the link-github/unlink-github audit log
  entry only after the corresponding github-sync API call succeeds,
  instead of before (resolves the discrepancy tracked in issue 3354).
- UserController/UserManager: cache getStatus's live token-validation
  result for 5 minutes to cut down on redundant GitHub API calls,
  with an optimistic-lock write (matched against the encrypted token
  that was actually validated) so a relink can never be overwritten by
  a stale in-flight validation of the old token.
- github-integration-linking-widget: dedupe the relink href against
  the linkPath already passed to IntegrationLinkingWidget.

* web: surface expired github credentials proactively in the sync modal

The modal previously only showed the reauthorize prompt after a real
GitHub API call failed with 401 mid-action. It now also checks the
expired field already returned by the status endpoint and shows the
same prompt immediately on open, before ever rendering the export
form against a token known to be dead. Extracted the existing
reauthorize markup into GithubCredentialsExpired so both call sites
share it.

* github-sync: avoid double-fetching the credential doc in getStatus

getStatus called UserManager.getUser, then getAuthToken which
internally fetched the same document again. Add getAuthTokenFromUser
to decrypt from an already-fetched doc and use it in getStatus,
removing the redundant Mongo query and the now-unreachable
GithubUserNotLinkedError handling (the user doc's existence was
already confirmed by the first fetch).

* github-sync: make expired-token handling reactive, drop proactive getStatus validation

Reverts getStatus in the github-sync service to a pure DB check — no live
GitHub API call, no 5-minute cache, no token_expired/token_validated_at
fields. The expired state is already surfaced reactively: the unmerged-commits
fetch on modal open returns 401 when the token is dead (handled by the existing
case 401 branch), and ExportToGithub handles 401 from the orgs call. The
proactive check added complexity (caching, optimistic-lock writes) without a
meaningful UX gain over the reactive paths.

Removes the expired indicator from the settings widget and the proactive
GithubCredentialsExpired screen from the modal's pre-flight check. The
github_sync_expired locale key is removed as it is no longer referenced.

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

* github-sync: show reauthorize prompt when push/pull fails with expired credentials

When a merge (push or pull) returns 401, GithubSyncMergeAction now renders
GithubCredentialsExpired with the Reauthorize button instead of the raw
"GithubInvalidCredentialsError" string that was previously falling through
to the default error branch.

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

* github-sync: wrap all async controller handlers with expressify

Without expressify, an unhandled throw from an async route handler
(e.g. a token decryption failure in the github-sync service producing a
non-4xx error that _reportError re-throws) becomes an unhandled rejection.
Express never sends a response and the modal is left stuck on loading.
expressify catches the error and passes it to next(), so Express's error
handler sends a 500 and the frontend can surface it.

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

* removing redundant tests

* removing getAuthTokenFromUser function

* removing redundant key

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: 0d9a314bf70bea9e6037593f2a6f8b8d1f2c6e71
2026-09-17 11:22:04 +00:00
Anna Claire Fields da7a2f0e72 Add reCAPTCHA enterprise support and refactor invite flow (#35134)
GitOrigin-RevId: 4a4ebbd9e5ec55c3532a0cd3fa6c0feda3e2733c
2026-09-17 11:22:01 +00:00
Andrew Rumble 5a602e1b1d Merge pull request #35290 from overleaf/ar-stop-using-unix-formatter-locally
[monorepo] switch from unix to stylish formatter for lint

GitOrigin-RevId: e3c84e556941b4747e469a123a99d5731697976d
2026-09-17 11:21:32 +00:00
Liam O'BrienandClaude Sonnet 4.6 6c187074e5 Exclude Python venv directories from Dropbox sync (#35029)
* filtering out venv directories

* also exclude .venv directories and sync all pattern copies

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: 6634d9780da44f90c6777347d52def9a854bd29f
2026-09-17 11:21:23 +00:00
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
Miguel Serrano 823d736e94 [web] drop Writefull name from AI Control subtext (#35272)
GitOrigin-RevId: 923d5ab23bb366e5ddb3df9569fa1ae4cca6564e
2026-09-17 11:21:16 +00:00
Domagoj Kriskovic 6a736ecc62 refactor(third-party-references): replace simple-oauth2 with a custom OAuth2 client (#34917)
* [3rd-party-references] replace simple-oauth2 with openid-client

* Refactor OAuth2 handling: replace openid-client with custom OAuth2Client implementation

* Guard unconfigured OAuth2 providers with a controlled error

Providers whose client id/secret env vars are unset now stay registered
but without an OAuth2 client. Using one throws a controlled OError
("OAuth2 provider is not configured") from getOAuth2Client rather than a
TypeError from calling a method on undefined or sending "undefined"
credentials.

* Guard unconfigured OAuth2 providers with a controlled error

* Add clarification comments on OAuth 2.0 client ID and secret encoding requirements

* Add logging for invalid token expiration dates in parseToken function

GitOrigin-RevId: b17884ccba171ff4db8e6a698b3d4dcdca24e8ae
2026-09-17 11:21:13 +00:00
David cb5e36340b Merge pull request #35246 from overleaf/dp-34792-no-references-empty-state
[web] Show "No references found" empty state in import preview

GitOrigin-RevId: 5f8380863eb35235b0ef13d2138c8769e241d53f
2026-09-17 11:21:02 +00:00
Eric Mc Sween 6cea8580aa Merge pull request #34992 from overleaf/em-dropbox-rate-limits
[third-party-datastore] Handle Dropbox rate limits and per-project file-count limits during sync

GitOrigin-RevId: 0a3c4a06b6444a70394c35cb404c566ef7e25cef
2026-09-17 11:20:59 +00:00
Jakob Ackermann 926b7c534b [agents] allow running all the test-runner skill commands (#35247)
* [agents] allow running all the test-runner skill commands

* [agents] move linting into AGENTS.md

* [agents] double down on permissions and cwd

* [saas-e2e] add support for MOCHA_GREP

* [saas-e2e] fail fast by default outside CI

* [agents] avoid need for Codespace detection

* [agents] work around missing trust prompt in Codespaces

* [saas-e2e] e2e_test_setup: merge split-tests in dev-env

GitOrigin-RevId: f1c1cd2a732e98b2e6125ef86a2b2cda5d3aabb6
2026-09-17 11:20:53 +00:00
Mathias Jakobsen 612a6302b4 Merge pull request #35219 from overleaf/mj-themed-select
[web] Add dark mode for Select and OLFormSelect

GitOrigin-RevId: f71b95ff31720e898b33b508c5948b3219b28046
2026-09-17 11:20:44 +00:00
Kristina 1765f6be51 Merge pull request #35223 from overleaf/lg-linkify-it-security-upgrade
[Security upgrade] bump linkify-it to patched version via resolutions

GitOrigin-RevId: a3e689de7d4842c00b2d6d5ac7631224ce76ad1a
2026-09-17 11:20:41 +00:00