@@ -184,33 +184,6 @@ const overridesCookieKey = `__reflag_overrides`;
184184
185185type OverridesFlags = Record < string , boolean | null > ;
186186
187- function setOverridesCache ( overrides : OverridesFlags ) {
188- try {
189- Cookies . set ( overridesCookieKey , JSON . stringify ( overrides ) , {
190- expires : 30 , // 30 days
191- sameSite : "strict" ,
192- } ) ;
193- } catch {
194- // Cookie setting failed, overrides won't persist
195- }
196- }
197-
198- function getOverridesCache ( ) : OverridesFlags {
199- try {
200- const cookieValue = Cookies . get ( overridesCookieKey ) ;
201- if ( cookieValue ) {
202- const cachedOverrides = JSON . parse ( cookieValue ) ;
203- if ( isObject ( cachedOverrides ) ) {
204- return cachedOverrides ;
205- }
206- }
207- } catch {
208- // Ignore cookie parsing errors
209- }
210-
211- return { } ;
212- }
213-
214187type FlagsClientOptions = Partial < Config > & {
215188 bootstrappedFlags ?: FetchedFlags ;
216189 fallbackFlags ?: Record < string , FallbackFlagOverride > | string [ ] ;
@@ -263,7 +236,7 @@ export class FlagsClient {
263236 this . fallbackFlags = this . setupFallbackFlags ( fallbackFlags ) ;
264237
265238 try {
266- const storedFlagOverrides = getOverridesCache ( ) ;
239+ const storedFlagOverrides = this . getOverridesCache ( ) ;
267240 for ( const key in storedFlagOverrides ) {
268241 this . flagOverrides [ key ] = storedFlagOverrides [ key ] ;
269242 }
@@ -312,11 +285,7 @@ export class FlagsClient {
312285 }
313286
314287 async setContext ( context : ReflagContext ) {
315- this . context = {
316- user : context . user ,
317- company : context . company ,
318- other : { ...context . otherContext , ...context . other } ,
319- } ;
288+ this . context = context ;
320289 this . setFetchedFlags ( ( await this . maybeFetchFlags ( ) ) || { } ) ;
321290 }
322291
@@ -330,7 +299,7 @@ export class FlagsClient {
330299 } else {
331300 this . flagOverrides [ key ] = isEnabled ;
332301 }
333- setOverridesCache ( this . flagOverrides ) ;
302+ this . setOverridesCache ( this . flagOverrides ) ;
334303
335304 this . flags = this . mergeFlags ( this . fetchedFlags , this . flagOverrides ) ;
336305 this . triggerFlagsUpdated ( ) ;
@@ -430,6 +399,31 @@ export class FlagsClient {
430399 }
431400 }
432401
402+ private setOverridesCache ( overrides : OverridesFlags ) {
403+ try {
404+ Cookies . set ( overridesCookieKey , JSON . stringify ( overrides ) , {
405+ expires : 7 , // 1 week
406+ sameSite : "strict" ,
407+ } ) ;
408+ } catch {
409+ this . logger . warn (
410+ "storing flag overrides in cookies failed, overrides won't persist" ,
411+ ) ;
412+ }
413+ }
414+
415+ private getOverridesCache ( ) : OverridesFlags {
416+ try {
417+ const overridesCookie = Cookies . get ( overridesCookieKey ) ;
418+ const overrides = JSON . parse ( overridesCookie || "{}" ) ;
419+ if ( ! isObject ( overrides ) ) throw new Error ( "invalid overrides" ) ;
420+ return overrides ;
421+ } catch {
422+ this . logger . warn ( "getting flag overrides from cookies failed" ) ;
423+ return { } ;
424+ }
425+ }
426+
433427 private async maybeFetchFlags ( ) : Promise < FetchedFlags | undefined > {
434428 if ( this . config . offline ) {
435429 return ;
0 commit comments