Merge pull request #25967 from overleaf/mf-sync-email-update-to-stripe-account

[web] Sync Stripe customer email when user update their primary email in account setting

GitOrigin-RevId: a5f4b4e960d2c9d4ba96a2b3036329f4868e1bb8
This commit is contained in:
M Fahru
2025-06-04 08:07:23 +00:00
committed by Copybot
parent 54c0eb7fdc
commit ef810a9f36
5 changed files with 58 additions and 42 deletions
@@ -11,22 +11,27 @@ const SubscriptionErrors = require('./Errors')
const { callbackify } = require('@overleaf/promise-utils')
/**
* @param accountId
* @param newEmail
* Updates the email address of a Recurly account
*
* @param userId
* @param newAccountEmail - the new email address to set for the Recurly account
*/
async function updateAccountEmailAddress(accountId, newEmail) {
async function updateAccountEmailAddress(userId, newAccountEmail) {
const data = {
email: newEmail,
email: newAccountEmail,
}
let requestBody
try {
requestBody = RecurlyWrapper._buildXml('account', data)
} catch (error) {
throw OError.tag(error, 'error building xml', { accountId, newEmail })
throw OError.tag(error, 'error building xml', {
accountId: userId,
newEmail: newAccountEmail,
})
}
const { body } = await RecurlyWrapper.promises.apiRequest({
url: `accounts/${accountId}`,
url: `accounts/${userId}`,
method: 'PUT',
body: requestBody,
})
@@ -535,18 +535,17 @@ function cancelPendingSubscriptionChange(req, res, next) {
})
}
function updateAccountEmailAddress(req, res, next) {
async function updateAccountEmailAddress(req, res, next) {
const user = SessionManager.getSessionUser(req.session)
RecurlyWrapper.updateAccountEmailAddress(
user._id,
user.email,
function (error) {
if (error) {
return next(error)
}
res.sendStatus(200)
}
)
try {
await RecurlyWrapper.promises.updateAccountEmailAddress(
user._id,
user.email
)
return res.sendStatus(200)
} catch (error) {
return next(error)
}
}
function reactivateSubscription(req, res, next) {
@@ -859,7 +858,7 @@ module.exports = {
cancelV1Subscription,
previewSubscription: expressify(previewSubscription),
cancelPendingSubscriptionChange,
updateAccountEmailAddress,
updateAccountEmailAddress: expressify(updateAccountEmailAddress),
reactivateSubscription,
recurlyCallback,
extendTrial: expressify(extendTrial),
@@ -11,7 +11,6 @@ const EmailHandler = require('../Email/EmailHandler')
const EmailHelper = require('../Helpers/EmailHelper')
const Errors = require('../Errors/Errors')
const NewsletterManager = require('../Newsletter/NewsletterManager')
const RecurlyWrapper = require('../Subscription/RecurlyWrapper')
const UserAuditLogHandler = require('./UserAuditLogHandler')
const AnalyticsManager = require('../Analytics/AnalyticsManager')
const SubscriptionLocator = require('../Subscription/SubscriptionLocator')
@@ -252,7 +251,11 @@ async function setDefaultEmailAddress(
}
try {
await RecurlyWrapper.promises.updateAccountEmailAddress(user._id, email)
await Modules.promises.hooks.fire(
'updateAccountEmailAddress',
user._id,
email
)
} catch (error) {
// errors are ignored
}