diff --git a/packages/plugin-segment/src/plugin.ts b/packages/plugin-segment/src/plugin.ts index ebc99d9e..4a5060d5 100644 --- a/packages/plugin-segment/src/plugin.ts +++ b/packages/plugin-segment/src/plugin.ts @@ -15,7 +15,7 @@ export const segmentIntegrationPlugin: SegmentIntegrationPlugin = ( return options.instance || snippetInstance(options.instanceKey); }; getInstance(); - let initialized = false; + let ready = false; const plugin: IntegrationPlugin = { name: '@amplitude/experiment-plugin-segment', type: 'integration', @@ -23,7 +23,7 @@ export const segmentIntegrationPlugin: SegmentIntegrationPlugin = ( const instance = getInstance(); return new Promise((resolve) => { instance.ready(() => { - initialized = true; + ready = true; resolve(); }); // If the segment SDK is installed via the @segment/analytics-next npm @@ -31,8 +31,8 @@ export const segmentIntegrationPlugin: SegmentIntegrationPlugin = ( if (!options.instance) { const interval = safeGlobal.setInterval(() => { const instance = getInstance(); - if (instance.initialized || instance.instance?.initialized) { - initialized = true; + if (instance.initialized) { + ready = true; safeGlobal.clearInterval(interval); resolve(); } @@ -42,7 +42,7 @@ export const segmentIntegrationPlugin: SegmentIntegrationPlugin = ( }, getUser(): ExperimentUser { const instance = getInstance(); - if (initialized) { + if (ready) { return { user_id: instance.user().id(), device_id: instance.user().anonymousId(), @@ -60,7 +60,7 @@ export const segmentIntegrationPlugin: SegmentIntegrationPlugin = ( }, track(event: ExperimentEvent): boolean { const instance = getInstance(); - if (!initialized) return false; + if (!ready) return false; instance.track(event.eventType, event.eventProperties); return true; }, diff --git a/packages/plugin-segment/src/snippet.ts b/packages/plugin-segment/src/snippet.ts index f5859449..c4e3b97f 100644 --- a/packages/plugin-segment/src/snippet.ts +++ b/packages/plugin-segment/src/snippet.ts @@ -17,6 +17,10 @@ export const snippetInstance = ( // Create a queue, but don't obliterate an existing one! const analytics = (safeGlobal[key] = safeGlobal[key] || []); + // Return the actual instance if the global analytics is nested in an instance. + if (analytics.instance && analytics.instance.initialize) { + return analytics.instance; + } // If the real analytics.js is already on the page return. if (analytics.initialize) { return analytics;