11import { Signal } from '@segment/analytics-signals-runtime'
22import { openDB , DBSchema , IDBPDatabase } from 'idb'
33import { logger } from '../../lib/logger'
4+ import { WebStorage } from '../../lib/storage/web-storage'
45
56interface SignalDatabase extends DBSchema {
67 signals : {
@@ -20,6 +21,7 @@ export class SignalStore implements SignalPersistentStorage {
2021 static readonly STORE_NAME = 'signals'
2122 private db : Promise < IDBPDatabase < SignalDatabase > >
2223 private maxBufferSize : number
24+ private sessionKeyStorage = new WebStorage ( window . sessionStorage )
2325 static deleteDatabase ( ) {
2426 return indexedDB . deleteDatabase ( SignalStore . DB_NAME )
2527 }
@@ -34,6 +36,14 @@ export class SignalStore implements SignalPersistentStorage {
3436 }
3537
3638 private async initSignalDB ( ) {
39+ // prevent the signals buffer from persisting across sessions (e.g, user closes tab and reopens)
40+ const sessionKey = 'segment_signals_db_session_key'
41+ if ( ! sessionStorage . getItem ( sessionKey ) ) {
42+ this . sessionKeyStorage . setItem ( sessionKey , true )
43+ await SignalStore . deleteDatabase ( )
44+ logger . debug ( 'New Session, so signals buffer cleared' )
45+ }
46+
3747 const db = await openDB < SignalDatabase > ( SignalStore . DB_NAME , 1 , {
3848 upgrade ( db ) {
3949 db . createObjectStore ( SignalStore . STORE_NAME , { autoIncrement : true } )
0 commit comments