@@ -16,6 +16,78 @@ import Requestor from './Requestor';
1616
1717export type PollingErrorHandler = ( err : LDPollingError ) => void ;
1818
19+ function selectorAsQueryParams ( selector : string | undefined ) : { key : string ; value : string } [ ] {
20+ if ( ! selector ) {
21+ return [ ] ;
22+ }
23+
24+ return [
25+ {
26+ key : 'basis' ,
27+ value : selector ,
28+ } ,
29+ ] ;
30+ }
31+
32+ // helper function to transform FDv1 response data into events the PayloadProcessor can parse
33+ function processFDv1FlagsAndSegments (
34+ payloadProcessor : internal . PayloadProcessor ,
35+ data : FlagsAndSegments ,
36+ ) {
37+ payloadProcessor . processEvents ( [
38+ {
39+ event : `server-intent` ,
40+ data : {
41+ payloads : [
42+ {
43+ id : `FDv1Fallback` ,
44+ target : 1 ,
45+ intentCode : `xfer-full` ,
46+ } ,
47+ ] ,
48+ } ,
49+ } ,
50+ ] ) ;
51+
52+ Object . entries ( data ?. flags || [ ] ) . forEach ( ( [ key , flag ] ) => {
53+ payloadProcessor . processEvents ( [
54+ {
55+ event : `put-object` ,
56+ data : {
57+ kind : 'flag' ,
58+ key,
59+ version : flag . version ,
60+ object : flag ,
61+ } ,
62+ } ,
63+ ] ) ;
64+ } ) ;
65+
66+ Object . entries ( data ?. segments || [ ] ) . forEach ( ( [ key , segment ] ) => {
67+ payloadProcessor . processEvents ( [
68+ {
69+ event : `put-object` ,
70+ data : {
71+ kind : 'segment' ,
72+ key,
73+ version : segment . version ,
74+ object : segment ,
75+ } ,
76+ } ,
77+ ] ) ;
78+ } ) ;
79+
80+ payloadProcessor . processEvents ( [
81+ {
82+ event : `payload-transferred` ,
83+ data : {
84+ state : `FDv1Fallback` ,
85+ version : 1 ,
86+ } ,
87+ } ,
88+ ] ) ;
89+ }
90+
1991/**
2092 * @internal
2193 */
@@ -26,7 +98,7 @@ export default class PollingProcessorFDv2 implements subsystemCommon.DataSource
2698 private _statusCallback ?: ( status : subsystemCommon . DataSourceState , err ?: any ) => void ;
2799
28100 /**
29- * @param _requestor to fetch flags from cloud services
101+ * @param _requestor to fetch flags
30102 * @param _pollInterval in seconds controlling how frequently polling request is made
31103 * @param _logger for logging
32104 * @param _processResponseAsFDv1 defaults to false, but if set to true, this data source will process
@@ -127,7 +199,7 @@ export default class PollingProcessorFDv2 implements subsystemCommon.DataSource
127199 } else {
128200 // FDv1 case
129201 const parsed = JSON . parse ( body ) as FlagsAndSegments ;
130- this . _processFDv1FlagsAndSegments ( payloadProcessor , parsed ) ;
202+ processFDv1FlagsAndSegments ( payloadProcessor , parsed ) ;
131203 }
132204
133205 statusCallback ( subsystemCommon . DataSourceState . Valid ) ;
@@ -150,79 +222,7 @@ export default class PollingProcessorFDv2 implements subsystemCommon.DataSource
150222 this . _timeoutHandle = setTimeout ( ( ) => {
151223 this . _poll ( dataCallback , statusCallback , selectorGetter ) ;
152224 } , sleepFor ) ;
153- } , this . _selectorAsQueryParams ( selectorGetter ?.( ) ) ) ;
154- }
155-
156- private _selectorAsQueryParams ( selector : string | undefined ) : { key : string ; value : string } [ ] {
157- if ( ! selector ) {
158- return [ ] ;
159- }
160-
161- return [
162- {
163- key : 'basis' ,
164- value : selector ,
165- } ,
166- ] ;
167- }
168-
169- // helper function to transform FDv1 response data into events the PayloadProcessor can parse
170- private _processFDv1FlagsAndSegments (
171- payloadProcessor : internal . PayloadProcessor ,
172- data : FlagsAndSegments ,
173- ) {
174- payloadProcessor . processEvents ( [
175- {
176- event : `server-intent` ,
177- data : {
178- payloads : [
179- {
180- id : `FDv1Fallback` ,
181- target : 1 ,
182- intentCode : `xfer-full` ,
183- } ,
184- ] ,
185- } ,
186- } ,
187- ] ) ;
188-
189- Object . entries ( data ?. flags || [ ] ) . forEach ( ( [ key , flag ] ) => {
190- payloadProcessor . processEvents ( [
191- {
192- event : `put-object` ,
193- data : {
194- kind : 'flag' ,
195- key,
196- version : flag . version ,
197- object : flag ,
198- } ,
199- } ,
200- ] ) ;
201- } ) ;
202-
203- Object . entries ( data ?. segments || [ ] ) . forEach ( ( [ key , segment ] ) => {
204- payloadProcessor . processEvents ( [
205- {
206- event : `put-object` ,
207- data : {
208- kind : 'segment' ,
209- key,
210- version : segment . version ,
211- object : segment ,
212- } ,
213- } ,
214- ] ) ;
215- } ) ;
216-
217- payloadProcessor . processEvents ( [
218- {
219- event : `payload-transferred` ,
220- data : {
221- state : `FDv1Fallback` ,
222- version : 1 ,
223- } ,
224- } ,
225- ] ) ;
225+ } , selectorAsQueryParams ( selectorGetter ?.( ) ) ) ;
226226 }
227227
228228 start (
0 commit comments