Skip to content

Commit 2f0197a

Browse files
authored
chore: realtime max message size entitlement (#41409)
Adds the Realtime max message size entitlement ### Testing - Head to `project/_/realtime/settings` with an Org on the Pro with the Spend Cap disabled - Assert that the `Max payload size in KB` cannot exceed 3000 - Repeat the steps for max concurrent users and max presense events per second <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Realtime settings now automatically reflect your subscription entitlements with dynamic maximums for payload size, concurrent user limits, and event rates. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 83b97cf commit 2f0197a

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

apps/studio/components/interfaces/Realtime/RealtimeSettings.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
2121
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
2222
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
23+
import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements'
2324
import {
2425
Button,
2526
Card,
@@ -89,15 +90,38 @@ export const RealtimeSettings = () => {
8990
},
9091
})
9192

93+
const { getEntitlementMax: getEntitledMaxPayloadSize } = useCheckEntitlements(
94+
'realtime.max_payload_size_in_kb'
95+
)
96+
const entitledMaxPayloadSize = getEntitledMaxPayloadSize() ?? 3000
97+
98+
const { getEntitlementMax: getEntitledMaxConcurrentUsers } = useCheckEntitlements(
99+
'realtime.max_concurrent_users'
100+
)
101+
const entitledMaxConcurrentUsers = getEntitledMaxConcurrentUsers() ?? 50000
102+
103+
const { getEntitlementMax: getEntitledMaxEventsPerSecond } = useCheckEntitlements(
104+
'realtime.max_events_per_second'
105+
)
106+
const entitledMaxEventsPerSecond = getEntitledMaxEventsPerSecond() ?? 10000
107+
108+
const { getEntitlementMax: getEntitledMaxPresenceEventsPerSecond } = useCheckEntitlements(
109+
'realtime.max_presence_events_per_second'
110+
)
111+
const entitledMaxPresenceEventsPerSecond = getEntitledMaxPresenceEventsPerSecond() ?? 10000
112+
92113
const FormSchema = z.object({
93114
connection_pool: z.coerce
94115
.number()
95116
.min(1)
96117
.max(maxConn?.maxConnections ?? 100),
97-
max_concurrent_users: z.coerce.number().min(1).max(50000),
98-
max_events_per_second: z.coerce.number().min(1).max(10000),
99-
max_presence_events_per_second: z.coerce.number().min(1).max(10000),
100-
max_payload_size_in_kb: z.coerce.number().min(1).max(3000),
118+
max_concurrent_users: z.coerce.number().min(1).max(entitledMaxConcurrentUsers),
119+
max_events_per_second: z.coerce.number().min(1).max(entitledMaxEventsPerSecond),
120+
max_presence_events_per_second: z.coerce
121+
.number()
122+
.min(1)
123+
.max(entitledMaxPresenceEventsPerSecond),
124+
max_payload_size_in_kb: z.coerce.number().min(1).max(entitledMaxPayloadSize),
101125
suspend: z.boolean(),
102126
// [Joshen] These fields are temporarily hidden from the UI
103127
// max_bytes_per_second: z.coerce.number().min(1).max(10000000),

apps/studio/hooks/misc/useCheckEntitlements.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ function getEntitlementSetValues(entitlement: Entitlement | null): string[] {
5555
: []
5656
}
5757

58+
function getEntitlementMax(entitlement: Entitlement | null): number | undefined {
59+
return isEntitlementUnlimited(entitlement)
60+
? Number.MAX_SAFE_INTEGER
61+
: getEntitlementNumericValue(entitlement)
62+
}
63+
5864
export function useCheckEntitlements(
5965
featureKey: FeatureKey,
6066
organizationSlug?: string,
@@ -110,5 +116,6 @@ export function useCheckEntitlements(
110116
getEntitlementNumericValue: () => getEntitlementNumericValue(entitlement),
111117
isEntitlementUnlimited: () => isEntitlementUnlimited(entitlement),
112118
getEntitlementSetValues: () => getEntitlementSetValues(entitlement),
119+
getEntitlementMax: () => getEntitlementMax(entitlement),
113120
}
114121
}

0 commit comments

Comments
 (0)