11import config from "config" ;
2- import { FeatureFlag , FeatureFlagResponse , FeatureFlagService , UpdateFeatureFlagRequestBody } from "../types/featureFlags" ;
2+ import { FeatureFlag , FeatureFlagResponse , FeatureFlagService } from "../types/featureFlags" ;
33
44const FEATURE_FLAG_BASE_URL = config . get < string > ( "services.featureFlag.baseUrl" ) ;
55const FEATURE_FLAG_API_KEY = config . get < string > ( "services.featureFlag.apiKey" ) ;
66
7- const generateHeaders = ( ) : HeadersInit => {
8- return {
7+ const defaultHeaders : HeadersInit = {
98 "Content-Type" : "application/json" ,
10- "x-api-key" : `${ FEATURE_FLAG_API_KEY } ` ,
11- } ;
9+ "x-api-key" : FEATURE_FLAG_API_KEY ,
1210} ;
1311
1412const getAllFeatureFlags = async ( ) : Promise < FeatureFlagResponse > => {
1513 try {
1614 const response = await fetch ( `${ FEATURE_FLAG_BASE_URL } /feature-flags` , {
1715 method : "GET" ,
18- headers : generateHeaders ( ) ,
16+ headers : defaultHeaders ,
1917 } ) ;
2018
2119 if ( ! response . ok ) {
@@ -35,7 +33,7 @@ const createFeatureFlag = async (flagData: any): Promise<{ status: number; data?
3533 try {
3634 const response = await fetch ( `${ FEATURE_FLAG_BASE_URL } /feature-flags` , {
3735 method : "POST" ,
38- headers : generateHeaders ( ) ,
36+ headers : defaultHeaders ,
3937 body : JSON . stringify ( flagData ) ,
4038 } ) ;
4139 const status = response . status ;
@@ -57,66 +55,48 @@ const createFeatureFlag = async (flagData: any): Promise<{ status: number; data?
5755 }
5856} ;
5957
60- const updateFeatureFlag = async (
61- flagId : string ,
62- updateData : UpdateFeatureFlagRequestBody
63- ) : Promise < FeatureFlagResponse > => {
58+ const getFeatureFlagById = async ( flagId : string ) : Promise < { status : number ; data ?: any ; error ?: any } > => {
6459 try {
6560 const response = await fetch ( `${ FEATURE_FLAG_BASE_URL } /feature-flags/${ flagId } ` , {
66- method : "PATCH" ,
67- headers : generateHeaders ( ) ,
68- body : JSON . stringify ( updateData ) ,
61+ method : "GET" ,
62+ headers : defaultHeaders ,
6963 } ) ;
64+ const status = response . status ;
65+ const responseText = await response . text ( ) ;
7066
71- if ( ! response . ok ) {
72- const error = await response . json ( ) ;
73- return {
74- status : response . status ,
75- error : error || { message : `HTTP error! status: ${ response . status } ` }
76- } ;
67+ if ( response . ok ) {
68+ try {
69+ const parsedData = JSON . parse ( responseText ) ;
70+ return {
71+ status,
72+ data : parsedData
73+ } ;
74+ } catch ( parseError ) {
75+ logger . error ( "Error parsing success response:" , parseError ) ;
76+ return {
77+ status : 500 ,
78+ error : { message : "Error parsing service response" }
79+ } ;
80+ }
7781 }
78-
79- const data = await response . json ( ) ;
80- return { status : response . status , data } ;
82+ return {
83+ status,
84+ error : { message : responseText }
85+ } ;
8186 } catch ( err ) {
82- logger . error ( "Error in updating feature flag" , err ) ;
83- return {
84- status : 500 ,
85- error : { message : "Internal error while connecting to the feature flag service" }
87+ logger . error ( "Error in getFeatureFlagById service:" , err ) ;
88+ return {
89+ status : 500 ,
90+ error : {
91+ message : err instanceof Error ? err . message : "Internal error while connecting to the feature flag service"
92+ }
8693 } ;
8794 }
8895} ;
8996
90- const getFeatureFlagById = async ( flagId : string ) : Promise < FeatureFlagResponse > => {
91- try {
92- const response = await fetch ( `${ FEATURE_FLAG_BASE_URL } /feature-flags/${ flagId } ` , {
93- method : "GET" ,
94- headers : generateHeaders ( ) ,
95- } ) ;
96-
97- if ( ! response . ok ) {
98- logger . error ( `Failed to fetch feature flag. Status: ${ response . status } ` ) ;
99- return {
100- status : response . status ,
101- error : { message : `HTTP error! status: ${ response . status } ` }
102- } ;
103- }
104-
105- const data = await response . json ( ) ;
106- return { status : response . status , data } ;
107- } catch ( err ) {
108- logger . error ( "Error in fetching feature flag by ID" , err ) ;
109- return {
110- status : 500 ,
111- error : { message : "Internal error while connecting to the feature flag service" }
112- } ;
113- }
114- } ;
115-
11697const featureFlagService : FeatureFlagService = {
11798 getAllFeatureFlags,
11899 createFeatureFlag,
119- updateFeatureFlag,
120100 getFeatureFlagById,
121101} ;
122102
0 commit comments