@@ -4,7 +4,6 @@ import log from './utils/log';
44import StackParser from './modules/stackParser' ;
55import type { CatcherMessage , HawkInitialSettings , BreadcrumbsAPI , Transport } from './types' ;
66import { VueIntegration } from './integrations/vue' ;
7- import { id } from './utils/id' ;
87import type {
98 AffectedUser ,
109 EventContext ,
@@ -19,6 +18,9 @@ import { isErrorProcessed, markErrorAsProcessed } from './utils/event';
1918import { ConsoleCatcher } from './addons/consoleCatcher' ;
2019import { BreadcrumbManager } from './addons/breadcrumbs' ;
2120import { validateUser , validateContext , isValidEventPayload } from './utils/validation' ;
21+ import { HawkUserManager } from '@hawk.so/core' ;
22+ import { HawkLocalStorage } from './storages/hawk-local-storage' ;
23+ import { id } from './utils/id' ;
2224
2325/**
2426 * Allow to use global VERSION, that will be overwritten by Webpack
@@ -62,11 +64,6 @@ export default class Catcher {
6264 */
6365 private readonly release : string | undefined ;
6466
65- /**
66- * Current authenticated user
67- */
68- private user : AffectedUser ;
69-
7067 /**
7168 * Any additional data passed by user for sending with all messages
7269 */
@@ -111,6 +108,11 @@ export default class Catcher {
111108 */
112109 private readonly breadcrumbManager : BreadcrumbManager | null ;
113110
111+ /**
112+ * Current authenticated user manager instance
113+ */
114+ private readonly userManager : HawkUserManager = new HawkUserManager ( new HawkLocalStorage ( ) ) ;
115+
114116 /**
115117 * Catcher constructor
116118 *
@@ -126,7 +128,9 @@ export default class Catcher {
126128 this . token = settings . token ;
127129 this . debug = settings . debug || false ;
128130 this . release = settings . release !== undefined ? String ( settings . release ) : undefined ;
129- this . setUser ( settings . user || Catcher . getGeneratedUser ( ) ) ;
131+ if ( settings . user ) {
132+ this . setUser ( settings . user ) ;
133+ }
130134 this . setContext ( settings . context || undefined ) ;
131135 this . beforeSend = settings . beforeSend ;
132136 this . disableVueErrorHandler =
@@ -189,27 +193,6 @@ export default class Catcher {
189193 }
190194 }
191195
192- /**
193- * Generates user if no one provided via HawkCatcher settings
194- * After generating, stores user for feature requests
195- */
196- private static getGeneratedUser ( ) : AffectedUser {
197- let userId : string ;
198- const LOCAL_STORAGE_KEY = 'hawk-user-id' ;
199- const storedId = localStorage . getItem ( LOCAL_STORAGE_KEY ) ;
200-
201- if ( storedId ) {
202- userId = storedId ;
203- } else {
204- userId = id ( ) ;
205- localStorage . setItem ( LOCAL_STORAGE_KEY , userId ) ;
206- }
207-
208- return {
209- id : userId ,
210- } ;
211- }
212-
213196 /**
214197 * Send test event from client
215198 */
@@ -272,14 +255,14 @@ export default class Catcher {
272255 return ;
273256 }
274257
275- this . user = user ;
258+ this . userManager . setUser ( user ) ;
276259 }
277260
278261 /**
279- * Clear current user information (revert to generated user)
262+ * Clear current user information
280263 */
281264 public clearUser ( ) : void {
282- this . user = Catcher . getGeneratedUser ( ) ;
265+ this . userManager . clear ( ) ;
283266 }
284267
285268 /**
@@ -565,10 +548,16 @@ export default class Catcher {
565548 }
566549
567550 /**
568- * Current authenticated user
551+ * Returns the current user if set, otherwise generates and persists an anonymous ID.
569552 */
570- private getUser ( ) : HawkJavaScriptEvent [ 'user' ] {
571- return this . user || null ;
553+ private getUser ( ) : AffectedUser {
554+ const user = this . userManager . getUser ( ) ;
555+ if ( user ) {
556+ return user ;
557+ }
558+ const generatedId = id ( ) ;
559+ this . userManager . persistGeneratedId ( generatedId ) ;
560+ return { id : generatedId } ;
572561 }
573562
574563 /**
0 commit comments