diff --git a/packages/node-sdk/package.json b/packages/node-sdk/package.json index a309e5e4..ddbc22ca 100644 --- a/packages/node-sdk/package.json +++ b/packages/node-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/node-sdk", - "version": "1.9.1", + "version": "1.9.2", "license": "MIT", "repository": { "type": "git", diff --git a/packages/node-sdk/src/client.ts b/packages/node-sdk/src/client.ts index 8c06b57c..85d3283b 100644 --- a/packages/node-sdk/src/client.ts +++ b/packages/node-sdk/src/client.ts @@ -123,6 +123,7 @@ export class BucketClient { fallbackFeatures?: Record; featureOverrides: FeatureOverridesFn; offline: boolean; + emitEvaluationEvents: boolean; configFile?: string; featuresFetchRetries: number; fetchTimeoutMs: number; @@ -302,6 +303,7 @@ export class BucketClient { this._config = { offline, + emitEvaluationEvents: config.emitEvaluationEvents ?? true, apiBaseUrl: (config.apiBaseUrl ?? config.host) || API_BASE_URL, headers: { "Content-Type": "application/json", @@ -908,6 +910,13 @@ export class BucketClient { return; } + if ( + !this._config.emitEvaluationEvents && + (event.action === "evaluate" || event.action === "evaluate-config") + ) { + return; + } + if ( !this.rateLimiter.isAllowed( hashObject({ diff --git a/packages/node-sdk/src/types.ts b/packages/node-sdk/src/types.ts index f9005d6d..25215670 100644 --- a/packages/node-sdk/src/types.ts +++ b/packages/node-sdk/src/types.ts @@ -644,6 +644,11 @@ export type ClientOptions = { */ offline?: boolean; + /** + * If set to `false`, no evaluation events will be emitted. + */ + emitEvaluationEvents?: boolean; + /** * The path to the config file. If supplied, the config file will be loaded. * Defaults to `bucket.json` when NODE_ENV is not production. Can also be diff --git a/packages/node-sdk/test/client.test.ts b/packages/node-sdk/test/client.test.ts index 5927a1ff..87520d5b 100644 --- a/packages/node-sdk/test/client.test.ts +++ b/packages/node-sdk/test/client.test.ts @@ -1130,6 +1130,70 @@ describe("BucketClient", () => { ); }); + it("`track` does not send evaluation events when `emitEvaluationEvents` is `false`", async () => { + client = new BucketClient({ + ...validOptions, + emitEvaluationEvents: false, + }); + + const context = { + company, + user, + other: otherContext, + }; + + // test that the feature is returned + await client.initialize(); + const feature = client.getFeature( + { + ...context, + meta: { + active: true, + }, + enableTracking: true, + }, + "feature1", + ); + + await feature.track(); + await client.flush(); + + expect(httpClient.post).toHaveBeenCalledWith( + BULK_ENDPOINT, + expectedHeaders, + [ + { + attributes: { + employees: 100, + name: "Acme Inc.", + }, + companyId: "company123", + context: { + active: true, + }, + type: "company", + }, + { + attributes: { + age: 1, + name: "John", + }, + context: { + active: true, + }, + type: "user", + userId: "user123", + }, + { + type: "event", + event: "feature1", + userId: user.id, + companyId: company.id, + }, + ], + ); + }); + it("`isEnabled` sends `check` event", async () => { const context = { company, diff --git a/packages/openfeature-node-provider/package.json b/packages/openfeature-node-provider/package.json index af38b2b0..afe1fe03 100644 --- a/packages/openfeature-node-provider/package.json +++ b/packages/openfeature-node-provider/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/openfeature-node-provider", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "repository": { "type": "git", @@ -50,7 +50,7 @@ "vitest": "~1.6.0" }, "dependencies": { - "@bucketco/node-sdk": "1.9.1" + "@bucketco/node-sdk": "1.9.2" }, "peerDependencies": { "@openfeature/server-sdk": ">=1.16.1" diff --git a/yarn.lock b/yarn.lock index d8f8fdd2..faf8a2d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -786,7 +786,7 @@ __metadata: languageName: unknown linkType: soft -"@bucketco/node-sdk@npm:1.9.1, @bucketco/node-sdk@workspace:packages/node-sdk": +"@bucketco/node-sdk@npm:1.9.2, @bucketco/node-sdk@workspace:packages/node-sdk": version: 0.0.0-use.local resolution: "@bucketco/node-sdk@workspace:packages/node-sdk" dependencies: @@ -836,7 +836,7 @@ __metadata: dependencies: "@babel/core": "npm:~7.24.7" "@bucketco/eslint-config": "npm:~0.0.2" - "@bucketco/node-sdk": "npm:1.9.1" + "@bucketco/node-sdk": "npm:1.9.2" "@bucketco/tsconfig": "npm:~0.0.2" "@openfeature/core": "npm:^1.5.0" "@openfeature/server-sdk": "npm:>=1.16.1"