diff --git a/libs/sdk-backend-tiger/src/backend/features/hub.ts b/libs/sdk-backend-tiger/src/backend/features/hub.ts index 1a469f473e9..2167e41010f 100644 --- a/libs/sdk-backend-tiger/src/backend/features/hub.ts +++ b/libs/sdk-backend-tiger/src/backend/features/hub.ts @@ -88,6 +88,18 @@ async function getFeatureHubData( context: FeatureContext, state?: HubServiceState[string], ): Promise> { + const featureHubFlags: string[] = []; + if (context.organizationId) { + featureHubFlags.push(`organizationId=${encodeURIComponent(context.organizationId)}`); + } + if (context.earlyAccessValues?.length > 0) { + featureHubFlags.push( + `earlyAccess=${context.earlyAccessValues + .filter(Boolean) + .map((v) => encodeURIComponent(v)) + .join(";")}`, + ); + } return axios.get("/features", { method: "GET", baseURL: host, @@ -97,20 +109,7 @@ async function getFeatureHubData( timeout: FH_TIMEOUT, headers: { "Content-type": "application/json", - "X-FeatureHub": Object.keys(context) - .reduce((prev, item) => { - const value = context[item as keyof typeof context]; - if (value === undefined || value === "") { - return prev; - } - - const parsed = Array.isArray(value) - ? value.map((v) => `${item}[]=${encodeURIComponent(v)}`) - : [`${item}=${encodeURIComponent(value)}`]; - - return [...prev, ...parsed]; - }, [] as Array) - .join(","), + "X-FeatureHub": featureHubFlags.join(","), ...(state ? { "if-none-match": state.etag } : {}), }, validateStatus: (status) => { diff --git a/libs/sdk-backend-tiger/src/backend/features/test/hub.test.ts b/libs/sdk-backend-tiger/src/backend/features/test/hub.test.ts index 486e7bca273..0a2dd1d5ce3 100644 --- a/libs/sdk-backend-tiger/src/backend/features/test/hub.test.ts +++ b/libs/sdk-backend-tiger/src/backend/features/test/hub.test.ts @@ -68,7 +68,7 @@ describe("live features", () => { baseURL: "/", headers: { "Content-type": "application/json", - "X-FeatureHub": "earlyAccessValues[]=omega,organizationId=test-org", + "X-FeatureHub": "organizationId=test-org,earlyAccess=omega", "if-none-match": expect.anything(), }, method: "GET", @@ -86,7 +86,7 @@ describe("live features", () => { baseURL: "/", headers: { "Content-type": "application/json", - "X-FeatureHub": "earlyAccessValues[]=beta,organizationId=org", + "X-FeatureHub": "organizationId=org,earlyAccess=beta", "if-none-match": expect.anything(), }, method: "GET", @@ -107,7 +107,7 @@ describe("live features", () => { baseURL: "/", headers: { "Content-type": "application/json", - "X-FeatureHub": "earlyAccessValues[]=omega,organizationId=test-org", + "X-FeatureHub": "organizationId=test-org,earlyAccess=omega", "if-none-match": expect.anything(), }, method: "GET",