From 0f3df7f12c878a479536434568f91a62a74e762b Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 12 Jun 2025 15:41:35 +0100 Subject: [PATCH 1/4] feat: cache the operator ID --- packages/server/lib/operator.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/server/lib/operator.js b/packages/server/lib/operator.js index 7cf8b8b2..f1d333a8 100644 --- a/packages/server/lib/operator.js +++ b/packages/server/lib/operator.js @@ -1,8 +1,14 @@ const db = require('./db') +let operatorId = {} + function getOperatorId(service) { + if (operatorId[service]) return Promise.resolve(operatorId[service]) + const sql = 'SELECT operator_id FROM operator_ids WHERE service = ${service}' - return db.oneOrNone(sql, { service }, ({ operator_id }) => operator_id) + return db.one(sql, { service }, ({ operator_id }) => { + return (operatorId[service] = operator_id) + }) } module.exports = { getOperatorId } From e93c7f06c01ca091d9beb32bf8d4287112b8029e Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 12 Jun 2025 15:42:18 +0100 Subject: [PATCH 2/4] feat: fetch the operator ID before server startup --- packages/server/lib/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/server/lib/app.js b/packages/server/lib/app.js index c3848f88..23cc74ea 100644 --- a/packages/server/lib/app.js +++ b/packages/server/lib/app.js @@ -11,6 +11,7 @@ const configManager = require('./new-config-manager') const complianceTriggers = require('./compliance-triggers') const ofac = require('./ofac/index') const ofacUpdate = require('./ofac/update') +const operator = require('./operator') const KEY_PATH = process.env.KEY_PATH const CERT_PATH = process.env.CERT_PATH @@ -78,6 +79,7 @@ async function startServer() { const port = argv.port || 3000 + await operator.getOperatorId('middleware').catch(logger.error) await new Promise(resolve => server.listen({ port }, resolve)) logger.info(`lamassu-server listening on port ${port}`) } From 430ca16cc55a90c8e9c54d83f7a944ebb9af088e Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 12 Jun 2025 15:42:59 +0100 Subject: [PATCH 3/4] feat: add version to returned object in `new-settings-loader.js:load()` --- packages/server/lib/new-settings-loader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/lib/new-settings-loader.js b/packages/server/lib/new-settings-loader.js index a83ff7db..9c75cb52 100644 --- a/packages/server/lib/new-settings-loader.js +++ b/packages/server/lib/new-settings-loader.js @@ -256,6 +256,7 @@ function load(versionId) { t.batch([loadConfig(t, versionId), _loadAccounts(t)]).then( ([config, accounts]) => ({ config, + version: versionId, accounts, }), ) From afae156ef955033452b9bb3b1c1042720debf3aa Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 12 Jun 2025 15:47:52 +0100 Subject: [PATCH 4/4] refactor: use configs version from configs object --- packages/server/lib/graphql/resolvers.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/server/lib/graphql/resolvers.js b/packages/server/lib/graphql/resolvers.js index b400852f..a8326809 100644 --- a/packages/server/lib/graphql/resolvers.js +++ b/packages/server/lib/graphql/resolvers.js @@ -5,7 +5,6 @@ const nmd = require('nano-markdown') const plugins = require('../plugins') const configManager = require('../new-config-manager') -const settingsLoader = require('../new-settings-loader') const { batchGetCustomInfoRequest, getCustomInfoRequests, @@ -411,17 +410,13 @@ const terms = (parent, { currentConfigVersion, currentHash }, { settings }) => { const isHashNew = hash !== currentHash const text = isHashNew ? latestTerms.text : null - return settingsLoader - .fetchCurrentConfigVersion() - .catch(() => null) - .then( - configVersion => - isHashNew || - _.isNil(currentConfigVersion) || - currentConfigVersion < configVersion, - ) - .then(isVersionNew => (isVersionNew ? _.omit(['text'], latestTerms) : null)) - .then(details => ({ hash, details, text })) + const isVersionNew = + isHashNew || + _.isNil(currentConfigVersion) || + currentConfigVersion < settings.version + const details = isVersionNew ? _.omit(['text'], latestTerms) : null + + return { hash, details, text } } module.exports = {