Chore/Remove Previous Subscription (#5282)

Remove cancel subscription functionality from account controller and UI components; update email background and logo URLs across multiple email templates.
This commit is contained in:
Henry Heng 2025-10-01 12:32:30 +01:00 committed by GitHub
parent a86f618186
commit 580957e4aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 28 additions and 173 deletions

View File

@ -2,7 +2,6 @@ import { Request, Response, NextFunction } from 'express'
import { StatusCodes } from 'http-status-codes' import { StatusCodes } from 'http-status-codes'
import { AccountService } from '../services/account.service' import { AccountService } from '../services/account.service'
import { getRunningExpressApp } from '../../utils/getRunningExpressApp' import { getRunningExpressApp } from '../../utils/getRunningExpressApp'
import axios from 'axios'
export class AccountController { export class AccountController {
public async register(req: Request, res: Response, next: NextFunction) { public async register(req: Request, res: Response, next: NextFunction) {
@ -84,30 +83,6 @@ export class AccountController {
} }
} }
public async cancelPreviousCloudSubscrption(req: Request, res: Response, next: NextFunction) {
try {
const { email } = req.body
if (!email) {
return res.status(StatusCodes.BAD_REQUEST).json({ message: 'Email is required' })
}
const headers = {
'Content-Type': 'application/json',
Accept: 'application/json'
}
const response = await axios.post(`${process.env.ENGINE_URL}/cancel-subscription`, { email }, { headers })
if (response.status === 200) {
return res.status(StatusCodes.OK).json(response.data)
} else {
return res.status(response.status).json(response.data)
}
} catch (error) {
next(error)
}
}
public async logout(req: Request, res: Response, next: NextFunction) { public async logout(req: Request, res: Response, next: NextFunction) {
try { try {
if (req.user) { if (req.user) {

View File

@ -79,7 +79,7 @@
style=' style='
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -220,7 +220,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style=' style='
display: block; display: block;
outline: none; outline: none;

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -78,7 +78,7 @@
style=' style='
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -219,7 +219,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style=' style='
display: block; display: block;
outline: none; outline: none;

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -78,7 +78,7 @@
style=' style='
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -219,7 +219,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style=' style='
display: block; display: block;
outline: none; outline: none;

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -68,7 +68,7 @@
bgcolor='#000000' bgcolor='#000000'
> >
<div <div
style='position: relative;background-color: #151719 !important;background-image:url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg);background-position:center top;background-size:contain;background-repeat:no-repeat;' style='position: relative;background-color: #151719 !important;background-image:url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);background-position:center top;background-size:contain;background-repeat:no-repeat;'
> >
<div id='illustration' className='relative max-w-6xl mx-auto h-0 pointer-events-none' aria-hidden='true'> <div id='illustration' className='relative max-w-6xl mx-auto h-0 pointer-events-none' aria-hidden='true'>
@ -170,7 +170,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style='display: block; outline: none; text-decoration: none; height: 40px; font-size: 13px; line-height: 100%; -ms-interpolation-mode: bicubic; border: 0;' style='display: block; outline: none; text-decoration: none; height: 40px; font-size: 13px; line-height: 100%; -ms-interpolation-mode: bicubic; border: 0;'
/> />
</td> </td>

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -78,7 +78,7 @@
style=' style='
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -219,7 +219,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style=' style='
display: block; display: block;
outline: none; outline: none;

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -78,7 +78,7 @@
style=' style='
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -219,7 +219,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style=' style='
display: block; display: block;
outline: none; outline: none;

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -68,7 +68,7 @@
bgcolor='#000000' bgcolor='#000000'
> >
<div <div
style='position: relative;background-color: #151719 !important;background-image:url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg);background-position:center top;background-size:contain;background-repeat:no-repeat;' style='position: relative;background-color: #151719 !important;background-image:url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);background-position:center top;background-size:contain;background-repeat:no-repeat;'
> >
<div id='illustration' className='relative max-w-6xl mx-auto h-0 pointer-events-none' aria-hidden='true'> <div id='illustration' className='relative max-w-6xl mx-auto h-0 pointer-events-none' aria-hidden='true'>
@ -170,7 +170,7 @@
<img <img
alt='' alt=''
width='auto' width='auto'
src='https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png' src='https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png'
style='display: block; outline: none; text-decoration: none; height: 40px; font-size: 13px; line-height: 100%; -ms-interpolation-mode: bicubic; border: 0;' style='display: block; outline: none; text-decoration: none; height: 40px; font-size: 13px; line-height: 100%; -ms-interpolation-mode: bicubic; border: 0;'
/> />
</td> </td>

View File

@ -197,7 +197,7 @@
style=" style="
position: relative; position: relative;
background-color: #151719 !important; background-color: #151719 !important;
background-image: url(https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_email_bg.svg); background-image: url(https://general-flowise.s3.us-east-1.amazonaws.com/flowise_email_bg.svg);
background-position: center top; background-position: center top;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -338,7 +338,7 @@
<img <img
alt="" alt=""
width="auto" width="auto"
src="https://auth.flowiseai.com/storage/v1/object/public/flowise-static-assets/flowise_logo.png" src="https://general-flowise.s3.us-east-1.amazonaws.com/Flowise+Logo+Cropped+White+High+Res.png"
style=" style="
display: block; display: block;
outline: none; outline: none;

View File

@ -28,8 +28,6 @@ router.post('/forgot-password', accountController.forgotPassword)
router.post('/reset-password', accountController.resetPassword) router.post('/reset-password', accountController.resetPassword)
router.post('/cancel-subscription', accountController.cancelPreviousCloudSubscrption)
router.post('/billing', accountController.createStripeCustomerPortalSession) router.post('/billing', accountController.createStripeCustomerPortalSession)
router.get('/basic-auth', accountController.getBasicAuth) router.get('/basic-auth', accountController.getBasicAuth)

View File

@ -7,7 +7,6 @@ const resendVerificationEmail = (body) => client.post('/account/resend-verificat
const forgotPassword = (body) => client.post('/account/forgot-password', body) const forgotPassword = (body) => client.post('/account/forgot-password', body)
const resetPassword = (body) => client.post('/account/reset-password', body) const resetPassword = (body) => client.post('/account/reset-password', body)
const getBillingData = () => client.post('/account/billing') const getBillingData = () => client.post('/account/billing')
const cancelSubscription = (body) => client.post('/account/cancel-subscription', body)
const logout = () => client.post('/account/logout') const logout = () => client.post('/account/logout')
const getBasicAuth = () => client.get('/account/basic-auth') const getBasicAuth = () => client.get('/account/basic-auth')
const checkBasicAuth = (body) => client.post('/account/basic-auth', body) const checkBasicAuth = (body) => client.post('/account/basic-auth', body)
@ -20,7 +19,6 @@ export default {
resendVerificationEmail, resendVerificationEmail,
forgotPassword, forgotPassword,
resetPassword, resetPassword,
cancelSubscription,
logout, logout,
getBasicAuth, getBasicAuth,
checkBasicAuth checkBasicAuth

View File

@ -77,7 +77,6 @@ const AccountSettings = () => {
const [confirmPassword, setConfirmPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('')
const [usage, setUsage] = useState(null) const [usage, setUsage] = useState(null)
const [isBillingLoading, setIsBillingLoading] = useState(false) const [isBillingLoading, setIsBillingLoading] = useState(false)
const [isMigrateLoading, setIsMigrateLoading] = useState(false)
const [seatsQuantity, setSeatsQuantity] = useState(0) const [seatsQuantity, setSeatsQuantity] = useState(0)
const [prorationInfo, setProrationInfo] = useState(null) const [prorationInfo, setProrationInfo] = useState(null)
const [isUpdatingSeats, setIsUpdatingSeats] = useState(false) const [isUpdatingSeats, setIsUpdatingSeats] = useState(false)
@ -173,45 +172,6 @@ const AccountSettings = () => {
return currentPlan?.title || '' return currentPlan?.title || ''
}, [getPricingPlansApi.data, currentUser?.activeOrganizationProductId]) }, [getPricingPlansApi.data, currentUser?.activeOrganizationProductId])
const handleMigrateEmail = async () => {
setIsMigrateLoading(true)
try {
const obj = {
email: migrateEmail
}
const resp = await accountApi.cancelSubscription(obj)
if (resp.status === 200) {
enqueueSnackbar({
message: `Instruction to cancel subscription has been sent to ${migrateEmail}`,
options: {
key: new Date().getTime() + Math.random(),
variant: 'success',
action: (key) => (
<Button style={{ color: 'white' }} onClick={() => closeSnackbar(key)}>
<IconX />
</Button>
)
}
})
}
} catch (error) {
enqueueSnackbar({
message: 'Failed to access billing portal',
options: {
key: new Date().getTime() + Math.random(),
variant: 'error',
action: (key) => (
<Button style={{ color: 'white' }} onClick={() => closeSnackbar(key)}>
<IconX />
</Button>
)
}
})
} finally {
setIsMigrateLoading(false)
}
}
const handleBillingPortalClick = async () => { const handleBillingPortalClick = async () => {
setIsBillingLoading(true) setIsBillingLoading(true)
try { try {
@ -817,70 +777,6 @@ const AccountSettings = () => {
</Box> </Box>
</SettingsSection> </SettingsSection>
)} )}
<SettingsSection title='Cancel Previous Subscription'>
<Box
sx={{
width: '100%',
display: 'grid',
gridTemplateColumns: 'repeat(3, 1fr)'
}}
>
<Box
sx={{
gridColumn: 'span 2 / span 2',
display: 'flex',
flexDirection: 'column',
alignItems: 'start',
justifyContent: 'center',
gap: 1,
px: 2.5,
py: 2
}}
>
<Typography variant='body2'>Migrate from existing cloud subscription?</Typography>
<Typography variant='body2' color='text.secondary'>
{`If you have an existing cloud app like <your-app>.app.flowiseai.com, after finished migrating your work, you can cancel the previous subscription. We'll send you an email with a link to cancel your previous subscription.`}
</Typography>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, width: '100%' }}>
<OutlinedInput
id='email'
type='string'
fullWidth
placeholder='Email Address'
name='email'
onChange={(e) => setMigrateEmail(e.target.value)}
value={migrateEmail}
/>
</Box>
</Box>
<Box
sx={{
display: 'flex',
alignItems: 'center',
justifyContent: 'end',
px: 2.5,
py: 2,
gap: 2
}}
>
<Button
variant='outlined'
disabled={!currentUser.isOrganizationAdmin || isMigrateLoading}
onClick={handleMigrateEmail}
sx={{ borderRadius: 2, height: 40 }}
>
{isMigrateLoading ? (
<Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
<CircularProgress size={16} color='inherit' />
Loading
</Box>
) : (
'Send Instructions'
)}
</Button>
</Box>
</Box>
</SettingsSection>
</> </>
)} )}
</Stack> </Stack>

View File

@ -241,18 +241,6 @@ const SignInPage = () => {
Forgot password? Forgot password?
</Link> </Link>
</Typography> </Typography>
{isCloud && (
<Typography variant='body2' sx={{ color: theme.palette.grey[600], mt: 1, textAlign: 'right' }}>
<a
href='https://docs.flowiseai.com/migration-guide/cloud-migration'
target='_blank'
rel='noopener noreferrer'
style={{ color: theme.palette.primary.main }}
>
Migrate from existing account?
</a>
</Typography>
)}
</Box> </Box>
<LoadingButton <LoadingButton
loading={loading} loading={loading}