@mojaloop/sdk-scheme-adapter 24.9.4 → 24.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/CHANGELOG.md CHANGED
@@ -1,4 +1,11 @@
1
1
  # Changelog: [mojaloop/sdk-scheme-adapter](https://github.com/mojaloop/sdk-scheme-adapter)
2
+ ### [24.9.5](https://github.com/mojaloop/sdk-scheme-adapter/compare/v24.9.4...v24.9.5) (2025-05-30)
3
+
4
+
5
+ ### Chore
6
+
7
+ * hot mutate peerJwsKeys instead of restart ([#584](https://github.com/mojaloop/sdk-scheme-adapter/issues/584)) ([08983fc](https://github.com/mojaloop/sdk-scheme-adapter/commit/08983fcc5ab7cde0042cb3e17545d581accb9d3a))
8
+
2
9
  ### [24.9.4](https://github.com/mojaloop/sdk-scheme-adapter/compare/v24.9.3...v24.9.4) (2025-05-30)
3
10
 
4
11
 
@@ -100,7 +100,7 @@
100
100
  "ws": "8.18.2"
101
101
  },
102
102
  "devDependencies": {
103
- "@babel/core": "7.27.3",
103
+ "@babel/core": "7.27.4",
104
104
  "@babel/preset-env": "7.27.2",
105
105
  "@redocly/openapi-cli": "1.0.0-beta.95",
106
106
  "@types/jest": "29.5.14",
@@ -52,6 +52,7 @@ class InboundApi extends EventEmitter {
52
52
  super({ captureExceptions: true });
53
53
  this._conf = conf;
54
54
  this._cache = cache;
55
+ this._logger = logger;
55
56
  _initialize ||= _validator.initialise(apiSpecs, conf);
56
57
 
57
58
  if (conf.validateInboundJws) {
@@ -85,6 +86,15 @@ class InboundApi extends EventEmitter {
85
86
  return this._api.callback();
86
87
  }
87
88
 
89
+ _updatePeerJwsKeys(peerJwsKeys) {
90
+ if (this._conf.pm4mlEnabled) {
91
+ this._logger && this._logger.isVerboseEnabled && this._logger.verbose('Clearing existing JWS verification keys');
92
+ Object.keys(this._jwsVerificationKeys).forEach(key => delete this._jwsVerificationKeys[key]);
93
+ this._logger && this._logger.isVerboseEnabled && this._logger.verbose('Assigning new peer JWS keys');
94
+ Object.assign(this._jwsVerificationKeys, peerJwsKeys);
95
+ }
96
+ }
97
+
88
98
  _startJwsWatcher() {
89
99
  const FS_EVENT_TYPES = {
90
100
  CHANGE: 'change',
@@ -141,8 +141,11 @@ class Server extends EventEmitter {
141
141
 
142
142
  _shouldUpdateInboundServer(newConf) {
143
143
  return !_.isEqual(this.conf.inbound, newConf.inbound)
144
- || !_.isEqual(this.conf.outbound, newConf.outbound)
145
- || !_.isEqual(this.conf.peerJWSKeys, newConf.peerJWSKeys);
144
+ || !_.isEqual(this.conf.outbound, newConf.outbound);
145
+ }
146
+
147
+ _shouldUpdatePeerJwsKeys(newConf) {
148
+ return !_.isEqual(this.conf.peerJWSKeys, newConf.peerJWSKeys);
146
149
  }
147
150
 
148
151
  async start() {
@@ -248,6 +251,11 @@ class Server extends EventEmitter {
248
251
  restartActionsTaken.updateInboundServer = true;
249
252
  }
250
253
 
254
+ const updatePeerJwsKeys = this._shouldUpdatePeerJwsKeys(newConf);
255
+ if (updatePeerJwsKeys) {
256
+ this.inboundServer._api._updatePeerJwsKeys(newConf.peerJWSKeys);
257
+ }
258
+
251
259
  this.logger.isDebugEnabled && this.logger.push({ oldConf: this.conf.outbound, newConf: newConf.outbound }).debug('Outbound server configuration');
252
260
  const updateOutboundServer = !_.isEqual(this.conf.outbound, newConf.outbound);
253
261
  if (updateOutboundServer) {
@@ -99,22 +99,19 @@ describe('Server', () => {
99
99
  expect(server.restart).toHaveBeenCalledWith(newConf);
100
100
  });
101
101
 
102
- it('restarts inbound server if peerJWSKeys config is different', async () => {
103
- // Clone the conf and change peerJWSKeys
104
- const newConf = JSON.parse(JSON.stringify(conf));
105
- newConf.peerJWSKeys = [{ kid: 'new-key', key: 'abc123' }];
102
+ it('hot mutates peerJwsKeys reference if peerJWSKeys config is different', async () => {
103
+ // Test that peerJwsKeys are updated without a full restart if config changes
104
+ const originalPeerJwsKeys = conf.peerJWSKeys;
105
+ const newPeerJwsKeys = { ...originalPeerJwsKeys, newKey: 'newValue' };
106
+ const newConfPeerJwsKeys = { ...conf, peerJWSKeys: newPeerJwsKeys };
106
107
 
107
- // _shouldUpdateInboundServer should return true
108
- expect(server._shouldUpdateInboundServer(newConf)).toBe(true);
108
+ expect(server._shouldUpdatePeerJwsKeys(newConfPeerJwsKeys)).toBe(true);
109
109
 
110
- // Simulate a config change event from control server
111
- controlServer.broadcastConfigChange(newConf);
112
-
113
- // Wait for the restart to be triggered
110
+ controlServer.broadcastConfigChange(newConfPeerJwsKeys);
114
111
  await new Promise((wait) => setTimeout(wait, 1000));
115
112
 
116
- expect(server.restart).toHaveBeenCalledTimes(1);
117
- expect(server.restart).toHaveBeenCalledWith(newConf);
113
+ // Should call restart with new config
114
+ expect(server.restart).toHaveBeenCalledWith(newConfPeerJwsKeys);
118
115
  });
119
116
 
120
117
  it('restarts inbound server if inbound or outbound is different', async () => {
@@ -60,7 +60,7 @@
60
60
  "@types/convict": "6.1.6",
61
61
  "@types/express": "5.0.2",
62
62
  "@types/jest": "29.5.14",
63
- "@types/node": "22.15.27",
63
+ "@types/node": "22.15.28",
64
64
  "@types/node-cache": "4.2.5",
65
65
  "@types/supertest": "6.0.3",
66
66
  "@types/swagger-ui-express": "4.1.8",
@@ -57,7 +57,7 @@
57
57
  "@types/convict": "6.1.6",
58
58
  "@types/express": "5.0.2",
59
59
  "@types/jest": "29.5.14",
60
- "@types/node": "22.15.27",
60
+ "@types/node": "22.15.28",
61
61
  "@types/node-cache": "4.2.5",
62
62
  "@types/supertest": "6.0.3",
63
63
  "@types/swagger-ui-express": "4.1.8",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@eslint/compat": "1.2.9",
43
- "@types/node": "22.15.27",
43
+ "@types/node": "22.15.28",
44
44
  "@types/uuid": "10.0.0",
45
45
  "@typescript-eslint/eslint-plugin": "8.33.0",
46
46
  "@typescript-eslint/parser": "8.33.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mojaloop/sdk-scheme-adapter",
3
- "version": "24.9.4",
3
+ "version": "24.9.5",
4
4
  "description": "mojaloop sdk-scheme-adapter",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/mojaloop/sdk-scheme-adapter",
@@ -82,7 +82,7 @@
82
82
  },
83
83
  "devDependencies": {
84
84
  "@types/jest": "29.5.14",
85
- "@types/node": "22.15.27",
85
+ "@types/node": "22.15.28",
86
86
  "@types/node-cache": "4.2.5",
87
87
  "@typescript-eslint/eslint-plugin": "8.33.0",
88
88
  "@typescript-eslint/parser": "8.33.0",