[web] handle 3DS challenges for Stripe (#25918)
* handle 3DS challenges on the subscription dashboard * add `/user/subscription/sync` endpoint * upgrade `stripe-js` & rm `react-stripe-js` * group related unit tests together * add modules `SubscriptionController` unit tests and convert to async/await * add `StripeClient` unit tests for 3DS failure GitOrigin-RevId: 9da4758703f6ef4ec08248b328abddbbdd8e44ad
This commit is contained in:
@@ -26,10 +26,17 @@ class SubtotalLimitExceededError extends OError {}
|
||||
|
||||
class HasPastDueInvoiceError extends OError {}
|
||||
|
||||
class PaymentActionRequiredError extends OError {
|
||||
constructor(info) {
|
||||
super('Payment action required', info)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
RecurlyTransactionError,
|
||||
DuplicateAddOnError,
|
||||
AddOnNotPresentError,
|
||||
PaymentActionRequiredError,
|
||||
MissingBillingInfoError,
|
||||
ManuallyCollectedError,
|
||||
PendingChangeError,
|
||||
|
||||
@@ -15,7 +15,11 @@ const AnalyticsManager = require('../Analytics/AnalyticsManager')
|
||||
const RecurlyEventHandler = require('./RecurlyEventHandler')
|
||||
const { expressify } = require('@overleaf/promise-utils')
|
||||
const OError = require('@overleaf/o-error')
|
||||
const { DuplicateAddOnError, AddOnNotPresentError } = require('./Errors')
|
||||
const {
|
||||
DuplicateAddOnError,
|
||||
AddOnNotPresentError,
|
||||
PaymentActionRequiredError,
|
||||
} = require('./Errors')
|
||||
const SplitTestHandler = require('../SplitTests/SplitTestHandler')
|
||||
const AuthorizationManager = require('../Authorization/AuthorizationManager')
|
||||
const Modules = require('../../infrastructure/Modules')
|
||||
@@ -425,6 +429,11 @@ async function purchaseAddon(req, res, next) {
|
||||
'Your subscription already includes this add-on',
|
||||
{ addon: addOnCode }
|
||||
)
|
||||
} else if (err instanceof PaymentActionRequiredError) {
|
||||
return res.status(402).json({
|
||||
message: 'Payment action required',
|
||||
clientSecret: err.info.clientSecret,
|
||||
})
|
||||
} else {
|
||||
if (err instanceof Error) {
|
||||
OError.tag(err, 'something went wrong purchasing add-ons', {
|
||||
|
||||
Reference in New Issue
Block a user