diff --git a/server/lib/billing/features.ts b/server/lib/billing/features.ts index 9eade18f..501fba36 100644 --- a/server/lib/billing/features.ts +++ b/server/lib/billing/features.ts @@ -57,7 +57,7 @@ export function getFeatureIdByMetricId( export type FeaturePriceSet = Partial>; export const homeLabFeaturePriceSet: FeaturePriceSet = { - [FeatureId.TIER1]: "price_1SxgpPDCpkOb237Bfo4rIsoT" + [FeatureId.TIER1]: "price_1SzVE3D3Ee2Ir7Wm6wT5Dl3G" }; export const homeLabFeaturePriceSetSandbox: FeaturePriceSet = { @@ -76,7 +76,7 @@ export function getHomeLabFeaturePriceSet(): FeaturePriceSet { } export const tier2FeaturePriceSet: FeaturePriceSet = { - [FeatureId.USERS]: "price_1SxaEHDCpkOb237BD9lBkPiR" + [FeatureId.USERS]: "price_1SzVCcD3Ee2Ir7Wmn6U3KvPN" }; export const tier2FeaturePriceSetSandbox: FeaturePriceSet = { @@ -95,7 +95,7 @@ export function getStarterFeaturePriceSet(): FeaturePriceSet { } export const tier3FeaturePriceSet: FeaturePriceSet = { - [FeatureId.USERS]: "price_1SxaEODCpkOb237BiXdCBSfs" + [FeatureId.USERS]: "price_1SzVDKD3Ee2Ir7WmPtOKNusv" }; export const tier3FeaturePriceSetSandbox: FeaturePriceSet = { diff --git a/server/routers/org/updateOrg.ts b/server/routers/org/updateOrg.ts index 707691f5..e94be3a9 100644 --- a/server/routers/org/updateOrg.ts +++ b/server/routers/org/updateOrg.ts @@ -120,7 +120,7 @@ export async function updateOrg( // Determine max allowed retention days based on tier let maxRetentionDays: number | null = null; if (!tier) { - maxRetentionDays = 0; + maxRetentionDays = 3; } else if (tier === "tier1") { maxRetentionDays = 7; } else if (tier === "tier2") { diff --git a/src/app/[orgId]/settings/general/security/page.tsx b/src/app/[orgId]/settings/general/security/page.tsx index 5b98bfa6..a7b5da03 100644 --- a/src/app/[orgId]/settings/general/security/page.tsx +++ b/src/app/[orgId]/settings/general/security/page.tsx @@ -137,7 +137,7 @@ function LogRetentionSectionForm({ org }: SectionFormProps) { const router = useRouter(); const t = useTranslations(); - const { isPaidUser, hasSaasSubscription } = usePaidStatus(); + const { isPaidUser, subscriptionTier } = usePaidStatus(); const [, formAction, loadingSave] = useActionState(performSave, null); const { env } = useEnvContext(); @@ -219,13 +219,31 @@ function LogRetentionSectionForm({ org }: SectionFormProps) { {LOG_RETENTION_OPTIONS.filter( (option) => { - if ( - hasSaasSubscription && - option.value > - 30 - ) { + let maxDays: number; + + if (!subscriptionTier) { + // No tier + maxDays = 3; + } else if (subscriptionTier == "enterprise") { + // Enterprise - no limit + return true; + } else if (subscriptionTier == "tier3") { + maxDays = 90; + } else if (subscriptionTier == "tier2") { + maxDays = 30; + } else if (subscriptionTier == "tier1") { + maxDays = 7; + } else { + // Default to most restrictive + maxDays = 3; + } + + // Filter out options that exceed the max + // Special values: -1 (forever) and 9001 (end of year) should be filtered + if (option.value < 0 || option.value > maxDays) { return false; } + return true; } ).map((option) => ( @@ -294,7 +312,36 @@ function LogRetentionSectionForm({ org }: SectionFormProps) { /> - {LOG_RETENTION_OPTIONS.map( + {LOG_RETENTION_OPTIONS.filter( + (option) => { + let maxDays: number; + + if (!subscriptionTier) { + // No tier + maxDays = 3; + } else if (subscriptionTier == "enterprise") { + // Enterprise - no limit + return true; + } else if (subscriptionTier == "tier3") { + maxDays = 90; + } else if (subscriptionTier == "tier2") { + maxDays = 30; + } else if (subscriptionTier == "tier1") { + maxDays = 7; + } else { + // Default to most restrictive + maxDays = 3; + } + + // Filter out options that exceed the max + // Special values: -1 (forever) and 9001 (end of year) should be filtered + if (option.value < 0 || option.value > maxDays) { + return false; + } + + return true; + } + ).map( ( option ) => ( @@ -362,7 +409,36 @@ function LogRetentionSectionForm({ org }: SectionFormProps) { /> - {LOG_RETENTION_OPTIONS.map( + {LOG_RETENTION_OPTIONS.filter( + (option) => { + let maxDays: number; + + if (!subscriptionTier) { + // No tier + maxDays = 3; + } else if (subscriptionTier == "enterprise") { + // Enterprise - no limit + return true; + } else if (subscriptionTier == "tier3") { + maxDays = 90; + } else if (subscriptionTier == "tier2") { + maxDays = 30; + } else if (subscriptionTier == "tier1") { + maxDays = 7; + } else { + // Default to most restrictive + maxDays = 3; + } + + // Filter out options that exceed the max + // Special values: -1 (forever) and 9001 (end of year) should be filtered + if (option.value < 0 || option.value > maxDays) { + return false; + } + + return true; + } + ).map( ( option ) => ( diff --git a/src/app/[orgId]/settings/logs/access/page.tsx b/src/app/[orgId]/settings/logs/access/page.tsx index c48c5c27..810022b9 100644 --- a/src/app/[orgId]/settings/logs/access/page.tsx +++ b/src/app/[orgId]/settings/logs/access/page.tsx @@ -618,9 +618,9 @@ export default function GeneralPage() { isRefreshing={isRefreshing} onExport={() => startTransition(exportData)} isExporting={isExporting} - isExportDisabled={ - !isPaidUser(tierMatrix.accessLogs) || build === "oss" - } + // isExportDisabled={ // not disabling this because the user should be able to click the button and get the feedback about needing to upgrade the plan + // !isPaidUser(tierMatrix.accessLogs) || build === "oss" + // } onDateRangeChange={handleDateRangeChange} dateRange={{ start: dateRange.startDate, diff --git a/src/app/[orgId]/settings/logs/action/page.tsx b/src/app/[orgId]/settings/logs/action/page.tsx index 3371deed..4a8f50f6 100644 --- a/src/app/[orgId]/settings/logs/action/page.tsx +++ b/src/app/[orgId]/settings/logs/action/page.tsx @@ -472,9 +472,9 @@ export default function GeneralPage() { onRefresh={refreshData} isRefreshing={isRefreshing} onExport={() => startTransition(exportData)} - isExportDisabled={ - !isPaidUser(tierMatrix.logExport) || build === "oss" - } + // isExportDisabled={ // not disabling this because the user should be able to click the button and get the feedback about needing to upgrade the plan + // !isPaidUser(tierMatrix.logExport) || build === "oss" + // } isExporting={isExporting} onDateRangeChange={handleDateRangeChange} dateRange={{