diff --git a/packages/analytics-controller/CHANGELOG.md b/packages/analytics-controller/CHANGELOG.md index a4491d304d..5240eaed16 100644 --- a/packages/analytics-controller/CHANGELOG.md +++ b/packages/analytics-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Clear persisted analytics event queue entries after the delivery callback runs, including when the callback reports an error. ([#8934](https://github.com/MetaMask/core/pull/8934)) + ## [1.1.0] ### Added diff --git a/packages/analytics-controller/src/AnalyticsController.test.ts b/packages/analytics-controller/src/AnalyticsController.test.ts index 638683998a..377dcae63e 100644 --- a/packages/analytics-controller/src/AnalyticsController.test.ts +++ b/packages/analytics-controller/src/AnalyticsController.test.ts @@ -1301,7 +1301,7 @@ describe('AnalyticsController', () => { expect(controller.state.eventQueue).toStrictEqual({}); }); - it('keeps queued payloads when the adapter callback receives an error', async () => { + it('clears queued payloads when the adapter callback receives an error', async () => { const mockAdapter = createMockAdapter(); const { controller } = await setupController({ state: { @@ -1317,14 +1317,7 @@ describe('AnalyticsController', () => { const deliveryOptions = getDeliveryOptions(mockAdapter.track); deliveryOptions.callback?.(new Error('Segment failed')); - const [messageId] = Object.keys(controller.state.eventQueue ?? {}); - - expect(controller.state.eventQueue).toHaveProperty(messageId); - expect(controller.state.eventQueue?.[messageId]).toMatchObject({ - type: 'track', - eventName: 'test_event', - properties: { prop: 'value' }, - }); + expect(controller.state.eventQueue).toStrictEqual({}); }); it('keeps queued payloads when the platform adapter throws', async () => { @@ -1360,7 +1353,7 @@ describe('AnalyticsController', () => { let adapterMutationCompleted = false; jest .spyOn(mockAdapter, 'track') - .mockImplementation((_eventName, properties, context, options) => { + .mockImplementation((_eventName, properties, context) => { ( properties as { nested: { adapterNormalized?: boolean } } ).nested.adapterNormalized = true; @@ -1368,9 +1361,6 @@ describe('AnalyticsController', () => { context as { page: { adapterNormalized?: boolean } } ).page.adapterNormalized = true; adapterMutationCompleted = true; - (options as AnalyticsDeliveryOptions).callback?.( - new Error('Segment failed'), - ); }); const { controller } = await setupController({ state: { diff --git a/packages/analytics-controller/src/AnalyticsController.ts b/packages/analytics-controller/src/AnalyticsController.ts index 88a254e4b4..0981690487 100644 --- a/packages/analytics-controller/src/AnalyticsController.ts +++ b/packages/analytics-controller/src/AnalyticsController.ts @@ -555,7 +555,6 @@ export class AnalyticsController extends BaseController< messageId: queuedEvent.messageId, error, }); - return; } this.#removeQueuedEvent(queuedEvent.messageId);