2
0
Files
bot/packages/scripts/setCustomPlan.ts
2022-11-23 11:40:57 +01:00

87 lines
2.4 KiB
TypeScript

import { Plan, PrismaClient } from 'db'
import Stripe from 'stripe'
import { promptAndSetEnvironment } from './utils'
const setCustomPlan = async () => {
await promptAndSetEnvironment()
const prisma = new PrismaClient()
if (
!process.env.STRIPE_SECRET_KEY ||
!process.env.STRIPE_PRODUCT_ID ||
!process.env.STRIPE_SUBSCRIPTION_ID ||
!process.env.WORKSPACE_ID
)
throw Error(
'STRIPE_SECRET_KEY or STRIPE_SUBSCRIPTION_ID or STRIPE_PRODUCT_ID or process.env.WORKSPACE_ID var is missing'
)
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
apiVersion: '2022-11-15',
})
const claimablePlan = await prisma.claimableCustomPlan.findFirst({
where: { workspaceId: process.env.WORKSPACE_ID, claimedAt: null },
})
if (!claimablePlan) throw Error('No claimable plan found')
console.log('Claimable plan found')
const { items: existingItems } = await stripe.subscriptions.retrieve(
process.env.STRIPE_SUBSCRIPTION_ID
)
if (existingItems.data.length === 0) return
const planItem = existingItems.data.find(
(item) => item.plan.product === process.env.STRIPE_PRODUCT_ID
)
if (!planItem) throw Error("Couldn't find plan item")
console.log('Updating subscription...')
await stripe.subscriptions.update(process.env.STRIPE_SUBSCRIPTION_ID, {
items: [
{
id: planItem.id,
price_data: {
currency: 'usd',
tax_behavior: 'exclusive',
recurring: { interval: 'month' },
product: process.env.STRIPE_PRODUCT_ID,
unit_amount: claimablePlan.price * 100,
},
},
...existingItems.data
.filter((item) => item.plan.product !== process.env.STRIPE_PRODUCT_ID)
.map((item) => ({ id: item.id, deleted: true })),
],
})
console.log('Subscription updated!')
console.log('Updating workspace...')
await prisma.workspace.update({
where: { id: process.env.WORKSPACE_ID },
data: {
plan: Plan.CUSTOM,
customChatsLimit: claimablePlan.chatsLimit,
customSeatsLimit: claimablePlan.seatsLimit,
customStorageLimit: claimablePlan.storageLimit,
},
})
console.log('Workspace updated!')
console.log('Updating claimable plan...')
await prisma.claimableCustomPlan.update({
where: { id: claimablePlan.id },
data: { claimedAt: new Date() },
})
console.log('Claimable plan updated!')
}
setCustomPlan()