Subscription.utils.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import type { OrgSubscription, PlanId, ProjectSelectedAddon } from '@/data/subscriptions/types'
  2. import { IS_PLATFORM } from '@/lib/constants'
  3. export const getAddons = (selectedAddons: ProjectSelectedAddon[]) => {
  4. const computeInstance = selectedAddons.find((addon) => addon.type === 'compute_instance')
  5. const pitr = selectedAddons.find((addon) => addon.type === 'pitr')
  6. const customDomain = selectedAddons.find((addon) => addon.type === 'custom_domain')
  7. const ipv4 = selectedAddons.find((addon) => addon.type === 'ipv4')
  8. return { computeInstance, pitr, customDomain, ipv4 }
  9. }
  10. export const subscriptionHasHipaaAddon = (subscription?: OrgSubscription): boolean => {
  11. if (!IS_PLATFORM) return false
  12. return (subscription?.addons ?? []).some(
  13. (addon) => addon.briven_prod_id === 'addon_security_hipaa'
  14. )
  15. }
  16. export const billingPartnerLabel = (billingPartner?: string) => {
  17. if (!billingPartner) return billingPartner
  18. switch (billingPartner) {
  19. case 'fly':
  20. return 'Fly.io'
  21. case 'aws':
  22. return 'AWS'
  23. case 'vercel_marketplace':
  24. return 'Vercel'
  25. default:
  26. return billingPartner
  27. }
  28. }
  29. type PlanChangeType = 'upgrade' | 'downgrade' | 'none'
  30. export const getPlanChangeType = (
  31. fromPlan: PlanId | undefined,
  32. toPlan: PlanId | undefined
  33. ): PlanChangeType => {
  34. const planChangeTypes: Record<PlanId, Record<PlanId, PlanChangeType>> = {
  35. free: {
  36. free: 'none',
  37. pro: 'upgrade',
  38. team: 'upgrade',
  39. enterprise: 'upgrade',
  40. platform: 'upgrade',
  41. },
  42. pro: {
  43. free: 'downgrade',
  44. pro: 'none',
  45. team: 'upgrade',
  46. enterprise: 'upgrade',
  47. platform: 'upgrade',
  48. },
  49. team: {
  50. free: 'downgrade',
  51. pro: 'downgrade',
  52. team: 'none',
  53. enterprise: 'upgrade',
  54. platform: 'upgrade',
  55. },
  56. enterprise: {
  57. free: 'downgrade',
  58. pro: 'downgrade',
  59. team: 'downgrade',
  60. enterprise: 'none',
  61. platform: 'upgrade',
  62. },
  63. platform: {
  64. free: 'downgrade',
  65. pro: 'downgrade',
  66. team: 'downgrade',
  67. enterprise: 'downgrade',
  68. platform: 'none',
  69. },
  70. }
  71. if (!fromPlan || !toPlan) {
  72. return 'none'
  73. }
  74. return planChangeTypes[fromPlan]?.[toPlan] ?? 'none'
  75. }