diff --git a/packages/core/src/client.tsx b/packages/core/src/client.tsx index 964bd46c..4acae002 100644 --- a/packages/core/src/client.tsx +++ b/packages/core/src/client.tsx @@ -20,6 +20,7 @@ export const createClient = (config: Config) => { const segmentStore = new SovranStorage({ storeId: config.writeKey, storePersistor: config.storePersistor, + storePersistorSaveDelay: config.storePersistorSaveDelay, }); const client = new SegmentClient({ diff --git a/packages/core/src/plugins/QueueFlushingPlugin.ts b/packages/core/src/plugins/QueueFlushingPlugin.ts index 7b7325c4..ac0d6ddb 100644 --- a/packages/core/src/plugins/QueueFlushingPlugin.ts +++ b/packages/core/src/plugins/QueueFlushingPlugin.ts @@ -42,7 +42,7 @@ export class QueueFlushingPlugin extends UtilityPlugin { persist: { storeId: `${config.writeKey}-${this.storeKey}`, persistor: config.storePersistor, - saveDelay: 0, + saveDelay: config.storePersistorSaveDelay ?? 0, }, } ); diff --git a/packages/core/src/storage/sovranStorage.ts b/packages/core/src/storage/sovranStorage.ts index e707dda0..2e0c144e 100644 --- a/packages/core/src/storage/sovranStorage.ts +++ b/packages/core/src/storage/sovranStorage.ts @@ -138,6 +138,7 @@ function createStoreGetter< export class SovranStorage implements Storage { private storeId: string; private storePersistor?: Persistor; + private storePersistorSaveDelay?: number; private readinessStore: Store; private contextStore: Store<{ context: DeepPartial }>; private settingsStore: Store<{ settings: SegmentAPIIntegrations }>; @@ -165,6 +166,7 @@ export class SovranStorage implements Storage { constructor(config: StorageConfig) { this.storeId = config.storeId; this.storePersistor = config.storePersistor; + this.storePersistorSaveDelay = config.storePersistorSaveDelay; this.readinessStore = createStore({ hasRestoredContext: false, hasRestoredSettings: false, @@ -239,6 +241,7 @@ export class SovranStorage implements Storage { persist: { storeId: `${this.storeId}-settings`, persistor: this.storePersistor, + saveDelay: this.storePersistorSaveDelay, onInitialized: markAsReadyGenerator('hasRestoredSettings'), }, } @@ -274,6 +277,7 @@ export class SovranStorage implements Storage { persist: { storeId: `${this.storeId}-filters`, persistor: this.storePersistor, + saveDelay: this.storePersistorSaveDelay, onInitialized: markAsReadyGenerator('hasRestoredFilters'), }, }); @@ -310,6 +314,7 @@ export class SovranStorage implements Storage { persist: { storeId: `${this.storeId}-userInfo`, persistor: this.storePersistor, + saveDelay: this.storePersistorSaveDelay, onInitialized: markAsReadyGenerator('hasRestoredUserInfo'), }, } diff --git a/packages/core/src/storage/types.ts b/packages/core/src/storage/types.ts index 78c70f31..02868f8c 100644 --- a/packages/core/src/storage/types.ts +++ b/packages/core/src/storage/types.ts @@ -87,4 +87,5 @@ export type DeepLinkData = { export type StorageConfig = { storeId: string; storePersistor?: Persistor; + storePersistorSaveDelay?: number; }; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index a208cd19..af4d581b 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -145,6 +145,7 @@ export type Config = { autoAddSegmentDestination?: boolean; collectDeviceId?: boolean; storePersistor?: Persistor; + storePersistorSaveDelay?: number; proxy?: string; cdnProxy?: string; errorHandler?: (error: SegmentError) => void;