Commit Graph
28376 Commits
Author SHA1 Message Date
Brian Gough d75ef19bbf Merge pull request #34746 from overleaf/bg-clsi-apparmor
add new clsi apparmor profile for checkpoints

GitOrigin-RevId: 3a003263326613d3166343d54adb7050fe1e9847
2026-06-23 08:05:38 +00:00
Mathias Jakobsen e0cfb07f60 Merge pull request #34698 from overleaf/mj-context-menu-tracked-changes
[web] Add tracked changes options to context menu

GitOrigin-RevId: b49198c6c2c63063d96ace69f10b617ac819bb04
2026-06-23 08:05:33 +00:00
Kristina a53b164b45 [web] email content previews for notification emails (#34576)
* add content previews to notification emails
* add fetcher for doc lines
* gate content previews behind a split test
* make composable blocks for rendering

GitOrigin-RevId: c8df384d55a301084b98df76fd3edd6dde6ea50c
2026-06-22 08:06:25 +00:00
Domagoj Kriskovic 63a605484c Add support for rendering math in Markdown with MathJax
GitOrigin-RevId: dd1c1c72237a5364c642e46c66e08ea7a6977662
2026-06-22 08:05:40 +00:00
Mathias Jakobsen ef05288f81 Merge pull request #34714 from overleaf/mj-tracked-change-merges
[overleaf-editor-core+ranges-tracker] Pick lower timestamp when merging tracking info

GitOrigin-RevId: 5b1c8d7c719003df4506014c381f2a525d0a7ff4
2026-06-19 08:07:27 +00:00
Eric Mc Sween 7ee385fe45 Merge pull request #34816 from overleaf/revert-34643-em-library-backend-search
Revert "Library search: make backend search tokens consistent with frontend (follow-up to #34386)"

GitOrigin-RevId: 83328f2ee4a9c3f668325fa4de1ca652e7c718bf
2026-06-19 08:07:19 +00:00
Eric Mc Sween 80218df85e Merge pull request #34643 from overleaf/em-library-backend-search
Library search: make backend search tokens consistent with frontend (follow-up to #34386)

GitOrigin-RevId: 91ef5b5dc81ba8ebda43e746c9b747b7636f3e80
2026-06-19 08:07:12 +00:00
Eric Mc Sween 0371ba46f6 Merge pull request #34693 from overleaf/em-upload-bib
[web] Add "Upload .bib file" option to library

GitOrigin-RevId: 7067a4cb10f0973c0423507836ef13555329942c
2026-06-19 08:07:08 +00:00
Kate Crichton 0883e0fec0 Merge pull request #34513 from overleaf/kc-verify-domain-from-table
[web] verify domain from table

GitOrigin-RevId: 2e41f76be26b81f204208fab714f2e3399071499
2026-06-19 08:06:34 +00:00
Kate Crichton f7b1ccae9a Merge pull request #33852 from overleaf/kc-schedule-domain-verification
[web] schedule domain reverification

GitOrigin-RevId: 08217692960379d0a6f7ce457032b1182fb2bf4e
2026-06-19 08:06:30 +00:00
Liam O'BrienandClaude Opus 4.8 bc9c85019f Lo zotero initial library sync (#34456)
* Migration and index setup script

* Helper script to clear linked library

* Pull users collections

* Implementing get items from users zotero library

* Initial zotero sync client

* Pulling users overleaf collection

* Pulling users overleaf collection

* Initial sync pull from Zotero to Library

* Sync and import workflow from Zotero into Library

* Using user getter and setter for updating user library info

* Using new collection for library sync states

* Adding tests for new sync functionality

* Harden Zotero sync route

* Simplify Zotero sync state read and skip accounting

Fold the ensure+get double round-trip in sync-state discovery into one
findOneAndUpdate, and derive itemsSkipped from items.length - itemsInserted
instead of a running counter.

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

* Redact URL-encoded token secret from OAuth1 request logs

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

* fixing type failure

* Rename upsertZoteroReferences to importZoteroReferences

The method is insert-only; the bulkWrite upsert just makes re-runs
idempotent rather than updating, so the name now reflects that.

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

* Validate librarySyncStates reads with zod

Replace the `as` / `as unknown as` casts in getLibrarySyncState and
ensureLibrarySyncState with a zod schema parse, matching
LibraryReferenceRepository. Types are now derived from the schema.

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

* Defer Zotero sync watermark until pagination exists

Don't record lastSyncedVersion after a single-page sync: committing the
page-1 version before pagination (#34286) lands would let incremental
sync (#34282) skip items beyond the first page. Drops the commitSyncState
call and toVersion from SyncResult; the version envelope is left for the
follow-ups. commitSyncState stays in the repository for #34282.

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

* Extract OAuth1Transport from OAuth1Handler

Lift the OAuth1 client/config registry, getAccessToken, redactSecret and
classifyOAuth1Error into oauth1/OAuth1Transport.js, plus a signedGet
helper for provider modules to reuse. OAuth1Handler now imports them; its
method bodies are unchanged. Test mocks move to esmock's global scope so
they reach the transport, with Errors pinned for instanceof checks.

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

* Move Zotero collections/items into a per-provider ZoteroProvider

Carve the Zotero-only operations out of the generic OAuth1 handler into
providers/ZoteroProvider.js, dispatched via providers/ProviderRegistry.js.
ReferenceProviderHandler now resolves the provider from the registry and
throws UnsupportedOperationError (mapped to 501) for providers without the
operation, instead of bolting Zotero-only methods onto OAuth1Handler.

Zotero's collectionsUri/itemsTopUri are read from settings by ZoteroProvider
rather than copied into the shared OAuth1 registry. Removes getCollections/
getUsersItemsChanges (and their tests) from OAuth1Handler.

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

* Add ZoteroProvider unit tests and unsupported-provider coverage

Cover ZoteroProvider collections/items parsing, header envelope and
malformed-payload rejection, and assert ReferenceProviderHandler throws
UnsupportedOperationError for providers without a sync implementation.

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

* Make addSyncedCollection idempotent

Only push a synced collection when its key isn't already recorded, so a
repeat sync can't create duplicate syncedCollections entries regardless of
the caller-side guard. Adds a sequential test asserting no duplicate.

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

* Hardcode Zotero library endpoint paths, derive host from site

Move the collections/items-top endpoints out of settings and into
ZoteroProvider as path constants, taking only the host from the
provider's `site`. Aligns Zotero `site` with the other providers
(API host) and avoids adding per-endpoint config points.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Make Zotero sync routes explicit, 404 unknown providers

Hardcode the collections/items routes to /zotero rather than a generic
/:ref_provider, so a non-Zotero request 404s on the missing route
instead of returning a misleading 501. Drop the UnsupportedOperationError
501 branch, reverting OAuth2 unsupported ops to their prior 500.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: 50e16a9c46f995c2e9db6eed50ef81c3a71ea71d
2026-06-19 08:06:07 +00:00
Antoine ClausseandClaude Opus 4.8 e5f712a857 [web] Cleanup plans-2026-phase-1 - phase 2: pug/backend pricing (#34623)
* Remove `plans2026` from pug files in subscriptions module

* Remove `plans2026` param from `makeGroupPlans`

* Remove `plans2026` param from `makeUISettings` in interstitial-payment.mjs

* Remove `plans2026` param from `makeInterstitialPaymentConfig` in interstitial-payment.mjs

* Remove `plans2026` param from `makeIndividualPlans`

* Remove `plans2026` param from `makeStudentPlans`

* Remove `plans2026` from try-premium page

* Remove `plans2026` from controllers

* Remove unused files

* Update translations

* Update tests

* Update tests

* Remove unused translations

* Rename the collaborator upgrade-mode test to read explicitly as the
Standard-plan replacement for the removed redirect test, and drop the
stale "when plans 2026 is enabled" framing now the controller no longer
branches on the flag.

* Surface controller errors in InterstitialPayment tests

Move assertions out of the res.render callback into render/redirect
helpers that resolve with the captured args and reject on the wrong
path or a controller rejection, so failures show the real error
instead of timing out. Restore the ai-limit-upgrade-copy split-test
assignment for the AI copy tests.

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

* format

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
GitOrigin-RevId: f0b055b4d92b494b531766a13b057336d9c2c9af
2026-06-19 08:06:03 +00:00
David d6e55f81ff Merge pull request #34750 from overleaf/dp-cleanup-reference-settings-migration
[web] Remove reference manager settings migration code

GitOrigin-RevId: 1062e1f08a6e6d4547f48c965c342d2ac15e9a4f
2026-06-19 08:05:56 +00:00
Copilot ea1871b0df Use Ctrl+Shift+C for the add-comment shortcut while keeping Cmd+Shift+C active (#32624)
GitOrigin-RevId: 5fdf9ae7dd0fa194c3ac6acf9abb70ac9721fd2e
2026-06-19 08:05:48 +00:00
Mathias Jakobsen b570078223 Merge pull request #34774 from overleaf/mj-fix-cleanup-locales
[web] Ignore cache files in cleanupUnusedLocales

GitOrigin-RevId: 72ad8fb265a6fe905671dd379b3ca29468c9f759
2026-06-19 08:05:10 +00:00
Mathias Jakobsen 5f79c2dd10 Merge pull request #34512 from overleaf/mj-floating-toolbar-option
[web] Add setting for floating toolbar menu

GitOrigin-RevId: bd28f1f287f2011535c7fd530f1217f01e0cfbbc
2026-06-18 08:07:33 +00:00
Jessica Lawshe 106dd1b07b Merge pull request #34702 from overleaf/jel-grace-period-ui
[web] Update domain verification failed grace period UI

GitOrigin-RevId: 267dc4e4cc60b959faaacecc5a13b662d670e313
2026-06-18 08:07:09 +00:00
MoxAmber a3036730b4 Merge pull request #34644 from overleaf/as-link-sharing-analytics
[web] Add sharing link analytics events

GitOrigin-RevId: b206732397065c399d38a8e42dbdebe60222fb24
2026-06-18 08:06:52 +00:00
MoxAmber ad9b28af18 Merge pull request #34537 from overleaf/ii-share-modal-invited-people
Show "No one invited yet" instead of "1 person invited" for solo projects

GitOrigin-RevId: 0423b507e0574dc5a381cbe4044912a25af7a3f0
2026-06-18 08:06:48 +00:00
MoxAmber a7a3ccdb71 Merge pull request #34639 from overleaf/as-link-sharing-editinvitecount
[web] Ignore reuable invites (aka sharing links) when checking edit invite count

GitOrigin-RevId: 355ec6e6b2d5d497392fe1bdc04e68ad80349518
2026-06-18 08:06:44 +00:00
MoxAmber bd8a156908 Merge pull request #34394 from overleaf/as-link-sharing-groups-split-test
[web] Move group link sharing behind a separate split test

GitOrigin-RevId: c973a9bccb88f427a9f51d121b58a8799993e7c9
2026-06-18 08:06:39 +00:00
Domagoj Kriskovic 62c2523aec Add table support for visual markdown editor
GitOrigin-RevId: b36f575d40b19fdf32622c9923cecd5b47658d5d
2026-06-18 08:06:26 +00:00
Eric Mc Sween 95e0a88bbb Merge pull request #34519 from overleaf/em-github-sync-octokit-migration
Replace octonode with octokit in github-sync

GitOrigin-RevId: 05886b87ed8625dbbcb77dc2d6ccbeda7b426e79
2026-06-18 08:06:22 +00:00
roo hutton 1dfe6e60b3 Merge pull request #34534 from overleaf/rh-rm-recurly
[web] Remove conditional Recurly checkout page

GitOrigin-RevId: 5bb773080bba682628f0f5428c72b7dff75b6015
2026-06-18 08:06:17 +00:00
Davinder SinghandCopilot Autofix powered by AI 6613ef2f18 [WEB] Move Review Toggle into the toolbar - 2 (#34578)
* wip of adding Review Toggle into the toolbar

* renaming to isToolbarMigration

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* removing extra comments

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
GitOrigin-RevId: 2c0b54ae983a32c083def8e9e64ddd0fb7ddf334
2026-06-18 08:06:10 +00:00
Malik Glossop b04fea4726 Merge pull request #34559 from overleaf/mg-writefull-workbench
Allow opening workbench and hide texgpt for ai menu behind flag

GitOrigin-RevId: f4de64ce9b68f4e337772e164e46e27d2a41a0e7
2026-06-18 08:06:06 +00:00
Antoine Clausse 0d004926e6 [web] Cleanup plans-2026-phase-1 - phase 1: frontend (#34619)
* Remove `plans-2026-phase-1` from frontend in subscriptions module

* Remove `plans-2026-phase-1` from general frontend

* Remove empty `AiErrorAssistantPaywall`

* Simplify `UpgradeNotification`

* Update translations

* Fix tests

* Remove `OverleafAssistPaywall`

* Remove unused locales

GitOrigin-RevId: 4cf04bbde134a3f7b778a0695d388f31d9765343
2026-06-18 08:06:01 +00:00
Mathias Jakobsen fb9ebfcc10 Merge pull request #34459 from overleaf/mj-review-panel-style-cleanup
[web] Clean up review styles post-editor redesign

GitOrigin-RevId: b8b535f765f446770e62e31519f7f1e98dc7e3d2
2026-06-18 08:05:54 +00:00
Mathias Jakobsen a14971b790 Merge pull request #34600 from overleaf/mj-collapsible-file-header-cleanup
[web] Clean up collapsible file header styles post editor redesign

GitOrigin-RevId: a5c8749360433213d6602d029ea6b66312c9032b
2026-06-18 08:05:49 +00:00
Rebeka Dekany 51fc266bc2 Redirect users without an active subscription to the subscription page instead of the error page (#34637)
* Redirect freemium users from billing portal routes to subscription page with banner

* Handle null management link and unknown service in subscription redirects

* Move deleted-subscription invoices link inside `getCustomerManagementLink` instead

GitOrigin-RevId: 7122f69e9b8bda6238111f76c15a35135ce5f0ac
2026-06-18 08:05:22 +00:00
Jakob AckermannandAndrew Rumble 6323fddbd8 [web] avoid UserAnalyticsIdCache (#33121)
* [web] always provide an analyticsId when registering new users

* [web] add recordEventForMongoUser and use it during login

* [web] use recordEventForMongoUser/recordEventForSession where possible

* [web] use session cache for analyticsId when refreshing features

* [web] add setUserPropertyForMongoUser and use it where possible

* [web] use setUserPropertyForSessionInBackground where possible

* [web] use mongo user for analyticsId when setting utm user properties

* [web] admin-panel: user updated user when sending events

* [web] enforce labsProgram being populated on user object

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>

* [web] revert FeaturesUpdater.refreshFeatures change

* [web] labs: move session maintenance into handler

* [web] analyticsMiddleware: ensure that all users have labsProgram field

* [web] migrate a few more events to recordEventForSession

* [migrations] mark back-fill of db.users.analyticsId as required

* [web] setUserPropertyForSessionInBackground: throw early

---------

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
GitOrigin-RevId: 19c26bc36abd8c11f0a8f458d25abfb7cbda0bb7
2026-06-17 08:08:32 +00:00
Anna Claire Fields 7035a2e025 Revert "Acf pnp migration master" (#34709)
GitOrigin-RevId: ec7d63e1212e05dd6dfc7a0ddf785c11eca76ad6
2026-06-17 08:07:56 +00:00
Anna Claire Fields e1226515f6 PNP deployment: clsi-lb, web, latexqc fixes (#34696)
GitOrigin-RevId: fe1f5a7670d6fcf2128c5e2b50cc2a544afb1ebc
2026-06-17 08:07:36 +00:00
Anna Claire Fields 8f07308342 Acf pnp migration master (#34040)
GitOrigin-RevId: 418eab9bc733f27a6e0f8f04a2a8e21c2f5a491f
2026-06-17 08:07:16 +00:00
Jakob Ackermann d44e862a0c [web] throw early in UserCreator.createNewUser with missing analyticsId (#34664)
* [web] throw early in UserCreator.createNewUser with missing analyticsId

* [migrations] rerun back-fill of db.users.analyticsId

GitOrigin-RevId: eabf16326192fca4dbea00ad643cee4315c426c6
2026-06-17 08:06:59 +00:00
Jakob Ackermann 6bc9f1dae4 [server-ce] test: the first startWith must resetData when using dataDir (#34671)
* [server-ce] test: the first startWith must resetData when using dataDir

* [server-ce] test: fix order of creating user and resetting DB

GitOrigin-RevId: 2a6e6344919fe48d41704e1a3cb39c6e22b5a924
2026-06-17 08:06:54 +00:00
Malik Glossop bf22bf9eed Merge pull request #34487 from overleaf/mg-fix-nested-context-menu
Block native context menu on editor context menu and fix focus styling

GitOrigin-RevId: c2d59e7acc59019b5e2777cc1bf3ad24a7d8e54e
2026-06-17 08:06:49 +00:00
Malik Glossop 8ef463f8b0 Merge pull request #34357 from overleaf/mg-combine-floating-menus
Add combined floating menu for comment, tracked changes, writefull

GitOrigin-RevId: 4de5b9d3b1717fc76394f7c0edfe4d7230394c8d
2026-06-17 08:06:44 +00:00
David 9fae908602 Merge pull request #34585 from overleaf/lg-security-hapi-wreck-joi
[Security upgrade] bump @hapi/wreck from 18.1.0 to 18.1.2 in services/third-party-references

GitOrigin-RevId: a6efbbb9b7c8ddf995c247f8b787c16fa8b6d6f3
2026-06-17 08:06:34 +00:00
Davinder Singh 8e8804a318 [WEB] Add TeXGPT button to the main toolbar (#34219)
* feat: add writefull-toolbar-migration split test and
  sourceEditorToolbarStartButtons slot

* feat: add TeXGPT button to main editor toolbar (writefull-toolbar-migration)

* removing wrapper div

* hide toolbar start buttons from readonly users

GitOrigin-RevId: 6bafe3ad3fade98c318ea0d0b2714957c1d2d9b4
2026-06-17 08:06:16 +00:00
Davinder Singh e1881a7645 [WEB] Toolbar overflow: drop one button at a time (#34171)
* adding individual hiding logic for the toolbar icons

* using css for logic

GitOrigin-RevId: 87e9f72c1dab888e2701ef108ecaa0b190e366ff
2026-06-17 08:06:11 +00:00
CopilotandJakob Ackermann f40cebf60b [docstore] replace remaining Joi usage with zod (#34603)
Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 41ca0c35d59bf6accd619f6b5149be14a69e1078
2026-06-16 08:07:22 +00:00
Brian Gough 6f9b7031f4 pass through checkpoint setting (#34631)
GitOrigin-RevId: 50e9791b468253ee966b0eac822b2a01321a0ece
2026-06-16 08:07:14 +00:00
Brian Gough be4108a573 add glob matching to isExtraneousFile (#34633)
GitOrigin-RevId: f12aedb52195cfc9e3254936f1db6189f49c3f37
2026-06-16 08:07:09 +00:00
Domagoj Kriskovic 0778a0e4d3 Revert "Add markdown link tooltip support to the visual editor"
This reverts commit 7ab4fd0793f057c86e4fc0307d81df376efe4d34.

GitOrigin-RevId: 625a5cbbb39832f6a32a26d2ad454669d0ed1846
2026-06-16 08:07:01 +00:00
Rebeka DekanyandM Fahru 1f28eaecdb [web] Add Stripe acceptance tests (#34577)
* Add StripeClient mock-target support and Stripe test settings

Co-Authored-By: M Fahru <m.fahru@overleaf.com>

* Add Stripe payment page acceptance tests

Co-Authored-By: M Fahru <m.fahru@overleaf.com>

* Add MockStripeApi for stateful Stripe acceptance tests

Co-Authored-By: M Fahru <m.fahru@overleaf.com>

* Add Stripe subscription acceptance tests

* Add Stripe webhook acceptance tests

* Use a helper for setting the subscription status

---------

Co-authored-by: M Fahru <m.fahru@overleaf.com>
GitOrigin-RevId: b9bc50c914369da646ddb42ade1a02fd7baeb96b
2026-06-16 08:06:57 +00:00
Jakob AckermannandAndrew Rumble f2ebe46506 [web] add migration for back-filling db.users.labsProgram=false (#34632)
* [web] add migration for back-filling db.users.labsProgram=false

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>

* [web] include user.labsProgram=false in session

---------

Co-authored-by: Andrew Rumble <andrew.rumble@overleaf.com>
GitOrigin-RevId: 0b3322007f6a36d2999d646869dc84f2c6ad4d2d
2026-06-16 08:06:43 +00:00
Jakob Ackermann cb9e834a1f [project-history] return status "423 Locked" when redis lock is taken (#34429)
GitOrigin-RevId: f40230bc98e8ed8a5358e6db5c515cb2a58f9b85
2026-06-16 08:06:38 +00:00
Jakob Ackermann b11027d58f [monorepo] add clsi-sharded mode (#34614)
* [monorepo] provide clsi-sharded dev-env setup

* [monorepo] provide sharded clsi-nginx when using clsi-sharded

* [clsi-perf] run on all instances again

* [monorepo] switch default TL to 2025.1 in clsi (same as web)

* [monorepo] avoid starting base clsi when running clsi-perf with clsi-sharded

* [clsi-lb] use 3s check interval in clsi-sharded mode

GitOrigin-RevId: 3cae8f0c1db69dbd76b94b45dc45b3abb2fa0a83
2026-06-16 08:06:34 +00:00
Andrew Rumble d22cea01ce Merge pull request #33404 from overleaf/copilot/fix-accepts-language-deprecation
Fix deprecated req.acceptsLanguage → req.acceptsLanguages in Translations.mjs

GitOrigin-RevId: db9f09d999158ba5f9f084bc1a8334954a55cd79
2026-06-16 08:06:29 +00:00