From 83d9f87f80b0835a361839c09ba9feb580b224bc Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Mon, 4 May 2026 21:18:09 -0700 Subject: [PATCH 1/2] feat: harnessed Cache to GraphQL criteria evaluation flow --- package.json | 2 +- src/aggregator/resolvers.js | 11 ++++++++++- tests/client-api-cached.test.js | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7ade1f6..d11bef4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "cors": "^2.8.6", "express": "^5.2.1", "express-basic-auth": "^1.2.1", - "express-rate-limit": "^8.4.1", + "express-rate-limit": "^8.5.0", "express-validator": "^7.3.2", "graphql": "^16.13.2", "graphql-http": "^1.22.4", diff --git a/src/aggregator/resolvers.js b/src/aggregator/resolvers.js index 6501fb3..815725d 100644 --- a/src/aggregator/resolvers.js +++ b/src/aggregator/resolvers.js @@ -4,8 +4,17 @@ import GroupConfig from '../models/group-config.js'; import { Config} from '../models/config.js'; import { ConfigStrategy, OperationsType, StrategiesType } from '../models/config-strategy.js'; import Component from '../models/component.js'; +import Cache from '../helpers/cache/index.js'; +import { getConfigFromCache } from '../services/snapshot-cache.js'; -export const resolveConfigByKey = async (domain, key) => Config.findOne({ domain, key }, null, { lean: true }); +export async function resolveConfigByKey(domain, key) { + const cache = Cache.getInstance(); + if (cache.isEnabled()) { + return getConfigFromCache(cache, domain, key); + } + + return Config.findOne({ domain, key }, null, { lean: true }); +} export function resolveEnvValue(source, field, keys) { const arrValue = []; diff --git a/tests/client-api-cached.test.js b/tests/client-api-cached.test.js index e44470b..877c3a4 100644 --- a/tests/client-api-cached.test.js +++ b/tests/client-api-cached.test.js @@ -196,6 +196,8 @@ describe('Testing criteria [GraphQL]', () => { test('CLIENT_CACHED_SUITE - It will be deactivated on default environment', async () => { await changeConfigStatus(configId, false, EnvType.DEFAULT); + await Cache.getInstance().refreshDomain(domainId); + const response = await request(app) .post('/graphql') .set('Authorization', `Bearer ${token}`) @@ -222,6 +224,8 @@ describe('Testing criteria [GraphQL]', () => { qaToken = responseToken.body.token; await changeConfigStatus(configId, true, 'QA'); + await Cache.getInstance().refreshDomain(domainId); + const response = await request(app) .post('/graphql') .set('Authorization', `Bearer ${qaToken}`) From 6ba9b69c46a9a6571d00c9901797891544fc2cce Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Mon, 4 May 2026 21:20:18 -0700 Subject: [PATCH 2/2] fix: package lock --- npm-shrinkwrap.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index f6aa6d8..2c9f98e 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -14,7 +14,7 @@ "cors": "^2.8.6", "express": "^5.2.1", "express-basic-auth": "^1.2.1", - "express-rate-limit": "^8.4.1", + "express-rate-limit": "^8.5.0", "express-validator": "^7.3.2", "graphql": "^16.13.2", "graphql-http": "^1.22.4", @@ -1376,9 +1376,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", "optional": true, @@ -3235,9 +3235,9 @@ } }, "node_modules/express-rate-limit": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.4.1.tgz", - "integrity": "sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.0.tgz", + "integrity": "sha512-XKhFohWaSBdVJNTi5TaHziqnPkv04I9UQV6q1Wy7Ui6GGQZVW12ojDFwqer14EvCXxjvPG0CyWXx7cAXpALB4Q==", "license": "MIT", "dependencies": { "ip-address": "10.1.0"