Compare commits

..
461 Commits
Author SHA1 Message Date
yu-i-i 01bb31ccad README for extended CE 2025-11-12 12:03:46 +01:00
yu-i-i 0d2ff6707b Add service for Linked URL feature 2025-11-12 11:58:27 +01:00
yu-i-i 15492c0e74 Sandboxed compiles: adjust clsi-profile 2025-11-12 11:50:03 +01:00
Rudy ERCEK 7b9aa7c826 Add MAX_UPLOAD_SIZE environment variable 2025-11-12 11:50:03 +01:00
yu-i-i 488481b0b0 Remove OVERLEAF_OIDC_DISABLE_JIT_ACCOUNT_CREATION in favor of OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS 2025-11-12 11:43:22 +01:00
Synésio Neto f8e000485b Introduce an environment variable to allow JIT OIDC users creation based on their email address domain. 2025-11-12 11:43:22 +01:00
yu-i-i 1b99b69147 Introduce an environment variable to control user creation in OIDC authentication, closes #47 2025-11-12 11:43:22 +01:00
David Rotermund 5724ed7187 I need the --network=host settings for building the container 2025-11-12 11:43:22 +01:00
yu-i-i 6743a088b0 Avoid DEP0174 by removing async from callback-based getGroupPolicyForUser 2025-11-12 11:43:21 +01:00
yu-i-i d1f8d4187e Fix missing Templates link on login page 2025-11-12 11:43:21 +01:00
yu-i-i 37a250594e Fix login page 2025-11-12 11:43:21 +01:00
yu-i-i 401de6cb99 Symbol Palette: make close button visible 2025-11-12 11:43:21 +01:00
yu-i-i 6bc41ddc98 Template Gallery: replace markdown-it with marked 2025-11-12 11:43:21 +01:00
yu-i-i 58e97b5904 Refactor Template Gallery; resolves #38 and #39
- Replace free-text license input with a select box
- Improve visual presentation of modals and enhance keyboard interaction
2025-11-12 11:43:21 +01:00
yu-i-i 30be4f1428 Refactor Sandboxed Compiles 2025-11-12 11:43:21 +01:00
yu-i-i c04a1ddd02 Symbol Palette: improve keyboard input experience 2025-11-12 11:43:21 +01:00
yu-i-i a76a3d4e91 Symbol Palette: get rid of @reach/tabs 2025-11-12 11:43:20 +01:00
yu-i-i 4eaee400d2 Add 'poll' to clsi seccomp profile, fixes minted. Thanks, David. 2025-11-12 11:43:20 +01:00
yu-i-i 2b280e18e1 Make Template Gallery optional; rename environment variables 2025-11-12 11:43:20 +01:00
yu-i-i 61f5379d0f Add Template Gallery support 2025-11-12 11:43:20 +01:00
yu-i-i d1e3798fe9 Track changes / comments: update backend to support frontend changes 2025-11-12 11:43:20 +01:00
yu-i-i 031342a235 Allow EXTERNAL_AUTH to be undefined, fixes #26 2025-11-12 11:43:20 +01:00
yu-i-i 36f7c1f97b Symbol palette: switch to 'OL' UI components and apply minor cosmetic changes 2025-11-12 11:43:19 +01:00
yu-i-i 9d93f55b50 Make OVERLEAF_OIDC_USER_ID_FIELD support 'email' as a value 2025-11-12 11:41:00 +01:00
yu-i-i 8c1db4597c See upstream commit 42ee56e 2025-11-12 11:41:00 +01:00
yu-i-i cac137fad7 Fix glitches in symbol palette after switching to Bootstrap 5 2025-11-12 11:41:00 +01:00
yu-i-i 56fa578a03 Whitelist /oidc/login endpoint, fixes #21 2025-11-12 11:41:00 +01:00
yu-i-i b5d63fbc06 Add ENV variables to control SAML signature validation 2025-11-12 11:41:00 +01:00
yu-i-i 0be94302b0 Re-export doLogout (was removed from exports in commit b9fb636). 2025-11-12 11:41:00 +01:00
yu-i-i 8392979691 Refactor authentication code; add OIDC support 2025-11-12 11:41:00 +01:00
yu-i-i fa4f6040e2 Allow adding extra flags to LaTeX compiler through environment variable 2025-11-12 11:40:59 +01:00
yu-i-i 4df5135936 Enable LDAP and SAML authentication support 2025-05-30 00:31:12 +02:00
yu-i-i 504590d129 Enable Symbol Palette 2025-05-30 00:31:12 +02:00
yu-i-i 6f8c951b7d Allow selecting a TeX Live image for a project 2025-05-30 00:31:12 +02:00
Sam Van den Vonder 6282e4b0eb Enable Sandboxed Compiles feature 2025-05-30 00:31:12 +02:00
yu-i-i 928a514705 Enable autocomplete of reference keys feature 2025-05-30 00:31:11 +02:00
yu-i-i 884e7d81c8 Enable track changes and comments feature 2025-05-30 00:31:11 +02:00
yu-i-i 1c499496c6 Redirect non-existing links to Overleaf page 2025-05-30 00:31:11 +02:00
Jakob Ackermann 25577379fc [clsi] add env var override for seccomp profile (#25894)
GitOrigin-RevId: 6ef9a5c1f9149147641abb9fe1798b1b41a14c05
2025-05-23 13:25:58 +00:00
Miguel Serrano 923708f9f9 Merge pull request #25889 from overleaf/jpa-web-wait-for-mongo
[web] wait for DB before fetching global blobs

GitOrigin-RevId: 2beefd39ae4be4d233e2aac018d471bf949faea2
2025-05-23 11:08:40 +00:00
Jakob Ackermannandmserranom eaf71be07c [references] move redis config to common path in settings (#25883)
* [references] move redis config to common path in settings
---------

Co-authored-by: mserranom <mserranom@gmail.com>
GitOrigin-RevId: a5bf258bb71ff40344b53deb8c07dae849b4d00e
2025-05-23 11:08:35 +00:00
Miguel Serrano 3cf436c89e Merge pull request #25886 from overleaf/msm-add-skip-email-to-delete-user
[CE] Add `--skip-email` to `delete-user` script

GitOrigin-RevId: d0f5ced26930060df1e9f40dee97839076743bbd
2025-05-23 11:08:31 +00:00
Miguel Serrano 01dc0a4b45 Merge pull request #25882 from overleaf/jpa-sp-mongo-6
[web] bump minimum mongo version for Server Pro to 6.0

GitOrigin-RevId: 57821a0610b640880e3801e597f78103d580ee40
2025-05-23 11:08:26 +00:00
Miguel Serrano 978086c658 Merge pull request #25885 from overleaf/jpa-msm-tls-email
[web] fix nodemailer config for tls

GitOrigin-RevId: 6470a57bc66a89d463ca11f0f27e864a8cd3f61a
2025-05-23 11:08:21 +00:00
Mathias Jakobsen 3274235ac6 Merge pull request #25832 from overleaf/mj-ide-hide-editor-actions-when-unavailable
[web] Editor redesign: Hide editor options in menu bar when editor is not visible

GitOrigin-RevId: c4d158f80821afbc5f7ff7d13dac8ff5ecff6315
2025-05-23 08:06:08 +00:00
Mathias Jakobsen 6bb074eec3 Merge pull request #25836 from overleaf/mj-ide-settings-padding
[web] Add border padding to rail to reduce link text overlap

GitOrigin-RevId: f0a49b51dccb6618ca991f2074845796f2b95933
2025-05-23 08:06:03 +00:00
David c450094659 Merge pull request #25804 from overleaf/dp-on-for-guests
Remove references to removed track changes onForGuests option

GitOrigin-RevId: c251ad41633df33f0d963dbc3c2e5cb62920a5e1
2025-05-23 08:05:59 +00:00
David 2d66b9751a Merge pull request #25784 from overleaf/dp-backend-reviewer-role-cleanup
Remove references to `reviewer-role` feature flag in the backend

GitOrigin-RevId: 4d2088e4c2815d3221817a182a0a66b5a60b3532
2025-05-23 08:05:54 +00:00
Eric Mc Sween f69b9f857e Merge pull request #25825 from overleaf/em-accept-edit-operations
Accept all EditOperations in history-ot type

GitOrigin-RevId: b3bc710c92c4aa31dfeec16d422e42f0a6bb8cdb
2025-05-23 08:05:46 +00:00
Jakob AckermannandEric Mc Sween 64984ee86a [history-ot] flush history for projects with short queues ASAP (#25776)
* [document-updater] flush history for projects with short queues ASAP

* [k8s] document-updater: enable short history queue for history-ot demo

* [project-history] flush history for projects with short queues ASAP

* [project-history] wait for mongo before running acceptance tests

* [k8s] project-history: enable short history queue for history-ot demo

* [project-history] change wait-for-mongo step in tests

Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>

---------

Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>
GitOrigin-RevId: 3e989c409e8e9887655b35f2659ce0829e61b357
2025-05-23 08:05:35 +00:00
Liangjun Song 2f87db9c0d Merge pull request #24790 from overleaf/ls-use-script-runner
Update some scripts to use Script Runner

GitOrigin-RevId: aaa11f94dcfd328c158bb02d1b9fb2adfb1bb146
2025-05-23 08:05:23 +00:00
Tim Down d0010217cd Merge pull request #25613 from overleaf/td-bs5-sp-login
Migrate SP/CE login page to Bootstrap 5

GitOrigin-RevId: 37fc7cbb453bfef93abde2080faaa0a88116d1f4
2025-05-23 08:05:19 +00:00
Tim Down a77f218a77 Merge pull request #25805 from overleaf/td-bs5-rename-auth-pages-feature-flag
Change auth pages feature flag

GitOrigin-RevId: 091b2cde7cc4f91e2ce7533d610db773fc622bb5
2025-05-23 08:05:14 +00:00
Tim Down 290bf71659 Merge pull request #25788 from overleaf/td-layout-react
Use correct layout for React pages

GitOrigin-RevId: 0dbf3146273c0ac2f1549f67be374595e1b8403e
2025-05-23 08:05:10 +00:00
Jakob Ackermann 11b94593c2 [web] remove deledFiles collection (#25750)
* [history-v1] remove processing of deleted files when back-filling hashes

* [web] remove deledFiles collection

GitOrigin-RevId: 7c080e564f7d7acb33ebe7ebe012f415a847d0df
2025-05-23 08:05:01 +00:00
Antoine Clausse 52f1e46343 Fix casing in E2E tests (Example project, Blank project, ...) (#25812)
* Fix casing in Tests (Example project, Blank project, Trashed projects, ...)

* Check "Blank Project" case insentively

* Fix git-bridge tests

GitOrigin-RevId: 52339258016c3a923c6207a65d058cb0d6e9d3a2
2025-05-22 08:45:33 +00:00
Christopher Hoskin 841e32bb64 Merge pull request #25809 from overleaf/csh-issue-22789-ci-mongo-7
Upgrade the dev environment and CI to mongo 7

GitOrigin-RevId: da02881d142d21be47dac7bd2af74520ba8664cd
2025-05-22 08:45:24 +00:00
Miguel Serrano 88d3186dc1 Merge pull request #25792 from overleaf/msm-bump-multer
Bump `multer` to v2.0.0

GitOrigin-RevId: 688bfd3e6546b18f22ebaef82e4d9dd57b6d40bd
2025-05-22 08:45:16 +00:00
Rebeka Dekany f86eb6208f Filter out link-sharing token sent to Sentry (#25787)
GitOrigin-RevId: 647f1a2e20e7883f7ab9c862bb0d90cf96360c24
2025-05-22 08:08:13 +00:00
Eric Mc Sween c18b3f95b2 Merge pull request #25492 from overleaf/em-paginate-changes-1
Paginate history changes endpoint

GitOrigin-RevId: 2b48044d64244404efcd2e090b682c1f571a5567
2025-05-22 08:08:09 +00:00
Jimmy Domagala-Tang 23e24627d5 Merge pull request #25821 from overleaf/jdt-handle-no-prem-src
Handle cases where Writefull is not defined on a user on the subscription page

GitOrigin-RevId: ef43da630b5194f6021ebfc52ca4cb473e674b23
2025-05-22 08:08:05 +00:00
Jimmy Domagala-Tang d6cd041704 Merge pull request #25505 from overleaf/jdt-redirect-to-wf-based-on-prem-src
Manage on Writefull should provide the right instructions based on premiumSource

GitOrigin-RevId: bc6dcc5962d18220c445315acbb3b4040ff23d5d
2025-05-22 08:08:01 +00:00
Antoine Clausse e0f3bea9ad [web] De-capitalize english translations (#24123)
* Create decapitalize.sh script

* Remove `text-capitalize` classes, rely on translations instead

* `Account Linking` -> `Account linking`

* `Account Settings` -> `Account settings`

* `Add Affiliation` -> `Add affiliation`

* `Add Email` -> `Add email`

* `Add Files` -> `Add files`

* `Add to Dictionary` -> `Add to dictionary`

* `All Projects` -> `All projects`

* `All Templates` -> `All templates`

* `Archive Projects` -> `Archive projects`

* `Archived Projects` -> `Archived projects`

* `Auto Compile` -> `Auto compile`

* `Back to Subscription` -> `Back to subscription`

* `Blank Project` -> `Blank project`

* `Change Password` -> `Change password`

* `Change Project Owner` -> `Change project owner`

* `Clear Sessions` -> `Clear sessions`

* `Company Name` -> `Company name`

* `Compile Error Handling` -> `Compile error handling`

* `Compile Mode` -> `Compile mode`

* `Compromised Password` -> `Compromised password`

* `Confirm Affiliation` -> `Confirm affiliation`

* `Confirm Email` -> `Confirm email`

* `Connected Users` -> `Connected users`

* `Contact Sales` -> `Contact sales`

* `Contact Support` -> `Contact support`

* `Contact Us` -> `Contact us`

* `Copy Project` -> `Copy project`

* `Delete Account` -> `Delete account`

* `Emails and Affiliations` -> `Emails and affiliations`

* `Git Integration` -> `Git integration`

* `Group Settings` -> `Group settings`

* `Link Accounts` -> `Link accounts`

* `Make Primary` -> `Make primary`

* `Mendeley Integration` -> `Mendeley integration`

* `Papers Integration` -> `Papers integration`

* `Project Synchronisation` -> `Project synchronisation`

* `Sessions Cleared` -> `Sessions cleared`

* `Stop Compilation` -> `Stop compilation`

* `Update Account Info` -> `Update account info`

* `the Sales team` -> `the sales team`

* `your Group settings` -> `your group settings`

* `Zotero Integration` -> `Zotero integration`

* Update decapitalize.sh

* Decapitalize some translations

* `Example Project` -> `Example project`

* `New Project` -> `New project`

* `New Tag` -> `New tag`

* `Trashed Projects` -> `Trashed projects`

* `Upload Project` -> `Upload project`

* `Your Projects` -> `Your projects`

* Revert "Create decapitalize.sh script"

This reverts commit 8c79f367096c206c704c7c01e3572a18f3961d5e.

* Revert changes to stories

* Fix tests

* `Contact us of` -> `Contact us if`

* Make `Contact us` bold in tex files

* `sales team` -> `Sales team`

* `Link accounts and Add email` -> `Link accounts and add email`

* `Make Private` -> `Make private`

* `contact support` -> `contact Support`

* Make `Make primary` tests case sensitive

* Use `add_email` translation string

* Revert changes to non-english locales

* Remove redundant `Account settings` translation

* `New project Name` -> `New project name`

GitOrigin-RevId: 675c46f96ddbf3d259a8d723fed62aa4a7ed40b7
2025-05-22 08:07:46 +00:00
Antoine Clausse 436dcc977f Update Node to 22.15.1 (#25785)
GitOrigin-RevId: 52428d2d7e67c3135a1604fa487dd142aa08bf15
2025-05-22 08:07:42 +00:00
Antoine Clausse b667cef262 Revert "Update defaultHighWaterMark to 64KiB (Node 22's default) (#25522)" (#25789)
This reverts commit 19d731abf683066654027de3a4f9ac0b8916f22c.

GitOrigin-RevId: eb7c45ab45e02054601b607a4bfeb432424a1837
2025-05-22 08:07:38 +00:00
Kristina 8e6d1d5f07 Merge pull request #25732 from overleaf/kh-stripe-preview-addon-purchase
[web] add support for previewing add-on changes for Stripe

GitOrigin-RevId: 46e7d0b96bf0935a4a3afcaf03d7a6f3c26d2108
2025-05-22 08:07:20 +00:00
Domagoj Kriskovic 9b27ed4798 Reinitialise Writefull toolbar after buying AI assist (#25741)
* Reinitialise Writefull toolbar after buying AI assist (#25596)

* Reinit Writefull toolbar after buying AI assist

* use refreshSession()

* add a timeout

* add a second refresh

* Increase a timeout for second refresh of writefull session (#25725)

GitOrigin-RevId: 7247ae45ca7de7f1f3778b1b22f49e2ff840a7ef
2025-05-22 08:07:16 +00:00
Domagoj Kriskovic b8e391c005 Handle undefined user features in UserFeaturesProvider
GitOrigin-RevId: 70841809f691e9f20591bdf1ea05c510a44892af
2025-05-22 08:07:11 +00:00
Alf Eaton 827fb19df7 Define Change.toRaw result as RawChange (#25676)
GitOrigin-RevId: 0fa23806e9d7ee015b5a2a542d52382499edf9ab
2025-05-22 08:07:07 +00:00
Alf Eaton 80897001a5 Add review mode tutorial popover (#25709)
GitOrigin-RevId: bf2a365b21da780786f2736efb0770cea5f5b656
2025-05-22 08:07:03 +00:00
Mathias Jakobsen 8a1cdab27e Merge pull request #25755 from overleaf/mj-ide-collaborators-look
[web] Align online user design to Figma

GitOrigin-RevId: 89e09056558d98a57d3c1e5a8409476530784b26
2025-05-22 08:06:55 +00:00
Mathias Jakobsen e98addf33a Merge pull request #24979 from overleaf/mj-editor-event-hook
[web] Introduce React hook wrapper around sendMB and friends

GitOrigin-RevId: 3c693ae609c6d4e5ba280c45096692aca47975ca
2025-05-22 08:06:51 +00:00
David 0b9cb185fa Merge pull request #25740 from overleaf/dp-gutter-error-logs
Correctly open logs when using AI assist gutter button in new editor

GitOrigin-RevId: 2700832f9e18d10ca3e6ee52841d31613fee626c
2025-05-22 08:06:47 +00:00
David 061f10a059 Merge pull request #25752 from overleaf/dp-delete-multiple-files
Add bulk delete button to file tree toolbar

GitOrigin-RevId: c857d8f5027eddb29b1ca324efe1a0e94ef4c28b
2025-05-22 08:06:42 +00:00
David c45bca6ce9 Merge pull request #25780 from overleaf/dp-equation-preview-copy
Update copy in equation preview disable modal for new editor

GitOrigin-RevId: 51f1c00764ed3cb8f48448846e575ca738f71238
2025-05-22 08:06:38 +00:00
Eric Mc Sween 17d1b0b8d6 Merge pull request #25646 from overleaf/em-ds-mobile-app-compile
Compile endpoint for the DS mobile app

GitOrigin-RevId: 2fd9f4a6e8c2ed4ee868b0c1293f6760b9d113c8
2025-05-21 08:06:36 +00:00
Miguel Serrano 5a0f53654f Merge pull request #25021 from overleaf/msm-hotfix-5-4-1
CE/SP Hotfix `5.4.1`

GitOrigin-RevId: f88fb2bef6d096cb46eb0b39652e751056d114ef
2025-05-21 08:06:20 +00:00
M Fahru 0e54e650e3 Merge pull request #25706 from overleaf/mf-tear-down-nudge-annual-checkout-page
[web] Tear down `nudge-annual-checkout-page` split test and keep the default version

GitOrigin-RevId: 5714810b2a8abedca60855b37b059cd7f900407c
2025-05-21 08:06:16 +00:00
M Fahru 6a73d3f8f3 Merge pull request #25705 from overleaf/mf-add-journal-grey-sticker
[web] Add `journal-grey.svg` sticker in Contentful

GitOrigin-RevId: 713ba7ef1e2589eecb9b93081d31a79464172850
2025-05-21 08:06:07 +00:00
Jakob Ackermann 47b76a49d8 [web] start fetching load global blobs on module import (#25757)
GitOrigin-RevId: 7c1b6ed717142ad07d6ba5464aab2ecc6ebe9736
2025-05-21 08:05:59 +00:00
Jessica Lawshe 6bc4e40773 Merge pull request #24624 from overleaf/jel-latexqc-updates
[LaTeXQC] Footer and other minor style updates

GitOrigin-RevId: 67a43f715857a3bd1e97f24278d8e4586815688c
2025-05-21 08:05:50 +00:00
Jakob Ackermann 26a7a7d7b8 [clsi] mark VM as unhealthy when detecting of-of-disk condition (#25721)
* [clsi] shed load when detecting out-of-disk condition

* [clsi] mark VM as unhealthy when detecting of-of-disk condition

GitOrigin-RevId: 25cda6785c0d973f50ec6206bee389804f35917e
2025-05-21 08:05:34 +00:00
Davinder Singh bb24aa46d1 [B2C] Bootstrap 5 migration of why-latex page (#25133)
* adding temporary rendering of the BS5 version of why-latex page

* adding first section on the page with new styling, that is compatible with BS5

* adding next section

* adding cards and copy pasting existing styling

* using variables instead of direct values

* fixing the styling of h3 in info-card

* adding next section and its styling

* adding variables

* adding features card section

* adding the next features card

* adding the next features card section

* adding another card section

* adding last feature card section

* adding next section

* adding next section

* adding next section

* adding begin now card

* running npm run lint:styles:fix

* making some style changes to match BS3 version for smaller screen under lg in BS5

* adding a width fix to image

* changing breakpoints to bring consistency in stylesheet

* adding vars

* adding split test

* removing the temporary rendering solution for the BS5 page

* adding splitTestHandler Stub

GitOrigin-RevId: 1257dff09e5371d68e102972e3544559800ca339
2025-05-21 08:05:30 +00:00
Brian Gough efd55ffe97 Merge pull request #25743 from overleaf/bg-deactivate-projects-script
add deactivate projects script

GitOrigin-RevId: 5acf4b980d8980457930ee488571362da2a8014c
2025-05-21 08:05:25 +00:00
David 1354465562 Merge pull request #25727 from overleaf/dp-fix-track-changes-e2e-tests
Fix broken E2E tests after reviewer role feature flag cleanup

GitOrigin-RevId: 9860d546d8a6385554f223bf15c10875089ea130
2025-05-21 08:05:20 +00:00
Jakob Ackermann 1e6b13f9d5 [history-ot] rename remaining history-v1-ot references to history-ot (#25428)
* [history-ot] rename remaining history-v1-ot references to history-ot

* [web] rename History-v1 OT -> History OT in admin panel

* [web] rename OT Migration -> History OT Migration in admin panel

GitOrigin-RevId: 103ce816d5320d6379d51009cdc08b8a71aa48e6
2025-05-20 08:06:46 +00:00
Jakob Ackermann f56645ecfe [server-ce] develop: fix mismatching bind-mount and env for clsi output (#25761)
GitOrigin-RevId: e907bc183360d253f446ed304108974d1f0b034d
2025-05-20 08:06:41 +00:00
Jakob Ackermann efc42481da [clsi] avoid creating legacy db folder (#25760)
GitOrigin-RevId: eaa97813f0e20d14d7d6dafefe7b8b4d002fa41c
2025-05-20 08:06:36 +00:00
CloudBuild 26f27d32a1 auto update translation
GitOrigin-RevId: 8d2e4b1682fe0735260ca5f48cf5617966497fa9
2025-05-20 08:06:31 +00:00
M Fahru 14d6600fb5 Merge pull request #22908 from overleaf/mf-fix-disable-element-bs5-anchor-tag
[web] Fix `disableElement` won't properly disable the element if using bs5 and applied on anchor tag

GitOrigin-RevId: 49ce8514be3e44e5e3a45f41751c94c77f34399b
2025-05-20 08:06:26 +00:00
roo hutton d8c5b74e09 Merge pull request #24855 from overleaf/rh-pug-contact-ui
Pug BS5 contact form UI updates

GitOrigin-RevId: 2a2428c89f799913ad5c0f7a607d59735334aeda
2025-05-20 08:06:07 +00:00
roo hutton d680544b69 Merge pull request #24787 from overleaf/rh-sort-account-emails
Sort user emails by primary>confirmed>alphabetical

GitOrigin-RevId: 1d166e424e3848b83110c1a87adfff7790c1a01f
2025-05-20 08:06:00 +00:00
Domagoj Kriskovic ab37e18bc3 Update AI Assist wording on checkout page if not in rollout (#25689) (#25733)
* Update AI Assist wording on checkout page if not in rollout

* update wording when buyin addon

GitOrigin-RevId: 7133b4fd3efac8e8a7361dcc15d54367f809f16d
2025-05-20 08:05:36 +00:00
Kristina dbb528762e [web] add support for previewing base plan changes for Stripe (#25619)
GitOrigin-RevId: 458eeac52bc5fc010b9749f6fcd48350aa792582
2025-05-20 08:05:31 +00:00
Miguel Serrano ecdd0c54bd [CE/SP] Update base image to noble-1.0.2 and node@22 (#25716)
* [CE/SP] Update base image to node:22

Also triggers a rebuild of the image to ensure all dependencies are up to date

* Bump phusion image to noble-1.0.2

GitOrigin-RevId: 8dce9d3cc6e8df28fce7a15f2727e7bc4aa453fd
2025-05-19 12:27:23 +00:00
Alf Eaton f7d37a49d6 Upgrade CodeMirror dependencies (#25620)
* Upgrade CodeMirror dependencies
* Upgrade Lezer dependencies

GitOrigin-RevId: fcbf9b4bbf2577d85f44b48d3b745a56e49e24c9
2025-05-19 12:27:19 +00:00
Alf Eaton ed006b707c Update "Editing" role description (#25641)
GitOrigin-RevId: dba2e4a21ca645ba34d9e41b76f09a287b5c3b33
2025-05-19 12:27:14 +00:00
Alf Eaton bb3f1aa998 Merge pull request #25666 from overleaf/ae-reviewing-button
Prevent gap between button and menu

GitOrigin-RevId: 42f6a80ea2cda55c3b321a8d9ca9710ecf06c8a3
2025-05-19 12:27:09 +00:00
Alf Eaton d280d4ecad Merge pull request #25691 from overleaf/ae-project-list-nav
Move isReady out of DefaultNavbar component

GitOrigin-RevId: 66f19620399e405c9ef4d95f7aef3ab918da5aa1
2025-05-19 12:27:05 +00:00
Domagoj Kriskovic b375b13950 Revert "Reinitialise Writefull toolbar after buying AI assist" (#25731)
* Revert "Increase a timeout for second refresh of writefull session (#25725)"

This reverts commit 0a34bdde656ade863aead22f003253e13af37829.

* Revert "Reinitialise Writefull toolbar after buying AI assist (#25596)"

This reverts commit a2572d62bce0e344d92696e42d137a0b36574b3b.

GitOrigin-RevId: 3d51a4375059ab9f4494a7e18b132cc5db34e4cd
2025-05-19 12:27:00 +00:00
Mathias Jakobsen 60e588440f Merge pull request #25631 from overleaf/mj-reactdom-render
[web] Remove ReactDOM.render usage

GitOrigin-RevId: 42f62fa79a784cf3cc5c420357880154562d7dc7
2025-05-19 12:26:56 +00:00
Mathias Jakobsen 5ee59a4f4a Merge pull request #25548 from overleaf/mj-add-booktabs
[web] Add support for booktabs table style

GitOrigin-RevId: e3f7e1a867474a86e4b5f8c701d845d55592bb68
2025-05-19 12:26:48 +00:00
Miguel Serrano a8b443fe5f [web] Update base-x dependency to 4.0.1 (#25581)
GitOrigin-RevId: 746f06a3abe75dbc7deb6ea181a15dfc24cd9d22
2025-05-19 12:26:43 +00:00
Domagoj Kriskovic 996c407393 Revert "Update AI Assist wording on checkout page if not in rollout (#25689)" (#25726)
This reverts commit 20a90b14e97b1a8837e8be697c1a9666ed15a1c3.

GitOrigin-RevId: 26d4ad8f1b3a7dbe884dfbe4f4be5ee632abed1e
2025-05-19 12:26:35 +00:00
Miguel Serrano 85533a36e9 [history-v1] Disable backups on CE/SP (#25591)
Disables backup when `backupStore` is not present,
as it's the case for CE/SP

GitOrigin-RevId: a920f041c639e599084fa97d2ef2643a01da70e3
2025-05-19 12:26:30 +00:00
Domagoj Kriskovic d7ef7f0399 Update AI Assist wording on checkout page if not in rollout (#25689)
* Update AI Assist wording on checkout page if not in rollout

* update wording when buyin addon

GitOrigin-RevId: 20a90b14e97b1a8837e8be697c1a9666ed15a1c3
2025-05-19 12:26:26 +00:00
Domagoj Kriskovic 50a5c7984d Reinitialise Writefull toolbar after buying AI assist (#25596)
* Reinit Writefull toolbar after buying AI assist

* use refreshSession()

* add a timeout

* add a second refresh

GitOrigin-RevId: a2572d62bce0e344d92696e42d137a0b36574b3b
2025-05-19 12:26:21 +00:00
Miguel Serrano cc3b020d88 [CE/SP] cron for daily runs of scripts/flush_all.js (#25575)
* [CE/SP] `cron` for daily runs of `scripts/flush_all.js`

GitOrigin-RevId: 9616e99c01491e2a410601f4e33917ed47990b11
2025-05-19 12:26:16 +00:00
Rebeka Dekany 957462b61c Update selector to target input[type='search'] (#25712)
GitOrigin-RevId: 492bda0eb70dd821dbfa3dbf818cafc1ef8975eb
2025-05-19 12:26:12 +00:00
CloudBuild c4c8f521ff auto update translation
GitOrigin-RevId: 07588ad1e4cbc9028cf0de125b4c6c222e1b0ecc
2025-05-19 08:05:37 +00:00
M Fahru 7a0a6077cf Merge pull request #25692 from overleaf/mf-add-stickers-cms
[web] Add pen-yellow and support-green sticker in contentful

GitOrigin-RevId: 26beffd1bf75f9fdf1dba5b8e93b1190a642ff6d
2025-05-19 08:05:33 +00:00
Andrew Rumble 586820c34d Fix package version for socket.io
GitOrigin-RevId: 07a436ce0db5a0cd320964e3e9e7a5646877561b
2025-05-19 08:05:29 +00:00
Jakob Ackermann 18cd52cfa1 [real-time] avoid shutting down all pods simultaneously (#25627)
GitOrigin-RevId: e416e06588b915548c83d70433f411c9f303ad87
2025-05-19 08:05:25 +00:00
Jakob Ackermann 0e13796882 [real-time] bail out early upon hitting a redis error (#25614)
GitOrigin-RevId: 2563094d1ec8017450fdfdb2b0e77d74bbc825d1
2025-05-19 08:05:21 +00:00
Andrew RumbleandTim Down daa52d62fa Allow an empty origin request in real-time
This will only happen with a same-origin request (or if someone has
tampered with the request - in which case they could set anything).

Co-authored-by: Tim Down <158919+timdown@users.noreply.github.com>
GitOrigin-RevId: 9dfe49f974a476bfe215768d3984dd60a381d37a
2025-05-19 08:05:16 +00:00
Jakob Ackermann e3e8d944b2 [web] fetch project members in a single db query (#25662)
* [web] fetch project members in a single db query

GitOrigin-RevId: ca749327d4783c67a3ad81f611cd7d3e7fa84028
2025-05-19 08:05:12 +00:00
Jakob Ackermann 14cbd44d9b [web] deletedDocs are not needed for joinProject anymore (#25654)
* [web] deletedDocs are not needed for joinProject anymore

* [web] cleanup unit tests

GitOrigin-RevId: 91c9bc60ec776757b3031cbc85c67ae1bf4adf4d
2025-05-19 08:05:08 +00:00
Jakob Ackermann cb7d75202b [web] fetch users subscriptions once from project dashboard (#25652)
* [web] fetch users subscriptions once from project dashboard

* [web] fix types

GitOrigin-RevId: 18de18f8d4237d97087ef92eaa5052f253a92813
2025-05-19 08:05:04 +00:00
Jakob Ackermann bc78432e62 [web] wait for prefetching of projects listing (#25650)
GitOrigin-RevId: 59fb0c74b8cf6a496e256960f7f2e83ace2c5ee0
2025-05-19 08:04:59 +00:00
CloudBuild efa39ee664 auto update translation
GitOrigin-RevId: aaa30f0991b037c3829cebc655e1cd9086b6cba5
2025-05-16 08:07:20 +00:00
M Fahru 1440a47d53 Merge pull request #25560 from overleaf/mf-stripe-analytics-invoice-event
[web] Handle stripe analytics for the `subscription-invoice-collected` event

GitOrigin-RevId: cba56db820cac92a66307a05350c779e1198cbf3
2025-05-16 08:07:16 +00:00
M Fahru 81dd3c10a7 Merge pull request #25497 from overleaf/mf-send-subscription-renewed-event-stripe
[web] Send analytics events and user properties when user's subscription is renewed with the same plan

GitOrigin-RevId: c21436d942e8b1a2b8c9fca5827826bf0e8b8bdb
2025-05-16 08:07:12 +00:00
M Fahru 8017918063 Merge pull request #25490 from overleaf/mf-send-subscription-cancelled-and-reactivated-event-stripe-subscription
[web] Send analytics events and user properties for cancelled and reactivated event in Stripe subscription

GitOrigin-RevId: 07a4e6395be334c90910b5d421624c4daa703d3b
2025-05-16 08:07:04 +00:00
M Fahru 75ce58d0c6 Merge pull request #25404 from overleaf/mf-send-subscription-analytics-events
[web] Send analytics events and user properties when user start subscription using Stripe

GitOrigin-RevId: 9028397a5cb256df506e14beb1705191c9ae3f7f
2025-05-16 08:06:57 +00:00
Rebeka Dekany bb66f75027 Add aria-label to the documentation searchbar and update the type to search (#25431)
GitOrigin-RevId: 782eb2238636040fedae628b17224f2e91159a34
2025-05-16 08:06:52 +00:00
Rebeka Dekany 3ef62472bd Fix back to your projects button (#25500)
GitOrigin-RevId: 98f84593bec190b24a225d4690414e4e9f1141e0
2025-05-16 08:06:48 +00:00
Rebeka Dekany e282a74f7a Make links more descriptive on the Account settings page (#25558)
GitOrigin-RevId: 21cb7c02f7a5678b4c385da5b842ad6a5303169b
2025-05-16 08:06:44 +00:00
Antoine Clausse 10091811f7 Remove returns in functions with callback in CooldownManager (fix DeprecationWarning) (#25665)
GitOrigin-RevId: 3652ee78d533cb00ce5ec4de1a66a959ab418def
2025-05-16 08:06:33 +00:00
Antoine Clausse 67ab5a749a Update Node to 22.15.0 (#24699)
* Run `bin/update_node 20.18.2 22.15.0`

* Remove expects on `fetchMock.callHistory.done()` to fix tests: are they necessary?

* Set node version to `22.x` in linked-url-proxy

* Increase test timeout to 30s in `github-sync`, Add waiting steps

* Define `navigator.onLine` in tests setup

GitOrigin-RevId: 75eb556e9f51b665e57497a0879b6915d14069ce
2025-05-16 08:06:26 +00:00
Eric Mc Sween 2dd054d602 Merge pull request #25606 from overleaf/em-o-error-types
OError: handle unknown error types
GitOrigin-RevId: a52dd92a4f95cd738556612599805f41f24de69f
2025-05-16 08:06:22 +00:00
David 966cea3d8b Merge pull request #25550 from overleaf/dp-share-modal-proptypes
Remove proptypes from ShareProjectModal

GitOrigin-RevId: b95fed5007f72e4a57a65b1d08d8fcc9579b3630
2025-05-16 08:06:05 +00:00
David b56556f37b Merge pull request #25547 from overleaf/dp-remove-reviewer-role-flag-frontend
Clean up reviewer-role feature flag from frontend

GitOrigin-RevId: 0cac59be58b0350c24f57d3e63898246b2bd6881
2025-05-16 08:06:00 +00:00
David 899f6d18d6 Merge pull request #25617 from overleaf/dp-projec-owner-email-overflow
Truncate long project owner names in project dashboard

GitOrigin-RevId: a3c98b359dc880a3f487c1a6de9a2fe4bb4913c1
2025-05-16 08:05:56 +00:00
David 449a5d6339 Merge pull request #25605 from overleaf/dp-track-changes-redirect
Redirect old track changes marketing page to track changes learn wiki page

GitOrigin-RevId: 890e7f746b71b8e5108e8209d55903f68adde1ea
2025-05-16 08:05:52 +00:00
David 4847c83cb8 Merge pull request #25618 from overleaf/dp-symbol-palette-proptypes
Remove Proptypes from SymbolPalette components

GitOrigin-RevId: 58b74652a5b47612c4622a7cac9b1ff3aadadfc5
2025-05-16 08:05:48 +00:00
David 69d99079b1 Merge pull request #25553 from overleaf/dp-clone-project-modal-proptypes
Remove Proptypes from CloneProjectModal

GitOrigin-RevId: 400f4c9de72eb1910a0ca067882a6358663303d3
2025-05-16 08:05:44 +00:00
Antoine Clausse fee5ea8411 Remove returns of promises within functions with callbacks (address DeprecationWarning) (#25603)
* [document-updater] Don't return promises within functions with callbacks

Remove the errors:
DeprecationWarning: Calling promisify on a function that returns a Promise is likely a mistake
https://cloudlogging.app.goo.gl/YHDhoarvLEw2w9rXA

* Remove some more unnecessary returns in functions with callbacks, for consistency

* Add `sendCanaryAppliedOp` to excluded methods for promisification

GitOrigin-RevId: fa6d3e47c4e6561dc29d4c15e57c3289fc1f3dfa
2025-05-16 08:05:33 +00:00
Tim Down 5c4cb50628 Merge pull request #24988 from overleaf/td-bs5-upgrade-and-rename
Apply minor upgrades to Bootstrap 5 and react-bootstrap

GitOrigin-RevId: eb013f38515ebd4b9572d139f00841aca344e3c6
2025-05-16 08:05:28 +00:00
Tim Down 2ebc3a982a Merge pull request #25588 from overleaf/td-bs5-restricted-page
Migrate restricted page to BS5

GitOrigin-RevId: 7df26700b5e3b8fb08d061fd9e211bf09ca4e956
2025-05-16 08:05:24 +00:00
Jakob Ackermann 59f614a41b [web] use the common split-test for clsi-cache when cloning (#25644)
GitOrigin-RevId: 30377d69a9e1be11261eb6076f8996e71090fb9e
2025-05-16 08:05:07 +00:00
Jakob Ackermann ec1bd69605 [clsi-cache] remove non sharded instances (#25645)
* Revert "[clsi-cache] only use sharding from updated project editor tabs (#25326)"

This reverts commit 1754276bed3186c0536055c983e32476cc90d416.

* [clsi-cache] remove non sharded instances

GitOrigin-RevId: aa3ac46140dfc1722a3350cf7071e5b11af61199
2025-05-16 08:05:02 +00:00
CloudBuild 40193752c4 auto update translation
GitOrigin-RevId: c67507e30704ca92838cf1b72ae911624fc66200
2025-05-14 08:07:41 +00:00
Jakob AckermannandBrian Gough eebda2427e [clsi-cache] fix path traversal (#25585)
* [clsi-cache] fix path traversal

* [clsi-cache] double down on path traversal validation

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: 28a6a2024aae81e9b361db7918dc0c5381cd8246
2025-05-14 08:06:54 +00:00
Jakob AckermannandBrian Gough e25a69936e [clsi-cache] base64 encode X-All-Files header if needed (#25579)
* [clsi-cache] base64 encode X-All-Files header if needed

* [clsi-cache] add explicit error check

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: bd3b6381b68398aac4a07e48cd69e6aa97e94f18
2025-05-14 08:06:49 +00:00
Jimmy Domagala-Tang 443fb3f152 Merge pull request #24739 from overleaf/dk-thankyou-page
Update "thanks for subscribing page" with AI Assist links

GitOrigin-RevId: 41a23d6fd5edfc8f9ad0f97e513e1ea66aed5bdc
2025-05-14 08:06:44 +00:00
Alf Eaton fb0cfbe0bb Add more detail to word count UI (#25400)
GitOrigin-RevId: 3521f2ea03332e46ef1bac634ce0650cdce01249
2025-05-14 08:06:40 +00:00
Alf Eaton bd67b4ca13 Improve review panel entry performance (#25402)
GitOrigin-RevId: 2a6ec8ad432195c6069bb58be37dd93341533817
2025-05-14 08:06:35 +00:00
Alf Eaton 6c96c70b28 Remove the full-project-search split test (#25444)
GitOrigin-RevId: b36c1c81152694547dcf044cfb2cb0f511bfdc22
2025-05-14 08:06:31 +00:00
Alf Eaton b70e0166bd Remove zlib dependency from freegeoip (#25474)
GitOrigin-RevId: 9f61a0630ff6c4b7fd92f180fb58f91178567ede
2025-05-14 08:06:26 +00:00
Alf Eaton 60cdd252ef Add span between synctex button and tooltip (#25475)
GitOrigin-RevId: d1e7c71597566f916a9432d9114def791cf25fa8
2025-05-14 08:06:21 +00:00
Alf Eaton c942b490ab Clamp PDF highlights to the extents of the page container (#25498)
GitOrigin-RevId: cc2e30b04b9c57b2ea6038bee1e06467b785386f
2025-05-14 08:06:16 +00:00
Jimmy Domagala-Tang 732b365683 Merge pull request #25568 from overleaf/jdt-rely-on-user-feats-for-assist-paywall-button
Rely on user features when showing the get assist paywall button post upgrade

GitOrigin-RevId: 2218171eb57996ee962b4ddc94c1749ad65b9c1b
2025-05-14 08:06:04 +00:00
Jimmy Domagala-Tang dd351f64fb Merge pull request #25587 from overleaf/dk-select-table-size-fix
Prevent "select size" popover in TableDropdown from closing when toolbar is collapsed

GitOrigin-RevId: 82f8226e0ff071dfea965c8c991141d90ff72197
2025-05-14 08:06:00 +00:00
Jimmy Domagala-Tang 5730cd3dde Merge pull request #25577 from overleaf/dk-assist-promition-spacing-fix
Fix alignment issue in equation and table generator promotion

GitOrigin-RevId: 2f085e266b0385efcae546b89e2c73388764bae3
2025-05-14 08:05:55 +00:00
Mathias Jakobsen b52c0bf08e Merge pull request #25534 from overleaf/mj-table-gen-color
[web] Fix table generator edited cell color

GitOrigin-RevId: 7ad762954637b13022a361f87fdf08f7dc97e17f
2025-05-14 08:05:43 +00:00
Mathias Jakobsen 587390d066 Merge pull request #25514 from overleaf/mj-ide-pdf-controls-editor-only
[web] Hide PDF controls from menu bar in editor only mode

GitOrigin-RevId: 91513e40693e1214c3bdbc56d9dec19e08c74e36
2025-05-14 08:05:38 +00:00
ilkin-overleaf 21c035b8d5 Merge pull request #25468 from overleaf/ii-flexible-licensing-invoice-date
[web] FL next invoice date formatting

GitOrigin-RevId: 5f4f86d4f11c7ee217ff806d26fc3f8a79e5affc
2025-05-14 08:05:34 +00:00
Rebeka Dekany 6d35305d7d Use the semantic <details> HTML tag instead for disclosure (#25489)
GitOrigin-RevId: 9ed634529a17abd0693441c7563262ed5d1c7f88
2025-05-14 08:05:25 +00:00
Rebeka Dekany 271635491a Remove incorrect "button" role from navigational links that are styled as buttons (#25504)
GitOrigin-RevId: 717b20a6f2e893034eb12547fa663d358c0de419
2025-05-14 08:05:21 +00:00
Antoine Clausse aa002369cb Update defaultHighWaterMark to 64KiB (Node 22's default) (#25522)
* Set defaultHighWaterMark to 16KiB

This is already the default in Node 20

* Set defaultHighWaterMark to 64KiB

Per https://github.com/overleaf/internal/pull/25522#issuecomment-2872035192

GitOrigin-RevId: 19d731abf683066654027de3a4f9ac0b8916f22c
2025-05-14 08:05:16 +00:00
Rebeka Dekany 7c79c3b4c3 Add ARIA attributes for menu and separator (#25501)
GitOrigin-RevId: ef80d2811ecee78adc8bb359cf3b059d79fe9900
2025-05-13 08:08:36 +00:00
Rebeka Dekany ac51878186 Improve ARIA labels for buttons and links on the Account setting page (#25499)
* Improve announced button and link labels for screen reader users

* Improve labels for integration widgets and update test

* Make integration widget IDs to be required

GitOrigin-RevId: 1e0124ef63a91fb63dffd79881c60794bccb9d27
2025-05-13 08:08:31 +00:00
Rebeka Dekany 3cb7ef05d9 Fix undefined alt text for images (#25447)
GitOrigin-RevId: 59efe870275f3dcbabecf1c3d115e7a7a85be594
2025-05-13 08:08:27 +00:00
Christopher Hoskin 7356c3b863 Merge pull request #25543 from overleaf/csh-issue-23942-more-migrate
Remove more CR refs

GitOrigin-RevId: 7ba91712943c309d40613b0f7247f20d45d7fbb1
2025-05-13 08:08:22 +00:00
Tim Down 11d964649c Merge pull request #25502 from overleaf/td-chat-open-bug
Prevent chat opening by default for new user

GitOrigin-RevId: 260050c26f6b9dee7ea52284dadb7ed00ce9eddb
2025-05-13 08:08:11 +00:00
David 8d940ad841 Merge pull request #25387 from overleaf/dp-editor-toolbar-proptypes
Remove proptypes from editor-navigation-toolbar components

GitOrigin-RevId: 77a1c4e13e3da6c06bb515b0137da2f70bfdf4a8
2025-05-13 08:08:06 +00:00
David 8e31c30ec7 Merge pull request #25398 from overleaf/dp-file-tree-proptypes
Remove PropTypes from file-tree components

GitOrigin-RevId: 7ecbf9778da59b852be8678c5dff61e13d927b9c
2025-05-13 08:08:02 +00:00
Jimmy Domagala-Tang 82e5b2c5d7 Merge pull request #25151 from overleaf/dk-use-user-features
UserFeaturesContext with cross-tab syncing via BroadcastChannel

GitOrigin-RevId: 4262719f5018f5717211851ce28b3255af65461a
2025-05-13 08:07:57 +00:00
Jimmy Domagala-Tang 2f3166aa54 Merge pull request #25517 from overleaf/dk-fix-get-error-assist-translation
Fix translation for "get_error_assist"

GitOrigin-RevId: ea9ef20b8d94e49e89cc77cc6517da25d002ba7f
2025-05-13 08:07:53 +00:00
Jimmy Domagala-Tang 8234e80931 Merge pull request #25538 from overleaf/jdt-fix-assist-interstitial-on-redesign
Add assist interstitial to editor redesign

GitOrigin-RevId: 97c2447bb6f6b47864563fac45ea8da46ca83777
2025-05-13 08:07:48 +00:00
Jimmy Domagala-Tang 3bfc3ee7ae Merge pull request #25540 from overleaf/jdt-push-assist-interstitial-higher-z-index
Fix assist promotion being hidden under error logs pane

GitOrigin-RevId: 715d82ddd98ce5e15ce2e42935526387b4c6fa1b
2025-05-13 08:07:44 +00:00
Eric Mc Sween 732b1d146e Merge pull request #25456 from overleaf/em-concurrency-handling
Add consistency constraints to the chunk store and Redis buffer

GitOrigin-RevId: 6f983ff207a13d204645e343290c94443dc537b0
2025-05-13 08:07:36 +00:00
Jimmy Domagala-Tang bf22684e2d Merge pull request #25507 from overleaf/jdt-show-wf-src-on-admin
Add premium source for Writefull entitlment to the Admin page

GitOrigin-RevId: 937b6d588d0f9328eb450809a0cd2f0e4b0ea299
2025-05-13 08:07:03 +00:00
Jimmy Domagala-Tang 1ec12e3d88 Merge pull request #25493 from overleaf/jdt-ai-assist-entitlement-fix
Access addOnCode correctly when determining bundle entitlement

GitOrigin-RevId: c3aee15b3ef6fc1d32f24283ec848e600f0777f1
2025-05-13 08:06:59 +00:00
Jimmy Domagala-Tang 50c2d8f32f Merge pull request #25405 from overleaf/jdt-wf-rebrand-popover
Writefull Rebranded Features Editor Promotion

GitOrigin-RevId: 49beddbfa44bacf1546543e172dc8edcdb3784bc
2025-05-13 08:06:50 +00:00
Domagoj Kriskovic b99a81cb25 Fix monthly price if billed annually for AI Assist (#25297)
* Fix monthly price if billed annually for AI Assist

* update script

* show annual price

* fix formatting

GitOrigin-RevId: e50493fa2176e6c8acb476a01a393eb940a3f1a2
2025-05-13 08:06:39 +00:00
Domagoj Kriskovic c1f3758aa2 Add script to update null references in for readOnly_refs and pendingReviewer_refs (#25417)
* Add script to update null references in for readOnly_refs and pendingReviewer_refs

* update script to only update readOnly_refs

* clean up

* use projectAuditLogEntries to find relevant projects

* use updateOne

GitOrigin-RevId: bbeaa04b837ebb657c802598f0de72879f641bd0
2025-05-13 08:06:23 +00:00
Kristina 67a436b639 Merge pull request #25469 from overleaf/mj-paste-tables-multicol
[web] Improve borders and column definitions of pasted tables with multi-column cells

GitOrigin-RevId: fe9c44bd8ac6a34e8a8057f1a07d97771a116e1a
2025-05-13 08:06:10 +00:00
Kristina 70c26b6ed2 [web] prevent downgrade to personal upsell for stripe subscriptions (#25392)
GitOrigin-RevId: a954f42e1159e4bcc8fd06f5f6df9a53c67f9f90
2025-05-13 08:06:05 +00:00
Brian Gough 0d70223a48 Merge pull request #25482 from overleaf/bg-fix-bull-exporter-errors
retain completed and failed jobs for backup queue

GitOrigin-RevId: 7831ce2565dc493e3ce7f55001207daea2140575
2025-05-13 08:05:40 +00:00
Liangjun Song caf8b5c3c5 Merge pull request #25329 from overleaf/ls-enable-stripe-checkout-for-group-plan
Enable stripe checkout for group subscriptions

GitOrigin-RevId: 10a579ebca789773bd2c94f8240b7b979b6e8eb0
2025-05-13 08:05:32 +00:00
Eric Mc Sween 5506e0d58e Merge pull request #25302 from overleaf/em-pkce-support-enforcement
Enforce pkceEnabled flag in OAuth configuration

GitOrigin-RevId: 8e941179017712050570f13522ec42814aa58c06
2025-05-12 08:06:11 +00:00
Mathias Jakobsen ddfadbc474 Merge pull request #25422 from overleaf/mj-ide-rail-badges-placement
[web] Editor redesign: Improve badge locations for Rail buttons

GitOrigin-RevId: 11eef60e6ab35003b21fa1ebf0bde4588c5f7228
2025-05-12 08:05:56 +00:00
Mathias Jakobsen 3c3414a7d3 Merge pull request #25435 from overleaf/mj-review-panel-tests
[web] Add review panel cypress tests

GitOrigin-RevId: e953519fc8fed089df59970ee3c745b06d78ddfb
2025-05-12 08:05:52 +00:00
Brian Gough 9762cf95e3 Merge pull request #25463 from overleaf/bg-history-redis-fix-logging-in-expire-worker
reduce expire_redis_chunks log verbosity in production

GitOrigin-RevId: afcf6edc7154d49714bc60c276c129d70eaa49c7
2025-05-12 08:05:44 +00:00
Jakob Ackermann bc4550c1f9 [CI] temporarily disable flaky tests (#25443)
GitOrigin-RevId: 4ed83e7b79d7aee0d7fab4594d4f7c8697e0cab4
2025-05-12 08:05:28 +00:00
Jakob Ackermann fba8f776a1 [web] avoid trying to fetch synctex.gz from clsi-cache in free projects (#25445)
* [web] avoid trying to fetch synctex.gz from clsi-cache in free projects

* [clsi] parse boolean query parameter

GitOrigin-RevId: 99c98aac8147a626b704e9a888b7fc660cc5ab17
2025-05-12 08:05:24 +00:00
Brian Gough 9e07549ecb Merge pull request #25449 from overleaf/bg-histoy-redis-refactor-expire-worker
refactor the expire worker to make it easier to extend

GitOrigin-RevId: 7b277b243ed51ab3b46316d98b7157af95a9e42b
2025-05-12 08:05:19 +00:00
CloudBuild 0a0dc13030 auto update translation
GitOrigin-RevId: 4dbc6d69264f37aa2532aab2a92db943f90e0947
2025-05-09 08:06:31 +00:00
M Fahru 5ba31ab14f Merge pull request #25363 from overleaf/mf-stripe-webhook-delete-subscription
[web] Delete "expired" subscription in Stripe (in Stripe, this is called "canceled" status)

GitOrigin-RevId: 847cf431c2f6edd7ec6c4e17137d163e450dc4f1
2025-05-09 08:06:26 +00:00
M Fahru c50bd6af89 Merge pull request #25372 from overleaf/kh-support-canceling-pending-stripe-change
[web] cancel pending Stripe subscription change

GitOrigin-RevId: c1d21a7d1c3962c20d589b1dd10f6c2a4c8e4be4
2025-05-09 08:06:22 +00:00
Eric Mc Sween 391fca9e83 Merge pull request #25361 from overleaf/em-load-latest-raw
Rename loadLatestRaw() to getLatestChunkMetadata()

GitOrigin-RevId: e089dcfa57cbbc43df8666b51eca0d81d595a5a7
2025-05-09 08:06:14 +00:00
Eric Mc Sween 5717ea7f5c Merge pull request #25306 from overleaf/em-redis-buffer-read-operations
Add changes from Redis when reading chunks from the chunk store

GitOrigin-RevId: c0ebf0669b91eb2efc5d1091d025e81efdff9fe4
2025-05-09 08:06:09 +00:00
Eric Mc Sween 7ea1b690f2 Configure PKCE support in OAuth clients (#25300)
This flag will control whether or not a particular client is allowed to
use PKCE instead of a client secret when requesting an access token.

GitOrigin-RevId: b9471112a485233308410e0cb7f20e20a613a971
2025-05-09 08:06:04 +00:00
Jakob Ackermann d489e35782 [web] emit event when synctex mapping was downloaded from clsi-cache (#25424)
* [clsi] tell frontend when synctex mapping was downloaded from clsi-cache

* [web] emit event when synctex mapping was downloaded from clsi-cache

GitOrigin-RevId: 1f6b7e0faaa7dd76449aad566802da971a4cf9ed
2025-05-09 08:06:00 +00:00
Jakob Ackermann 8d4f258494 [web] retry fetching initial compile from cache response (#25436)
* [web] move building of compile from cache response into manager

* [web] retry fetching initial compile from cache response

GitOrigin-RevId: b4dc89f1b91d99e869c0c7789881dc72d8a5761f
2025-05-09 08:05:55 +00:00
Brian Gough dc73a18ca4 Merge pull request #25432 from overleaf/em-redis-buffer-strict-apply
Use strict validation for the Redis buffer

GitOrigin-RevId: 43e73af5deabbf3de9f5eed14f062acc5fa35e36
2025-05-09 08:05:50 +00:00
Brian Gough 9cf284aefa Merge pull request #25414 from overleaf/bg-history-only-log-content-mismatch-once-per-request
log warning for content hash mismatch only on first occurrence

GitOrigin-RevId: ff09f8c262461488bd564ea0644d414bb32ff17e
2025-05-09 08:05:46 +00:00
Jakob AckermannandMathew Evans 3242376d19 [server-ce] add notice for CE users on disabling sandboxed compiles (#25425)
Co-authored-by: Mathew Evans <matt.evans@overleaf.com>
GitOrigin-RevId: 977625975af6ac68a33356dc4c39af98791e8708
2025-05-09 08:05:34 +00:00
David 2ea03af559 Merge pull request #25411 from overleaf/dp-clone-project-translation
Add missing translation for clone project modal name placeholder

GitOrigin-RevId: 7ee99d811f31eaa0441d2e9b9f579f29ff1cb368
2025-05-09 08:05:29 +00:00
Mathias Jakobsen 1b5d31941e Merge pull request #25383 from overleaf/mj-ide-long-title
[web] Editor redesign: Allow project name to shrink

GitOrigin-RevId: 4d25291437fae9672f0d0d4d20bde269f771020a
2025-05-09 08:05:25 +00:00
Mathias Jakobsen 9cb2b48c1e Merge pull request #25373 from overleaf/mj-reorder-tpr
[web] Reorder third party reference managers

GitOrigin-RevId: 283d50674fdcc60b7a32e4e7846c6638c591937a
2025-05-09 08:05:20 +00:00
Brian Gough 6eada92966 Merge pull request #25406 from overleaf/em-content-hash-validation-resync
Resync project when content hash validation fails

GitOrigin-RevId: ea9b5a78f89c55276fd67835bc262717bc778e92
2025-05-09 08:05:12 +00:00
ilkin-overleaf 2ccdb74d20 Merge pull request #25318 from overleaf/ii-flexible-licensing-manually-collected-3
[web] Add seats feature for manually collected subscriptions improvements

GitOrigin-RevId: 4fbd93097590d97ad6464d1988471a78bf7cb9e2
2025-05-09 08:05:07 +00:00
CloudBuild d39d92cce8 auto update translation
GitOrigin-RevId: b57698529938bdf3227696cf8fbfde7f763a43d5
2025-05-08 08:06:55 +00:00
M Fahru 0335367c75 Merge pull request #25296 from overleaf/kh-support-upgrading-stripe-subscription
[web] support upgrading Stripe subscription

GitOrigin-RevId: 2663ca8f1c028a45cf47d3ab37c387c4f4b39f9a
2025-05-08 08:06:47 +00:00
M Fahru fa553128a4 Merge pull request #25289 from overleaf/kh-rm-dead-coupon-code
[web] rm unused couponCode parameter

GitOrigin-RevId: c8c262322d74214e43870e67758aaa98aaa60c79
2025-05-08 08:06:42 +00:00
Jakob Ackermann b3a1341545 [web] settle on a single split-test for the clsi-cache rollout (#25399)
* [web] settle on a single split-test for the clsi-cache rollout

Use the split-test that was used for rolling out the writes so that we
can use their already populated caches.

* [clsi-cache] fix non-sharded clsi-cache in dev-env

GitOrigin-RevId: 6ebd6369183342fe6d5e325b760d011fd1d57516
2025-05-08 08:06:37 +00:00
Jessica Lawshe 4b5f31ac95 Merge pull request #25353 from overleaf/revert-25351-revert-24919-jel-create-group-audit-log
Revert "Revert "[web] Add group audit log""

GitOrigin-RevId: 4d61cfd9e8a7dac1f5837a4028aff95fa19c308a
2025-05-08 08:06:32 +00:00
Brian Gough ad94c29659 Merge pull request #25391 from overleaf/em-queue-changes-verification-rollout-stage-2
queue changes verification rollout stage 2

GitOrigin-RevId: c79a5a252c6fc8caf6fd164a31e6e360b6fc3e73
2025-05-08 08:06:27 +00:00
Brian Gough ec91c120b1 Merge pull request #25284 from overleaf/em-queue-changes-verification
Exercise the Redis buffer when persisting changes

GitOrigin-RevId: a649b9808b6472e7c5dd9c8bfa6e3c98fb6ef4d4
2025-05-08 08:06:22 +00:00
Jimmy Domagala-Tang 9f0f910a83 Merge pull request #25251 from overleaf/jdt-show-wf-provided-bundle-on-free-plans
Show AI Assist entitlment via Writefull on free user's subscriptions page

GitOrigin-RevId: 20a456a231f60df279b949057972125735166904
2025-05-08 08:06:14 +00:00
Jimmy Domagala-Tang fbbba7a3df Merge pull request #24816 from overleaf/jdt-update-checkout-for-bundle
Update checkout pages for AI Assist bundle content

GitOrigin-RevId: e2e1b705dd92e0858835d18eb6d8c5750030e550
2025-05-08 08:06:09 +00:00
Jimmy Domagala-Tang 6973ba4244 Merge pull request #25090 from overleaf/jdt-align-wf-rebrand-split-test
Align Writefull bundle changes to same split test

GitOrigin-RevId: 28eb7c0835a38d4989461d941efc3e8c0cdcfecb
2025-05-08 08:06:04 +00:00
e8b5ee2ff9 [history-ot] initial implementation of using doc-level history-ot (#25054)
* [history-v1-ot] initial implementation of using doc-level history-v1-ot

* [web] fix advancing of the otMigrationStage

Use 'nextStage' for the user provided, desired stage when advancing.

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [document-updater] document size check in editor-core

* [history-ot] rename history-v1-ot to history-ot and add types

* [history-ot] apply review feedback

- remove extra !!
- merge variable assignment when processing diff-match-match output
- add helper function for getting docstore lines view of StringFileData

Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>

* Revert "[document-updater] add safe rollback point for history-ot (#25283)"

This reverts commit d7230dd14a379a27d2c6ab03a006463a18979d06

Signed-off-by: Jakob Ackermann <jakob.ackermann@overleaf.com>

---------

Signed-off-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
Co-authored-by: Brian Gough <brian.gough@overleaf.com>
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
GitOrigin-RevId: 89c497782adb0427635d50d02263d6f535b12481
2025-05-08 08:05:44 +00:00
David 4d93187e58 Merge pull request #25354 from overleaf/dp-editor-redesign-modal
Update editor switcher modal contents

GitOrigin-RevId: 98772328004303c43ff3f9f0edbf8b0725041c60
2025-05-08 08:05:32 +00:00
David efb66b4d2f Merge pull request #25327 from overleaf/dp-word-count
Add word count to file menu in new editor

GitOrigin-RevId: a5cb4d6cd37c46775056f696c0f19fcabd3f4131
2025-05-08 08:05:27 +00:00
Jakob Ackermann e4156e19b8 [web] use raw compile timeout in compile-result-backend event (#25141)
The alias was broken following the 60s -> 20s compile timeout change.

GitOrigin-RevId: c2172090e17be60490adaae245a1f0b045e93cf1
2025-05-08 08:05:14 +00:00
Brian Gough f9b36cd5be Merge pull request #25241 from overleaf/bg-remove-existing-chunk-buffer
remove existing chunk redis backend and chunk buffer

GitOrigin-RevId: 28fb02d1802312de6892e2fb7dd59191e3fc8914
2025-05-08 08:05:09 +00:00
Jakob Ackermann 5cc0895c56 [clsi] enable keepAlive on global HTTP agents (#25350)
GitOrigin-RevId: c9478b405ac32ca55aeb3bcf9f24052477464667
2025-05-07 08:08:10 +00:00
Antoine Clausse 07b37abcb3 [web] Improve FileTooLargeError handling in FileWriter.js (#25278)
* Improve FileTooLargeError handling in FileWriter.js

* handle errors on passThrough stream
* unlink files on error
* fail `writeUrlToDisk` if content-length header is too large

With Node 22, the test `Open In Overleaf - when POSTing a snip_uri for a file that is too large` fails.

I initially tried replacing it with a check of the `content-length` header. But then I managed to make the old test pass by adding a handler (`passThrough.on('error', ...)`)

* Unlink files asynchronously, add stream destroys on error

* Remove eslint disables

* Remove `stream.on('error', ...)` and `passThrough.on('error', ...)`

* Revert `Content-Length` check

* Re-add `stream.on('error', errorHandler)`; Remove it on 'response'

* Only report unlink errors there is an error(!!) that's not ENOENT

GitOrigin-RevId: fefe49519ec6f54df5eef69a2c2a75518f9d3748
2025-05-07 08:08:06 +00:00
Antoine Clausse e7329b9660 [web] Remove script remove_emails_with_commas.mjs (#25356)
It ran in prod and updated 112 users

GitOrigin-RevId: 730f6544e7a5bb4d08095b48fb697b5c8e7a08be
2025-05-07 08:08:01 +00:00
Antoine Clausse eddeca2942 [history-v1] Update config from 1.31.0 to 3.3.12 (#25077)
This removes some DeprecationWarnings in history-v1

The update should be safe:
```
  3.0.0 / 2018-11-20
  Ensure config array items and objects are sealed @fgheorghe
  This required a major version bump in case someone
  relied on the ability to mutate non-sealed data.

  2.0.0 / 2018-07-26
  Potential for backward incompatibility requiring a major version bump.

  Safe to upgrade to major version 2 if you're using a recent NodeJS version and you're not trying to mutate config arrays.

  Added array immutability - jacobemerick
  Removed Node V.4 support
```

https://github.com/node-config/node-config/blob/master/History.md

GitOrigin-RevId: 8384247d1ad2cd659703b4ba50edf7212076dcf3
2025-05-07 08:07:56 +00:00
M Fahru 661aa20c09 Merge pull request #25288 from overleaf/mf-stripe-webhook-subscription-updated
[web] Handle `customer.subscription.updated` stripe webhook event type

GitOrigin-RevId: 821baee5d5a45b92ee7bce47598a5e3ea5aa95ea
2025-05-07 08:07:44 +00:00
M Fahru 6c3cc794a4 Merge pull request #25161 from overleaf/mf-stripe-webhook
[web] Implement stripe webhook for `customer.subscription.created` event type

GitOrigin-RevId: f32e7607ddf900211efbe487bcd1f09172100178
2025-05-07 08:07:39 +00:00
Jessica Lawshe 12939b91b3 Merge pull request #25351 from overleaf/revert-24919-jel-create-group-audit-log
Revert "[web] Add group audit log"

GitOrigin-RevId: cf192bbe3ebdb693f18bab9c1c5d08da18ed34c0
2025-05-07 08:07:34 +00:00
Tim Down f72a34f25b Merge pull request #25348 from overleaf/td-react-18-flaky-tests
Attempt to fix two flaky frontend project dashboard tests

GitOrigin-RevId: 1d5c3a05f7439ad3e22e5de96da8628ad8dd27c5
2025-05-07 08:07:29 +00:00
Jimmy Domagala-Tang c060358cd8 Merge pull request #25223 from overleaf/jdt-dk-commons-toggle-annual-discount-bundle
Allow for commons to toggle annual for the AI Assist bundle

GitOrigin-RevId: 719dbb4944e3a447e03aa5c3fee7d0f5a0ce005b
2025-05-07 08:07:25 +00:00
Jimmy Domagala-Tang f29bd47911 Merge pull request #25252 from overleaf/jdt-add-addon-to-cancellation-mssg-in-subs
Show Assist Add-on for pending and cancelled subscriptions

GitOrigin-RevId: df733d7078c231a5de989bc070b37e3c250fdb37
2025-05-07 08:07:20 +00:00
Jessica Lawshe 59275eeb84 Merge pull request #24919 from overleaf/jel-create-group-audit-log
[web] Add group audit log

GitOrigin-RevId: b59c38c57f555f18cdfa5dd697ad38d78b590996
2025-05-07 08:07:12 +00:00
Antoine Clausse bc4c3c4ef8 [web] Promisify ClsiCookieManager and CompileController (reapply again) (#25280)
* Reapply "[web] Promisify ClsiCookieManager and CompileController (reapply and fix)"

This reverts commit 98cb9127ff2b7c7c347c560766f749265d712490.

* Fix: Use query parameters correctly (!!)

* Add unit test on `checkIsLoadSheddingEvent`

* Remove interference between tests: rename to `ClsiCookieManager2` when it's re-sandboxed

* Add test: 'should report "cycle" when other is UP'

GitOrigin-RevId: 3146b149954b908830226cb03b51d9adfa08ec2e
2025-05-07 08:07:07 +00:00
Antoine Clausse e3dd47ba6e [web] Fix date format in emails.createdAt, use new Date() instead of Date.now() (#25322)
GitOrigin-RevId: c94700accb1df902926779c1e6321be63cf65235
2025-05-07 08:07:02 +00:00
Antoine Clausse 81941ff335 Update some dependencies so they're compatible with Node 22 (#25317)
* `"@google-cloud/profiler": "^6.0.3"`

* `bin/npm update pprof`

* `bin/npm update nan`

* `bin/npm update @google-cloud/profiler`

* Ignore false positive of `@typescript-eslint/return-await`

> Returning an awaited value that is not a promise is not allowed
Though the function was promisified

GitOrigin-RevId: 24dbe3e8df2b55c0b9583ac79a61e0956ac3fac0
2025-05-07 08:06:57 +00:00
Antoine ClausseandJakob Ackermann 9a2847dbee [web] Add startup metrics (#25277)
* [web] refactor startup sequence

The primary objective here is to call loadGlobalBlobs() only once.
But to get there, we need to reorder things and add extra try/catch
sections to ensure we are not letting the global uncaughtException
handler catch startup errors.

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>

* [web] add metrics for startup steps

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: c73edea02516e919d55b896588dcd1862835fedf
2025-05-07 08:06:52 +00:00
Antoine Clausse f0856c862f [web] Migrate two-factor-authentication module to BS5 (#25181)
* Delete unused file error.pug

* Revert-me: Enable 2FA locally

* Migrate 2FA pages to BS5

* Add BS5 notification classes to hydrate-form.js

* Revert "Revert-me: Enable 2FA locally"

This reverts commit 2874bedb05e579623e5beb6cf518aa8608808802.

* Fix: Re-add .text-capitalize on button

* Use `notification` mixin for success state

* Append complex notifications with icons in `showMessages`

* Keep the BS3 version of the notification in `showMessages`, move the BS5 implementation to `createNotificationFromMessageBS5`

Check the Boostrap version with `!window?.Frontend?.['bootstrap-3']`, which is a bit hacky

* Update breakpoings in 2FA form to leave more room for error notification

* Address PR comments:

* Remove useless `createTextNode`
* Use `isBootstrap5`
* `Setup` -> `Set Up`

GitOrigin-RevId: d7285853ea1191da7711b7bada8d65ff064bc27d
2025-05-07 08:06:48 +00:00
Jakob Ackermann 6881ba956a [clsi-cache] only use sharding from updated project editor tabs (#25326)
GitOrigin-RevId: 1754276bed3186c0536055c983e32476cc90d416
2025-05-07 08:06:39 +00:00
Alf Eaton bfe42734bc Merge pull request #25261 from overleaf/ae-textlayer-layer
Move `will-change: transform` to textLayer

GitOrigin-RevId: 15fdd919da54ed95e115d664156066e6fda36982
2025-05-07 08:06:31 +00:00
Alf Eaton c3368167d0 Remove z-index from outline elements (#25265)
GitOrigin-RevId: 39b85a478b71bf42ebb6b886b6ae1b4ed6557570
2025-05-07 08:06:26 +00:00
Jakob AckermannandBrian Gough 5ce1685b5b [clsi-cache] shard each zone into three instances (#25301)
* [clsi-cache] shard per zone into three instances

Keep the old instance as read fallback. We can remove it in 4 days.

Disk size: 2Ti gives us the maximum write throughput of 240MiB/s on a
N2D instance with fewer than 8 vCPUs.

* [clsi] fix format

* [k8s] clsi-cache: bring back storage-classes

* [k8s] clsi-cache: fix reference to zonal storage-classes

* [k8s] clsi-cache: add logging configs

* [clsi] improve sharding

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [clsi] fix sharding

Index needs to be positive.

* [clsi] fix sharding

The random part is static per machine/process.

* [clsi] restrict clsi-cache to user projects

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [k8s] clsi-cache: align CLSI_CACHE_NGINX_HOST with service LB

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: 1efb1b3245c8194c305420b25e774ea735251fb3
2025-05-07 08:06:16 +00:00
Tim Down aa97dbdbb6 Merge pull request #25269 from overleaf/td-flaky-tags-test
Add waits for flaky tag list test

GitOrigin-RevId: 9d0bf2acd54d07e96fe6837296176e62bf981947
2025-05-07 08:05:59 +00:00
David 42eb4b2779 Merge pull request #25320 from overleaf/dp-review-panel-shortcut
Fix open review panel shortcut in new editor

GitOrigin-RevId: 3e4b65ad1f1943574ba937460722912ff382bc39
2025-05-07 08:05:51 +00:00
David 0261d701a7 Merge pull request #25238 from overleaf/dp-tooltips
Add tooltip to new editor home button

GitOrigin-RevId: 91f47659caf64a7ee31ed156d4ee2d5c933e05b8
2025-05-07 08:05:46 +00:00
David 08c5b11689 Merge pull request #25248 from overleaf/dp-history-text-color
Add explicit color for history text

GitOrigin-RevId: 4b595ea824d75181c041d44fc48ea81fec864316
2025-05-07 08:05:41 +00:00
David 1cd8eba098 Merge pull request #25249 from overleaf/dp-chat-message-read
Mark messages as read when opening chat tab

GitOrigin-RevId: d0e3290cad72716cbbdf5b6cc92f6c1d387a92c7
2025-05-07 08:05:36 +00:00
Jakob Ackermann 07b2255426 [misc] cleanup .dockerignore and .gitignore files (#25312)
- Remove settings ignore, they are inconsistent and break local prettier
- Remove .dockerignore files, only root ignore file is used
- Move .idea/.run/*.swp/coverage to root
- Remove .npmrc entries, we are no longer writing the rc file
- Remove node_modules/.DS_Store, is contained in root
- Remove cruft

GitOrigin-RevId: 3025fd5acaef343312f55149466c638e759a6e1f
2025-05-07 08:05:24 +00:00
Jimmy Domagala-Tang d95340edbc Merge pull request #25145 from overleaf/jdt-wf-premium-src
Add premium source to Writefull entitlement sync

GitOrigin-RevId: bbebd7741efdf40a444768255b4aade857aca602
2025-05-06 08:05:32 +00:00
Jakob Ackermann a5e2708eae [document-updater] add safe rollback point for history-ot (#25283)
GitOrigin-RevId: d7230dd14a379a27d2c6ab03a006463a18979d06
2025-05-06 08:05:28 +00:00
M Fahru c8a410d358 Merge pull request #25155 from overleaf/mf-use-stripe-v18
[web] Upgrade stripe to v18

GitOrigin-RevId: df522f73132e99e38f1716bf33e8ff4881bd5430
2025-05-06 08:05:19 +00:00
Domagoj Kriskovic 473f767465 Update event tracking for AI assist payment flow (#25222)
GitOrigin-RevId: feb7987b1397d70b3a04c797bd2db92e42c325f5
2025-05-06 08:04:56 +00:00
CloudBuild ffbb09e1d4 auto update translation
GitOrigin-RevId: a7a660549ae9997345e376977da0880a239541ea
2025-05-05 08:06:03 +00:00
Tim Down 057f4b4bb5 Merge pull request #25113 from overleaf/td-remove-button-info-variant
Change labs/new editor buttons to be based on secondary buttons

GitOrigin-RevId: f02565e60be33ff75c217c1ea1d0f24b3b619ed4
2025-05-05 08:05:40 +00:00
Tim Down d9587e8b06 Merge pull request #25264 from overleaf/bg-td-account-deletion-logging
Add logging for each stage of user deletion

GitOrigin-RevId: 13f9575012fcd8f166c4b14eba2ee5910658072e
2025-05-05 08:05:36 +00:00
Mathias Jakobsen 50c9de6178 Merge pull request #25262 from overleaf/mj-project-search-signup-date-promo
[web] Only show full-project-search promotion to older users

GitOrigin-RevId: 086d904d2f78c2eba30e1db37ac8eb3c606f118f
2025-05-05 08:05:31 +00:00
Mathias Jakobsen 7a072164a2 Merge pull request #25127 from overleaf/mj-full-project-search-promotion
[web] Add promotion for full-project-search

GitOrigin-RevId: e102dbf7df8b63afc592c57ebf6dafa51efdf9ff
2025-05-05 08:05:23 +00:00
Mathias Jakobsen 930401541d Merge pull request #25190 from overleaf/mj-survey-signup-limits
[web] Add options to limit survey exposure based on signup date

GitOrigin-RevId: 5719997339b5040d5cc42ffe7bee6d7b66bff12d
2025-05-05 08:05:18 +00:00
Mathias Jakobsen 081fced4bd Merge pull request #25217 from overleaf/mj-beamer-arrow-links
[web] Fix arrow movement in beamer presentation mode after link click

GitOrigin-RevId: 85701d9c918889981faa34f1adb57fb901d7b9df
2025-05-05 08:05:14 +00:00
Jimmy Domagala-Tang 22ad3a86a9 Merge pull request #25148 from overleaf/jdt-bundle-price-update
Update prices and naming for AI Assist bundle

GitOrigin-RevId: ece300a9d009a9e17594d3c052b33321c9b17f82
2025-05-02 08:06:10 +00:00
M Fahru dd3ae65bd2 Merge pull request #25166 from overleaf/kh-cancel-subscription
[web] support canceling Stripe subscription

GitOrigin-RevId: a72ccb20fbef9b6662cdfa1dcffacbd76dcb694c
2025-05-02 08:06:02 +00:00
Eric Mc Sween 2a88d7d9c9 Merge pull request #25152 from overleaf/em-ds-mobile-app
Endpoints for DS mobile app

GitOrigin-RevId: c7cf867bde60a0293c1c9f68f5a08515d0d2e904
2025-05-02 08:05:57 +00:00
Eric Mc Sween 6f05a43f32 Merge pull request #25064 from overleaf/em-oauth-no-secret
Do not require a secret in OAuth configurations

GitOrigin-RevId: 8d67436bc9366ef5991c02e89a81dbbf573196d7
2025-05-02 08:05:52 +00:00
David 79f9957b68 Merge pull request #25164 from overleaf/dp-editor-survey
Create Editor Survey

GitOrigin-RevId: dc11ef16c0a00aa846ac7a664dd88e9531e832f2
2025-05-02 08:05:47 +00:00
David 32a8142f9c Merge pull request #25211 from overleaf/dp-review-panel-mini-click
Fix bug where clicking on comment/change in mini panel would not open full panel in new editor

GitOrigin-RevId: e7db345e01b881255a1651b37dec637f04692f3e
2025-05-02 08:05:43 +00:00
David 32b30606e5 Merge pull request #25213 from overleaf/dp-switch-to-editor
Add SwitchToEditorButton to new editor

GitOrigin-RevId: 6ea546fbc208c0a815f895c33ce4b5fe67829083
2025-05-02 08:05:38 +00:00
Tim Down 7abafb01ea Merge pull request #23940 from overleaf/td-react-18
Upgrade to React 18

GitOrigin-RevId: 9b81936e6eea2bccd97fe5c2c5841f0b946371b8
2025-05-02 08:05:29 +00:00
Brian Gough 4464320757 Merge pull request #25224 from overleaf/em-disable-chunk-buffer
Bypass chunk buffer when loading the latest chunk

GitOrigin-RevId: 98a15b496b0d52802f9b61cefb60a7b8df653fb2
2025-05-02 08:05:17 +00:00
Mathias Jakobsen 4bbd5f32b9 Merge pull request #25205 from overleaf/mj-subeqnarray
[web] Add subeqnarray support

GitOrigin-RevId: a26fe362ec6e053134f9f4454979b773cae33241
2025-05-02 08:05:13 +00:00
Mathias Jakobsen 4077486b86 Merge pull request #25178 from overleaf/mj-ide-redesign-deleted-chat-user
[web] Editor redesign: Handle deleted user in chat

GitOrigin-RevId: 905896883657d6a39fd3c0de2306af18580d1be3
2025-05-02 08:05:08 +00:00
Antoine Clausse 666481d8b2 Merge pull request #25221 from overleaf/revert-25207-ac-promisify-compile-controller-2
Revert "[web] Promisify ClsiCookieManager and CompileController (reapply and fix)"

GitOrigin-RevId: 4495b0fdee22c9c2a7eb39250aef498883389427
2025-05-01 08:06:55 +00:00
Antoine Clausse 61db35ac8f Merge pull request #25207 from overleaf/ac-promisify-compile-controller-2
[web] Promisify ClsiCookieManager and CompileController (reapply and fix)

GitOrigin-RevId: 0737f30c24bf92b33327dc7d0e015ac2cd7d751d
2025-05-01 08:06:47 +00:00
Miguel Serrano 707e197625 Merge pull request #25008 from overleaf/msm-missing-close-handler-modal
[web] Fix `cancel` button in `UnlinkUserModal`.

GitOrigin-RevId: 5b84c9593ce59c6da9aae9cf4f8e763151202d34
2025-05-01 08:06:32 +00:00
Miguel Serrano 958e05a001 [web] script to update group members via CSV (#24861)
* [web] script to update group members via CSV

GitOrigin-RevId: 973d1bdb1180af008608e14e1ff31af83e47f630
2025-05-01 08:06:27 +00:00
David 5b499efd23 Merge pull request #25128 from overleaf/dp-synctex
Add synctex controls with buttons hidden to new editor

GitOrigin-RevId: 27566210444ca6d83fef977290fa7c2700f2bb62
2025-05-01 08:06:15 +00:00
Antoine Clausse d7d60f9d4c Merge pull request #25200 from overleaf/revert-25023-ac-promisify-compile-controller
Revert "[web] Promisify ClsiCookieManager and CompileController"

GitOrigin-RevId: 190ee8d2be23687f092e762c5199a34bcdf37cf9
2025-05-01 08:06:00 +00:00
Jakob Ackermann 7256c99e29 [clsi-cache] scale writes (#25198)
* [k8s] clsi-cache: increase the number of workers

* [clsi-cache] add a global limit on concurrent writes

* [k8s] clsi-cache: increase timeouts for health checks

* [k8s] clsi-cache: align resource requests with current usage

GitOrigin-RevId: 2aba881ac0e581aa8db78a30d2c58afee6702318
2025-05-01 08:05:55 +00:00
Antoine Clausse a8d6055b4e [web] Migrate user-activate module to BS5 (#25174)
* Revert-me: Add `user-activate` to SAAS modules

* Migrate user-activate module to BS5

* Add loading state to button

* Revert "Revert-me: Add `user-activate` to SAAS modules"

This reverts commit 0584005953bf470ab21697e5c5448c566d95ca5d.

* Remove `bootstrap5PageStatus` var in register.pug

GitOrigin-RevId: 45fffc902e69a0b8f6e2a1a9c0381c9e844fafca
2025-05-01 08:05:51 +00:00
Antoine Clausse c51d6f46d4 Add script to remove emails with commas, taken from a CSV file (#25107)
* Add script to remove emails with commas and replace them emails to support with encoded former emails

* Enhance RemoveEmailsWithCommasScriptTest to verify unchanged user data

GitOrigin-RevId: 6961995f2a143ac1c53bc2eeb183808a4be7dd02
2025-05-01 08:05:46 +00:00
Antoine Clausse 73476180d4 [web] Promisify ClsiCookieManager and CompileController (#25023)
* Refactor `ClsiCookieManager` to use async/await

* Refactor `CompileController` to use async/await

* Fix tests: CompileControllerTests.js

* Fix tests: ClsiCookieManagerTests.js

* Fixup: keep old object key (`serverId`->`clsiServerId`)

* Prefix non-express methods with an underscore

* Use async versions of `rclient` methods

* Fix: `canContinue` must be `false` when rate limited (!!)

* Remove unused `ClsiCookieManager.getCookieJar`

* Remove bad comments

* Fix linting

* Replace `request` by `@overleaf/fetch-utils`

* Replace `callsFake` by `resolves`

* Update `catch` block after request->fetch update: check status code

* Re-add timeout of 30s (was removed in 3df75ab5ccc8a63bd69a6a6e6052ef0451b76220)

* `npm run format:fix`

* Don't throw on 4xx errors; keep functionality similar to the current implementation using `request`.

GitOrigin-RevId: ef161f6c252d13f407e9cf28029b62061d6b992f
2025-05-01 08:05:42 +00:00
CloudBuild b3cc1fa582 auto update translation
GitOrigin-RevId: 07c6f33cf063a2ebf52304afd29adc807a7ca989
2025-05-01 08:05:33 +00:00
Brian Gough 19a804d5bf Merge pull request #25147 from overleaf/bg-history-buffer-use-persist-time
use persist time in history buffer

GitOrigin-RevId: 881c42f86c6cd3cc2ea8373af4371ccc1a89e9ed
2025-05-01 08:05:21 +00:00
Jakob Ackermann 478e264817 [fetch-utils] fix leak of abort event handlers in AbortSignal (#25172)
GitOrigin-RevId: 992496010eb1cbe571b2e87fab8e7227b0d64538
2025-04-30 08:06:05 +00:00
Rebeka Dekany df3d9099b6 Add aria-label to indicate the current PDF page number to screen readers (#25034)
GitOrigin-RevId: c2d64928378c9919f8ab8480559418cc52338854
2025-04-30 08:05:31 +00:00
Rebeka Dekany 2731ffaf10 Make editor popover toolbar keyboard focusable (#25169)
* Remove redundant class conflicting with focus styling

* Make the toolbar in the popover focusable via keyboard

* Focus to the first context menu item via keyboard only

GitOrigin-RevId: 7d3e2af4ba96654b5b2312b3999483c2a439b406
2025-04-30 08:05:25 +00:00
Alf Eaton 14c82ac94d Merge pull request #25149 from overleaf/ae-disable-toggletabfocusmode
Disable toggleTabFocusMode

GitOrigin-RevId: 7f9f9a1a57e6656a3bd03c1986ae6e4d3be71f84
2025-04-30 08:05:13 +00:00
Alf Eaton 52e6a216f4 Set will-change: transform on PDF canvas container (#25153)
GitOrigin-RevId: 316a99ac99cbff321fc2ae5a737d0aaf134ff775
2025-04-30 08:05:09 +00:00
ilkin-overleaf 1a8c549389 Merge pull request #24412 from overleaf/ii-flexible-licensing-manually-collected-2
[web] Add seats feature for manually collected subscriptions

GitOrigin-RevId: f7cc6f8ce17163f10e175a06bb471de6e3a96e3c
2025-04-30 08:05:00 +00:00
Liangjun Song 62760a9bf5 Merge pull request #25117 from overleaf/ls-map-stripe-product-to-recurly-plan-code
Use metadata to map Stripe product to Recurly plan code

GitOrigin-RevId: 775eb39cedff81985fc72cb14d411575231ade8f
2025-04-29 08:06:28 +00:00
Tim Down 5d78229e1e Merge pull request #25093 from overleaf/td-upgrade-react-error-boundary-second-attempt
Upgrade react-error-boundary to version 5, second attempt

GitOrigin-RevId: 2b88334b66f0ace383211c147279ff88e9f956bb
2025-04-29 08:06:23 +00:00
Mathias Jakobsen d7bd665bee Merge pull request #25060 from overleaf/mj-core-pug-bs5
[web] Convert various pug pages to BS5

GitOrigin-RevId: f42de89eca778db19d5faa8a19fa8a210c7a749b
2025-04-29 08:06:01 +00:00
Mathias Jakobsen 447be67f78 Merge pull request #25118 from overleaf/mj-coloneq
[web] Redefine coloneq to coloneqq in mathjax

GitOrigin-RevId: 1797acff022d45e89bcec518905cf53cbc45825e
2025-04-29 08:05:57 +00:00
Mathias Jakobsen 5fec16153b Merge pull request #25119 from overleaf/mj-ide-hide-project-search
[web] Hide full project search button in new editor

GitOrigin-RevId: badbed06ab311f63e18a3687771d209e7c853d42
2025-04-29 08:05:52 +00:00
Domagoj Kriskovic 53c34b5726 Add "referrer" tracking to payment flows for AI assist (#25002)
* Add "referrer" tracking to payment flows for AI assist

* move sendMB call

* fix conflict

GitOrigin-RevId: 0c4480816d5fe525a87223c0b1827093d853d474
2025-04-29 08:05:41 +00:00
Andrew Rumble 2b49653f21 Improve logging
This includes setting up the verbose mode appropriately

GitOrigin-RevId: 6d7499467ae1ca80ca88963b14360931c7eb35e6
2025-04-29 08:05:36 +00:00
Andrew Rumble a0aa6b9cc7 Use correct identifier for updating history id
GitOrigin-RevId: d95c6e85a8fd530189c14e36fed1112a51fb8609
2025-04-29 08:05:32 +00:00
Andrew Rumble f5a89cc38f Add a script for finding projects missing a history id in Redis
GitOrigin-RevId: 3606e82c8e0fc8e1118cd6ce1981610ec20b73af
2025-04-29 08:05:27 +00:00
Andrew Rumble 2c3eed8d96 Use assert.fail instead of comparing false and true
GitOrigin-RevId: c6cbaf0a424771cf2a037366fccd790a13d9b1bb
2025-04-29 08:05:23 +00:00
Andrew Rumble 2ad9f36706 Promisify tests
GitOrigin-RevId: 6f413f4c5ef8d034b4e94afacdf2d7b43c3a8830
2025-04-29 08:05:18 +00:00
Brian Gough 850da34778 Merge pull request #25086 from overleaf/bg-history-buffer-use-expire-time
add expire time to redis buffer in history-v1

GitOrigin-RevId: 3d74957c341e62e536dc60869a7ca71ac173e380
2025-04-29 08:05:14 +00:00
Kristina 23c1a0ba4d Merge pull request #25082 from overleaf/kh-prevent-pausing-and-group-plans
[web] prevent pausing or upgrading to group for Stripe subscriptions

GitOrigin-RevId: 4d194339282d8bc165ffa1b89e8e1cf298c2d343
2025-04-29 08:05:09 +00:00
Rebeka Dekany 71094cb283 Fix the React version of Facebook logo (#25070)
GitOrigin-RevId: 8357f6d3fef31fdea9d5d77b11093946a4a7ceba
2025-04-28 08:06:11 +00:00
Domagoj Kriskovic 35722acb3d Update review panel entry header user width in mini view (#25027)
GitOrigin-RevId: cbb62889f58b913e874fb947b95c16b0e0882671
2025-04-28 08:05:56 +00:00
Domagoj Kriskovic 8870aa6e63 Fix AI assist links based on annual/monthly switch (#25052)
* Fix AI assist links based on annual/monthly switch

* use translations for annually discount

GitOrigin-RevId: eaf10720eb162c8ecbd891e8f73475db0c02b9f9
2025-04-28 08:05:51 +00:00
Domagoj Kriskovic 5a4cf8a003 Refactor Writefull init to always include overleafLabels (#25055)
GitOrigin-RevId: 416b2d1ea3a24e7c879779078e4f2a13ca6c3555
2025-04-28 08:05:47 +00:00
Alf Eaton c732a02b38 Use toast notifications for SyncTeX errors and handle missing file errors (#24579)
GitOrigin-RevId: 88c6658ff0d11fdb43cef19c48b542a3b2206666
2025-04-28 08:05:42 +00:00
Alf Eaton c6ac06b51c Start adding client-side word count (#24892)
GitOrigin-RevId: 6c17d7bf7095794c003e17939a8302fc6b059262
2025-04-28 08:05:38 +00:00
Alf Eaton c378f0961c Add footnote and endnote commands to the LaTeX grammar (#24939)
GitOrigin-RevId: f0342156fa22a1bcf73ae2e8afdcc6f330ba5d37
2025-04-28 08:05:33 +00:00
Jakob AckermannandMathew Evans a9780ccf96 [clsi] merge sandboxed compiles config from Server Pro and SaaS (#25062)
* [clsi] merge sandboxed compiles config from Server Pro and SaaS

* [clsi] reorder fallback env vars

Co-authored-by: Mathew Evans <matt.evans@overleaf.com>

* [server-pro] bump version of expected release with these changes

---------

Co-authored-by: Mathew Evans <matt.evans@overleaf.com>
GitOrigin-RevId: bada93fec89bcc3f2bab85b6e60b2e27de88b9c2
2025-04-28 08:05:21 +00:00
Alf Eaton 247b4e274d Upgrade PDF.js to v5 (#24948)
* Reapply "Upgrade PDF.js to v5 (#24646)" (#24946)
* Upgrade core-js, caniuse-lite and babel

GitOrigin-RevId: 63398189301b5f5adc8a17b332d92dccfc26d612
2025-04-28 08:05:09 +00:00
Alf Eaton 9d290ae234 Add polyfills for AbortSignal.any and AbortSignal.timeout (#24958)
GitOrigin-RevId: d0fc041054e17f50b5b19343e06e857bd9635902
2025-04-28 08:05:04 +00:00
Brian Gough ed9844b2ec Merge pull request #25088 from overleaf/bg-increase-verify-blob-timeout
increase script timeout to avoid flaky tests in backupVerifier

GitOrigin-RevId: 4a52178b0e03ca9a69f82f7ddfe866ce689592b7
2025-04-25 08:05:53 +00:00
M Fahru 87bca3601d Merge pull request #25065 from overleaf/mf-schedule-refresh-features-stripe
[web] Refresh user features for stripe subscripton

GitOrigin-RevId: e0600e80bfc264f2c0229090f0d5ff7ef845d28e
2025-04-25 08:05:49 +00:00
M Fahru bb3a123b8d Merge pull request #25041 from overleaf/mf-update-careers-footer-link
[web] Update careers footer link

GitOrigin-RevId: 25b797b16fa5829ec970b2854f93c6ab270ecf24
2025-04-25 08:05:41 +00:00
Jakob Ackermann 86d310c741 [web] clsi-cache: fix download of .blg files (#25083)
GitOrigin-RevId: 69c8f789b8f8fa4b241c7563722e9a1cb6f86244
2025-04-25 08:05:37 +00:00
Jakob Ackermann 8ed650f57a [web] make clsi-cache a premium feature (#25075)
* [web] stopOnFirstError=true does not conflict with =false locally

Allow stopOnFirstError to be enabled in the compile from cache and
disabled locally.
Compiles that passed with stopOnFirstError=true will also pass with
stopOnFirstError=false. The inverse does not hold, and we need to
recompile.

* [web] record event when using compile from cache

* [web] record event when falling back to clsi-cache

* [web] make clsi-cache a premium feature

* [k8s] clsi-cache: increase disk size for beta rollout

NOTE: As this is a premium feature and paid servers run in zones c+d, we
do not need to scale up clsi-cache in zone b for now.

* [web] enable full sampling of compile-result-backend events

* [web] fix frontend tests

* [web] be more verbose when determining access to clsi-cache feature

GitOrigin-RevId: 6fd663e16085187876eb225f7f33eeeaf69d2b2a
2025-04-25 08:05:33 +00:00
Antoine ClausseandJakob Ackermann 13270dee2d [web] Tear down sidebar-navigation-ui-update, Update project-list look in SP/CE (#24920)
* Remove hacks that conditionally hid `ds-nav` survey

* Remove `getAssignment` of `sidebar-navigation-ui-update`

* Remove `hasDsNav`: make it true everywhere

* Remove dead code

* Update Footer so thin footer is shown in SP/CE

* Run `web$ make cleanup_unused_locales` & `bin/run web npm run extract-translations`

* [server-pro] fix learn wiki tests following DS navigation changes

* [server-pro] tests: remove logout action before switching session

* [server-pro] tests: fix logout test

* [server-pro] tests: use new css class for sidebar on project dashboard

* Revert "should add a documentation entry to the nav bar" test change

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 93eb7a1b03bb4e54ad1770150d83778b8f7f6727
2025-04-25 08:05:29 +00:00
Tim Down cf36767f03 Merge pull request #25080 from overleaf/revert-25073-td-upgrade-react-error-boundary
Revert "Upgrade react-error-boundary to version 5"

GitOrigin-RevId: 3301adb508eed26e4429c6aa912abf9e81c1d9f8
2025-04-25 08:05:25 +00:00
Tim Down 247f04557c Merge pull request #25073 from overleaf/td-upgrade-react-error-boundary
Upgrade react-error-boundary to version 5

GitOrigin-RevId: ebccd35e10084aa221c437c09ddfdb86f6272cf3
2025-04-25 08:05:20 +00:00
Rebeka Dekany 3c154955b2 [web] Ensure buttons and links have discernible text on the editor page (#25005)
* Use OLIconButton for buttons lacking visible text

* Ensure correct ARIA attr for the Layout dropdown

* Add a tooltip to Layout button

* Add "Open dev tool" aria-label

* Add accessible names to the rail tab items

* Remove unused IconProps export

GitOrigin-RevId: 185937384cf5ec87b32238111d6621ac07789fb4
2025-04-25 08:05:16 +00:00
Brian Gough 612981bedb Merge pull request #24993 from overleaf/bg-history-buffer-use-cache-in-persist-changes
use chunkBuffer in persistChanges

GitOrigin-RevId: dd4cdf39ba53c3becf306119fed7eacfe67de15d
2025-04-25 08:05:12 +00:00
Brian Gough a7466a7291 Merge pull request #24966 from overleaf/bg-history-buffer-optimised-get
add getCurrentChunkIfValid function

GitOrigin-RevId: e947a99ac928b58048a87cea0be1da34fcf3a9f8
2025-04-25 08:05:04 +00:00
Tim Down fb50d429b4 Merge pull request #24965 from overleaf/td-downshift-9-upgrade
Upgrade Downshift to version 9

GitOrigin-RevId: b36904ab0c82c09a633a25cd6fed651d7c8b19f7
2025-04-24 08:06:24 +00:00
Antoine Clausse 8ec9cd21b4 [latexqc] Update vite version (#25056)
Fixes https://github.com/overleaf/internal/security/dependabot/1398

GitOrigin-RevId: e759d529609df79c63e0c6c45cda941d45fe7ec8
2025-04-24 08:06:19 +00:00
Antoine Clausse 5861e4160c [latexqc] Continue the ESM migration (#24743)
* Set `"type": "module"` in package.json

* Update imports to include file extensions

* Update imports to include file extensions in test files

* Convert webpack files to ESM

* Update configureStore.js for ESM

* Make static-assets CJS, and rename with .cjs

* Misc: update imports to `node:path`

* Add vitest; Remove chai, mocha, sinon, expect, jsdom

* Return promises in conversion-controller, to make testing easier

* Update tests to vitest syntax

* Fix JSON import syntax and babel config

* Import combobo from NPM

* Rename `app.js` to `app.cjs`

This should prevent errors in the production app (https://console.cloud.google.com/cloud-build/builds;region=us-east1/8b42465c-0d07-4a08-b856-aa18c13fae46?project=overleaf-ops)

### Before

```
node@ea395ce612a8:/overleaf/services/latexqc$ node app.js
[...]
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/overleaf/services/latexqc/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///overleaf/services/latexqc/app.js:2:1
    at ModuleJob.run (node:internal/modules/esm/module_job:234:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:473:24)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:122:5)
```

### After

```
node@ea395ce612a8:/overleaf/services/latexqc$ node app.cjs
--------------------------
===>  😊 Starting Server . . .
===>  Environment: production
===>  Listening on port: 8082
--------------------------
```

* Rename `app.js` to `app.cjs` (Fixup forgotten one)

* Rename `app.js` to `app.cjs` (Fixup 2)

* Rename asset files to `.js`

Fixes:
```
Refused to execute script from 'https://staging-latexqc.ieee.org/assets/9d6cc24692a7f912ff06.cjs' because its MIME type ('application/octet-stream') is not executable, and strict MIME type checking is enabled.
```
GitOrigin-RevId: f0b618f7fc4062fb6bdc3779dfc5defc5f72d614
2025-04-24 08:06:14 +00:00
M Fahru ec763c69a7 Merge pull request #24801 from overleaf/mf-swap-trial-cta-tear-down
[web] Tear down `swap-trial-cta` and use the `enabled` variant as the default

GitOrigin-RevId: 2ba2f5c864908871797420aff976918a4e224ad3
2025-04-24 08:06:06 +00:00
David 1cfd5ca948 Merge pull request #24950 from overleaf/dp-writeful-editor-switch
Expose isNewEditor in window.overleaf.unstable.store for use by writefull

GitOrigin-RevId: be68b3bc62ea1bfb631f349475888b1153e47cfd
2025-04-24 08:05:58 +00:00
Brian Gough 12b96e40a5 Merge pull request #24977 from overleaf/bg-history-buffer-improve-tests
add more tests for chunk buffer in history-v1

GitOrigin-RevId: 3cfa2492efd67597a2782ca7a5671889a67049d5
2025-04-24 08:05:53 +00:00
Brian Gough 626416ed02 Merge pull request #24945 from overleaf/bg-redis-buffer-stats-script
add script for listing buffer stats from redis

GitOrigin-RevId: 7836563d51a5c6ded264d0e709d5cfcda70596e3
2025-04-24 08:05:49 +00:00
Kristina 6166a51552 Merge pull request #24922 from overleaf/kh-add-customer-portal-links
[web] add stripe customer portal link

GitOrigin-RevId: 6baaf51d4dd89ef779229ad17603529db06cf396
2025-04-24 08:05:44 +00:00
Kristina 6f1f1ba744 Merge pull request #24848 from overleaf/mf-save-stripe-checkout-data-to-mongo-db
[web] Save stripe checkout data to mongodb

GitOrigin-RevId: 537778a041f92f43ccf6455c29a56c7a961ce765
2025-04-24 08:05:40 +00:00
Jakob Ackermann dd3956f5f4 [document-updater] delete dead code for handling JSON documents (#25036)
GitOrigin-RevId: 59a2c5f0174cd041ebda1ea4898114e6fb6d41a5
2025-04-24 08:05:35 +00:00
David 52898ac83b Merge pull request #25031 from overleaf/dp-page-number-color
Fix pdf page number color in safari

GitOrigin-RevId: 14745d50a16df1aa5129b068d5dcf3ae5bc81e8b
2025-04-24 08:05:27 +00:00
Jakob Ackermann fe1129c2cf [web] avoid accessing the sharejs snapshot directly (#25037)
* [web] avoid accessing the sharejs snapshot directly

* [web] limit API interface for sharejs types

GitOrigin-RevId: faece372128e4580376e32fa93aa8fedf1e02957
2025-04-24 08:05:15 +00:00
Jakob Ackermann 7f086b21c8 [document-updater] modernize ApplyingUpdatesToADocTests (#25038)
- use beforeEach to ensure tests do not interfere with each other
  Notably, the 'when the ops come in a single linear order' test suite
  had state-changing tests that were dependent on the correct order.
  Also, the assigment of 'this.firstOpTimestamp' was in a test.
- consolidate populating project and doc ids
  The doc reference in this.update was undefined.
- fix doc reference in updates
  There were two misuses of 'doc_id' instead of 'doc'.
- Move mocking of MockWebApi.getDocument to the top and use
  sinon.resetHistory() or sinon.restore() for controlling the stub.
- Add another test for simple transforming of updates
  See 'when another client is sending a concurrent update'.

GitOrigin-RevId: 61ca8a1b0172920ad6ab1b604a9b9259cebddaad
2025-04-24 08:05:10 +00:00
Jimmy Domagala-Tang b225b55e8d Merge pull request #24990 from overleaf/dk-paywall-modal-updates
Updates to AI assist interstitial modal

GitOrigin-RevId: d2365aaf36f1f61a39a0bd52357f4518736e2a7d
2025-04-23 08:05:35 +00:00
Jimmy Domagala-Tang f95bf41824 Merge pull request #24697 from overleaf/jdt-show-addons-via-wf
Display When Ai Assist Is Granted Via Writefull

GitOrigin-RevId: 91f6e1843e2e1d1f7b3a49d95f31603e838c5545
2025-04-23 08:05:30 +00:00
David d492512d9e Merge pull request #24878 from overleaf/mj-editor-redesign-experiment
[web] Move editor redesign to labs experiment

GitOrigin-RevId: 5f11ff29a6c392ff6e448a16450e2e65a2574097
2025-04-23 08:05:22 +00:00
Andrew Rumble 1c672e55f5 Minor bump of webpack and @pmmmwh/react-refresh-webpack-plugin
GitOrigin-RevId: 55421a1cd66e0ec7177470f38fe9f575837b6bac
2025-04-23 08:05:11 +00:00
David 9d858dcf0f Merge pull request #24961 from overleaf/dp-back-to-editor
Update toolbar in history view to add BackToEditorButton

GitOrigin-RevId: 4c260126a373b1b3a7c31f9f4b44f6ae7fba6f36
2025-04-23 08:05:06 +00:00
David 584db6c301 Merge pull request #24989 from overleaf/mj-ide-redesign-modal-content
[web] Update copy in editor redesign switcher modal

GitOrigin-RevId: 9df3d6d580fec2540d0254e1f3a65b3b059bc63f
2025-04-23 08:05:01 +00:00
M Fahru a29280a1fe Merge pull request #24833 from overleaf/kh-add-stripe-get-subscription
[web] fetch Stripe subscription

GitOrigin-RevId: bffc31224aece584f4f1e3294bb1285d17f99195
2025-04-18 08:05:44 +00:00
Eric Mc Sween 315bde6f1b Merge pull request #24968 from overleaf/em-chunks-concurrency-postgres
Handle concurrency during chunk extension in the Postgres backend

GitOrigin-RevId: fd706b73deacf141cbd478d3ed47f298e6c6db72
2025-04-18 08:05:37 +00:00
Eric Mc Sween 2256697323 Merge pull request #24967 from overleaf/em-chunks-concurrency-pg-migration
Add closed column to PostgreSQL chunks

GitOrigin-RevId: 6babf7e94936ebfac31650aa7f190630e3288bbf
2025-04-18 08:05:29 +00:00
Jakob Ackermann ee2338a33b [web] align criteria for fallback to clsi-cache (#24970)
* [web] rename helper for browser cache bug, avoid confusion w/ clsi-cache

* [web] align criteria for fallback to clsi-cache

Notably, avoid the fallback from inside pdf-caching when disabled.

GitOrigin-RevId: 3fd918de14eef59c45c28cc5b5e256048cb91528
2025-04-18 08:05:25 +00:00
Christopher Hoskin 94e12ec404 Merge pull request #24971 from overleaf/csh-issue-19131-diable-filestore-endpoints
Disable the old filestore endpoints if user_files not defined

GitOrigin-RevId: f7d188cef3fe53835070903448690baff4ebad98
2025-04-18 08:04:59 +00:00
Domagoj Kriskovic 26032d6b77 Add origin for ai assist interstitial modal (#24904)
GitOrigin-RevId: 035edf8791b0afdc8c320598d09d99f5e84acc47
2025-04-18 08:04:55 +00:00
Andrew Rumble adb9723d62 Log a warning when a user is rejected from accessing real-time by CORS
GitOrigin-RevId: 04a7ffbc24654c876688db446164bf36a162828f
2025-04-18 08:04:47 +00:00
Antoine Clausse b901bb6c75 [web] Update fetch-mock to version 12 (#24837)
* Update fetch-mock to version 12

* Replace `fetchMock.done` by `fetchMock.callHistory.done`

* Replace `…Mock.called` by `…Mock.callHistory.called`

* Replace `fetchMock.reset` by `fetchMock.hardReset`

* Replace `fetchMock.restore` by `fetchMock.hardReset`

* Replace `fetchMock.resetHistory` by `fetchMock.clearHistory`

* Replace `fetchMock.calls` by `fetchMock.callHistory.calls`

* Replace `fetchMock.flush` by `fetchMock.callHistory.flush`

* Update tests for fetch-mock version 12

See https://www.wheresrhys.co.uk/fetch-mock/docs/Usage/upgrade-guide

* Update stories for fetch-mock version 12

* Remove `overwriteRoutes` option

* Add `fetchMock.spyGlobal()` to storybook

* Remove deprecated `sendAsJson` param

* Replace `fetchMock.hardReset()` by `fetchMock.removeRoutes().clearHistory()`

* Fixup fetch-mock in storybook:

Call `mockGlobal` inside the hook, call `removeRoutes` and `unmockGlobal` on cleanup

Behaviour can be tested by navigating between

https://storybook.dev-overleaf.com/main/?path=/story/editor-ai-error-assistant-compile-log-entries--first-log-entry
https://storybook.dev-overleaf.com/main/?path=/story/editor-ai-error-assistant-compile-log-entries--rate-limited

https://storybook.dev-overleaf.com/main/?path=/story/project-list-notifications--project-invite
https://storybook.dev-overleaf.com/main/?path=/story/project-list-notifications--project-invite-network-error

And clicking the buttons

GitOrigin-RevId: 35611b4430259e4c21c3d819ad18b2e6dab66242
2025-04-17 08:06:24 +00:00
Antoine ClausseandJakob Ackermann fa62529d82 [clsi] Replace diskusage by fs (#24789)
* Replace `diskusage` by `fs` in clsi

* Replace `diskusage` by `fs` in clsi-cache

* Update disk space calculations to include block size in bytes

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>

* Add warning comments about Docker-for-Mac fs stats being off by a factor

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 02ea07e531b89bb3d10ddfe780348b19cbddad1f
2025-04-17 08:06:16 +00:00
Andrew Rumble cde7ff5d2f Don't run the verifier loop when app created from test
GitOrigin-RevId: e8a565ae00019de66cbbaf961e0ee3ace90f800e
2025-04-17 08:06:11 +00:00
Eric Mc Sween 82c95dd82d Merge pull request #24930 from overleaf/em-ae-jd-full-project-search-launch
Launch full project search from regular search

GitOrigin-RevId: 3ef4f6923a0aeef6ab68768bab79e4be32f09eb0
2025-04-17 08:06:07 +00:00
Christopher Hoskin 778221c0af Merge pull request #24924 from overleaf/csh-issue-18692-404-if-templates-not-configured
Only define the template endpoints if configured

GitOrigin-RevId: 9ec9d411d6aed8774a880e80d0559a3491e832de
2025-04-17 08:06:03 +00:00
Kristina Hjertberg f8f2585164 [web] mv PaymentService to modules
GitOrigin-RevId: 73d739f53d96ff9e9d51a535907dbdc878aa6624
2025-04-17 08:05:58 +00:00
M Fahru 04d36122bd Merge pull request #24659 from overleaf/mf-init-plans-page-bs5
[web] Migrate plans page and interstitial payment page to bootstrap 5 with feature flag

GitOrigin-RevId: 4491b2205a19b943e8d8bf13f699f92278f5e183
2025-04-17 08:05:54 +00:00
Mathias Jakobsen dfc00ed8c1 Merge pull request #24949 from overleaf/mj-papers-notification-papers-feature
[web] Show papers notification to users with papers feature

GitOrigin-RevId: 376ed7a43bec28766f89101588ed2546ec3093d2
2025-04-17 08:05:49 +00:00
Jessica Lawshe 262a1d09c6 Add BS3 templates stylesheet back
Still used by portals

GitOrigin-RevId: 0d85d437c3f771fbb6ff76048f9e49654c88cf83
2025-04-17 08:05:45 +00:00
Andrew Rumble 5e76a97bc4 Log more information for failing tests
GitOrigin-RevId: 22ae2151b476b4f810ab9223b42f9cb6fe9d7442
2025-04-17 08:05:40 +00:00
Eric Mc Sween aa367bcd1d Merge pull request #24897 from overleaf/em-chunks-concurrency
Concurrency handling for history chunks with Mongo backend

GitOrigin-RevId: 30abe11237c80e7803c8934a20a57a7223afa85a
2025-04-17 08:05:36 +00:00
Mathias Jakobsen fe68930e9a Merge pull request #24733 from overleaf/mj-labs-without-features
[web] Move labs experiments from features to own property

GitOrigin-RevId: 22dee79758e5fa65fc31d9b8d4b155443cd585e7
2025-04-17 08:05:28 +00:00
Mathias Jakobsen 3a0c71175b Merge pull request #24891 from overleaf/mj-ide-redesign-hide-unavailable-menu-options
[web] Editor Redesign: Hide unavailable menu items

GitOrigin-RevId: 4aaee8befb6234a00bd4ec6087dcfd1417878576
2025-04-17 08:05:24 +00:00
Mathias Jakobsen 8fc206073b Merge pull request #24923 from overleaf/dp-mj-papers-notification
Add notification banner for Papers integration marketing

GitOrigin-RevId: 625c3afcc6ca617fd01af58a05a6c85f7126398b
2025-04-17 08:05:19 +00:00
Alf Eaton 34d5564abc Revert "Upgrade PDF.js to v5 (#24646)" (#24946)
This reverts commit 3ef46af6363aab5b5b007b6c9d72decae65a36ab.

GitOrigin-RevId: 9c3671b3ff196bb62ff547210a1138cb603d6791
2025-04-17 08:05:15 +00:00
David c1fc5b88b3 Merge pull request #24916 from overleaf/dp-git-logo
Use orange version of Git logo in account settings

GitOrigin-RevId: 10067d4190d54ea14183b20620001237090758da
2025-04-17 08:05:03 +00:00
Alf Eaton a1098a921c Upgrade PDF.js to v5 (#24646)
GitOrigin-RevId: 3ef46af6363aab5b5b007b6c9d72decae65a36ab
2025-04-17 08:04:59 +00:00
Andrew Rumble a1a3019d1e Debugging flakey test
GitOrigin-RevId: 0da9b4ee107162aed88f2f782e80a6325fb48622
2025-04-17 08:04:51 +00:00
Tim Down 34be8b75ad Merge pull request #24936 from overleaf/td-warning-badge-light
Use dark-on-light for warning badge by default

GitOrigin-RevId: 6259ec08c9c31f54dbdad6261a966f638303cc3b
2025-04-17 08:04:46 +00:00
Brian Gough cedc96bdd7 Merge pull request #24906 from overleaf/bg-history-redis-read-cache
implement read cache for history-v1 chunks

GitOrigin-RevId: 128de7e9380fd489f68d5045d3333a27018845c2
2025-04-16 08:06:18 +00:00
Jakob Ackermann 457d61fa9a [web] avoid logging when password is too similar to email (#24914)
GitOrigin-RevId: 122e1790e4827aa26da712011e946ea025a08300
2025-04-16 08:06:11 +00:00
David 35902407b3 Update integration logos in editor redesign (#24902)
* Update git bridge logo based on current theme

* Use GithubLogo black instead of GithubLogo

* Add missing logos

* Update dropbox logo

* Revert default DropboxLogoBlack size

* Remove white background from DropboxLogo

* Rename GitBridgeLogo to GitLogo

GitOrigin-RevId: 00d08716d9ccb0df7912dba39ec0477d672dc56d
2025-04-16 08:05:56 +00:00
Domagoj Kriskovic 1f7bfb4737 "default-visual-for-beginners" split test tear down (#24759)
GitOrigin-RevId: cdd6c8d3ffb60b9ae3e972f2267f1838cf720c83
2025-04-16 08:05:47 +00:00
Jakob Ackermann 6ac5142b41 [web] remove dead endpoints for downloading clsi output w/o buildId (#24825)
The corresponding clsi endpoints have already been removed.

GitOrigin-RevId: 0414040557f50dae6ad58228eefae7b2739a5656
2025-04-16 08:05:39 +00:00
Jakob Ackermann 39110d9da9 [clsi-cache] check compiler settings before using compile from cache (#24845)
* [web] provide an actual rootFolder from EditorProviders in tests

- Fixup SocketIOMock and ShareJS mocks to provide the complete interface
- Extend SocketIOMock interface to count event listeners
- Fixup test that did not expect to find a working rootDoc

* [web] expose imageName from ProjectContext

* [clsi-cache] check compiler settings before using compile from cache

* [web] avoid fetching initial compile from clsi-cache in PDF detach tab

GitOrigin-RevId: e3c754a7ceca55f03a317e1bc8ae45ed12cc2f02
2025-04-16 08:05:35 +00:00
Tim Down ef958f97a1 Merge pull request #24644 from overleaf/td-contact-form-react-email-validation
Add validation to email field in React version of contact form

GitOrigin-RevId: 9804af9fd5c4cf8e29e47a8661c50198eb0f6bcf
2025-04-16 08:05:23 +00:00
Tim Down 832028e92d Merge pull request #24718 from overleaf/td-bs5-warning-bg
Fix for form warning text colour

GitOrigin-RevId: 48a6d710548d919a5968a04709b41e4f1b2cd004
2025-04-16 08:05:19 +00:00
Jakob Ackermann f0edc7ba00 [web] update the projects lastUpdated timestamp when changing file-tree (#24867)
* [misc] freeze time before any other unit test setup steps

Freezing it after other work (notably sandboxed-module imports) will
result in flaky tests.

* [web] update the projects lastUpdated timestamp when changing file-tree

GitOrigin-RevId: b82b2ff74dc31886f3c4bd300375117eead6e0cd
2025-04-16 08:05:14 +00:00
Brian Gough d6c2188f2d Merge pull request #24903 from overleaf/bg-fix-backup-scheduler
remove history.id check from processPendingProjects function

GitOrigin-RevId: 017ab7c9bf693ed4077d4619574154166af04fe3
2025-04-16 08:05:06 +00:00
David bc95219bf6 Merge pull request #24862 from overleaf/dp-check-logs
Create openTab utility in rail-context to open rail at specific tab

GitOrigin-RevId: bfac2597fdd66db6dd8280873be97096f2b812dc
2025-04-16 08:05:01 +00:00
David 3e49fd6967 Merge pull request #24860 from overleaf/dp-chat-names-dark
Fix chat message names in dark mode

GitOrigin-RevId: dd919e3398a53b981939add5e3300c6427133b39
2025-04-16 08:04:57 +00:00
David 846ccd3aac Merge pull request #24859 from overleaf/dp-history-file-tree
Always show file tree in history view in new editor

GitOrigin-RevId: e993aae4c1625ef7fb0a716ae5bff8edb0e8d0d0
2025-04-16 08:04:52 +00:00
David 9babb6283b Merge pull request #24866 from overleaf/dp-toolbar-truncation
Add explicit width to codemirror toolbar wrapper to ensure it truncates correctly

GitOrigin-RevId: 458788daa8e634aebcb5f61dc4ce78f871b03913
2025-04-16 08:04:47 +00:00
Brian Gough 62c8af2a93 Merge pull request #24856 from overleaf/bg-history-redis-buffer-tweaks
fix error logging for chunk cache mismatches

GitOrigin-RevId: 85344c4025fdaa6ee916c5438ff38c7c49f4bce3
2025-04-15 08:06:27 +00:00
Brian Gough 3850e97446 Merge pull request #24857 from overleaf/bg-backup-scheduler-fix-for-broken-projects
handle broken projects in history backup

GitOrigin-RevId: a295d9d7a29715807a8172dae46e0fe3c14ecf12
2025-04-15 08:06:23 +00:00
Eric Mc Sween 397a546095 Merge pull request #24895 from overleaf/em-fix-history-changes
Properly serialize changes returned by the history changes endpoint

GitOrigin-RevId: a85fd8aede9316100d2cec901c1ab9b7d1faa9bb
2025-04-15 08:06:19 +00:00
Brian Gough d8c5160349 Merge pull request #24858 from overleaf/bg-fix-server-ce-history-redis
add history-v1 redis configuration to server-ce

GitOrigin-RevId: 7ad37f6261165b29b7c16b92890b2103afaf47d7
2025-04-15 08:06:15 +00:00
M Fahru 3a5d24eb7a Merge pull request #24524 from overleaf/mf-gallery-redesign-leftover-remove
[web] Remove leftover gallery redesign split test code

GitOrigin-RevId: 484272bfaae7db5b5329ae19ca556ee8e4a33650
2025-04-15 08:06:05 +00:00
Kristina Hjertberg a3b908e255 [web] add payment field to Subscription
GitOrigin-RevId: 3fd569372636f880b5e2d4e5dd98f6e28067c464
2025-04-15 08:05:57 +00:00
Jimmy Domagala-Tang 0e49a5d9b0 Merge pull request #24391 from overleaf/jdt-move-wf-features-to-ol
Move Writefull table + equation generator to OL toolbar

GitOrigin-RevId: b7bc5b1cde5687360c4f60cb64924da139ccfbe9
2025-04-15 08:05:47 +00:00
Eric Mc Sween 958ff0f3bf Merge pull request #24847 from overleaf/em-chunks-index
Include closed chunks in active chunks index

GitOrigin-RevId: ff75959737908afa72cee2c2784abb476c115e80
2025-04-15 08:05:33 +00:00
Tim Down 773cbc92eb Merge pull request #24592 from overleaf/td-socket-io-origins
Use updated socket.io with CORS origin check in real-time

GitOrigin-RevId: a1a874ba298e145aa4c9dd55ef723d79843f8145
2025-04-15 08:05:25 +00:00
Domagoj Kriskovic b9f1013f37 Update "collaborator-invited" analytics event (#24639)
GitOrigin-RevId: e469c50dadea568032ec825fa99b33b80d0b3964
2025-04-15 08:05:18 +00:00
Domagoj Kriskovic 30c5495b21 Update share modal copy for reviewer role (#24694)
* Update share modal copy for reviewer role

* fix ShareProjectModal test

* use "limited_to_n_collaborators_per_project"

GitOrigin-RevId: f5afcb18a3921a6b1132a4c323af9d8395a7d07b
2025-04-15 08:05:14 +00:00
Brian Gough 835e14b8b2 Merge pull request #24768 from overleaf/bg-history-redis-buffer
test redis caching when loading latest chunk in history-v1

GitOrigin-RevId: f0ee09e5e9e1d7605e228913cb8539be4134e1f7
2025-04-15 08:05:03 +00:00
Eric Mc Sween fb03fe4d26 Merge pull request #24776 from overleaf/em-project-history-unused-endpoints
Remove unused endpoints in project-history

GitOrigin-RevId: 2940c1c1973177e3200cb78884b307f708fd88c3
2025-04-14 08:05:08 +00:00
Jakob Ackermann 4a17a1e713 [web] gracefully access compile stats for event (#24818)
* [web] gracefully access compile stats for event

* [clsi] always emit stats and timings

GitOrigin-RevId: 959e5fe1508245ffecfab1219fd86e53b210fca1
2025-04-14 08:04:51 +00:00
Liangjun Song c60ceaf932 Merge pull request #24466 from overleaf/ls-script-runner
Script runner

GitOrigin-RevId: 4cc7004f05177dba2a2151aa6db7e75fb679d11d
2025-04-14 08:04:37 +00:00
CloudBuild 8ad335cf47 auto update translation
GitOrigin-RevId: b09c8b2b9c0e29f3061aaacb7dbfff4ccaaec466
2025-04-11 08:06:17 +00:00
M Fahru 14308f4fba Merge pull request #23085 from overleaf/mf-teardown-bs5-register-login
[web] Teardown bs5 login and register page

GitOrigin-RevId: e2335ecbe89212984acd24fbbaa6f9549dc45b96
2025-04-11 08:06:13 +00:00
Brian Gough fe8d6392d5 Merge pull request #24793 from overleaf/bg-update-build-scripts-to-include-history-redis
update build scripts to include HISTORY_REDIS_HOST

GitOrigin-RevId: da0f317c80401067c0f4aa772196cb2f24849b8e
2025-04-11 08:06:03 +00:00
Eric Mc Sween dd526693f5 Merge pull request #24775 from overleaf/em-bypass-project-history
Call history-v1 directly for latest history and changes

GitOrigin-RevId: 39c32dd50ff7875f82bbb2716da753a9c3e6e81d
2025-04-11 08:05:56 +00:00
Eric Mc Sween 42aea53307 Merge pull request #24754 from overleaf/em-promisify-history-controller
Promisify HistoryController

GitOrigin-RevId: e1783acb8c7ba7e00b109a4f4a514973cc3163d2
2025-04-11 08:05:52 +00:00
Eric Mc Sween 3aa579f232 Merge pull request #24736 from overleaf/em-history-get-changes
Endpoint for getting history changes

GitOrigin-RevId: b96afed0492522d62df9c24390f76e5490afbb44
2025-04-11 08:05:48 +00:00
David 9cd7e49daf Merge pull request #24332 from overleaf/dp-review-panel
Add review panel to new editor

GitOrigin-RevId: 918a29d81fcfaf60bc4af8a20a25545d79c4a3ed
2025-04-11 08:05:31 +00:00
Kristina 9f22564ca3 Merge pull request #24680 from overleaf/kh-rename-recurly-namespace
[web] rename recurly namespace

GitOrigin-RevId: b7cfd26923d47bd7f3de4140be24d2d1ef20f6c8
2025-04-11 08:05:20 +00:00
Kristina af46bcdace Merge pull request #24396 from overleaf/kh-rm-unused-recurly-subscription-property
[web] rm dead code in `SubscriptionViewModelBuilder`

GitOrigin-RevId: 64006e3f51f61c40e2d4e01fd04961546319ffdd
2025-04-11 08:05:16 +00:00
Mathias Jakobsen c27c7bbe83 Merge pull request #24720 from overleaf/mj-teardown-write-and-cite-split-tests
[web] Tear down Write and Cite related split tests

GitOrigin-RevId: 0002829f53b0f28d482c79ed2cbf61066690ae02
2025-04-11 08:05:05 +00:00
Andrew Rumble 814a55809b Reinstate options param in getDoc
Removed in #23209 - used by the admin restore doc functionality.

GitOrigin-RevId: bb3b682ef19719956236ec24807e19cbc09f049c
2025-04-11 08:04:48 +00:00
CloudBuild 29b0dd0725 auto update translation
GitOrigin-RevId: 9010716cae7147df527797d531b902f40f20352c
2025-04-10 08:06:36 +00:00
Jimmy Domagala-Tang f7f4a03abb Merge pull request #24523 from overleaf/jdt-prevent-bundle-dbl-buys
Redirect bundle purchases when users already have it

GitOrigin-RevId: d8e3c0256db08c08c2be24f38caef91fb26b90e8
2025-04-10 08:06:28 +00:00
Mathias Jakobsen f11a6a6b87 Merge pull request #24717 from overleaf/dp-github-typo
Give GitHub a capital H in integrations panel description

GitOrigin-RevId: 8644e638c3d557221c1cf3b42b2884d9fdc4572c
2025-04-10 08:06:06 +00:00
Mathias Jakobsen 6207c853ef Merge pull request #24708 from overleaf/mj-rail-element-tooltips
[web] Add tooltips to rail buttons

GitOrigin-RevId: 1b75c48f30b593e9e725bcb9658c4c15c9fe6a66
2025-04-10 08:06:01 +00:00
Mathias Jakobsen c183176fd3 Merge pull request #24705 from overleaf/mj-ide-rail-hover-state
[web] Editor redesign: Add hover state colors to rail

GitOrigin-RevId: 9b4a19a913963fcd4b76cf24467b8c1ad6fb1fab
2025-04-10 08:05:57 +00:00
Mathias Jakobsen 15663796ad Merge pull request #24703 from overleaf/mj-ide-align-icon
[web] Editor redesign: Align logo and home button with rail tabs

GitOrigin-RevId: 837651bb55348a043ec16afeffb508bc1d723689
2025-04-10 08:05:52 +00:00
Mathias Jakobsen e670024f5c Merge pull request #24678 from overleaf/mj-ide-view-help-menu
[web] Add remaining options to menu bar

GitOrigin-RevId: cf6cc6c2aaf450e362588c514e1a87e923a611b4
2025-04-10 08:05:48 +00:00
Mathias Jakobsen bdf0194fc8 [web] Add editor commands to command registry and toolbar (#24538)
* [web] Add editor commands to command registry and toolbar

* [web] Omit empty groups

* [web] Editor redesign: Move toolbar commands to custom hook

* [web] Disable editor commands when editor is not visible

GitOrigin-RevId: be9f4060fc44e51223e16860fdcf6698c927998c
2025-04-10 08:05:43 +00:00
Brian Gough 4ba0e97b95 Merge pull request #24749 from overleaf/bg-history-redis-buffer
add history redis to history-v1

GitOrigin-RevId: 70dc1aee809ad17902c93c020f3804c0f1429238
2025-04-10 08:05:35 +00:00
Brian Gough d85dbe429d Merge pull request #24745 from overleaf/bg-history-use-consistent-import-for-chunk-store
use consistent import for chunk_store

GitOrigin-RevId: 427b148c53c9d0913b2cdfdc634273a1d8ece060
2025-04-10 08:05:31 +00:00
Jakob Ackermann d99ba08d01 [clsi] run SyncTeX in specific output dir rather than compile dir (#24690)
* [clsi] drop support for docker-in-docker

* [clsi] run SyncTeX in specific output dir rather than compile dir

* [clsi] store output.synctex.gz outside of tar-ball in clsi-cache

* [clsi] add documentation for rewriting of docker bind-mounts

* [server-pro] update env vars for sandboxed compiles in sample config

GitOrigin-RevId: 8debd7102ac612544961f237aa4ff1c530aa3da3
2025-04-10 08:05:26 +00:00
Jakob Ackermann b831a0b3f7 [clsi-cache] frontend (#24389)
* [clsi-lb] forward ?clsiserverid=cache requests to clsi-cache

* [web] use clsi-cache in frontend

* [web] upgrade compile from cache to full compile when triggered inflight

* [web] fix pdf-js-viewer.spec.tsx tests -- add ?clsiserverid=foo to url

* [web] fix renamed reference after merge

* [web] fix download of other output files and use specific build

* [web] consolidate validation of filename into ClsiCacheHandler

* [web] remove unused projectName from getLatestBuildFromCache

* [web] avoid hitting the same clsi-cache instance first all the time

* [web] update documentation

GitOrigin-RevId: d48265a7ba89d6731092640e1492bc9f103f5c33
2025-04-10 08:05:22 +00:00
b538d56591 [clsi-cache] backend (#24388)
* [clsi-cache] initial revision of the clsi-cache service

* [clsi] send output files to clsi-cache and import from clsi-cache

* [web] pass editorId to clsi

* [web] clear clsi-cache when clearing clsi cache

* [web] add split-tests for controlling clsi-cache rollout

* [web] populate clsi-cache when cloning/creating project from template

* [clsi-cache] produce less noise when populating cache hits 404

* [clsi-cache] push docker image to AR

* [clsi-cache] push docker image to AR

* [clsi-cache] allow compileGroup in job payload

* [clsi-cache] set X-Zone header from latest endpoint

* [clsi-cache] use method POST for /enqueue endpoint

* [web] populate clsi-cache in zone b with template data

* [clsi-cache] limit number of editors per project/user folder to 10

* [web] clone: populate the clsi-cache unless the TeXLive release changed

* [clsi-cache] keep user folder when clearing cache as anonymous user

* [clsi] download old output.tar.gz when synctex finds empty compile dir

* [web] fix lint

* [clsi-cache] multi-zonal lookup of single build output

* [clsi-cache] add more validation and limits

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

* [clsi] do not include clsi-cache tar-ball in output.zip

* [clsi-cache] fix reference after remaining constant

Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>

* [web] consolidate validation of filename into ClsiCacheHandler

* [clsi-cache] extend metrics and event tracking

- break down most of the clsi metrics by label
  - compile=initial - new compile dir without previous output files
  - compile=recompile - recompile in existing compile dir
  - compile=from-cache - compile using previous clsi-cache
- extend segmentation on compile-result-backend event
  - isInitialCompile=true - found new compile dir at start of request
  - restoredClsiCache=true - restored compile dir from clsi-cache

* [clsi] rename metrics labels for download of clsi-cache

This is in preparation for synctex changes.

* [clsi] use constant for limit of entries in output.tar.gz

Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>

* [clsi-cache] fix cloning of project cache

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
Co-authored-by: Alf Eaton <alf.eaton@overleaf.com>
Co-authored-by: Eric Mc Sween <eric.mcsween@overleaf.com>
GitOrigin-RevId: 4901a65497af13be1549af7f38ceee3188fcf881
2025-04-10 08:05:17 +00:00
Kristina 7920cd9d3d Merge pull request #24519 from overleaf/kh-add-payment-service-low-delta
[web] add `PaymentService` to `buildUsersSubscriptionViewModel`

GitOrigin-RevId: 543531226bad38d34b225dae28cf00a5e02e5558
2025-04-10 08:05:06 +00:00
Tim Down 28468e134c Merge pull request #24660 from overleaf/td-bs5-remove-react-bootstrap-0
Remove react-bootstrap 0.33.1

GitOrigin-RevId: c320a6b18c576afdc0fd49559915d3d2f3a7a1ef
2025-04-10 08:04:50 +00:00
roo hutton 1741e48d59 Merge pull request #24619 from overleaf/rh-team-invites-index
Add migration for subscriptions.teamInvites.email index

GitOrigin-RevId: 5f4bca578ae0dcf92c422596aa7834c42dc63bee
2025-04-09 08:05:49 +00:00
Jimmy Domagala-Tang 94a067d7c8 Merge pull request #24208 from overleaf/jdt-wf-analytics-wrapper
Create listener for Writefull to send events to our analytics

GitOrigin-RevId: 8ad1866e3c81b1f6c3388b744f9e27810623436e
2025-04-09 08:05:42 +00:00
Jakob Ackermann 3f10b29869 [real-time] backwards compatibility fix for redis 6.2 (#24734)
GitOrigin-RevId: ffc51a8280e0d0708e7dcb2638cabed2b7adfbf5
2025-04-09 08:05:37 +00:00
Jakob Ackermann ca111771c2 [real-time] rename metric label to align with common name (#24732)
GitOrigin-RevId: fd161f2345f0c30aa82395dbca673025698f13fe
2025-04-09 08:05:33 +00:00
Jakob Ackermann dadf6f0ed4 [real-time] record metrics on number of connected clients per project (#24727)
Note: "connected" here means across all real-time pods.

- editing_session_mode, counter
  - mode=connect - a client connected
  - mode=disconnect - a client disconnect
  - mode=update - continuous editing
  - status=empty - all clients disconnected
  - status=single - a single client is connected
  - status=multi - multiple clients are connected

- project_not_empty_since histogram with buckets [0,1h,2h,1d,2d,1w,30d]
  - status=empty/single/multi as described above

GitOrigin-RevId: 1cc42e72bbb5aae754399bdbc3f8771642f35c22
2025-04-09 08:05:29 +00:00
Jessica Lawshe fc56d1690d Merge pull request #24617 from overleaf/jel-fix-status-labels
[web] Switch to `OLBadge` to fix style in BS5 on admin SSO config labels

GitOrigin-RevId: eb3745b602f33e9bd5aea3704ec6f0d2904ee5b1
2025-04-09 08:05:25 +00:00
Jessica Lawshe aa723a70c2 Merge pull request #24580 from overleaf/jel-bs5-loading-labels
[web] Add accessibility labels for processing view on BS5 group buttons

GitOrigin-RevId: bb79d3b73eb187097d036bc5a6e307c4232f32d0
2025-04-09 08:05:21 +00:00
M Fahru 73e141a4a3 Merge pull request #24635 from overleaf/mf-tear-down-period-toggle-improvements-test
[web] Tear down `period-toggle-improvements` split test and apply the `default` variant

GitOrigin-RevId: 154a291437afc6e4b1c87eef91e6f05ae5a454c3
2025-04-09 08:05:04 +00:00
M Fahru 620edfa347 Merge pull request #24632 from overleaf/mf-tear-down-group-tab-improvements-split-test
[web] Tear down `group-tab-improvements` split test and apply the `default` variant

GitOrigin-RevId: c2fe07d0b4338f85b053637d85a05bbcbcce74ea
2025-04-09 08:05:00 +00:00
M Fahru 4e192f760d Merge pull request #24458 from overleaf/mf-update-rocket-yellow-to-be-bigger
[web] Update rocket-yellow sticker size

GitOrigin-RevId: 0e5b39610687eff3d2ce51e48da2e7829f26f574
2025-04-09 08:04:55 +00:00
Miguel Serrano 44926d3519 Merge pull request #24721 from overleaf/msm-cleanup-git-oauth-secret
[git-bridge] Cleanup `oauth` clientID/secret

GitOrigin-RevId: 48144d928119782d1c7b048b0cb6a4afb6072f28
2025-04-09 08:04:48 +00:00
Tim Down b41f8164b8 Merge pull request #24709 from overleaf/td-prevent-spellcheck-after-destroy
Prevent spell checks after spell checker is destroyed

GitOrigin-RevId: 070f6c6ed05063e46960dad8099d61f585d6120c
2025-04-08 08:07:44 +00:00
Eric Mc Sween bfd9ab6b8f Merge pull request #24604 from overleaf/em-docstore-errors
Downgrade 4xx errors in docstore

GitOrigin-RevId: ec6c73b4222876e6f58690779571e2e42106c36b
2025-04-08 08:07:34 +00:00
Tim Down 9ea0f2ec29 Merge pull request #24606 from overleaf/td-bs5-make-default
Make Bootstrap 5 the default everywhere

GitOrigin-RevId: 024614d6f4f370fd9c9623a6f35c64e43d2a70c4
2025-04-08 08:07:29 +00:00
Tim Down 4cee376878 Merge pull request #24688 from overleaf/td-bs5-editor-beginner-switch-popover
Migrate beginner editor switch popover to BS5

GitOrigin-RevId: c470df46989de7ad6477ee23ff13fc95dd580ea8
2025-04-08 08:07:24 +00:00
ilkin-overleaf 4e8f982ca2 Merge pull request #24682 from overleaf/ii-group-members-table-2
[web] Group members table colspan fix 2

GitOrigin-RevId: ddb7438da3c68b74b8f38feb8512175e8c24443d
2025-04-08 08:07:19 +00:00
Tim Down eb276c7403 Merge pull request #24416 from overleaf/td-bs5-remove-platform-pages-flag
Remove bs5-misc-pages-platform feature flag from code

GitOrigin-RevId: 8da617e5d7703a56399b227b0c38acda86150b8d
2025-04-08 08:07:07 +00:00
Brian Gough a68e96400b Merge pull request #24670 from overleaf/bg-remove-logging-of-update-errors
remove update parameter in applyOtUpdate error handling

GitOrigin-RevId: 46fa9d669327850f956154b20676317a7b13eb78
2025-04-08 08:06:46 +00:00
Domagoj Kriskovic 0f3f78cde7 Add mouse down listener in PreventSelectingEntry (#24665)
GitOrigin-RevId: 97411fd45d10b850f41c3f6269550bc6fffb0e11
2025-04-08 08:06:41 +00:00
MoxAmber d08fa01110 Merge pull request #24545 from overleaf/as-customerio-toolbar-placeholders
[web] Create placeholders for customer.io inline messages

GitOrigin-RevId: 862362cd9336e5c1899dfaeeabac9f3da181ccf9
2025-04-08 08:06:28 +00:00
Jakob Ackermann cdf04d695c [clsi] upgrade dockerode to bump tar-fs (#24693)
Diff: https://github.com/apocas/dockerode/compare/v3.3.1...v4.0.5
GitOrigin-RevId: 73ba2610d0c2e766a52e638754af410aaad94ec1
2025-04-08 08:06:23 +00:00
MoxAmber 71bc4c45bc Merge pull request #24373 from overleaf/as-customerio-web-sdk
[web] Set up customerio frontend SDK

GitOrigin-RevId: 0e043163e1f6cd02d8ecf3a3e854e7799d776edd
2025-04-08 08:06:18 +00:00
David 55a13ca1de Merge pull request #24662 from overleaf/mj-wc-survey-cleanup
[web] Remove unused component

GitOrigin-RevId: dd525258349834a8bbb28e78a06445bafc9b2e99
2025-04-08 08:06:09 +00:00
David 92dd62975e Merge pull request #24575 from overleaf/dp-review-panel-dark-theme
Add dark theme for review panel in new editor

GitOrigin-RevId: 179cc257cd66f1ac477d7f4d428992019298ebc1
2025-04-08 08:06:04 +00:00
Brian Gough 040f70471c Merge pull request #24636 from overleaf/bg-history-backup-fix-broken-projects
add --fix option to backup script

GitOrigin-RevId: 568c9158669bb1cede0f0dd75e7507b10e8ff5a2
2025-04-08 08:05:59 +00:00
Brian Gough f08532dfb0 Merge pull request #24637 from overleaf/bg-history-backup-uninitialised-projects
backup uninitialised projects

GitOrigin-RevId: 9310ef9f803decffbd674024a1ffd33d1960a2c4
2025-04-08 08:05:54 +00:00
Antoine ClausseandJakob Ackermann 7eecfe9e27 [web] Add another partial fix for fix_malformed_filetree: use _id instead of path to locate data (#24101)
* Fix `fix_malformed_filetree`'s `fixName`

* Fix findUniqueName with missing names in siblings

* Add test showcasing another bug: shifted arrays in filetree folder

* Update `removeNulls` to use `_id`

* Update services/web/app/src/Features/Project/ProjectLocator.js

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>

* Add FIXME about file names uniqueness

* Rename `obj` to `project`

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 3ed795ae0621800603395f7b50626ac89c39199d
2025-04-08 08:05:32 +00:00
CloudBuild 670ed44963 auto update translation
GitOrigin-RevId: 2a2199f74cf1e0c2506ba336624cd858e2f24d3e
2025-04-07 08:05:15 +00:00
CloudBuild f2030789d1 auto update translation
GitOrigin-RevId: 6363d21d4903cb8f4cdcca28ec1b1baca39406b1
2025-04-07 08:05:11 +00:00
ilkin-overleaf ee11889431 Merge pull request #24647 from overleaf/ii-group-members-table
[web] Group members table colspan fix

GitOrigin-RevId: 99d52f0081ef500f63d86d9bdc2fda5c3cdab1d9
2025-04-07 08:05:04 +00:00
Domagoj Kriskovic 1fb18b092d Add upgrade prompt for track changes in share modal (#24572)
* Add upgrade prompt for track changes in share modal

* remove message from invite.jsx

* Fix itemToDisabled in Select

GitOrigin-RevId: 5ba9e2b063c7e26a4c39b9e973eddce36a5b4733
2025-04-07 08:05:00 +00:00
Domagoj Kriskovic 6169a5d3df Update track changes paywall modal (#24620)
* Update track changes paywall modal

* update list styling

GitOrigin-RevId: f5eda3a4b19c89105e163c8b5729ebcdd5dca2d0
2025-04-07 08:04:56 +00:00
Domagoj Kriskovic 51250ca45f Add review access notification in Git bridge modal (#24623)
GitOrigin-RevId: e9efc2f036445f610f2c1aa60a882faf09d2067f
2025-04-07 08:04:52 +00:00
Domagoj Kriskovic bfe5871e9e Dropbox sync info message for read-only and reviewer collaborators (#24641)
* Dropbox sync info message for read-only and reviewer collaborators

* fix translation text

GitOrigin-RevId: 12984a1f9fa20c39f171b56f4a46830df7a5f5e0
2025-04-07 08:04:48 +00:00
Brian Gough 0cc244c516 Merge pull request #20022 from overleaf/bg-check-file-tree
add script to check for errors in project file tree

GitOrigin-RevId: da115cbd79e7ca53a0222638a54bbea1b633f709
2025-04-07 08:04:44 +00:00
Mathias Jakobsen 767ac1632e Merge pull request #24427 from overleaf/mj-command-registry
[web] Editor redesign: Add command registry

GitOrigin-RevId: c3d78d052f7e6e067de3247da8fe04329d8822ff
2025-04-07 08:04:40 +00:00
M Fahru 1d1bad23e3 Merge pull request #24625 from overleaf/mf-fix-error-auth-pages-bs5
[web] Fix form message errors aren't shown properly in bs5 auth pages

GitOrigin-RevId: 9a94fe53647d224faf63bdd047bfa26463d385f1
2025-04-04 08:05:18 +00:00
M Fahru 73b4584575 Merge pull request #24384 from overleaf/mf-teardown-checkout-redesign-split-test
[web] Tear down `checkout-redesign` split test

GitOrigin-RevId: b3038276c28aece85a47d7b0a8134fad75e8af2c
2025-04-04 08:05:13 +00:00
Tim Down bbf85ae6d2 Merge pull request #24460 from overleaf/ar-personal-access-token-add-type-to-index
[web] personal access token add type to index

GitOrigin-RevId: 28b0fb8d3764c977d667cd8a5ee543d1f2e2eed2
2025-04-04 08:05:09 +00:00
Brian Gough 90fac6b206 Merge pull request #24587 from overleaf/bg-fix-web-routes-script
fix bin/routes script

GitOrigin-RevId: bc791cf01ce3321ec4badffe2cbc8c4ea93ba381
2025-04-04 08:05:04 +00:00
Brian Gough 9f527f10e1 Merge pull request #24104 from overleaf/bg-batched-update-concurrency-warning
prevent concurrent execution of batchedUpdate

GitOrigin-RevId: 90853ccd83943d8cd7b01fd11f152512d806e9a7
2025-04-04 08:05:00 +00:00
roo hutton fc6df69e41 Merge pull request #24630 from overleaf/rh-null-editor-fix
Coerce null reviewer_refs to empty array

GitOrigin-RevId: dd1931b306e22fc4b7dbd3709dfac786a2475724
2025-04-04 08:04:44 +00:00
1602 changed files with 53239 additions and 26961 deletions
+36 -29
View File
@@ -6,47 +6,58 @@
<h4 align="center">An open-source online real-time collaborative LaTeX editor.</h4>
<p align="center">
<a href="https://github.com/overleaf/overleaf/wiki">Wiki</a> •
<a href="https://github.com/yu-i-i/overleaf-cep/wiki">Wiki</a> •
<a href="https://www.overleaf.com/for/enterprises">Server Pro</a> •
<a href="#contributing">Contributing</a> •
<a href="https://mailchi.mp/overleaf.com/community-edition-and-server-pro">Mailing List</a> •
<a href="#authors">Authors</a> •
<a href="#license">License</a>
</p>
<img src="doc/screenshot.png" alt="A screenshot of a project being edited in Overleaf Community Edition">
<img src="doc/screenshot.png" alt="A screenshot of a project being edited in Overleaf Extended Community Edition">
<p align="center">
Figure 1: A screenshot of a project being edited in Overleaf Community Edition.
Figure 1: A screenshot of a project being edited in Overleaf Extended Community Edition.
</p>
## Community Edition
[Overleaf](https://www.overleaf.com) is an open-source online real-time collaborative LaTeX editor. We run a hosted version at [www.overleaf.com](https://www.overleaf.com), but you can also run your own local version, and contribute to the development of Overleaf.
[Overleaf](https://www.overleaf.com) is an open-source online real-time collaborative LaTeX editor. Overleaf runs a hosted version at [www.overleaf.com](https://www.overleaf.com), but you can also run your own local version, and contribute to the development of Overleaf.
## Extended Community Edition
The present "extended" version of Overleaf CE includes:
- Template Gallery
- Sandboxed Compiles with TeX Live image selection
- LDAP authentication
- SAML authentication
- OpenID Connect authentication
- Real-time track changes and comments
- Autocomplete of reference keys
- Symbol Palette
- "From External URL" feature
> [!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.
Therefore, in any environment where not all users can be fully trusted, it is strongly recommended to enable the Sandboxed Compiles feature available in the Extended Community Edition.
For more information on Sandbox Compiles check out Overleaf [documentation](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/server-pro-only-configuration/sandboxed-compiles).
## Enterprise
If you want help installing and maintaining Overleaf in your lab or workplace, we offer an officially supported version called [Overleaf Server Pro](https://www.overleaf.com/for/enterprises). It also includes more features for security (SSO with LDAP or SAML), administration and collaboration (e.g. tracked changes). [Find out more!](https://www.overleaf.com/for/enterprises)
## Keeping up to date
Sign up to the [mailing list](https://mailchi.mp/overleaf.com/community-edition-and-server-pro) to get updates on Overleaf releases and development.
If you want help installing and maintaining Overleaf in your lab or workplace, Overleaf offers an officially supported version called [Overleaf Server Pro](https://www.overleaf.com/for/enterprises).
## Installation
We have detailed installation instructions in the [Overleaf Toolkit](https://github.com/overleaf/toolkit/).
## Upgrading
If you are upgrading from a previous version of Overleaf, please see the [Release Notes section on the Wiki](https://github.com/overleaf/overleaf/wiki#release-notes) for all of the versions between your current version and the version you are upgrading to.
Detailed installation instructions can be found in the [Overleaf Toolkit](https://github.com/overleaf/toolkit/).
Configuration details and release history for the Extended Community Edition can be found on the [Extended CE Wiki Page](https://github.com/yu-i-i/overleaf-cep/wiki).
## Overleaf Docker Image
This repo contains two dockerfiles, [`Dockerfile-base`](server-ce/Dockerfile-base), which builds the
`sharelatex/sharelatex-base` image, and [`Dockerfile`](server-ce/Dockerfile) which builds the
`sharelatex/sharelatex` (or "community") image.
`sharelatex/sharelatex-base:ext-ce` image, and [`Dockerfile`](server-ce/Dockerfile) which builds the
`sharelatex/sharelatex:ext-ce` 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
This is split 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
@@ -54,20 +65,16 @@ and services.
Use `make build-base` and `make build-community` from `server-ce/` to build these images.
We use the [Phusion base-image](https://github.com/phusion/baseimage-docker)
(which is extended by our `base` image) to provide us with a VM-like container
The [Phusion base-image](https://github.com/phusion/baseimage-docker)
(which is extended by the `base` image) provides 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](CONTRIBUTING.md) file for information on contributing to the development of Overleaf.
manager to manage services, and init scripts from the `server-ce/runit`
folder are added.
## Authors
[The Overleaf Team](https://www.overleaf.com/about)
[The Overleaf Team](https://www.overleaf.com/about)
[yu-i-i](https://github.com/yu-i-i/overleaf-cep) — Extensions for CE unless otherwise noted
## License
+2
View File
@@ -77,8 +77,10 @@ each service:
| `filestore` | 9235 |
| `notifications` | 9236 |
| `real-time` | 9237 |
| `references` | 9238 |
| `history-v1` | 9239 |
| `project-history` | 9240 |
| `linked-url-proxy` | 9241 |
To attach to a service using Chrome's _remote debugging_, go to
<chrome://inspect/> and make sure _Discover network targets_ is checked. Next
+3
View File
@@ -6,6 +6,8 @@ DOCUMENT_UPDATER_HOST=document-updater
FILESTORE_HOST=filestore
GRACEFUL_SHUTDOWN_DELAY_SECONDS=0
HISTORY_V1_HOST=history-v1
HISTORY_REDIS_HOST=redis
LINKED_URL_PROXY_HOST=linked-url-proxy
LISTEN_ADDRESS=0.0.0.0
MONGO_HOST=mongo
MONGO_URL=mongodb://mongo/sharelatex?directConnection=true
@@ -13,6 +15,7 @@ NOTIFICATIONS_HOST=notifications
PROJECT_HISTORY_HOST=project-history
REALTIME_HOST=real-time
REDIS_HOST=redis
REFERENCES_HOST=references
SESSION_SECRET=foo
WEBPACK_HOST=webpack
WEB_API_PASSWORD=overleaf
+22
View File
@@ -79,6 +79,17 @@ services:
- ../services/history-v1/knexfile.js:/overleaf/services/history-v1/knexfile.js
- ../services/history-v1/migrations:/overleaf/services/history-v1/migrations
linked-url-proxy:
command: ["node", "--watch", "app.mjs"]
environment:
- NODE_OPTIONS=--inspect=0.0.0.0:9229
ports:
- "127.0.0.1:9241:9229"
volumes:
- ../services/linked-url-proxy/app:/overleaf/services/linked-url-proxy/app
- ../services/linked-url-proxy/config:/overleaf/services/linked-url-proxy/config
- ../services/linked-url-proxy/app.js:/overleaf/services/linked-url-proxy/app.js
notifications:
command: ["node", "--watch", "app.js"]
environment:
@@ -112,6 +123,17 @@ services:
- ../services/real-time/app.js:/overleaf/services/real-time/app.js
- ../services/real-time/config:/overleaf/services/real-time/config
references:
command: ["node", "--watch", "app.js"]
environment:
- NODE_OPTIONS=--inspect=0.0.0.0:9229
ports:
- "127.0.0.1:9238:9229"
volumes:
- ../services/references/app:/overleaf/services/references/app
- ../services/references/config:/overleaf/services/references/config
- ../services/references/app.js:/overleaf/services/references/app.js
web:
command: ["node", "--watch", "app.js", "--watch-locales"]
environment:
+19 -3
View File
@@ -1,6 +1,5 @@
volumes:
clsi-cache:
clsi-output:
filestore-public-files:
filestore-template-files:
filestore-uploads:
@@ -29,12 +28,13 @@ services:
- DOCKER_RUNNER=true
- TEXLIVE_IMAGE=texlive-full # docker build texlive -t texlive-full
- COMPILES_HOST_DIR=${PWD}/compiles
- OUTPUT_HOST_DIR=${PWD}/output
user: root
volumes:
- ${PWD}/compiles:/overleaf/services/clsi/compiles
- ${PWD}/output:/overleaf/services/clsi/output
- ${DOCKER_SOCKET_PATH:-/var/run/docker.sock}:/var/run/docker.sock
- clsi-cache:/overleaf/services/clsi/cache
- clsi-output:/overleaf/services/clsi/output
contacts:
build:
@@ -87,6 +87,13 @@ services:
volumes:
- history-v1-buckets:/buckets
linked-url-proxy:
build:
context: ..
dockerfile: services/linked-url-proxy/Dockerfile
env_file:
- dev.env
mongo:
image: mongo:6.0
command: --replSet overleaf
@@ -123,7 +130,7 @@ services:
dockerfile: services/real-time/Dockerfile
env_file:
- dev.env
redis:
image: redis:5
ports:
@@ -131,6 +138,13 @@ services:
volumes:
- redis-data:/data
references:
build:
context: ..
dockerfile: services/references/Dockerfile
env_file:
- dev.env
web:
build:
context: ..
@@ -158,9 +172,11 @@ services:
- document-updater
- filestore
- history-v1
- linked-url-proxy
- notifications
- project-history
- real-time
- references
webpack:
build:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

+11 -3
View File
@@ -73,11 +73,19 @@ services:
## Server Pro ##
################
## Sandboxed Compiles: https://github.com/overleaf/overleaf/wiki/Server-Pro:-Sandboxed-Compiles
## The Community Edition is intended for use in environments where all users are trusted and is not appropriate for
## scenarios where isolation of users is required. Sandboxed Compiles are not available in the Community Edition,
## so the following environment variables must be commented out to avoid compile issues.
##
## Sandboxed Compiles: https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/server-pro-only-configuration/sandboxed-compiles
SANDBOXED_COMPILES: 'true'
SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'
### Bind-mount source for /var/lib/overleaf/data/compiles inside the container.
SANDBOXED_COMPILES_HOST_DIR: '/home/user/sharelatex_data/data/compiles'
SANDBOXED_COMPILES_HOST_DIR_COMPILES: '/home/user/sharelatex_data/data/compiles'
### Bind-mount source for /var/lib/overleaf/data/output inside the container.
SANDBOXED_COMPILES_HOST_DIR_OUTPUT: '/home/user/sharelatex_data/data/output'
### Backwards compatibility (before Server Pro 5.5)
DOCKER_RUNNER: 'true'
SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'
## Works with test LDAP server shown at bottom of docker compose
# OVERLEAF_LDAP_URL: 'ldap://ldap:389'
@@ -1 +0,0 @@
node_modules/
@@ -1,46 +0,0 @@
compileFolder
Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store?
ehthumbs.db
Icon?
Thumbs.db
/node_modules/*
data/*/*
**.swp
/log.json
hash_folder
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
@@ -5,6 +5,6 @@ access-token-encryptor
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ fetch-utils
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
+19 -13
View File
@@ -23,11 +23,11 @@ async function fetchJson(url, opts = {}) {
}
async function fetchJsonWithResponse(url, opts = {}) {
const { fetchOpts } = parseOpts(opts)
const { fetchOpts, detachSignal } = parseOpts(opts)
fetchOpts.headers = fetchOpts.headers ?? {}
fetchOpts.headers.Accept = fetchOpts.headers.Accept ?? 'application/json'
const response = await performRequest(url, fetchOpts)
const response = await performRequest(url, fetchOpts, detachSignal)
if (!response.ok) {
const body = await maybeGetResponseBody(response)
throw new RequestFailedError(url, opts, response, body)
@@ -53,8 +53,8 @@ async function fetchStream(url, opts = {}) {
}
async function fetchStreamWithResponse(url, opts = {}) {
const { fetchOpts, abortController } = parseOpts(opts)
const response = await performRequest(url, fetchOpts)
const { fetchOpts, abortController, detachSignal } = parseOpts(opts)
const response = await performRequest(url, fetchOpts, detachSignal)
if (!response.ok) {
const body = await maybeGetResponseBody(response)
@@ -76,8 +76,8 @@ async function fetchStreamWithResponse(url, opts = {}) {
* @throws {RequestFailedError} if the response has a failure status code
*/
async function fetchNothing(url, opts = {}) {
const { fetchOpts } = parseOpts(opts)
const response = await performRequest(url, fetchOpts)
const { fetchOpts, detachSignal } = parseOpts(opts)
const response = await performRequest(url, fetchOpts, detachSignal)
if (!response.ok) {
const body = await maybeGetResponseBody(response)
throw new RequestFailedError(url, opts, response, body)
@@ -108,9 +108,9 @@ async function fetchRedirect(url, opts = {}) {
* @throws {RequestFailedError} if the response has a non redirect status code or missing Location header
*/
async function fetchRedirectWithResponse(url, opts = {}) {
const { fetchOpts } = parseOpts(opts)
const { fetchOpts, detachSignal } = parseOpts(opts)
fetchOpts.redirect = 'manual'
const response = await performRequest(url, fetchOpts)
const response = await performRequest(url, fetchOpts, detachSignal)
if (response.status < 300 || response.status >= 400) {
const body = await maybeGetResponseBody(response)
throw new RequestFailedError(url, opts, response, body)
@@ -142,8 +142,8 @@ async function fetchString(url, opts = {}) {
}
async function fetchStringWithResponse(url, opts = {}) {
const { fetchOpts } = parseOpts(opts)
const response = await performRequest(url, fetchOpts)
const { fetchOpts, detachSignal } = parseOpts(opts)
const response = await performRequest(url, fetchOpts, detachSignal)
if (!response.ok) {
const body = await maybeGetResponseBody(response)
throw new RequestFailedError(url, opts, response, body)
@@ -178,13 +178,14 @@ function parseOpts(opts) {
const abortController = new AbortController()
fetchOpts.signal = abortController.signal
let detachSignal = () => {}
if (opts.signal) {
abortOnSignal(abortController, opts.signal)
detachSignal = abortOnSignal(abortController, opts.signal)
}
if (opts.body instanceof Readable) {
abortOnDestroyedRequest(abortController, fetchOpts.body)
}
return { fetchOpts, abortController }
return { fetchOpts, abortController, detachSignal }
}
function setupJsonBody(fetchOpts, json) {
@@ -208,6 +209,9 @@ function abortOnSignal(abortController, signal) {
abortController.abort(signal.reason)
}
signal.addEventListener('abort', listener)
return () => {
signal.removeEventListener('abort', listener)
}
}
function abortOnDestroyedRequest(abortController, stream) {
@@ -226,11 +230,12 @@ function abortOnDestroyedResponse(abortController, response) {
})
}
async function performRequest(url, fetchOpts) {
async function performRequest(url, fetchOpts, detachSignal) {
let response
try {
response = await fetch(url, fetchOpts)
} catch (err) {
detachSignal()
if (fetchOpts.body instanceof Readable) {
fetchOpts.body.destroy()
}
@@ -239,6 +244,7 @@ async function performRequest(url, fetchOpts) {
method: fetchOpts.method ?? 'GET',
})
}
response.body.on('close', detachSignal)
if (fetchOpts.body instanceof Readable) {
response.body.on('close', () => {
if (!fetchOpts.body.readableEnded) {
@@ -1,6 +1,9 @@
const { expect } = require('chai')
const fs = require('node:fs')
const events = require('node:events')
const { FetchError, AbortError } = require('node-fetch')
const { Readable } = require('node:stream')
const { pipeline } = require('node:stream/promises')
const { once } = require('node:events')
const { TestServer } = require('./helpers/TestServer')
const selfsigned = require('selfsigned')
@@ -203,6 +206,31 @@ describe('fetch-utils', function () {
).to.be.rejectedWith(AbortError)
expect(stream.destroyed).to.be.true
})
it('detaches from signal on success', async function () {
const signal = AbortSignal.timeout(10_000)
for (let i = 0; i < 20; i++) {
const s = await fetchStream(this.url('/hello'), { signal })
expect(events.getEventListeners(signal, 'abort')).to.have.length(1)
await pipeline(s, fs.createWriteStream('/dev/null'))
expect(events.getEventListeners(signal, 'abort')).to.have.length(0)
}
})
it('detaches from signal on error', async function () {
const signal = AbortSignal.timeout(10_000)
for (let i = 0; i < 20; i++) {
try {
await fetchStream(this.url('/500'), { signal })
} catch (err) {
if (err instanceof RequestFailedError && err.response.status === 500)
continue
throw err
} finally {
expect(events.getEventListeners(signal, 'abort')).to.have.length(0)
}
}
})
})
describe('fetchNothing', function () {
@@ -391,9 +419,16 @@ async function* infiniteIterator() {
async function abortOnceReceived(func, server) {
const controller = new AbortController()
const promise = func(controller.signal)
expect(events.getEventListeners(controller.signal, 'abort')).to.have.length(1)
await once(server.events, 'request-received')
controller.abort()
return await promise
try {
return await promise
} finally {
expect(events.getEventListeners(controller.signal, 'abort')).to.have.length(
0
)
}
}
async function expectRequestAborted(req) {
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
node_modules
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ logger
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
node_modules
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ metrics
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
+4
View File
@@ -5,6 +5,8 @@
* before any other module to support code instrumentation.
*/
const metricsModuleImportStartTime = performance.now()
const APP_NAME = process.env.METRICS_APP_NAME || 'unknown'
const BUILD_VERSION = process.env.BUILD_VERSION
const ENABLE_PROFILE_AGENT = process.env.ENABLE_PROFILE_AGENT === 'true'
@@ -103,3 +105,5 @@ function recordProcessStart() {
const metrics = require('.')
metrics.inc('process_startup')
}
module.exports = { metricsModuleImportStartTime }
+1 -1
View File
@@ -9,7 +9,7 @@
"main": "index.js",
"dependencies": {
"@google-cloud/opentelemetry-cloud-trace-exporter": "^2.1.0",
"@google-cloud/profiler": "^6.0.0",
"@google-cloud/profiler": "^6.0.3",
"@opentelemetry/api": "^1.4.1",
"@opentelemetry/auto-instrumentations-node": "^0.39.1",
"@opentelemetry/exporter-trace-otlp-http": "^0.41.2",
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+63 -49
View File
@@ -16,6 +16,7 @@ let VERBOSE_LOGGING
let BATCH_RANGE_START
let BATCH_RANGE_END
let BATCH_MAX_TIME_SPAN_IN_MS
let BATCHED_UPDATE_RUNNING = false
/**
* @typedef {import("mongodb").Collection} Collection
@@ -34,6 +35,7 @@ let BATCH_MAX_TIME_SPAN_IN_MS
* @property {string} [BATCH_RANGE_START]
* @property {string} [BATCH_SIZE]
* @property {string} [VERBOSE_LOGGING]
* @property {(progress: string) => Promise<void>} [trackProgress]
*/
/**
@@ -209,59 +211,71 @@ async function batchedUpdate(
update,
projection,
findOptions,
batchedUpdateOptions
batchedUpdateOptions = {}
) {
ID_EDGE_PAST = await getIdEdgePast(collection)
if (!ID_EDGE_PAST) {
console.warn(
`The collection ${collection.collectionName} appears to be empty.`
)
return 0
// only a single batchedUpdate can run at a time due to global variables
if (BATCHED_UPDATE_RUNNING) {
throw new Error('batchedUpdate is already running')
}
refreshGlobalOptionsForBatchedUpdate(batchedUpdateOptions)
findOptions = findOptions || {}
findOptions.readPreference = READ_PREFERENCE_SECONDARY
projection = projection || { _id: 1 }
let nextBatch
let updated = 0
let start = BATCH_RANGE_START
while (start !== BATCH_RANGE_END) {
let end = getNextEnd(start)
nextBatch = await getNextBatch(
collection,
query,
start,
end,
projection,
findOptions
)
if (nextBatch.length > 0) {
end = nextBatch[nextBatch.length - 1]._id
updated += nextBatch.length
if (VERBOSE_LOGGING) {
console.log(
`Running update on batch with ids ${JSON.stringify(
nextBatch.map(entry => entry._id)
)}`
)
} else {
console.error(`Running update on batch ending ${renderObjectId(end)}`)
}
if (typeof update === 'function') {
await update(nextBatch)
} else {
await performUpdate(collection, nextBatch, update)
}
try {
BATCHED_UPDATE_RUNNING = true
ID_EDGE_PAST = await getIdEdgePast(collection)
if (!ID_EDGE_PAST) {
console.warn(
`The collection ${collection.collectionName} appears to be empty.`
)
return 0
}
console.error(`Completed batch ending ${renderObjectId(end)}`)
start = end
refreshGlobalOptionsForBatchedUpdate(batchedUpdateOptions)
const { trackProgress = async progress => console.warn(progress) } =
batchedUpdateOptions
findOptions = findOptions || {}
findOptions.readPreference = READ_PREFERENCE_SECONDARY
projection = projection || { _id: 1 }
let nextBatch
let updated = 0
let start = BATCH_RANGE_START
while (start !== BATCH_RANGE_END) {
let end = getNextEnd(start)
nextBatch = await getNextBatch(
collection,
query,
start,
end,
projection,
findOptions
)
if (nextBatch.length > 0) {
end = nextBatch[nextBatch.length - 1]._id
updated += nextBatch.length
if (VERBOSE_LOGGING) {
console.log(
`Running update on batch with ids ${JSON.stringify(
nextBatch.map(entry => entry._id)
)}`
)
}
await trackProgress(
`Running update on batch ending ${renderObjectId(end)}`
)
if (typeof update === 'function') {
await update(nextBatch)
} else {
await performUpdate(collection, nextBatch, update)
}
}
await trackProgress(`Completed batch ending ${renderObjectId(end)}`)
start = end
}
return updated
} finally {
BATCHED_UPDATE_RUNNING = false
}
return updated
}
/**
+2 -2
View File
@@ -5,6 +5,6 @@ mongo-utils
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-5
View File
@@ -1,5 +0,0 @@
.nyc_output
coverage
node_modules/
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ o-error
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
+27 -10
View File
@@ -1,20 +1,34 @@
// @ts-check
/**
* Light-weight helpers for handling JavaScript Errors in node.js and the
* browser.
*/
class OError extends Error {
/**
* The error that is the underlying cause of this error
*
* @type {unknown}
*/
cause
/**
* List of errors encountered as the callback chain is unwound
*
* @type {TaggedError[] | undefined}
*/
_oErrorTags
/**
* @param {string} message as for built-in Error
* @param {Object} [info] extra data to attach to the error
* @param {Error} [cause] the internal error that caused this error
* @param {unknown} [cause] the internal error that caused this error
*/
constructor(message, info, cause) {
super(message)
this.name = this.constructor.name
if (info) this.info = info
if (cause) this.cause = cause
/** @private @type {Array<TaggedError> | undefined} */
this._oErrorTags // eslint-disable-line
}
/**
@@ -31,7 +45,7 @@ class OError extends Error {
/**
* Wrap the given error, which caused this error.
*
* @param {Error} cause the internal error that caused this error
* @param {unknown} cause the internal error that caused this error
* @return {this}
*/
withCause(cause) {
@@ -65,13 +79,16 @@ class OError extends Error {
* }
* }
*
* @param {Error} error the error to tag
* @template {unknown} E
* @param {E} error the error to tag
* @param {string} [message] message with which to tag `error`
* @param {Object} [info] extra data with wich to tag `error`
* @return {Error} the modified `error` argument
* @return {E} the modified `error` argument
*/
static tag(error, message, info) {
const oError = /** @type{OError} */ (error)
const oError = /** @type {{ _oErrorTags: TaggedError[] | undefined }} */ (
error
)
if (!oError._oErrorTags) oError._oErrorTags = []
@@ -102,7 +119,7 @@ class OError extends Error {
*
* If an info property is repeated, the last one wins.
*
* @param {Error | null | undefined} error any error (may or may not be an `OError`)
* @param {unknown} error any error (may or may not be an `OError`)
* @return {Object}
*/
static getFullInfo(error) {
@@ -129,7 +146,7 @@ class OError extends Error {
* Return the `stack` property from `error`, including the `stack`s for any
* tagged errors added with `OError.tag` and for any `cause`s.
*
* @param {Error | null | undefined} error any error (may or may not be an `OError`)
* @param {unknown} error any error (may or may not be an `OError`)
* @return {string}
*/
static getFullStack(error) {
@@ -143,7 +160,7 @@ class OError extends Error {
stack += `\n${oError._oErrorTags.map(tag => tag.stack).join('\n')}`
}
const causeStack = oError.cause && OError.getFullStack(oError.cause)
const causeStack = OError.getFullStack(oError.cause)
if (causeStack) {
stack += '\ncaused by:\n' + indent(causeStack)
}
@@ -268,6 +268,11 @@ describe('utils', function () {
expect(OError.getFullInfo(null)).to.deep.equal({})
})
it('works when given a string', function () {
const err = 'not an error instance'
expect(OError.getFullInfo(err)).to.deep.equal({})
})
it('works on a normal error', function () {
const err = new Error('foo')
expect(OError.getFullInfo(err)).to.deep.equal({})
+8
View File
@@ -35,6 +35,14 @@ describe('OError', function () {
expect(err2.cause.message).to.equal('cause 2')
})
it('accepts non-Error causes', function () {
const err1 = new OError('foo', {}, 'not-an-error')
expect(err1.cause).to.equal('not-an-error')
const err2 = new OError('foo').withCause('not-an-error')
expect(err2.cause).to.equal('not-an-error')
})
it('handles a custom error type with a cause', function () {
function doSomethingBadInternally() {
throw new Error('internal error')
-1
View File
@@ -1 +0,0 @@
node_modules/
-4
View File
@@ -1,4 +0,0 @@
/node_modules
*.swp
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ object-persistor
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
@@ -305,8 +305,10 @@ module.exports = class FSPersistor extends AbstractPersistor {
async _listDirectory(path) {
if (this.useSubdirectories) {
// eslint-disable-next-line @typescript-eslint/return-await
return await glob(Path.join(path, '**'))
} else {
// eslint-disable-next-line @typescript-eslint/return-await
return await glob(`${path}_*`)
}
}
@@ -1 +0,0 @@
node_modules/
@@ -1,5 +0,0 @@
/coverage
/node_modules
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
@@ -5,6 +5,6 @@ overleaf-editor-core
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
+6
View File
@@ -18,6 +18,7 @@ const MoveFileOperation = require('./lib/operation/move_file_operation')
const SetCommentStateOperation = require('./lib/operation/set_comment_state_operation')
const EditFileOperation = require('./lib/operation/edit_file_operation')
const EditNoOperation = require('./lib/operation/edit_no_operation')
const EditOperationTransformer = require('./lib/operation/edit_operation_transformer')
const SetFileMetadataOperation = require('./lib/operation/set_file_metadata_operation')
const NoOperation = require('./lib/operation/no_operation')
const Operation = require('./lib/operation')
@@ -43,6 +44,8 @@ const TrackingProps = require('./lib/file_data/tracking_props')
const Range = require('./lib/range')
const CommentList = require('./lib/file_data/comment_list')
const LazyStringFileData = require('./lib/file_data/lazy_string_file_data')
const StringFileData = require('./lib/file_data/string_file_data')
const EditOperationBuilder = require('./lib/operation/edit_operation_builder')
exports.AddCommentOperation = AddCommentOperation
exports.Author = Author
@@ -58,6 +61,7 @@ exports.DeleteCommentOperation = DeleteCommentOperation
exports.File = File
exports.FileMap = FileMap
exports.LazyStringFileData = LazyStringFileData
exports.StringFileData = StringFileData
exports.History = History
exports.Label = Label
exports.AddFileOperation = AddFileOperation
@@ -65,6 +69,8 @@ exports.MoveFileOperation = MoveFileOperation
exports.SetCommentStateOperation = SetCommentStateOperation
exports.EditFileOperation = EditFileOperation
exports.EditNoOperation = EditNoOperation
exports.EditOperationBuilder = EditOperationBuilder
exports.EditOperationTransformer = EditOperationTransformer
exports.SetFileMetadataOperation = SetFileMetadataOperation
exports.NoOperation = NoOperation
exports.Operation = Operation
+2 -2
View File
@@ -13,7 +13,7 @@ const V2DocVersions = require('./v2_doc_versions')
/**
* @import Author from "./author"
* @import { BlobStore } from "./types"
* @import { BlobStore, RawChange } from "./types"
*/
/**
@@ -54,7 +54,7 @@ class Change {
/**
* For serialization.
*
* @return {Object}
* @return {RawChange}
*/
toRaw() {
function toRaw(object) {
@@ -88,6 +88,14 @@ class StringFileData extends FileData {
return content
}
/**
* Return docstore view of a doc: each line separated
* @return {string[]}
*/
getLines() {
return this.getContent({ filterTrackedDeletes: true }).split('\n')
}
/** @inheritdoc */
getByteLength() {
return Buffer.byteLength(this.content)
@@ -36,6 +36,20 @@ class EditOperationBuilder {
}
throw new Error('Unsupported operation in EditOperationBuilder.fromJSON')
}
/**
* @param {unknown} raw
* @return {raw is RawEditOperation}
*/
static isValid(raw) {
return (
isTextOperation(raw) ||
isRawAddCommentOperation(raw) ||
isRawDeleteCommentOperation(raw) ||
isRawSetCommentStateOperation(raw) ||
isRawEditNoOperation(raw)
)
}
}
/**
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ promise-utils
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-13
View File
@@ -1,13 +0,0 @@
**.swp
app.js
app/js/
test/unit/js/
public/build/
node_modules/
/public/js/chat.js
plato/
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ ranges-tracker
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-13
View File
@@ -1,13 +0,0 @@
**.swp
app.js
app/js/
test/unit/js/
public/build/
node_modules/
/public/js/chat.js
plato/
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+27 -28
View File
@@ -97,7 +97,8 @@ module.exports = class RedisLocker {
}
/**
* @param {Callback} callback
* @param {string} id
* @param {function(Error, boolean, string): void} callback
*/
tryLock(id, callback) {
if (callback == null) {
@@ -106,7 +107,7 @@ module.exports = class RedisLocker {
const lockValue = this.randomLock()
const key = this.getKey(id)
const startTime = Date.now()
return this.rclient.set(
this.rclient.set(
key,
lockValue,
'EX',
@@ -121,7 +122,7 @@ module.exports = class RedisLocker {
const timeTaken = Date.now() - startTime
if (timeTaken > MAX_REDIS_REQUEST_LENGTH) {
// took too long, so try to free the lock
return this.releaseLock(id, lockValue, function (err, result) {
this.releaseLock(id, lockValue, function (err, result) {
if (err != null) {
return callback(err)
} // error freeing lock
@@ -139,7 +140,8 @@ module.exports = class RedisLocker {
}
/**
* @param {Callback} callback
* @param {string} id
* @param {function(Error, string): void} callback
*/
getLock(id, callback) {
if (callback == null) {
@@ -153,7 +155,7 @@ module.exports = class RedisLocker {
return callback(e)
}
return this.tryLock(id, (error, gotLock, lockValue) => {
this.tryLock(id, (error, gotLock, lockValue) => {
if (error != null) {
return callback(error)
}
@@ -173,14 +175,15 @@ module.exports = class RedisLocker {
}
/**
* @param {Callback} callback
* @param {string} id
* @param {function(Error, boolean): void} callback
*/
checkLock(id, callback) {
if (callback == null) {
callback = function () {}
}
const key = this.getKey(id)
return this.rclient.exists(key, (err, exists) => {
this.rclient.exists(key, (err, exists) => {
if (err != null) {
return callback(err)
}
@@ -196,30 +199,26 @@ module.exports = class RedisLocker {
}
/**
* @param {Callback} callback
* @param {string} id
* @param {string} lockValue
* @param {function(Error, boolean): void} callback
*/
releaseLock(id, lockValue, callback) {
const key = this.getKey(id)
return this.rclient.eval(
UNLOCK_SCRIPT,
1,
key,
lockValue,
(err, result) => {
if (err != null) {
return callback(err)
} else if (result != null && result !== 1) {
// successful unlock should release exactly one key
logger.error(
{ id, key, lockValue, redis_err: err, redis_result: result },
'unlocking error'
)
metrics.inc(this.metricsPrefix + '-unlock-error')
return callback(new Error('tried to release timed out lock'))
} else {
return callback(null, result)
}
this.rclient.eval(UNLOCK_SCRIPT, 1, key, lockValue, (err, result) => {
if (err != null) {
return callback(err)
} else if (result != null && result !== 1) {
// successful unlock should release exactly one key
logger.error(
{ id, key, lockValue, redis_err: err, redis_result: result },
'unlocking error'
)
metrics.inc(this.metricsPrefix + '-unlock-error')
return callback(new Error('tried to release timed out lock'))
} else {
return callback(null, result)
}
)
})
}
}
+2 -2
View File
@@ -5,6 +5,6 @@ redis-wrapper
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-5
View File
@@ -1,5 +0,0 @@
/.npmrc
/node_modules
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ settings
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
-1
View File
@@ -1 +0,0 @@
node_modules/
-3
View File
@@ -1,3 +0,0 @@
# managed by monorepo$ bin/update_build_scripts
.npmrc
+1 -1
View File
@@ -1 +1 @@
20.18.2
22.15.1
+2 -2
View File
@@ -5,6 +5,6 @@ stream-utils
--env-pass-through=
--esmock-loader=False
--is-library=True
--node-version=20.18.2
--node-version=22.15.1
--public-repo=False
--script-version=4.5.0
--script-version=4.7.0
+3600 -3449
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -37,7 +37,7 @@
},
"swagger-tools": {
"body-parser": "1.20.3",
"multer": "1.4.5-lts.1",
"multer": "2.0.0",
"path-to-regexp": "3.3.0",
"qs": "6.13.0"
}
@@ -55,6 +55,7 @@
"services/analytics",
"services/chat",
"services/clsi",
"services/clsi-cache",
"services/clsi-perf",
"services/contacts",
"services/docstore",
+23
View File
@@ -0,0 +1,23 @@
diff --git a/node_modules/@node-saml/node-saml/lib/saml.js b/node_modules/@node-saml/node-saml/lib/saml.js
index fba15b9..a5778cb 100644
--- a/node_modules/@node-saml/node-saml/lib/saml.js
+++ b/node_modules/@node-saml/node-saml/lib/saml.js
@@ -336,7 +336,8 @@ class SAML {
const requestOrResponse = request || response;
(0, utility_1.assertRequired)(requestOrResponse, "either request or response is required");
let buffer;
- if (this.options.skipRequestCompression) {
+ // logout requestOrResponse must be compressed anyway
+ if (this.options.skipRequestCompression && operation !== "logout") {
buffer = Buffer.from(requestOrResponse, "utf8");
}
else {
@@ -495,7 +496,7 @@ class SAML {
try {
xml = Buffer.from(container.SAMLResponse, "base64").toString("utf8");
doc = await (0, xml_1.parseDomFromString)(xml);
- const inResponseToNodes = xml_1.xpath.selectAttributes(doc, "/*[local-name()='Response']/@InResponseTo");
+ const inResponseToNodes = xml_1.xpath.selectAttributes(doc, "/*[local-name()='Response' or local-name()='LogoutResponse']/@InResponseTo");
if (inResponseToNodes) {
inResponseTo = inResponseToNodes.length ? inResponseToNodes[0].nodeValue : null;
await this.validateInResponseTo(inResponseTo);
+64
View File
@@ -0,0 +1,64 @@
diff --git a/node_modules/ldapauth-fork/lib/ldapauth.js b/node_modules/ldapauth-fork/lib/ldapauth.js
index 85ecf36a8b..a7d07e0f78 100644
--- a/node_modules/ldapauth-fork/lib/ldapauth.js
+++ b/node_modules/ldapauth-fork/lib/ldapauth.js
@@ -69,6 +69,7 @@ function LdapAuth(opts) {
this.opts.bindProperty || (this.opts.bindProperty = 'dn');
this.opts.groupSearchScope || (this.opts.groupSearchScope = 'sub');
this.opts.groupDnProperty || (this.opts.groupDnProperty = 'dn');
+ this.opts.tlsStarted = false;
EventEmitter.call(this);
@@ -108,21 +109,7 @@ function LdapAuth(opts) {
this._userClient.on('error', this._handleError.bind(this));
var self = this;
- if (this.opts.starttls) {
- // When starttls is enabled, this callback supplants the 'connect' callback
- this._adminClient.starttls(this.opts.tlsOptions, this._adminClient.controls, function(err) {
- if (err) {
- self._handleError(err);
- } else {
- self._onConnectAdmin();
- }
- });
- this._userClient.starttls(this.opts.tlsOptions, this._userClient.controls, function(err) {
- if (err) {
- self._handleError(err);
- }
- });
- } else if (opts.reconnect) {
+ if (opts.reconnect && !this.opts.starttls) {
this.once('_installReconnectListener', function() {
self.log && self.log.trace('install reconnect listener');
self._adminClient.on('connect', function() {
@@ -384,6 +371,28 @@ LdapAuth.prototype._findGroups = function(user, callback) {
*/
LdapAuth.prototype.authenticate = function(username, password, callback) {
var self = this;
+ if (this.opts.starttls && !this.opts.tlsStarted) {
+ // When starttls is enabled, this callback supplants the 'connect' callback
+ this._adminClient.starttls(this.opts.tlsOptions, this._adminClient.controls, function (err) {
+ if (err) {
+ self._handleError(err);
+ } else {
+ self._onConnectAdmin(function(){self._handleAuthenticate(username, password, callback);});
+ }
+ });
+ this._userClient.starttls(this.opts.tlsOptions, this._userClient.controls, function (err) {
+ if (err) {
+ self._handleError(err);
+ }
+ });
+ } else {
+ self._handleAuthenticate(username, password, callback);
+ }
+};
+
+LdapAuth.prototype._handleAuthenticate = function (username, password, callback) {
+ this.opts.tlsStarted = true;
+ var self = this;
if (typeof password === 'undefined' || password === null || password === '') {
return callback(new Error('no password given'));
+22
View File
@@ -0,0 +1,22 @@
diff --git a/node_modules/pdfjs-dist/build/pdf.worker.mjs b/node_modules/pdfjs-dist/build/pdf.worker.mjs
index 6c5c6f1..bb6b7d1 100644
--- a/node_modules/pdfjs-dist/build/pdf.worker.mjs
+++ b/node_modules/pdfjs-dist/build/pdf.worker.mjs
@@ -1830,7 +1830,7 @@ async function __wbg_init(module_or_path) {
}
}
if (typeof module_or_path === 'undefined') {
- module_or_path = new URL('qcms_bg.wasm', import.meta.url);
+ module_or_path = new URL(/* webpackIgnore: true */ 'qcms_bg.wasm', import.meta.url);
}
const imports = __wbg_get_imports();
if (typeof module_or_path === 'string' || typeof Request === 'function' && module_or_path instanceof Request || typeof URL === 'function' && module_or_path instanceof URL) {
@@ -5358,7 +5358,7 @@ var OpenJPEG = (() => {
if (Module["locateFile"]) {
return locateFile("openjpeg.wasm");
}
- return new URL("openjpeg.wasm", import.meta.url).href;
+ return new URL(/* webpackIgnore: true */ "openjpeg.wasm", import.meta.url).href;
}
function getBinarySync(file) {
if (file == wasmBinaryFile && wasmBinary) {
+3 -3
View File
@@ -2,7 +2,7 @@
# Overleaf Base Image (sharelatex/sharelatex-base)
# --------------------------------------------------
FROM phusion/baseimage:noble-1.0.0
FROM phusion/baseimage:noble-1.0.2
# Makes sure LuaTex cache is writable
# -----------------------------------
@@ -10,7 +10,7 @@ ENV TEXMFVAR=/var/lib/overleaf/tmp/texmf-var
# Update to ensure dependencies are updated
# ------------------------------------------
ENV REBUILT_AFTER="2025-03-27"
ENV REBUILT_AFTER="2025-05-19"
# Install dependencies
# --------------------
@@ -30,7 +30,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
# install Node.js https://github.com/nodesource/distributions#nodejs
&& mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
\
+2
View File
@@ -24,6 +24,7 @@ build-base:
--cache-from $(OVERLEAF_BASE_BRANCH) \
--tag $(OVERLEAF_BASE_TAG) \
--tag $(OVERLEAF_BASE_BRANCH) \
--network=host \
$(MONOREPO_ROOT)
@@ -39,6 +40,7 @@ build-community:
--file Dockerfile \
--tag $(OVERLEAF_TAG) \
--tag $(OVERLEAF_BRANCH) \
--network=host \
$(MONOREPO_ROOT)
SHELLCHECK_OPTS = \
+1
View File
@@ -1,3 +1,4 @@
*/20 * * * * root /overleaf/cron/project-history-periodic-flush.sh >> /var/log/overleaf/cron-project-history-periodic-flush.log 2>&1
30 * * * * root /overleaf/cron/project-history-retry-soft.sh >> /var/log/overleaf/project-history-retry-soft.log 2>&1
45 * * * * root /overleaf/cron/project-history-retry-hard.sh >> /var/log/overleaf/project-history-retry-hard.log 2>&1
0 3 * * * root /overleaf/cron/project-history-flush-all.sh >> /var/log/overleaf/project-history-flush-all.log 2>&1
@@ -45,5 +45,17 @@
"clusterWorkers": "CLUSTER_WORKERS",
"maxFileUploadSize": "MAX_FILE_UPLOAD_SIZE",
"httpsOnly": "HTTPS_ONLY",
"httpRequestTimeout": "OVERLEAF_HISTORY_V1_HTTP_REQUEST_TIMEOUT"
"httpRequestTimeout": "OVERLEAF_HISTORY_V1_HTTP_REQUEST_TIMEOUT",
"redis": {
"history": {
"host": "OVERLEAF_REDIS_HOST",
"password": "OVERLEAF_REDIS_PASS",
"port": "OVERLEAF_REDIS_PORT"
},
"lock": {
"host": "OVERLEAF_REDIS_HOST",
"password": "OVERLEAF_REDIS_PASS",
"port": "OVERLEAF_REDIS_PORT"
}
}
}
+2
View File
@@ -6,8 +6,10 @@ export DOCUMENT_UPDATER_HOST=127.0.0.1
export DOCUPDATER_HOST=127.0.0.1
export FILESTORE_HOST=127.0.0.1
export HISTORY_V1_HOST=127.0.0.1
export LINKED_URL_PROXY_HOST=127.0.0.1
export NOTIFICATIONS_HOST=127.0.0.1
export PROJECT_HISTORY_HOST=127.0.0.1
export REALTIME_HOST=127.0.0.1
export REFERENCES_HOST=127.0.0.1
export WEB_HOST=127.0.0.1
export WEB_API_HOST=127.0.0.1
+2
View File
@@ -79,6 +79,7 @@ const settings = {
host: process.env.OVERLEAF_REDIS_HOST || 'dockerhost',
port: process.env.OVERLEAF_REDIS_PORT || '6379',
password: process.env.OVERLEAF_REDIS_PASS || undefined,
tls: process.env.OVERLEAF_REDIS_TLS === 'true' ? {} : undefined,
key_schema: {
// document-updater
blockingKey({ doc_id }) {
@@ -139,6 +140,7 @@ const settings = {
api: redisConfig,
pubsub: redisConfig,
project_history: redisConfig,
references: redisConfig,
project_history_migration: {
host: redisConfig.host,
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -eux
echo "---------------------------------"
echo "Flush all project-history changes"
echo "---------------------------------"
date
source /etc/container_environment.sh
source /etc/overleaf/env.sh
cd /overleaf/services/project-history && node scripts/flush_all.js
echo "Done flushing all project-history changes"
+14
View File
@@ -0,0 +1,14 @@
FROM sharelatex/sharelatex:5.4.0
RUN apt update && apt install -y linux-libc-dev \
&& unattended-upgrade --verbose --no-minimal-upgrade-steps \
&& rm -rf /var/lib/apt/lists/*
COPY package-lock.json.diff .
RUN patch package-lock.json < package-lock.json.diff
RUN npm install --omit=dev
# fix tls configuration in redis
COPY issue_24996.patch .
RUN patch -p0 /etc/overleaf/settings.js < issue_24996.patch \
&& rm issue_24996.patch
+10
View File
@@ -0,0 +1,10 @@
--- settings.js
+++ settings.js
@@ -79,6 +79,7 @@ const settings = {
host: process.env.OVERLEAF_REDIS_HOST || 'dockerhost',
port: process.env.OVERLEAF_REDIS_PORT || '6379',
password: process.env.OVERLEAF_REDIS_PASS || undefined,
+ tls: process.env.OVERLEAF_REDIS_TLS === 'true' ? {} : undefined,
key_schema: {
// document-updater
blockingKey({ doc_id }) {
File diff suppressed because it is too large Load Diff
@@ -20,6 +20,7 @@ if [ -f "${nginx_template_file}" ]; then
export NGINX_KEEPALIVE_TIMEOUT="${NGINX_KEEPALIVE_TIMEOUT:-65}"
export NGINX_WORKER_CONNECTIONS="${NGINX_WORKER_CONNECTIONS:-768}"
export NGINX_WORKER_PROCESSES="${NGINX_WORKER_PROCESSES:-4}"
export MAX_UPLOAD_SIZE="${MAX_UPLOAD_SIZE:-50}"
echo "Nginx: generating config file from template"
@@ -31,6 +32,7 @@ if [ -f "${nginx_template_file}" ]; then
${NGINX_KEEPALIVE_TIMEOUT}
${NGINX_WORKER_CONNECTIONS}
${NGINX_WORKER_PROCESSES}
${MAX_UPLOAD_SIZE}
' \
< "${nginx_template_file}" \
> "${nginx_config_file}"
+1 -1
View File
@@ -46,7 +46,7 @@ http {
gzip_disable "msie6";
gzip_proxied any; # allow upstream server to compress.
client_max_body_size 50m;
client_max_body_size ${MAX_UPLOAD_SIZE}m;
# gzip_vary on;
# gzip_proxied any;
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
NODE_PARAMS=""
if [ "$DEBUG_NODE" == "true" ]; then
echo "running debug - linked-url-proxy"
NODE_PARAMS="--inspect=0.0.0.0:30660"
fi
source /etc/overleaf/env.sh
export LISTEN_ADDRESS=127.0.0.1
exec /sbin/setuser www-data /usr/bin/node $NODE_PARAMS /overleaf/services/linked-url-proxy/app.mjs >> /var/log/overleaf/linked-url-proxy.log 2>&1
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
NODE_PARAMS=""
if [ "$DEBUG_NODE" == "true" ]; then
echo "running debug - references"
NODE_PARAMS="--inspect=0.0.0.0:30560"
fi
source /etc/overleaf/env.sh
export LISTEN_ADDRESS=127.0.0.1
exec /sbin/setuser www-data /usr/bin/node $NODE_PARAMS /overleaf/services/references/app.js >> /var/log/overleaf/references.log 2>&1
+6
View File
@@ -29,9 +29,15 @@ module.exports = [
{
name: 'project-history',
},
{
name: 'references',
},
{
name: 'history-v1',
},
{
name: 'linked-url-proxy',
},
]
if (require.main === module) {
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:20.18.2
FROM node:22.15.1
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
&& echo \
"deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
+1 -1
View File
@@ -9,7 +9,7 @@ describe('Accounts', function () {
it('can log in and out', function () {
login('user@example.com')
cy.visit('/project')
cy.findByText('Account').click()
cy.findByRole('menuitem', { name: 'Account' }).click()
cy.findByText('Log Out').click()
cy.url().should('include', '/login')
cy.visit('/project')
+4 -4
View File
@@ -293,8 +293,8 @@ describe('admin panel', function () {
cy.findByText(deletedProjectName).should('not.exist')
cy.log('navigate to thrashed projects and delete the project')
cy.get('.project-list-sidebar-react').within(() => {
cy.findByText('Trashed Projects').click()
cy.get('.project-list-sidebar-scroll').within(() => {
cy.findByText('Trashed projects').click()
})
findProjectRow(deletedProjectName).within(() =>
cy.findByRole('button', { name: 'Delete' }).click()
@@ -318,8 +318,8 @@ describe('admin panel', function () {
cy.log('login as the user and verify the project is restored')
login(user1)
cy.visit('/project')
cy.get('.project-list-sidebar-react').within(() => {
cy.findByText('Trashed Projects').click()
cy.get('.project-list-sidebar-scroll').within(() => {
cy.findByText('Trashed projects').click()
})
cy.findByText(`${deletedProjectName} (Restored)`)
})
@@ -51,7 +51,7 @@ describe('Project creation and compilation', function () {
login('user@example.com')
createProject(sourceProjectName, {
type: 'Example Project',
type: 'Example project',
open: false,
}).as('sourceProjectId')
createProject(targetProjectName)
@@ -79,7 +79,7 @@ describe('Project creation and compilation', function () {
const targetProjectName = `${sourceProjectName}-target`
login('user@example.com')
createProject(sourceProjectName, {
type: 'Example Project',
type: 'Example project',
open: false,
}).as('sourceProjectId')
createProject(targetProjectName).as('targetProjectId')
@@ -102,10 +102,6 @@ describe('Project creation and compilation', function () {
cy.findByText('Invite not yet accepted.')
})
cy.visit('/project')
cy.findByText('Account').click()
cy.findByText('Log Out').click()
login('collaborator@example.com')
openProjectViaInviteNotification(targetProjectName)
cy.get('@targetProjectId').then(targetProjectId => {
+3 -137
View File
@@ -1,11 +1,7 @@
import {
createNewFile,
createProject,
enableLinkSharing,
openFile,
openProjectById,
openProjectViaLinkSharingAsUser,
toggleTrackChanges,
} from './helpers/project'
import { isExcludedBySharding, startWith } from './helpers/config'
import { ensureUserExists, login } from './helpers/login'
@@ -26,7 +22,7 @@ describe('editor', () => {
beforeWithReRunOnTestRetry(function () {
projectName = `project-${uuid()}`
login('user@example.com')
createProject(projectName, { type: 'Example Project', open: false }).then(
createProject(projectName, { type: 'Example project', open: false }).then(
id => (projectId = id)
)
;({ recompile, waitForCompileRateLimitCoolOff } =
@@ -66,12 +62,12 @@ describe('editor', () => {
cy.log('add word to dictionary')
cy.get('.ol-cm-spelling-error').contains(word).rightclick()
cy.findByText('Add to Dictionary').click()
cy.findByText('Add to dictionary').click()
cy.get('.ol-cm-spelling-error').should('not.exist')
cy.log('remove word from dictionary')
cy.get('button').contains('Menu').click()
cy.get('button').contains('Edit').click()
cy.get('button#dictionary-settings').contains('Edit').click()
cy.get('[id="dictionary-modal"]').within(() => {
cy.findByText(word)
.parent()
@@ -92,136 +88,6 @@ describe('editor', () => {
})
})
describe('collaboration', () => {
beforeWithReRunOnTestRetry(function () {
enableLinkSharing().then(({ linkSharingReadAndWrite }) => {
const email = 'collaborator@example.com'
login(email)
openProjectViaLinkSharingAsUser(
linkSharingReadAndWrite,
projectName,
email
)
})
login('user@example.com')
waitForCompileRateLimitCoolOff(() => {
openProjectById(projectId)
})
})
it('track-changes', () => {
cy.log('disable track-changes before populating doc')
toggleTrackChanges(false)
const fileName = createNewFile()
const oldContent = 'oldContent'
cy.get('.cm-line').type(`${oldContent}\n\nstatic`)
cy.log('recompile to force flush')
recompile()
cy.log('enable track-changes for everyone')
toggleTrackChanges(true)
login('collaborator@example.com')
waitForCompileRateLimitCoolOff(() => {
openProjectById(projectId)
})
openFile(fileName, 'static')
cy.log('make changes in main file')
// cy.type() "clicks" in the center of the selected element before typing. This "click" discards the text as selected by the dblclick.
// Go down to the lower level event based typing, the frontend tests in web use similar events.
cy.get('.cm-editor').as('editor')
cy.get('@editor').findByText(oldContent).dblclick()
cy.get('@editor').trigger('keydown', { key: 'Delete' })
cy.get('@editor').trigger('keydown', { key: 'Enter' })
cy.get('@editor').trigger('keydown', { key: 'Enter' })
cy.log('recompile to force flush')
recompile()
login('user@example.com')
waitForCompileRateLimitCoolOff(() => {
openProjectById(projectId)
})
openFile(fileName, 'static')
cy.log('reject changes')
cy.contains('.toolbar-item', 'Review').click()
cy.get('.cm-content').should('not.contain.text', oldContent)
cy.findByText('Reject change').click({ force: true })
cy.contains('.toolbar-item', 'Review').click()
cy.log('recompile to force flush')
recompile()
cy.log('verify the changes are applied')
cy.get('.cm-content').should('contain.text', oldContent)
cy.log('disable track-changes for everyone again')
toggleTrackChanges(false)
})
it('track-changes rich text', () => {
cy.log('disable track-changes before populating doc')
toggleTrackChanges(false)
const fileName = createNewFile()
const oldContent = 'oldContent'
cy.get('.cm-line').type(`\\section{{}${oldContent}}\n\nstatic`)
cy.log('recompile to force flush')
recompile()
cy.log('enable track-changes for everyone')
toggleTrackChanges(true)
login('collaborator@example.com')
waitForCompileRateLimitCoolOff(() => {
openProjectById(projectId)
})
cy.log('enable visual editor and make changes in main file')
cy.findByText('Visual Editor').click()
openFile(fileName, 'static')
// cy.type() "clicks" in the center of the selected element before typing. This "click" discards the text as selected by the dblclick.
// Go down to the lower level event based typing, the frontend tests in web use similar events.
cy.get('.cm-editor').as('editor')
cy.get('@editor').findByText(oldContent).dblclick()
cy.get('@editor').trigger('keydown', { key: 'Delete' })
cy.get('@editor').trigger('keydown', { key: 'Enter' })
cy.get('@editor').trigger('keydown', { key: 'Enter' })
cy.log('recompile to force flush')
recompile()
login('user@example.com')
waitForCompileRateLimitCoolOff(() => {
openProjectById(projectId)
})
openFile(fileName, 'static')
cy.log('reject changes')
cy.contains('.toolbar-item', 'Review').click()
cy.get('.cm-content').should('not.contain.text', oldContent)
cy.findAllByText('Reject change').first().click({ force: true })
cy.contains('.toolbar-item', 'Review').click()
cy.log('recompile to force flush')
recompile()
cy.log('verify the changes are applied in the visual editor')
cy.findByText('Visual Editor').click()
cy.get('.cm-content').should('contain.text', oldContent)
cy.log('disable track-changes for everyone again')
toggleTrackChanges(false)
})
})
describe('editor', () => {
it('renders jpg', () => {
cy.findByTestId('file-tree').findByText('frog.jpg').click()
+6 -6
View File
@@ -46,7 +46,7 @@ describe('git-bridge', function () {
function maybeClearAllTokens() {
cy.visit('/user/settings')
cy.findByText('Git Integration')
cy.findByText('Git integration')
cy.get('button')
.contains(/Generate token|Add another token/)
.then(btn => {
@@ -63,7 +63,7 @@ describe('git-bridge', function () {
it('should render the git-bridge UI in the settings', () => {
maybeClearAllTokens()
cy.visit('/user/settings')
cy.findByText('Git Integration')
cy.findByText('Git integration')
cy.get('button').contains('Generate token').click()
cy.get('code')
.contains(/olp_[a-zA-Z0-9]{16}/)
@@ -93,7 +93,7 @@ describe('git-bridge', function () {
cy.get('code').contains(`git clone ${gitURL(id.toString())}`)
})
cy.findByRole('button', {
name: 'Generate token',
name: /generate token/i,
}).click()
cy.get('code').contains(/olp_[a-zA-Z0-9]{16}/)
})
@@ -107,7 +107,7 @@ describe('git-bridge', function () {
cy.get('code').contains(`git clone ${gitURL(id.toString())}`)
})
cy.findByText('Generate token').should('not.exist')
cy.findByText(/generate a new one in Account Settings/)
cy.findByText(/generate a new one in Account settings/i)
cy.findByText('Go to settings')
.should('have.attr', 'target', '_blank')
.and('have.attr', 'href', '/user/settings')
@@ -196,7 +196,7 @@ describe('git-bridge', function () {
cy.get('code').contains(`git clone ${gitURL(projectId.toString())}`)
})
cy.findByRole('button', {
name: 'Generate token',
name: /generate token/i,
}).click()
cy.get('code')
.contains(/olp_[a-zA-Z0-9]{16}/)
@@ -365,7 +365,7 @@ Hello world
it('should not render the git-bridge UI in the settings', () => {
login('user@example.com')
cy.visit('/user/settings')
cy.findByText('Git Integration').should('not.exist')
cy.findByText('Git integration').should('not.exist')
})
it('should not render the git-bridge UI in the editor', function () {
login('user@example.com')
+3 -37
View File
@@ -5,11 +5,11 @@ import { v4 as uuid } from 'uuid'
export function createProject(
name: string,
{
type = 'Blank Project',
type = 'Blank project',
newProjectButtonMatcher = /new project/i,
open = true,
}: {
type?: 'Blank Project' | 'Example Project'
type?: 'Blank project' | 'Example project'
newProjectButtonMatcher?: RegExp
open?: boolean
} = {}
@@ -37,7 +37,7 @@ export function createProject(
}
cy.findAllByRole('button').contains(newProjectButtonMatcher).click()
// FIXME: This should only look in the left menu
cy.findAllByText(type).first().click()
cy.findAllByText(new RegExp(type, 'i')).first().click()
cy.findByRole('dialog').within(() => {
cy.get('input').type(name)
cy.findByText('Create').click()
@@ -215,37 +215,3 @@ export function createNewFile() {
return fileName
}
export function toggleTrackChanges(state: boolean) {
cy.findByText('Review').click()
cy.get('.track-changes-menu-button').then(el => {
// when the menu is expanded renders the `expand_more` icon,
// and the `chevron_right` icon when it's collapsed
if (!el.text().includes('expand_more')) {
el.click()
}
})
cy.findByText('Everyone')
.parent()
.within(() => {
cy.get('.form-check-input').then(el => {
if (el.prop('checked') === state) return
const id = uuid()
const alias = `@${id}`
cy.intercept({
method: 'POST',
url: '**/track_changes',
times: 1,
}).as(id)
if (state) {
cy.get('.form-check-input').check()
} else {
cy.get('.form-check-input').uncheck()
}
cy.wait(alias)
})
})
cy.contains('.toolbar-item', 'Review').click()
}

Some files were not shown because too many files have changed in this diff Show More