From 3713238390e3ebbacc7bdd56b3f0a94534a7d81f Mon Sep 17 00:00:00 2001 From: Rhys Howell Date: Mon, 25 Nov 2024 15:05:26 -0500 Subject: [PATCH 1/4] chore(compass-web): add telemetryAnonymousId to user preferences, add gen ai feature enablement env to sandbox --- packages/compass-web/sandbox/index.tsx | 14 +++++++++++--- packages/compass-web/src/connection-storage.tsx | 2 +- packages/compass-web/src/entrypoint.tsx | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/compass-web/sandbox/index.tsx b/packages/compass-web/sandbox/index.tsx index 9404f893c3c..f7fbd05e9f8 100644 --- a/packages/compass-web/sandbox/index.tsx +++ b/packages/compass-web/sandbox/index.tsx @@ -2,7 +2,7 @@ import React, { useLayoutEffect } from 'react'; import ReactDOM from 'react-dom'; import { resetGlobalCSS, css, Body } from '@mongodb-js/compass-components'; import { CompassWeb } from '../src/index'; -import { SandboxConnectionStorageProviver } from '../src/connection-storage'; +import { SandboxConnectionStorageProvider } from '../src/connection-storage'; import { sandboxLogger } from './sandbox-logger'; import { sandboxTelemetry } from './sandbox-telemetry'; import { useAtlasProxySignIn } from './sandbox-atlas-sign-in'; @@ -41,6 +41,9 @@ const App = () => { ? 'web-sandbox-atlas-dev' : 'web-sandbox-atlas'; + const overrideGenAIEnablement = + process.env.COMPASS_WEB_GEN_AI_ENABLEMENT === 'true'; + useLayoutEffect(() => { getMetaEl('csrf-token').setAttribute('content', csrfToken ?? ''); getMetaEl('csrf-time').setAttribute('content', csrfTime ?? ''); @@ -53,7 +56,7 @@ const App = () => { const isAtlas = status === 'signed-in'; return ( - { enableCreatingNewConnections: !isAtlas, enableGlobalWrites: isAtlas, enableRollingIndexes: isAtlas, + enableGenAIFeaturesAtlasProject: isAtlas && overrideGenAIEnablement, + enableGenAISampleDocumentPassingOnAtlasProject: + isAtlas && overrideGenAIEnablement, + enableGenAIFeaturesAtlasOrg: isAtlas && overrideGenAIEnablement, + optInDataExplorerGenAIFeatures: isAtlas && overrideGenAIEnablement, }} onTrack={sandboxTelemetry.track} onDebug={sandboxLogger.debug} onLog={sandboxLogger.log} > - + ); }; diff --git a/packages/compass-web/src/connection-storage.tsx b/packages/compass-web/src/connection-storage.tsx index c7aa83ae45a..5db3f1abaad 100644 --- a/packages/compass-web/src/connection-storage.tsx +++ b/packages/compass-web/src/connection-storage.tsx @@ -311,7 +311,7 @@ const SandboxExtraConnectionOptionsContext = React.createContext< * non-Atlas deployment * @internal */ -export const SandboxConnectionStorageProviver = ({ +export const SandboxConnectionStorageProvider = ({ value, extraConnectionOptions, children, diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index b7c679cda4c..0b3ba1ca280 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -3,6 +3,7 @@ import AppRegistry, { AppRegistryProvider, GlobalAppRegistryProvider, } from 'hadron-app-registry'; +import { UUID } from 'bson'; import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import { useConnectionActions } from '@mongodb-js/compass-connections/provider'; import { CompassInstanceStorePlugin } from '@mongodb-js/compass-app-stores'; @@ -284,6 +285,7 @@ const CompassWeb = ({ enableCreatingNewConnections: false, enableGlobalWrites: false, optInDataExplorerGenAIFeatures: false, + telemetryAnonymousId: new UUID().toString(), ...initialPreferences, }) ); From 6cc819e11a5cae499cc0f8006d9e00867bdf4847 Mon Sep 17 00:00:00 2001 From: Rhys Howell Date: Tue, 26 Nov 2024 06:55:48 -0500 Subject: [PATCH 2/4] fixup: use persisted state for the entrypoint --- packages/compass-web/src/entrypoint.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index 0b3ba1ca280..dff1d467625 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -15,7 +15,11 @@ import { DatabasesWorkspaceTab, CollectionsWorkspaceTab, } from '@mongodb-js/compass-databases-collections'; -import { CompassComponentsProvider, css } from '@mongodb-js/compass-components'; +import { + CompassComponentsProvider, + css, + usePersistedState, +} from '@mongodb-js/compass-components'; import { WorkspaceTab as CollectionWorkspace, CollectionTabsProvider, @@ -262,6 +266,9 @@ const CompassWeb = ({ onLog, onDebug, }); + const [telemetryAnonymousId] = usePersistedState('telemetryAnonymousId', () => + new UUID().toString() + ); const preferencesAccess = useRef( new CompassWebPreferencesAccess({ @@ -285,7 +292,7 @@ const CompassWeb = ({ enableCreatingNewConnections: false, enableGlobalWrites: false, optInDataExplorerGenAIFeatures: false, - telemetryAnonymousId: new UUID().toString(), + telemetryAnonymousId, ...initialPreferences, }) ); From 9c45ad72f8daba736b5f2b368edc04f7aa71689b Mon Sep 17 00:00:00 2001 From: Rhys Howell Date: Tue, 26 Nov 2024 13:05:56 -0500 Subject: [PATCH 3/4] fixup: use telemetryAtlasUserId instead --- .../compass-generative-ai/src/atlas-ai-service.ts | 5 +++-- packages/compass-web/src/entrypoint.tsx | 11 +---------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/compass-generative-ai/src/atlas-ai-service.ts b/packages/compass-generative-ai/src/atlas-ai-service.ts index ef89e1602fc..2983b5c365d 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.ts @@ -8,7 +8,7 @@ import { AtlasServiceError } from '@mongodb-js/atlas-service/renderer'; import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import type { Document } from 'mongodb'; import type { Logger } from '@mongodb-js/compass-logging'; -import { EJSON } from 'bson'; +import { EJSON, UUID } from 'bson'; import { signIntoAtlasWithModalPrompt } from './store/atlas-signin-reducer'; import { getStore } from './store/atlas-ai-store'; import { optIntoGenAIWithModalPrompt } from './store/atlas-optin-reducer'; @@ -245,7 +245,8 @@ export class AtlasAiService { if (urlId === 'user-access') { return this.atlasService.cloudEndpoint( aiURLConfig[this.apiURLPreset][urlId]( - this.preferences.getPreferencesUser().id + this.preferences.getPreferences().telemetryAtlasUserId ?? + new UUID().toString() ) ); } diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index dff1d467625..b7c679cda4c 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -3,7 +3,6 @@ import AppRegistry, { AppRegistryProvider, GlobalAppRegistryProvider, } from 'hadron-app-registry'; -import { UUID } from 'bson'; import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import { useConnectionActions } from '@mongodb-js/compass-connections/provider'; import { CompassInstanceStorePlugin } from '@mongodb-js/compass-app-stores'; @@ -15,11 +14,7 @@ import { DatabasesWorkspaceTab, CollectionsWorkspaceTab, } from '@mongodb-js/compass-databases-collections'; -import { - CompassComponentsProvider, - css, - usePersistedState, -} from '@mongodb-js/compass-components'; +import { CompassComponentsProvider, css } from '@mongodb-js/compass-components'; import { WorkspaceTab as CollectionWorkspace, CollectionTabsProvider, @@ -266,9 +261,6 @@ const CompassWeb = ({ onLog, onDebug, }); - const [telemetryAnonymousId] = usePersistedState('telemetryAnonymousId', () => - new UUID().toString() - ); const preferencesAccess = useRef( new CompassWebPreferencesAccess({ @@ -292,7 +284,6 @@ const CompassWeb = ({ enableCreatingNewConnections: false, enableGlobalWrites: false, optInDataExplorerGenAIFeatures: false, - telemetryAnonymousId, ...initialPreferences, }) ); From a09b1cc7bc8b758be6401caad53b977dcd022b5f Mon Sep 17 00:00:00 2001 From: Rhys Howell Date: Tue, 26 Nov 2024 13:21:18 -0500 Subject: [PATCH 4/4] fixup: use telemetryAtlasUserId for all user reqs --- .../compass-generative-ai/src/atlas-ai-service.spec.ts | 9 +++------ packages/compass-generative-ai/src/atlas-ai-service.ts | 5 ++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts index ad904fb4a68..1ecba4a08ca 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts @@ -15,11 +15,6 @@ const ATLAS_USER = { sub: '123', }; -const PREFERENCES_USER = { - id: '1234', - createdAt: new Date(), -}; - const BASE_URL = 'http://example.com'; const mockConnectionInfo: ConnectionInfo = { @@ -68,7 +63,9 @@ describe('AtlasAiService', function () { beforeEach(async function () { sandbox = Sinon.createSandbox(); preferences = await createSandboxFromDefaultPreferences(); - preferences['getPreferencesUser'] = () => PREFERENCES_USER; + await preferences.savePreferences({ + telemetryAtlasUserId: '1234', + }); }); afterEach(function () { diff --git a/packages/compass-generative-ai/src/atlas-ai-service.ts b/packages/compass-generative-ai/src/atlas-ai-service.ts index 2983b5c365d..5264a5366fc 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.ts @@ -265,7 +265,10 @@ export class AtlasAiService { const urlConfig = aiURLConfig[this.apiURLPreset][urlId]; const urlPath = typeof urlConfig === 'function' - ? urlConfig(this.preferences.getPreferencesUser().id) + ? urlConfig( + this.preferences.getPreferences().telemetryAtlasUserId ?? + new UUID().toString() + ) : urlConfig; return this.atlasService.adminApiEndpoint(urlPath);