mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 08:13:56 +10:00
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { env } from 'next-runtime-env';
|
|
|
|
import { IS_BILLING_ENABLED } from '../constants/app';
|
|
import type { Subscription } from '.prisma/client';
|
|
import { SubscriptionStatus } from '.prisma/client';
|
|
|
|
/**
|
|
* Returns true if there is a subscription that is active and is one of the provided price IDs.
|
|
*/
|
|
export const subscriptionsContainsActivePlan = (
|
|
subscriptions: Subscription[],
|
|
priceIds: string[],
|
|
) => {
|
|
return subscriptions.some(
|
|
(subscription) =>
|
|
subscription.status === SubscriptionStatus.ACTIVE && priceIds.includes(subscription.priceId),
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Returns true if there is a subscription that is active and is one of the provided product IDs.
|
|
*/
|
|
export const subscriptionsContainsActiveProductId = (
|
|
subscriptions: Subscription[],
|
|
productId: string[],
|
|
) => {
|
|
return subscriptions.some(
|
|
(subscription) =>
|
|
subscription.status === SubscriptionStatus.ACTIVE && productId.includes(subscription.planId),
|
|
);
|
|
};
|
|
|
|
export const subscriptionsContainActiveEnterprisePlan = (
|
|
subscriptions?: Subscription[],
|
|
): boolean => {
|
|
const enterprisePlanId = env('NEXT_PUBLIC_STRIPE_ENTERPRISE_PLAN_MONTHLY_PRICE_ID');
|
|
|
|
if (!enterprisePlanId || !subscriptions || !IS_BILLING_ENABLED()) {
|
|
return false;
|
|
}
|
|
|
|
const acceptableStatuses: SubscriptionStatus[] = [
|
|
SubscriptionStatus.ACTIVE,
|
|
SubscriptionStatus.PAST_DUE,
|
|
];
|
|
|
|
return subscriptions.some(
|
|
(subscription) =>
|
|
acceptableStatuses.includes(subscription.status) && enterprisePlanId === subscription.priceId,
|
|
);
|
|
};
|