130 Commits
Author SHA1 Message Date
Jakob AckermannandClaude Opus 5 6caa5fc3a3 [monorepo] read empty content from its hash, in a shared blob store base (#36831)
The hash of empty content is a property of the content rather than of anything
stored: every project's empty file has it, whether or not a blob was ever written
under it, and a file may reference it before anything has. Eight blob stores were
each paying a lookup -- a database query, an HTTP request, a read of a cache that
offline mode may be the only thing standing in for -- to be told what the hash
already says, and clsi had already reinvented the answer on its own.

overleaf-editor-core gains BlobStoreBase, which answers getString for that hash
and delegates the rest to the fetchString its subclasses provide. getObject comes
with it: four stores spelled out the same JSON.parse of getString, and a fifth
wrapped it in a log line.

Adopted by history-v1's BlobStore, BackupBlobStore, HashCheckBlobStore and
recover_zip's RecoveryBlobStore, by project-history's BlobStore, by clsi's
BlobStore, and by web's HistoryBlobStore, SimpleBlobStore and FrontendBlobStore.
history-v1 keeps its own answers in getStream, getBlob and getBlobs, which no
other store implements. Writing and copying a blob are untouched, so a project
that wrote empty content still has a blob for it and a read answers the same
either way.

Two paths could not handle a project holding a tracked change or a comment at
all. Loading such a file needs the ranges blob its rangesHash points at, and
hashing one again needs to write it back, so a store missing getObject or
putObject fails outright:

- recover_zip died on `blobStore.getObject is not a function`, making every such
  project unrecoverable. The test covering it asserts a tracked delete is absent
  from the zip, which the script already asked for and never reached.
- GET /projects/:project_id/latest/hashed_content returned 500 from the same
  cause, then would have hit a missing putObject in snapshot.store.
  HashCheckBlobStore becomes a class over the base and gains putObject.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
GitOrigin-RevId: c84f62465beff6cf77ffac26aa772984e1b554cb
2026-09-17 12:06:30 +00:00
Mathias Jakobsen d8f167dec2 Merge pull request #35293 from overleaf/mj-zod-history-ot
[real-time] Allow history-ot operations in real-time

GitOrigin-RevId: 4b1b9e4c1a214edf49c5eface46a4d309ba41b0d
2026-09-17 11:31:49 +00:00
Kristina 76e004b3e2 [web] save doc to sessionStorage while editing offline (#35519)
* save doc to session storage when offline
* scope offline doc backup key to user id
* clear offline doc backups on logout
* handle anonymous users
* include trackChanges

GitOrigin-RevId: 3fe6a1523cb10cf76a1fcf4ee46790f6673bd84f
2026-09-17 11:30:42 +00:00
Andrew Rumble 08975f4ba2 Merge pull request #33997 from overleaf/ar-require-cookie-consent-for-mixpanel-autocapture
[web] require cookie consent for mixpanel autocapture

GitOrigin-RevId: 6898b72079cc6c286ce15a276979381a23c32ebe
2026-05-28 08:06:55 +00:00
Chris Dryden df01c7e9e1 Merge pull request #33162 from overleaf/cd-upload-generated-files-to-filetree
Cd upload generated files to filetree

GitOrigin-RevId: 2d2774e57c42452fba3a2582fde7153ffcde59bf
2026-05-07 08:07:06 +00:00
Malik Glossop ba182f8275 Merge pull request #32710 from overleaf/mg-project-history-metrics
Add diagnostic annotations to LazyStringFileData toEager errors

GitOrigin-RevId: 47575586bb869d65e4eb443cc9f1215b6f245255
2026-04-29 08:05:28 +00:00
Alf Eaton ce4ca192ee Upgrade Storybook to v10 (#30442)
GitOrigin-RevId: 9f51624bc2b34b6746d1854969173b44c9c9cf9a
2026-04-22 08:06:26 +00:00
Domagoj Kriskovic 4567ffea41 [web] error handling for BibTeX entry addition using \cite
GitOrigin-RevId: efdf39a959fda7d2f970860051e1fabd72474ab1
2026-04-21 08:05:54 +00:00
Malik Glossop 99c8bd2e1c Merge pull request #32877 from overleaf/mg-fix-bom-applyerror
Preserve UTF-8 BOM when fetching blobs in ProjectSnapshot

GitOrigin-RevId: 758156f8c9ac1d02b5ea06447f759012118e1905
2026-04-20 08:05:06 +00:00
Jakob Ackermann 5a6c066847 [web] allow admins to clone projects with ranges and entire history (#32739)
* [web] add consistent aria-label to editing/reviewing toggle

* [docstore] add endpoint for getting all docs with ranges

* [history-v1] fix schema of chunkId when deleting old history chunk

* [web] skip duplicate project lookup for resolving rootDocPath

* [web] ignore new limits for root doc path when making debug copy

* [web] allow admins to clone projects with ranges and entire history

* [web] fix tests

* [history-v1] re-order params for cloning project

* [web] fix duplicate import of logger after merge

* [project-history] re-order params for cloning project history metadata

GitOrigin-RevId: 7fa35b4f90885dd453150a348d491ba0ec8de412
2026-04-15 08:05:49 +00:00
Jakob Ackermann 9f8f77e56f [web] extend history debugging with estimate on snapshot size (#32502)
GitOrigin-RevId: 6ee75d227c0d093e4698324f6cc018b077076730
2026-03-30 08:06:09 +00:00
roo hutton 15714582e4 Merge pull request #32096 from overleaf/rh-rm-cio-integration-segmentation
Remove customerio-integration segmentation from all events

GitOrigin-RevId: 628772f61f2ace0fc6b6f4ddbabbab94057188ca
2026-03-10 09:06:17 +00:00
Alf Eaton 03a3518aae Merge pull request #30703 from overleaf/ae-prettier
Upgrade Prettier to v3.7.4

GitOrigin-RevId: 0f4434019bc7d12f2d5b7ecbb833ee20570d0706
2026-01-16 09:56:07 +00:00
ilkin-overleaf 7931c7b3eb Merge pull request #30471 from overleaf/ii-linkedin-insight-tag
[web] Add Linkedin Insight tag

GitOrigin-RevId: f01e1908ad945a5db10343a04ee50104efa32c3c
2026-01-09 09:05:38 +00:00
Andrew Rumble 28f0b8be89 [web] Sanitize URLs to remove sensitive build IDs (#29486)
from overleaf/ar-bg-filter-buildids-from-sentry

GitOrigin-RevId: 66746bc0584fd75fa27a54ef1a666d5e7fa53fce
2025-11-18 09:05:57 +00:00
Mathias Jakobsen f6bc89691c Merge pull request #29308 from overleaf/ae-sentry-image
Ignore blocked image from googletagmanager error report

GitOrigin-RevId: 0e386ca2c1cd0e59e4e4a686d2eeb40e32efcc80
2025-10-28 09:05:02 +00:00
roo hutton 551428ee37 Merge pull request #28013 from overleaf/rh-editor-hotjar
Support user limits on split test variants, add Hotjar editor support

GitOrigin-RevId: c5df831436c2b7d7e242cf4d3ff00899aba77886
2025-10-23 08:05:20 +00:00
Alf Eaton e5e279a19f Use path.resolve for resolving paths (#28905)
GitOrigin-RevId: 8f549b410ebf35e330a472fd4de1e3343747794e
2025-10-10 08:05:57 +00:00
Mathias Jakobsen 6c6048002b Merge pull request #28595 from overleaf/revert-28594-revert-28533-mj-blob-ranges-maxsize
[web+history-v1] Retry: Use range request for binary blobs in project snapshot

GitOrigin-RevId: defc279c9918695135962d65603a2941c5c4b033
2025-09-22 08:05:23 +00:00
Mathias Jakobsen 67d10e96bd Merge pull request #28594 from overleaf/revert-28533-mj-blob-ranges-maxsize
Revert "[web+history-v1] Use range request for binary blobs in project snapshot"

GitOrigin-RevId: 580491611a1b43104846f8509dd1e920f8077c9c
2025-09-22 08:05:15 +00:00
Mathias Jakobsen 6c79ce97cc Merge pull request #28533 from overleaf/mj-blob-ranges-maxsize
[web+history-v1] Use range request for binary blobs in project snapshot

GitOrigin-RevId: e72a2d481bf163b3e85361b42e30e82cf867f1cf
2025-09-22 08:05:04 +00:00
Alf Eaton e93593be09 Add locateFile to project snapshot (#28442)
GitOrigin-RevId: 47c03548770b540845b0af3ba7a6c0ca89350d12
2025-09-15 08:04:57 +00:00
Alf Eaton 2c1baa717d Use tracked changes and comments from the snapshot (#26267)
GitOrigin-RevId: c2bf0c9c9a5ab4f8837b8712ca549119a31cf067
2025-09-05 08:05:56 +00:00
Mathias Jakobsen ed0c4c447e Merge pull request #24468 from overleaf/mj-client-side-references
[web] Perform ARS on client-side

GitOrigin-RevId: 19703c82758cae450fe52463ad9612d3a2383ba0
2025-09-03 08:05:41 +00:00
Antoine Clausse a6f3329bb1 [web] Add https://analytics.propensity-abm.com/ to the ignored Propensity NetworkError (#27980)
GitOrigin-RevId: 42dec70d7e4d1bb1207c35267bb7ef6629152d65
2025-08-19 08:05:26 +00:00
Antoine Clausse 7d5bf2c0dd [web] Fix error: Cannot read properties of undefined (reading 'startsWith') (#26844)
https://overleaf.sentry.io/issues/6726737555/

GitOrigin-RevId: 488b64c5cb4a75ac4e77c7cdfb47cd3381a9c8eb
2025-07-07 08:05:49 +00:00
Antoine Clausse bb5b9afd0e [web] Define loadPropensityScript before use (#26813)
This prevents the bug "ReferenceError: Cannot access uninitialized variable" for users who don't have `window.requestIdleCallback`.

Fixes https://overleaf.sentry.io/issues/6724866295

GitOrigin-RevId: 129dcb72f24dc901ad600253bab7c58673e44321
2025-07-07 08:05:32 +00:00
Antoine Clausse 3681be7a71 [web] Ignore Propensity Network errors (#26840)
* Test the scripts by adding fake ids

* Test Propensity errors

* Don't send Sentry event if `isPropensityNetworkError`

* Revert "Test Propensity errors"

This reverts commit 7052ca20d0bee3bb32b39fb90c473458a4375d7b.

* Revert "Test the scripts by adding fake ids"

This reverts commit 2ac797aadf24359917a10119155c5e41935a7482.

GitOrigin-RevId: 03c1e63e359d41ad83ce1ae5cc1063f1c59d0b4e
2025-07-07 08:05:27 +00:00
Antoine Clausse 00d5d879c5 [web] Add third-party tracking Propensity (#26638)
* Rename `suppressGoogleAnalytics` to `suppressAnalytics`

* Add Propensity script

* Add LinkedIn Insight Tag script

* Version the cookie to prevent adding unconsented tracking

* Move tracking loaders to Typescript, insert them in foot_scripts.pug

* Show the cookie-banner when tracking other than GA is set

* Revert `oa` cookie versioning

* Remove `async` from propensity script

* Use shared tracking loader for Hotjar, LinkedIn, and Propensity

* Reusable `insertScript`

* Remove tracking-linkedin

* Test the scripts by adding fake ids

* Revert "Test the scripts by adding fake ids"

This reverts commit 50759bb6b40fd2684d1b967d83dd71e8517c3de9.

GitOrigin-RevId: 2a7b36bfc70ac1fc983f837dd4693a19a385cbc6
2025-06-30 08:05:52 +00:00
46555d27b0 [web] Add window. prefix to globals and add no-restricted-globals rule (#26422)
* Add `no-restricted-globals` eslint rule

Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>

* Change `self` to `window.self`

* Change `innerWidth` to `window.innerWidth`

* Change `confirm` to `window.confirm`

* Change `location` to `window.location`

* Use `location` from `useLocation` hook

* Use location from useLocation hook
Co-authored-by: Antoine <antoine.clausse@overleaf.com>

* Disable no-restricted-globals eslint rule for use of 'self'

* Use `confusing-browser-globals` from npm

* Prevent unexpected globals in workers, using `no-undef`

* Use `self` as a global in workers

* Use unexpected globals in workers, using `no-restricted-globals` in workers

---------

Co-authored-by: Rebeka <rebeka.dekany@overleaf.com>
Co-authored-by: Rebeka <o.dekany@gmail.com>
GitOrigin-RevId: 526986799f5f2edf53c7d978fa85c1e98189565f
2025-06-24 08:05:10 +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
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
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
roo hutton 27e2adecab Merge pull request #23939 from overleaf/rh-cio-analytics-split-test
Only send events to customer.io if in campaign split test

GitOrigin-RevId: 572ad5efdfc1e86f525722c6a425fa1454f2cf3a
2025-03-06 09:05:45 +00:00
Alf Eaton 4351805f7c Remove CM6 performance measurement (#22663)
GitOrigin-RevId: 2178f2b66c200005517ed8ff52afadd8b5fda14b
2025-01-28 09:04:50 +00:00
Eric Mc Sween 3d0a9017a4 Merge pull request #22973 from overleaf/em-fix-project-snapshot-concurrency
Fix concurrency in project snapshot

GitOrigin-RevId: 83710b84e5ff5c10d55b1a915a310db1ca431973
2025-01-21 09:05:35 +00:00
Eric Mc Sween ab9d4d4c9c Merge pull request #22845 from overleaf/em-project-snapshot-queue-refreshes
Concurrency control in ProjectSnapshot

GitOrigin-RevId: b62b886b59a67f2c694ef7cefcff5c32da3e4457
2025-01-17 09:05:09 +00:00
Eric Mc Sween 84bd994345 Merge pull request #22892 from overleaf/em-filter-tracked-deletes
Filter tracked deletes on project snapshot

GitOrigin-RevId: 5146e00b67af8dc15bf17f587cb6173a0a21544d
2025-01-17 09:05:05 +00:00
Alf Eaton 2fbb4615f9 Convert utility functions to TypeScript (#22658)
* Convert event-tracking to TypeScript

* Convert local-storage to TypeScript

* Convert mapSeries to TypeScript

* Convert SessionStorage to TypeScript

* Convert account-upgrade to TypeScript

* Convert isValidTeXFile to TypeScript

* Convert date functions to TypeScript

* Convert EventEmitter to TypeScript

* Convert isNetworkError to TypeScript

* Convert webpack-public-path to TypeScript

* Convert displayNameForUser to TypeScript

GitOrigin-RevId: 79c5a2d1101fcd520f3116f0f4af29d974189d94
2025-01-16 09:05:36 +00:00
Eric Mc Sween a69036e005 Merge pull request #22825 from overleaf/em-move-project-snapshot
Move full project on client code to the main web tree

GitOrigin-RevId: a2afd0d7fceaef213841e662df0b20587e9fef69
2025-01-15 09:04:45 +00:00
Alf Eaton 47275850fe Ignore another common Non-Error promise rejection error (#22633)
GitOrigin-RevId: a7c8571a6211eeca025f7f6c5dd8970645b911a6
2025-01-09 09:04:52 +00:00
Kristina da411733b6 Merge pull request #22119 from overleaf/kh-hotjar-on-plans-and-checkout
[web] add hotjar to plans pages

GitOrigin-RevId: eb582a85200747754923f28e7d710a9072577d75
2024-11-28 09:05:10 +00:00
Alf Eaton 34c3647244 Ignore a frequent unhandled promise rejection (#21383)
GitOrigin-RevId: 3c1360d6f4be1367aa77893ad8ef60760d6f9351
2024-10-28 09:05:21 +00:00
Alf Eaton a238b8eee4 Use ol_spell_check_language tag for error reporting (#21126)
GitOrigin-RevId: 11580f8dca22b0d4858dc5db36827b69a3637371
2024-10-17 08:05:55 +00:00
Alf Eaton 1327d536a3 Use the whole Hotjar snippet (#21017)
GitOrigin-RevId: 3935d671bdf5299b720f319fd7d8c6879d1819b9
2024-10-14 11:10:18 +00:00
Alf Eaton 7a26d46d7c Add Hotjar script to the home page (#20758)
GitOrigin-RevId: b7fdb904702d84058c2e3519b17376083ee9cad7
2024-10-14 11:09:26 +00:00
Alf Eaton a9fac2370b Upgrade Sentry SDK (#20806)
GitOrigin-RevId: 70cfbfd7f2ae61bbc865d32c576aa8f195837fb5
2024-10-14 11:01:28 +00:00
Jakob Ackermann 577497b655 Merge pull request #19842 from overleaf/jpa-ro-mirror-on-client
[misc] add readonly mirror of full project content on the client

GitOrigin-RevId: 940bd93bfd587f83ca383d10fc44579b38fc3e88
2024-08-22 08:05:13 +00:00
Brian Gough be23b7e73b Merge pull request #18744 from overleaf/jpa-ce-no-events
[web] avoid sending events in Server Pro/CE

GitOrigin-RevId: 04d2fa7939c448bc00757c5015e22a46b6b07bb5
2024-06-20 08:04:41 +00:00