Skip to content

Commit fd84025

Browse files
authored
fix: return metadata for the bound provider in hookContext (#883)
Clients were incorrectly populating the hook context provider metadata field with metadata from the default provider instead of the one bound to the client. Signed-off-by: Federico Bond <[email protected]>
1 parent fc48677 commit fd84025

File tree

4 files changed

+68
-2
lines changed

4 files changed

+68
-2
lines changed

packages/client/src/client/open-feature-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export class OpenFeatureClient implements Client {
201201
defaultValue,
202202
flagValueType: flagType,
203203
clientMetadata: this.metadata,
204-
providerMetadata: OpenFeature.providerMetadata,
204+
providerMetadata: this._provider.metadata,
205205
context,
206206
logger: this._logger,
207207
};

packages/client/test/hooks.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,39 @@ describe('Hooks', () => {
7777
],
7878
});
7979
});
80+
it('client metadata and provider metadata must match the client and provider used to resolve the flag', (done) => {
81+
const provider: Provider = {
82+
metadata: {
83+
name: 'mock-my-domain-provider',
84+
},
85+
resolveBooleanEvaluation: jest.fn((): Promise<ResolutionDetails<boolean>> => {
86+
return Promise.resolve({
87+
value: BOOLEAN_VALUE,
88+
variant: BOOLEAN_VARIANT,
89+
reason: REASON,
90+
});
91+
}),
92+
} as unknown as Provider;
93+
94+
OpenFeature.setProvider('my-domain', provider);
95+
const client = OpenFeature.getClient('my-domain');
96+
97+
client.getBooleanValue(FLAG_KEY, false, {
98+
hooks: [
99+
{
100+
before: (hookContext) => {
101+
try {
102+
expect(hookContext.providerMetadata).toEqual(provider.metadata);
103+
expect(hookContext.clientMetadata).toEqual(client.metadata);
104+
done();
105+
} catch (err) {
106+
done(err);
107+
}
108+
},
109+
},
110+
],
111+
});
112+
});
80113
});
81114

82115
describe('Requirement 4.1.3', () => {

packages/server/src/client/open-feature-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ export class OpenFeatureClient implements Client, ManageContext<OpenFeatureClien
254254
defaultValue,
255255
flagValueType: flagType,
256256
clientMetadata: this.metadata,
257-
providerMetadata: OpenFeature.providerMetadata,
257+
providerMetadata: this._provider.metadata,
258258
context: mergedContext,
259259
logger: this._logger,
260260
};

packages/server/test/hooks.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,39 @@ describe('Hooks', () => {
7373
],
7474
});
7575
});
76+
it('client metadata and provider metadata must match the client and provider used to resolve the flag', (done) => {
77+
const provider: Provider = {
78+
metadata: {
79+
name: 'mock-my-domain-provider',
80+
},
81+
resolveBooleanEvaluation: jest.fn((): Promise<ResolutionDetails<boolean>> => {
82+
return Promise.resolve({
83+
value: BOOLEAN_VALUE,
84+
variant: BOOLEAN_VARIANT,
85+
reason: REASON,
86+
});
87+
}),
88+
} as unknown as Provider;
89+
90+
OpenFeature.setProvider('my-domain', provider);
91+
const client = OpenFeature.getClient('my-domain');
92+
93+
client.getBooleanValue(FLAG_KEY, false, undefined, {
94+
hooks: [
95+
{
96+
before: (hookContext) => {
97+
try {
98+
expect(hookContext.providerMetadata).toEqual(provider.metadata);
99+
expect(hookContext.clientMetadata).toEqual(client.metadata);
100+
done();
101+
} catch (err) {
102+
done(err);
103+
}
104+
},
105+
},
106+
],
107+
});
108+
});
76109
});
77110

78111
describe('Requirement 4.1.3', () => {

0 commit comments

Comments
 (0)