Files
sign/packages/lib/utils/billing.ts

52 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-03-28 13:13:29 +08:00
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),
);
};
2024-12-12 01:10:01 +09:00
2024-06-06 14:46:48 +10:00
/**
* 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),
);
};
2024-03-28 13:13:29 +08:00
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;
}
2024-12-12 01:10:01 +09:00
const acceptableStatuses: SubscriptionStatus[] = [
SubscriptionStatus.ACTIVE,
SubscriptionStatus.PAST_DUE,
];
return subscriptions.some(
(subscription) =>
acceptableStatuses.includes(subscription.status) && enterprisePlanId === subscription.priceId,
);
2024-03-28 13:13:29 +08:00
};