Skip to content

Commit 8704200

Browse files
committed
fix(node-sdk): avoid sending "check"'s when using getFeatures
1 parent 626c717 commit 8704200

2 files changed

Lines changed: 23 additions & 43 deletions

File tree

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 () => {

0 commit comments

Comments
 (0)