Skip to content

Commit fc91bb4

Browse files
authored
fix(node-sdk): avoid sending "check"'s when using getFeatures (#455)
The `getFeatures` endpoint is mostly used to serialize flags for the frontend. When that happens, "checks" will be sent for all features.
1 parent 626c717 commit fc91bb4

File tree

5 files changed

+28
-48
lines changed

5 files changed

+28
-48
lines changed

packages/node-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bucketco/node-sdk",
3-
"version": "1.9.2",
3+
"version": "1.9.3",
44
"license": "MIT",
55
"repository": {
66
"type": "git",

packages/node-sdk/src/client.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -666,14 +666,17 @@ export class BucketClient {
666666
const features = this._getFeatures(options);
667667
const feature = features[key];
668668

669-
return this._wrapRawFeature(options, {
670-
key,
671-
isEnabled: feature?.isEnabled ?? false,
672-
targetingVersion: feature?.targetingVersion,
673-
config: feature?.config,
674-
ruleEvaluationResults: feature?.ruleEvaluationResults,
675-
missingContextFields: feature?.missingContextFields,
676-
});
669+
return this._wrapRawFeature(
670+
{ ...options, enableChecks: true },
671+
{
672+
key,
673+
isEnabled: feature?.isEnabled ?? false,
674+
targetingVersion: feature?.targetingVersion,
675+
config: feature?.config,
676+
ruleEvaluationResults: feature?.ruleEvaluationResults,
677+
missingContextFields: feature?.missingContextFields,
678+
},
679+
);
677680
}
678681

679682
/**
@@ -1199,7 +1202,11 @@ export class BucketClient {
11991202
}
12001203

12011204
private _wrapRawFeature<TKey extends keyof TypedFeatures>(
1202-
{ enableTracking, ...context }: { enableTracking: boolean } & Context,
1205+
{
1206+
enableTracking,
1207+
enableChecks = false,
1208+
...context
1209+
}: { enableTracking: boolean; enableChecks?: boolean } & Context,
12031210
{ config, ...feature }: RawFeature,
12041211
): TypedFeatures[TKey] {
12051212
// eslint-disable-next-line @typescript-eslint/no-this-alias
@@ -1211,7 +1218,7 @@ export class BucketClient {
12111218

12121219
return {
12131220
get isEnabled() {
1214-
if (enableTracking) {
1221+
if (enableTracking && enableChecks) {
12151222
void client
12161223
.sendFeatureEvent({
12171224
action: "check",
@@ -1232,7 +1239,7 @@ export class BucketClient {
12321239
return feature.isEnabled;
12331240
},
12341241
get config() {
1235-
if (enableTracking) {
1242+
if (enableTracking && enableChecks) {
12361243
void client
12371244
.sendFeatureEvent({
12381245
action: "check-config",

packages/node-sdk/test/client.test.ts

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,7 +1646,7 @@ describe("BucketClient", () => {
16461646
expect(events).toStrictEqual([]);
16471647
});
16481648

1649-
it("`isEnabled` sends `check` event", async () => {
1649+
it("`isEnabled` does not send `check` event", async () => {
16501650
const context = {
16511651
company,
16521652
user,
@@ -1665,21 +1665,10 @@ describe("BucketClient", () => {
16651665
.flatMap((call) => call[2])
16661666
.filter((e) => e.action === "check");
16671667

1668-
expect(checkEvents).toStrictEqual([
1669-
{
1670-
type: "feature-flag-event",
1671-
action: "check",
1672-
key: "feature1",
1673-
targetingVersion: 1,
1674-
evalResult: true,
1675-
evalContext: context,
1676-
evalRuleResults: [true],
1677-
evalMissingFields: [],
1678-
},
1679-
]);
1668+
expect(checkEvents).toStrictEqual([]);
16801669
});
16811670

1682-
it("`config` sends `check` event", async () => {
1671+
it("`config` does not send `check` event", async () => {
16831672
const context = {
16841673
company,
16851674
user,
@@ -1690,7 +1679,7 @@ describe("BucketClient", () => {
16901679
await client.initialize();
16911680
const feature = client.getFeatures(context);
16921681

1693-
// trigger `check` event
1682+
// attempt to trigger `check` event
16941683
expect(feature.feature1.config).toBeDefined();
16951684

16961685
await client.flush();
@@ -1699,23 +1688,7 @@ describe("BucketClient", () => {
16991688
.flatMap((call) => call[2])
17001689
.filter((e) => e.action === "check-config");
17011690

1702-
expect(checkEvents).toStrictEqual([
1703-
{
1704-
type: "feature-flag-event",
1705-
action: "check-config",
1706-
key: "feature1",
1707-
evalResult: {
1708-
key: "config-1",
1709-
payload: {
1710-
something: "else",
1711-
},
1712-
},
1713-
targetingVersion: 1,
1714-
evalContext: context,
1715-
evalRuleResults: [true],
1716-
evalMissingFields: [],
1717-
},
1718-
]);
1691+
expect(checkEvents).toStrictEqual([]);
17191692
});
17201693

17211694
it("sends company/user events", async () => {

packages/openfeature-node-provider/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bucketco/openfeature-node-provider",
3-
"version": "0.4.1",
3+
"version": "0.4.2",
44
"license": "MIT",
55
"repository": {
66
"type": "git",
@@ -50,7 +50,7 @@
5050
"vitest": "~1.6.0"
5151
},
5252
"dependencies": {
53-
"@bucketco/node-sdk": "1.9.2"
53+
"@bucketco/node-sdk": "1.9.3"
5454
},
5555
"peerDependencies": {
5656
"@openfeature/server-sdk": ">=1.16.1"

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,7 @@ __metadata:
786786
languageName: unknown
787787
linkType: soft
788788

789-
"@bucketco/node-sdk@npm:1.9.2, @bucketco/node-sdk@workspace:packages/node-sdk":
789+
"@bucketco/node-sdk@npm:1.9.3, @bucketco/node-sdk@workspace:packages/node-sdk":
790790
version: 0.0.0-use.local
791791
resolution: "@bucketco/node-sdk@workspace:packages/node-sdk"
792792
dependencies:
@@ -836,7 +836,7 @@ __metadata:
836836
dependencies:
837837
"@babel/core": "npm:~7.24.7"
838838
"@bucketco/eslint-config": "npm:~0.0.2"
839-
"@bucketco/node-sdk": "npm:1.9.2"
839+
"@bucketco/node-sdk": "npm:1.9.3"
840840
"@bucketco/tsconfig": "npm:~0.0.2"
841841
"@openfeature/core": "npm:^1.5.0"
842842
"@openfeature/server-sdk": "npm:>=1.16.1"

0 commit comments

Comments
 (0)