diff --git a/packages/frontend/editor-ui/src/Interface.ts b/packages/frontend/editor-ui/src/Interface.ts index 48305ff1c03..8c87681d5b7 100644 --- a/packages/frontend/editor-ui/src/Interface.ts +++ b/packages/frontend/editor-ui/src/Interface.ts @@ -79,6 +79,7 @@ declare global { api_host?: string; autocapture?: boolean; disable_session_recording?: boolean; + advanced_disable_feature_flags?: boolean; debug?: boolean; bootstrap?: { distinctID?: string; diff --git a/packages/frontend/editor-ui/src/app/stores/posthog.store.test.ts b/packages/frontend/editor-ui/src/app/stores/posthog.store.test.ts index ab55c56ca49..79094f9fb58 100644 --- a/packages/frontend/editor-ui/src/app/stores/posthog.store.test.ts +++ b/packages/frontend/editor-ui/src/app/stores/posthog.store.test.ts @@ -164,6 +164,30 @@ describe('Posthog store', () => { ); }); + it('disables client-side flag refetch when flags are bootstrapped', () => { + const posthog = usePostHog(); + posthog.init({ test: 'variant' }); + + expect(window.posthog?.init).toHaveBeenCalledWith( + DEFAULT_POSTHOG_SETTINGS.apiKey, + expect.objectContaining({ + advanced_disable_feature_flags: true, + }), + ); + }); + + it('keeps client-side flag refetch when flags are not bootstrapped', () => { + const posthog = usePostHog(); + posthog.init(); + + expect(window.posthog?.init).toHaveBeenCalledWith( + DEFAULT_POSTHOG_SETTINGS.apiKey, + expect.not.objectContaining({ + advanced_disable_feature_flags: expect.anything(), + }), + ); + }); + it('should identify user', () => { const posthog = usePostHog(); posthog.init(); diff --git a/packages/frontend/editor-ui/src/app/stores/posthog.store.ts b/packages/frontend/editor-ui/src/app/stores/posthog.store.ts index 7cb765a8145..fe8d73c4cc9 100644 --- a/packages/frontend/editor-ui/src/app/stores/posthog.store.ts +++ b/packages/frontend/editor-ui/src/app/stores/posthog.store.ts @@ -189,6 +189,10 @@ export const usePostHog = defineStore('posthog', () => { distinctID: distinctId, featureFlags: evaluatedFeatureFlags, }; + // Flags are server-evaluated and bootstrapped; without this, identify()/group() + // in the loaded callback each trigger a billed /flags refetch of values the + // client already has. + options.advanced_disable_feature_flags = true; } window.posthog?.init(config.apiKey, {