From 22cecf5e6c6ff4ce7673130a300129db42f122e9 Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Tue, 24 Feb 2026 21:10:38 +0100 Subject: [PATCH 1/3] feat(node-sdk): add refreshFlags() method Allow users to trigger an on-demand refresh of cached flag definitions instead of waiting for the next automatic refresh cycle. --- packages/node-sdk/src/client.ts | 22 +++++++++++++++++++++ packages/node-sdk/test/client.test.ts | 28 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/node-sdk/src/client.ts b/packages/node-sdk/src/client.ts index 76403779..92583eae 100644 --- a/packages/node-sdk/src/client.ts +++ b/packages/node-sdk/src/client.ts @@ -598,6 +598,21 @@ export class ReflagClient { await this.flagsCache.waitRefresh(); } + /** + * Refreshes the flag definitions from the server. + * + * @remarks + * This triggers an on-demand refresh of the cached flag definitions. + * Useful when you know flags have changed and don't want to wait for the next automatic refresh cycle. + * + * Note: updated flag rules take a few seconds to propagate to all servers. + * + * Concurrent calls are deduplicated — multiple calls share the same in-flight request. + */ + public async refreshFlags() { + await this.flagsCache.refresh(); + } + /** * Destroys the client and cleans up all resources including timers and background processes. * @@ -1491,6 +1506,13 @@ export class BoundReflagClient { public async flush() { await this._client.flush(); } + + /** + * Refreshes the flag definitions from the server. + */ + public async refreshFlags() { + await this._client.refreshFlags(); + } } function checkMeta( diff --git a/packages/node-sdk/test/client.test.ts b/packages/node-sdk/test/client.test.ts index b5c7becd..fd1a6ede 100644 --- a/packages/node-sdk/test/client.test.ts +++ b/packages/node-sdk/test/client.test.ts @@ -992,6 +992,34 @@ describe("ReflagClient", () => { }); }); + describe("refreshFlags", () => { + it("should call flagsCache.refresh()", async () => { + const client = new ReflagClient(validOptions); + + const refresh = vi + .spyOn(client["flagsCache"], "refresh") + .mockResolvedValue(undefined); + + await client.refreshFlags(); + + expect(refresh).toHaveBeenCalledTimes(1); + }); + + it("should call flagsCache.refresh() on each invocation", async () => { + const client = new ReflagClient(validOptions); + + const refresh = vi + .spyOn(client["flagsCache"], "refresh") + .mockResolvedValue(undefined); + + await client.refreshFlags(); + await client.refreshFlags(); + await client.refreshFlags(); + + expect(refresh).toHaveBeenCalledTimes(3); + }); + }); + describe("getFlag", () => { let client: ReflagClient; From 13116c100fd0e9b1576f91ce0f7ee38bf1322018 Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Tue, 24 Feb 2026 21:11:51 +0100 Subject: [PATCH 2/3] chore(node-sdk): bump version to 1.2.0 --- packages/node-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-sdk/package.json b/packages/node-sdk/package.json index be992704..133432bb 100644 --- a/packages/node-sdk/package.json +++ b/packages/node-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@reflag/node-sdk", - "version": "1.1.0", + "version": "1.2.0", "license": "MIT", "repository": { "type": "git", From 21132437a7223fdb62c04bfb99058074926807af Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Tue, 24 Feb 2026 21:13:08 +0100 Subject: [PATCH 3/3] chore: update yarn.lock --- yarn.lock | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 10842e52..b1d9722f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5140,7 +5140,16 @@ __metadata: languageName: unknown linkType: soft -"@reflag/node-sdk@npm:1.1.0, @reflag/node-sdk@workspace:packages/node-sdk": +"@reflag/node-sdk@npm:1.1.0": + version: 1.1.0 + resolution: "@reflag/node-sdk@npm:1.1.0" + dependencies: + "@reflag/flag-evaluation": "npm:1.0.0" + checksum: 10c0/32f1ba05ac40fe7c3b8a772efd04cc577ba6d6c043873ca0253fee3db00c51c1a3489982e8f60849e86bc3c958f5eb43f6995ead02cee90dae4d2c6df44e7a2c + languageName: node + linkType: hard + +"@reflag/node-sdk@workspace:packages/node-sdk": version: 0.0.0-use.local resolution: "@reflag/node-sdk@workspace:packages/node-sdk" dependencies: