@@ -15,8 +15,8 @@ import { LRUInMemoryAssignmentCache } from '../cache/lru-in-memory-assignment-ca
15
15
import { NonExpiringInMemoryAssignmentCache } from '../cache/non-expiring-in-memory-cache-assignment' ;
16
16
import { TLRUInMemoryAssignmentCache } from '../cache/tlru-in-memory-assignment-cache' ;
17
17
import {
18
- IConfigurationWire ,
19
18
ConfigurationWireV1 ,
19
+ IConfigurationWire ,
20
20
IPrecomputedConfiguration ,
21
21
PrecomputedConfiguration ,
22
22
} from '../configuration' ;
@@ -27,6 +27,7 @@ import {
27
27
DEFAULT_POLL_CONFIG_REQUEST_RETRIES ,
28
28
DEFAULT_POLL_INTERVAL_MS ,
29
29
DEFAULT_REQUEST_TIMEOUT_MS ,
30
+ OBFUSCATED_FORMATS ,
30
31
} from '../constants' ;
31
32
import { decodeFlag } from '../decoding' ;
32
33
import { EppoValue } from '../eppo_value' ;
@@ -46,6 +47,7 @@ import {
46
47
BanditVariation ,
47
48
ConfigDetails ,
48
49
Flag ,
50
+ getFormatFromString ,
49
51
IPrecomputedBandit ,
50
52
ObfuscatedFlag ,
51
53
PrecomputedFlag ,
@@ -101,6 +103,9 @@ export type EppoClientParameters = {
101
103
banditVariationConfigurationStore ?: IConfigurationStore < BanditVariation [ ] > ;
102
104
banditModelConfigurationStore ?: IConfigurationStore < BanditParameters > ;
103
105
configurationRequestParameters ?: FlagConfigurationRequestParameters ;
106
+ /**
107
+ * @deprecated obfuscation is determined by inspecting the `format` field of the UFC response.
108
+ */
104
109
isObfuscated ?: boolean ;
105
110
} ;
106
111
@@ -121,7 +126,7 @@ export default class EppoClient {
121
126
private assignmentCache ?: AssignmentCache ;
122
127
// whether to suppress any errors and return default values instead
123
128
private isGracefulFailureMode = true ;
124
- private isObfuscated : boolean ;
129
+ private expectObfuscated : boolean ;
125
130
private requestPoller ?: IPoller ;
126
131
private readonly evaluator = new Evaluator ( ) ;
127
132
@@ -138,7 +143,18 @@ export default class EppoClient {
138
143
this . banditVariationConfigurationStore = banditVariationConfigurationStore ;
139
144
this . banditModelConfigurationStore = banditModelConfigurationStore ;
140
145
this . configurationRequestParameters = configurationRequestParameters ;
141
- this . isObfuscated = isObfuscated ;
146
+ this . expectObfuscated = isObfuscated ;
147
+ }
148
+
149
+ private isObfuscated ( ) {
150
+ const configFormat = getFormatFromString ( this . flagConfigurationStore . getFormat ( ) ) ;
151
+ const configObfuscated = OBFUSCATED_FORMATS . includes ( configFormat ) ;
152
+ if ( configObfuscated !== this . expectObfuscated ) {
153
+ logger . warn (
154
+ `[Eppo SDK] configuration obfuscation [${ configObfuscated } ] does not match expected [${ this . expectObfuscated } ]` ,
155
+ ) ;
156
+ }
157
+ return configObfuscated ;
142
158
}
143
159
144
160
setConfigurationRequestParameters (
@@ -188,8 +204,12 @@ export default class EppoClient {
188
204
}
189
205
190
206
// noinspection JSUnusedGlobalSymbols
207
+ /**
208
+ * @deprecated The client determines whether the configuration is obfuscated by inspection
209
+ * @param isObfuscated
210
+ */
191
211
setIsObfuscated ( isObfuscated : boolean ) {
192
- this . isObfuscated = isObfuscated ;
212
+ this . expectObfuscated = isObfuscated ;
193
213
}
194
214
195
215
async fetchFlagConfigurations ( ) {
@@ -854,7 +874,7 @@ export default class EppoClient {
854
874
configDetails ,
855
875
subjectKey ,
856
876
subjectAttributes ,
857
- this . isObfuscated ,
877
+ this . isObfuscated ( ) ,
858
878
) ;
859
879
860
880
// allocationKey is set along with variation when there is a result. this check appeases typescript below
@@ -993,15 +1013,16 @@ export default class EppoClient {
993
1013
) ;
994
1014
}
995
1015
1016
+ const isObfuscated = this . isObfuscated ( ) ;
996
1017
const result = this . evaluator . evaluateFlag (
997
1018
flag ,
998
1019
configDetails ,
999
1020
subjectKey ,
1000
1021
subjectAttributes ,
1001
- this . isObfuscated ,
1022
+ isObfuscated ,
1002
1023
expectedVariationType ,
1003
1024
) ;
1004
- if ( this . isObfuscated ) {
1025
+ if ( isObfuscated ) {
1005
1026
// flag.key is obfuscated, replace with requested flag key
1006
1027
result . flagKey = flagKey ;
1007
1028
}
@@ -1052,7 +1073,7 @@ export default class EppoClient {
1052
1073
}
1053
1074
1054
1075
private getFlag ( flagKey : string ) : Flag | null {
1055
- return this . isObfuscated
1076
+ return this . isObfuscated ( )
1056
1077
? this . getObfuscatedFlag ( flagKey )
1057
1078
: this . flagConfigurationStore . get ( flagKey ) ;
1058
1079
}
@@ -1220,7 +1241,7 @@ export default class EppoClient {
1220
1241
1221
1242
private buildLoggerMetadata ( ) : Record < string , unknown > {
1222
1243
return {
1223
- obfuscated : this . isObfuscated ,
1244
+ obfuscated : this . isObfuscated ( ) ,
1224
1245
sdkLanguage : 'javascript' ,
1225
1246
sdkLibVersion : LIB_VERSION ,
1226
1247
} ;
0 commit comments