* [web] add preview payload to track-change notification types
* [doc-updater] pass accepted/rejected change data through to web for previews
* [web] snapshot change preview onto accepted/rejected notifications
* [web] render resolved change previews instead of accepted/rejected count lines
* [web] add unit coverage for accepted/rejected change preview flow
* fix: notification carries multiple previews per accept/reject batch; extract shared group helper
* fix: one preview per accept/reject action, drop adjacency grouping
* fix: move buildResolvedChangePreviews out of the email builder class
* fix: type error, make tests more explicit
* fix: render resolver below preview
* fix: overflow text, alignment
* fix: test error
* fix: resolved count
* [document-updater/web] send sparse change preview instead of full doc lines
* fix: store sparse preview, hydrate at render, drop CE gate
* fix: advance slice cursor past tracked-delete text in sparse preview
* fix: inline buildChangeGroupPreview
* fix: changePreviewBuilder -> sparseChangePreview
* fix: rm change_contributors
* fix: copilot flagged testing issues
* fix: hydrate and truncate change preview at write time
* fix: avoid materializing full doc text when slicing preview window
* fix: update reject preview test to hydrated shape
* fix: accepted delete removing context
* [document-updater/web] split resolved change previews into one per change cluster
* fix: narrow cluster userIds to string[] for typecheck
* feat: updating to use zod schema for previews
---------
Co-authored-by: Jimmy Domagala-Tang <jimmy.domagala-tang@overleaf.com>
GitOrigin-RevId: 0740713c715a61a220180f353e497b27da6a5b0f
* trigger `UnableToSyncModal` on refresh
* trigger `UnableToSyncModal` without refresh
* show success toast when offline edits sync
* always show out of sync modal as the final backup
GitOrigin-RevId: 3ed300fef9e6d2ff81e17868309f80ffa40e0576
* 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
* add content previews to notification emails
* add fetcher for doc lines
* gate content previews behind a split test
* make composable blocks for rendering
GitOrigin-RevId: c8df384d55a301084b98df76fd3edd6dde6ea50c
* increase scanStream COUNT for project notifications
* fix Bull queue.add delay option being ignored
* parse timestamp to number before adding to notification queue
* fix outdated comments in project_notifications script
GitOrigin-RevId: 98bb638228550b2f6f2de90280a06c47e022cf96
* feat: add granular controls for other features
* feat: add filtering to notifications that were missing them
* refactor: rm duplicate thread fetches
* fix: reduce permissions to fit spec (all === new comments/tracked changes, replies === only if also a participant)
* fix: include mentions in types
GitOrigin-RevId: b4a09ef59e5cf4de2e07d5b9a13c31fc1cf81a31
Unhandled promise rejections from these fire-and-forget calls were
surfacing in Sentry. Add .catch(debugConsole.error) to suppress them.
GitOrigin-RevId: a14cd0a3956a2b551210723ad56e7ec5e354a7a7
* add footerMessage to base email template
* add customized subject line and CTA
* add _getBundledActivityList
GitOrigin-RevId: e70c0955485b0892f31e20daa0430faef80b0d64
* display global disabled state
* show loading indicator while project notification preferences load
GitOrigin-RevId: d7e905aaa3fc7b15b54bf99caeabf60c1e5d8050
* emit email-notification-sent event
* use UTM tags to track email link clicks
* do not include utm_id on session at registration
GitOrigin-RevId: 24091bf8923fa11b8ba5ebfc63a0cea5c0f9f40c
* accept taxInfoPending as tax id comparison point
* convert recurly unit amount to minor units correctly for no cent currencies
* Use original subscription currency in finalization check
* make it easier to spot migrated with tax info pending
---------
Co-authored-by: John Lees-Miller <jdleesmiller@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
GitOrigin-RevId: d3c74032bc06369fcf6bafb4cfaff85c49a3cfef
* update webhook handler to include cancel_at
* guard against accidentally marking subscription event as canceled
* fix cancellation edgecase (reactivating a subscription that was canceled from Stripe Dashboard and also has a non-migration schedule)
GitOrigin-RevId: a872e91afa19094d4ae859293fc9669ea3e528f2
* add a script to detect drift between recurly and stripe
* only flag when Recurly updated since subscription created in Stripe
* add --comparison-date option instead of stripe subscription created time
* reduce API calls by checking Recurly update time earlier
GitOrigin-RevId: f0ecb5644f7445603da020a46e32622fcd2eebf4
* add script to query taxes
* Use full address to determine tax
* use all applied taxes
* include status in tax script output
* add warning to the script
* only normalize US and CA
* default to RoW if no countries specified
* use RateLimiter and pqueue
* only normalize US postal codes
---------
Co-authored-by: John Lees-Miller <jdleesmiller@gmail.com>
GitOrigin-RevId: 01ecc1b1461e955b6c6a798a3a568e5b5f6bbcdb
* [web] extract card comparison function
* [web] throw if more than 1 duplicate customer account
* [web] attempt to pick the pre-existing account
* [web] overwrite email of duplicate account
* Update services/web/scripts/helpers/migrate_recurly_customers_to_stripe.helpers.mjs
* [web] handle setting being undefined
* [web] allow other account to be reused if migrating account is using paypal
* [web] allow matching for customers with no payment method
GitOrigin-RevId: 7d8eeb4734a20c09ce3e0d73095e28696e212549
* support Paypal for migration
* remove sensitive payment info in logging
* add `resolveStripeCustomer`
GitOrigin-RevId: a8fc7de4a4bf3971c5221a0dec3fc279d8d2f67d
* make warnings more eye catching in clean up dry run
* only increment processedCount after processing
* always rm recurlyAccountCode
* check if existing Stripe customer already has a subscription
* ensure no other customer accounts share the user id
* set recurly_to_stripe_migration_status to cancelled in cancel script
* add script for updating metadata of canceled migrations
GitOrigin-RevId: 3331de480e99774679ff2649b90d41e981a8fdef
* handle group quantities & add-ons when detecting changes
* include analyticsId in output
* flag users in customer-io
* rely on customer metadata for tax info needing updating
* rollback customer.io data in rollback script
* refactor how we handle errors when migrating to avoid losing data for output
GitOrigin-RevId: f77430b0b366217ac85b72dde92e9364dc879023
* fix source on analytics mapping in finalization script
* add script to redo mappings for finalized subscriptions
GitOrigin-RevId: a62af6c6c7ae11f9bea62ed643c8dfa7595ba99b
* check and log unexpected end states before terminating Recurly subscriptions
* update finalize and rollback scripts to only postpone active subscriptions
GitOrigin-RevId: 7fe6ffa56cb8ddf19133eb0cb59e39fd783430b7
* remap customer.metadata.recurlyAccountCode to customer.metadata.userId
* verify recurlyAccountCode is what we expect it to be before setting
GitOrigin-RevId: 8ab1d5e311dba34bb8c15d01096f6c31273a7506
* return early from various event handlers if the subscription isn't controlled by the payment provider sending the event
* update `Subscription` type for webhook events
GitOrigin-RevId: f3fc345c37bbe134b7696ccde9d6d8c7608f8f12
* update recurly change prices script
* write to /tmp/ and add an option to write to stdout
* add analytics events
* default script to renewal
GitOrigin-RevId: 5ebb17ee2c1ad70128391745a994ea6c74c739f9
* make Stripe export script only export active products and prices
* add a gitignore for the scripts/stripe/output
GitOrigin-RevId: 975d84077c3940d4f5af518e5f8292ea455e1c3a
* update pricing settings for Nov 2025 update
* update `StripeLookupKeyVersion` type
* update unit tests to match new Stripe version
GitOrigin-RevId: f5df5167b605b6667cc19edad09fb2c0f72a293b
* update generate recurly prices script to skip stripe-only prices
* add script for creating new Stripe prices from a CSV
* add script to archive Stripe prices by version key
* add script for exporting Stripe products and prices
* add script to import Stripe products
GitOrigin-RevId: 3c9cf8037d956b9532c3efed5fe8d63f8be53a93