Commit Graph

63 Commits

Author SHA1 Message Date
roo hutton
625d8efdf1 Merge pull request #30102 from overleaf/rh-price-rollback-scripts
Script for rolling back price changes in Recurly

GitOrigin-RevId: d2793b70e845ba2411814035f174a0262b99c0e9
2025-12-05 09:05:48 +00:00
Kristina
b9224ea11d [web] update recurly change prices script (#30006)
* 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
2025-12-05 09:05:10 +00:00
Andrew Rumble
07c827e9fd Merge pull request #29928 from overleaf/ar-last-infrastructure-conversions
[web] last infrastructure conversions

GitOrigin-RevId: ad1aff9b7df0610ed0303157d9e2c8032f32c02b
2025-11-28 09:05:56 +00:00
Andrew Rumble
18f44866e5 Merge pull request #29919 from overleaf/revert-29795-ar-last-infrastructure-conversions
Revert "[web] last infrastructure conversions"

GitOrigin-RevId: 48dc64553012afb5d2db4b2eb9c9898489b7e5ef
2025-11-27 09:05:54 +00:00
Kristina
731bf1d8b6 [web] add scripts for updating Stripe prices (#29858)
* 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
2025-11-27 09:05:35 +00:00
Andrew Rumble
d748d8d606 Merge pull request #29795 from overleaf/ar-last-infrastructure-conversions
[web] last infrastructure conversions

GitOrigin-RevId: 68aa11625a9bc6d0d5324ecd95bb5ac52af8ee96
2025-11-27 09:05:30 +00:00
Andrew Rumble
394c60f2cf Merge pull request #29659 from overleaf/revert-29656-revert-29521-ar-models-es-conversion
Revert "Revert "[web] Convert models and self-referential test files to ESM ""

GitOrigin-RevId: f64000ae31d298b075a8722dfc51f294c71bc021
2025-11-18 09:04:56 +00:00
Andrew Rumble
ae6dec9dcb Merge pull request #29656 from overleaf/revert-29521-ar-models-es-conversion
Revert "[web] Convert models and self-referential test files to ESM "

GitOrigin-RevId: 5455cccbb513bd9ca36ce526ff1553065f83d233
2025-11-13 09:06:36 +00:00
Andrew Rumble
7c9fea64ac [web] Convert models and self-referential test files to ESM (#29521)
from overleaf/ar-models-es-conversion

GitOrigin-RevId: a92ab8342c0f3e23155eacc0570458fc910c3d71
2025-11-13 09:06:13 +00:00
Andrew Rumble
4f02a85aa4 Update paths
GitOrigin-RevId: 399c594dd1bbf739d91874df6be3b70e57fe01e3
2025-11-06 09:05:57 +00:00
Andrew Rumble
7de4133d08 Convert to ES modules
GitOrigin-RevId: ec8d55634306caa6a013daa4dc0ce0a3ffbcc3f0
2025-10-21 08:05:42 +00:00
Andrew Rumble
bdf47f7a78 Rename files
GitOrigin-RevId: 5308845fa2a76342dc395ee4d4fcc94cdf03cb3b
2025-10-21 08:05:37 +00:00
Jakob Ackermann
d697f00525 [web] reduce log noise in CI (#27961)
* [web] reduce noise from CollectPayPalPastDueInvoiceTest

* [web] reduce noise for frontend tests that use Range.getClientRects

* [web] avoid nesting <li> elements in ProjectToolsMoreDropdownButton

RenameProjectMenuItem/CopyProjectMenuItem will return <li> elements.

* [web] avoid clicking on links that navigate away in JSDom

* [web] add mock for location change in JSDom

* [web] add fallback stripe subscription data for test

3.8k lines of log noise!

GitOrigin-RevId: 7adab182487a6c07ac9809c60802e498a0edb0ec
2025-08-19 08:05:50 +00:00
Miguel Serrano
7540bc9cbe Merge pull request #27202 from overleaf/msm-fix-pricing
[web] Remove group size limits for additional licenses

GitOrigin-RevId: d48976ccd72ec5e99249f80ab5d3e9e85e089b18
2025-07-18 08:07:17 +00:00
Lucie Germain
f53a13ae1e Merge pull request #26604 from overleaf/mf-resync-recurly-state-single-subscription
Add script to sync recurlyStatus.state for a single subscriptionId

GitOrigin-RevId: 69af89a44b4043d92853862baee65d8b7f84b88f
2025-06-25 08:05:29 +00:00
Andrew Rumble
5799d534a9 Ensure we wait after processing each subscription
GitOrigin-RevId: f6a184bc8a65934f24857cfc4f71f95574576b9d
2025-06-11 08:07:41 +00:00
Andrew Rumble
07b47606c1 Disable script in production
GitOrigin-RevId: 81fe077a5816a23fa20c78a6271fbdf62021e3b2
2025-06-11 08:07:36 +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
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
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
Domagoj Kriskovic
47fb3a644c Script for generating add-on prices (from recurly) (#24051)
* Script for generating addon prices (from recurly)

* addon code as param

GitOrigin-RevId: b1a45a806c29de56a10532398b56468f9732593f
2025-03-24 10:49:15 +00:00
Liangjun Song
e44f892cb0 Merge pull request #24271 from overleaf/ls-script-to-update-manually-billed-users
Scripts to update terms and conditions for manually billed users

GitOrigin-RevId: 5efe43a42c3ed21779c9de698268817e2cbb5249
2025-03-24 10:49:11 +00:00
Eric Mc Sween
eb1b939f5a Merge pull request #22567 from overleaf/em-collection-method
Add collection method field to Mongo subscriptions

GitOrigin-RevId: 7fffabaecfde8f7da8e05fcedcbbf0b2fdcc70f5
2025-01-10 09:05:25 +00:00
Eric Mc Sween
b68f758fd5 Merge pull request #22274 from overleaf/em-setup-recurly-add-ons
Set up assistant add-on only on group plans available in production

GitOrigin-RevId: a47c05443c5bf4a1bb1fb26d45a3705a544ba7c5
2024-12-05 09:04:59 +00:00
Antoine Clausse
b27b2808f2 [web] Fixup .mjs extension in scripts mentions (calls, comments, copybara) (#21969)
* Fixup `.mjs` extension in scripts mentions (calls, comments, copybara)

* Replace `.js` by `.*` in copy.bara.sky exclude

* Add `services/web/modules/modules-*.mjs` in copy.bara.sky glob

GitOrigin-RevId: b3ecb849b44bdf4257cc17f6985f8117a4d662ae
2024-11-21 09:04:23 +00:00
Antoine Clausse
eea27a36a4 [web] Add prefer-node-protocol ESLint rule (#21523)
* Add `unicorn/prefer-node-protocol`

* Revert non-web changes

* Run `npm run lint:fix` (prefer-node-protocol)

GitOrigin-RevId: c3cdd88ff9e6b3de6a4397d45935c4d026c1c1ed
2024-11-05 09:04:33 +00:00
Jakob Ackermann
a7517eefcb Merge pull request #21427 from overleaf/jpa-populate-db-on-import
[web] populate db with collections on import, ahead of waitForDb() call

GitOrigin-RevId: 7eb4cd61c2052187acd9947d7060f54d9822d314
2024-11-01 09:05:15 +00:00
Liangjun Song
14cd8f5479 Merge pull request #21282 from overleaf/ls-scripts-to-esm-5
Migrate rest of the scripts to esm

GitOrigin-RevId: 421f3ccd15342d34113be8d22e343d08533177ea
2024-10-25 08:05:41 +00:00
Eric Mc Sween
13ecddaef1 Merge pull request #20898 from overleaf/em-ai-add-on-setup-recurly
Script for setting up the Assistant add-on in Recurly

GitOrigin-RevId: 25a94961e4068456795b6be6b5e047efc65363fa
2024-10-24 08:06:29 +00:00
Liangjun Song
902ae750dc Merge pull request #21202 from overleaf/ls-scripts-to-esm-2
Migrate scripts folder to esm 2/x

GitOrigin-RevId: 1698bc4f13e026fa281d37a4914a2f997849c761
2024-10-23 08:04:53 +00:00
Antoine Clausse
ebec84540f Add waitForDb in scripts/resync_subscriptions.js (#19154)
GitOrigin-RevId: 608bce2654d2b6dbeb662ad0da8bb5c5ce3d68f3
2024-06-28 08:04:29 +00:00
Antoine Clausse
01188589f8 Add some JSDoc types to @overleaf/logger (#19153)
* Add some JSDoc types to `@overleaf/logger`

* Update `logger.error` calls

* Fixup `logger.err` JSDoc

* Update `logger.err` calls

* Fix `args` type

* Remove "Error message" description

* Replace `arguments` by actual arguments of the method

* Fix: "ESLint: Unnecessary '.apply()'.(no-useless-call)"

* Add JSDoc params to `debug` `info` `warn`

* Remove extra `args` param in JSDoc so developers aren't invited to use it

Not sure if this is the best thing to do because it creates a warning in the IDE: "Parameter args is not described in JSDoc"

* Add comment about serialization of `err` `req` `res`

* Allow strings as first param in `debug` `info` `warn`

* Fix syntax for optional parameters in JSDoc

* Add 2 signatures, to avoid "string, string" params

* Fix `@signature` names copy-pastes

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

* Revert the double `@param attributes`. It doesn't work

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 086dee8bbf30d577c5e1f844a9df5e518c46aca7
2024-06-28 08:04:25 +00:00
Antoine Clausse
de959fb7b9 Fix institution metrics sendAll cron (#19127)
* Don't send status 200 in the beginning: we may throw later

This was causing `Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client`
https://cloudlogging.app.goo.gl/Bchegw2iCYLxhPNk8

* Continue when failing to send one email, but log the error

* Revert "Don't send status 200...", log error instead

This reverts commit 3e13559704f822e330a18a68567f46491649f222.

* Fix `logger.error` params

* Fixup: good syntax for `logger.error`

* Remove useless `OError` import

* Update services/web/modules/metrics/app/src/MetricsEmailController.js

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

* Update services/web/modules/metrics/app/src/MetricsEmailController.js

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

* Update services/web/modules/metrics/app/src/MetricsEmailController.js

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

* Update services/web/scripts/recurly/collect_paypal_past_due_invoice.js

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

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: c68bc677326729fc6c39b7c2f027e35ebb776bd2
2024-06-26 08:05:11 +00:00
Jimmy Domagala-Tang
50b19c7793 Merge pull request #18850 from overleaf/ac-promisify-resync-subscriptions
Promisify resync_subscriptions

GitOrigin-RevId: c23a99683a22104815525b179d4e46d3ad568f94
2024-06-26 08:04:57 +00:00
Antoine Clausse
262a92083a Don't throw cron job when some PayPal collection fails (#18795)
* Don't throw cron job when some PayPal collection fails

Follow-up of https://github.com/overleaf/internal/pull/18414 and https://github.com/overleaf/internal/pull/18572

This was causing `Heartbeat [cron-web-collect-paypal-prod] is expired.`
And the cron to rerun (altogether three times a day, instead of once a day)

https://cloudlogging.app.goo.gl/W4qBPFDeTUkRQ8J27

* Update tests

GitOrigin-RevId: a6a29cc84c0c72fd86b2e3a9739669d3a5fb0be5
2024-06-11 08:04:04 +00:00
Antoine Clausse
01e1286a8b In PayPal collect invoices script: Update throw unsuccessful invoices collections (#18572)
* Remove throw on `INVOICES_COLLECTED_SUCCESS.length === 0`

Effectively reverts 038377b511

See: https://digital-science.slack.com/archives/C20TZCMMF/p1716973110408049

* Update tests so they don't expect rejections

* Reject when some invoice collection failed

GitOrigin-RevId: aa37f7fa37c96b8624e87d94be675d115e3250a9
2024-05-30 08:04:31 +00:00
Antoine Clausse
554be73a36 In collect_paypal_past_due_invoice.js, iterate over each page instead of gathering data from all pages at first (#18414)
* Create `getPaginatedEndpointIterator` to iterate each page

* Create `waitMs` util, it will replace `slowCallback`

* Make `handleAPIError` async

* Make `isAccountUsingPaypal` async

* Make `attemptInvoiceCollection` async

* Make `attemptInvoicesCollection` async

* Use `await` instead of `new Promise`

* Remove unused callbackified `attemptInvoiceCollection`

* Run `attemptInvoiceCollection` for each page instead of gathering all pages in the beginning

* Add test on fetching multiple pages of invoice

GitOrigin-RevId: 2674b18c6ca5732b873fb2bc71b515909006f93d
2024-05-27 10:23:18 +00:00
Antoine Clausse
78a0bc2b05 [web] Convert RecurlyWrapper functions to async (#18384)
* Rename `RecurlyWrapper` to `promises`, as it will only contain the promises soon

* Update `apiRequest`

* Update `_parseXml`

* Update `_parseXmlAndGetAttribute`

* Update `_parse*Xml`

* Update `updateAccountEmailAddress`

* Update `checkAccountExists`

* Update `createAccount`

* Update `createBillingInfo`

* Update `setAddressAndCompanyBillingInfo`

* Update `createSubscription`

* Update `_createPaypalSubscription`

* Update `_handle422Response`

* Update `_createCreditCardSubscription`

* Update `createSubscription`

* Update `getSubscriptions`

* Update `getSubscription`

* Update `getPaginatedEndpoint`

* Update `getAccount`

* Update `getAccountActiveCoupons`

* Update `getCoupon`

* Update `getBillingInfo`

* Update `getAccountPastDueInvoices`

* Update `attemptInvoiceCollection`

* Update `updateSubscription`

* Update `createFixedAmmountCoupon`

* Update `lookupCoupon`

* Update `redeemCoupon`

* Update `extendTrial`

* Update `listAccountActiveSubscriptions`

* To find which functions to add as callbackified, I used this Regex:
`RecurlyWrapper\.(?!promises)[^.\s]*`

And after adding callbackified functions, we're left with no results with the Regex:
`RecurlyWrapper\.(?!promises|apiUrl|_buildXml|_parseXml|attemptInvoiceCollection|createFixedAmmountCoupon|getAccountActiveCoupons|getBillingInfo|getPaginatedEndpoint|getSubscription|updateAccountEmailAddress)[^.\s]*`

* Update unit tests

* Test `getSubscription` both as "promise" and as "callback"

I'm not sure if we want to generalize this.

* Fix: add missing `await`s (!!)

* Change `apiRequest` to reject errors instead of resolving it in an object

* Fixup for CollectPayPalPastDueInvoice test

* Fix: callbackify `getSubscriptions` (!!)

* Replace `.then(...)` chain by multiple `await`

* Fixup `attemptInvoicesCollection`: prevent reading length of undefined

* Use `return await` when returning promises

Per https://github.com/overleaf/internal/pull/18384#pullrequestreview-2065738771

GitOrigin-RevId: ceda755b24fd29f97a27e60ac5db9bc7e369f932
2024-05-27 10:21:26 +00:00
Antoine Clausse
9419cc3b37 [web] Add tests to collect_paypal_past_due_invoice.js + update logging (#18310)
* Fix: Invoices collected array length comparison

Update the code with the correct condition to respect the intent of the previous implementation ("exit with non zero code when no invoicess were processed").
See 5476f39984

However, I'm not sure if erroring when no invoices are collected is actually what we want to do.

* Wrap `collect_paypal_past_due_invoice` script and export the function

* Fixup typo `accoutns`

* Log invoices collection data before throwing

* Add note: `handleAPIError` is silencing the errors

* Create a test on `collect_paypal_past_due_invoice`

* Replace `console.log` by `@overleaf/logger` (bunyan)

Our `console.warn` show up as Errors (in red) in GCP. For example the following is an error in GCP:
```
Errors in attemptInvoiceCollection with id=2693634 OError: Recurly API returned with status code: 400
```
https://github.com/overleaf/internal/blob/5476f39/services/web/scripts/recurly/collect_paypal_past_due_invoice.js#L9

---

Does it correctly set the levels as warnings if we use `@overleaf/logger`

GitOrigin-RevId: 37c8bdf4afd8cef4706700aafb44480ec8966a74
2024-05-15 08:04:46 +00:00
Tim Down
800c9d63b4 Merge pull request #14048 from overleaf/mj-recurly-script-update
[web] recurly resync script update

GitOrigin-RevId: 798cb73f46b763f6ece6b12d63fe82fbcc6c2920
2023-07-28 08:04:14 +00:00
Brian Gough
c3ad6645fe Merge pull request #12816 from overleaf/bg-recurly-scripts-cleanup
sort recurly script JSON outputs for consistency

GitOrigin-RevId: e5dc789fd834e9864912e3ef14ac3e6bf8eb7d99
2023-04-27 08:05:52 +00:00
Brian Gough
72abda9f29 Merge pull request #12757 from overleaf/bg-clean-up-recurly-prices-script
clean up recurly prices script

GitOrigin-RevId: b9afa05a0931bb11fd9be2d9a92a6d4beaab2f7d
2023-04-25 08:06:05 +00:00
Brian Gough
253f44894a Merge pull request #12748 from overleaf/bg-recurly-add-currency
add script for generating recurly prices

GitOrigin-RevId: c7a624af35eba9882798fbaf750e4328604f47fa
2023-04-25 08:05:57 +00:00
Eric Mc Sween
deb7d82e68 Merge pull request #11435 from overleaf/em-price-increase-script
Script to increase prices for existing customers

GitOrigin-RevId: 8b5357b05a9f09f2ed1b2b52f5dff8d296d06bf3
2023-01-26 09:04:21 +00:00
Brian Gough
20cd6a6dc1 Merge pull request #10921 from overleaf/bg-fix-script-name
fix script name in comments of recurly_prices.js

GitOrigin-RevId: 4a547018ba538af91abd28a5e72c7da7cdc28d45
2022-12-21 09:05:12 +00:00
Eric Mc Sween
8be8dd4cc0 Merge pull request #10402 from overleaf/bg-sync-plan-prices-to-recurly
script to sync prices to recurly

GitOrigin-RevId: c6659f749136a9aeb2f90631470e144e9d1180a8
2022-11-15 09:06:11 +00:00
Tim Alby
bbac46156b convert price_in_unit to price_in_cents
GitOrigin-RevId: bae030e9c90f8286d6e6550744849984fe81f63d
2022-01-21 09:03:29 +00:00
Tim Alby
3e70546e18 rename price attributes to price_in_cents or price_in_unit
GitOrigin-RevId: 8045472c96862078583fcb522099ad78926281dc
2022-01-21 09:03:23 +00:00
Thomas
5e61fce3b4 Enable additional currencies when purchasing (or upgrading to) a group plan (#4884)
* Add script to fetch group data pricing from Recurly

* Update groups pricing data using script to fetch prices from Recurly

* Add additional currencies to saas settings

* Refactor group plans upgrade modal to use shared options from settings

GitOrigin-RevId: 6d13d5b152d01e0399f9d2b8f6f8bf99784589e8
2022-01-12 09:03:21 +00:00
Alexandre Bourdin
40c7f2dae1 Merge pull request #4219 from overleaf/ab-group-subscription-user-property
Send group subscription user property

GitOrigin-RevId: d1033ab4e0b5061b9d4a781e319d6b690f7e6154
2021-07-06 02:05:54 +00:00