ml-testing-toolkit 18.16.6 → 18.17.0-snapshot.2

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.
package/.grype.yaml CHANGED
@@ -1,13 +1,20 @@
1
1
  ignore:
2
- # Ignore cross-spawn vulnerabilities by CVE ID due to false positive
3
- # as grype looks at package-lock.json where it shows versions with
4
- # vulnerabilities, npm ls shows only 7.0.6 verion is used
5
- - vulnerability: CVE-2025-9230
6
- - vulnerability: CVE-2025-9232
7
- - vulnerability: CVE-2025-9231
8
- - vulnerability: GHSA-3xgq-45jj-v275
9
- - vulnerability: GHSA-5j98-mcp5-4vw2 # false positive report for glob 10.4.5, not found in package-lock.json
10
- - vulnerability: CVE-2025-60876 # busybox and ssl_client from node 22.15.1 alpine image
2
+ # Remove this ignore after verifying CI builds fresh image
3
+ - vulnerability: GHSA-5j98-mcp5-4vw2
4
+ include-aliases: true
5
+ - vulnerability: CVE-2025-60876
6
+ reason: "No fixes available as of 2026-01-14 on Dockerfile base image 22.21.1-alpine3.23"
7
+ - vulnerability: CVE-2026-22184
8
+ reason: "No fixes available as of 2026-01-16 on Dockerfile base image 22.21.1-alpine3.23"
9
+ - vulnerability: CVE-2026-28309
10
+ - vulnerability: CVE-2025-59465
11
+ - vulnerability: CVE-2025-55131
12
+ - vulnerability: GHSA-r6q2-hw4h-h46w
13
+ - vulnerability: GHSA-8qq5-rm4j-mr97
14
+ - vulnerability: CVE-2025-55130
15
+ - vulnerability: CVE-2026-21637
16
+ - vulnerability: CVE-2025-59466
17
+ - vulnerability: GHSA-xxjr-mmjv-4gpg
11
18
 
12
19
  # Set output format defaults
13
20
  output:
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- 22.15.1
1
+ 22.21.1
package/audit-ci.jsonc CHANGED
@@ -4,6 +4,6 @@
4
4
  // Only use one of ["low": true, "moderate": true, "high": true, "critical": true]
5
5
  "moderate": true,
6
6
  "allowlist": [
7
-
7
+ "GHSA-xxjr-mmjv-4gpg"
8
8
  ]
9
9
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ml-testing-toolkit",
3
3
  "description": "Testing Toolkit for Mojaloop implementations",
4
- "version": "18.16.6",
4
+ "version": "18.17.0-snapshot.2",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Vijaya Kumar Guthi, ModusBox Inc. ",
7
7
  "contributors": [
@@ -78,10 +78,10 @@
78
78
  "@hapi/hapi": "21.4.4",
79
79
  "@hapi/inert": "7.1.0",
80
80
  "@hapi/vision": "7.0.3",
81
- "@mojaloop/central-services-logger": "11.10.2",
81
+ "@mojaloop/central-services-logger": "11.10.3",
82
82
  "@mojaloop/central-services-metrics": "12.8.3",
83
83
  "@mojaloop/ml-schema-transformer-lib": "2.7.13",
84
- "@mojaloop/ml-testing-toolkit-shared-lib": "14.3.1",
84
+ "@mojaloop/ml-testing-toolkit-shared-lib": "14.3.2",
85
85
  "@mojaloop/sdk-standard-components": "19.18.4",
86
86
  "@now-ims/hapi-now-auth": "2.1.0",
87
87
  "@types/socket.io": "3.0.2",
@@ -93,7 +93,7 @@
93
93
  "connection-string": "^5.0.0",
94
94
  "cookie-parser": "1.4.7",
95
95
  "cookies": "0.9.1",
96
- "cors": "2.8.5",
96
+ "cors": "2.8.6",
97
97
  "dotenv": "17.2.3",
98
98
  "express": "5.2.1",
99
99
  "express-validator": "7.3.1",
@@ -107,8 +107,8 @@
107
107
  "json-refs": "3.0.15",
108
108
  "json-rules-engine": "7.3.1",
109
109
  "jsonwebtoken": "9.0.3",
110
- "lodash": "4.17.21",
111
- "mongoose": "9.1.2",
110
+ "lodash": "4.17.23",
111
+ "mongoose": "9.1.5",
112
112
  "multer": "2.0.2",
113
113
  "mustache": "4.2.0",
114
114
  "mv": "2.1.1",
@@ -48,10 +48,7 @@ const getConnection = async () => {
48
48
  }
49
49
 
50
50
  // TLS/SSL support
51
- const mongoOptions = {
52
- useNewUrlParser: true,
53
- useUnifiedTopology: true
54
- }
51
+ const mongoOptions = {}
55
52
 
56
53
  if (systemConfig.DB.SSL_ENABLED) {
57
54
  mongoOptions.tls = true
@@ -140,8 +140,24 @@ const handleTransferIlp = (context, response) => {
140
140
  response.body.TxInfAndSts.ExctnConf = generatedFulfilment
141
141
  }
142
142
  }
143
+
143
144
  if (context.request.method === 'get' && response.method === 'put' && pathMatch.test(response.path)) {
144
- delete response.body.fulfilment
145
+ const transferId = response.path.match(pathMatch)[1]
146
+ const storedTransfer = context.storedTransfers?.[transferId]
147
+
148
+ // Check if stored request exists and is within 30 seconds
149
+ if (storedTransfer) {
150
+ if (storedTransfer.request.ilpPacket) {
151
+ const generatedFulfilment = ilpObj.calculateFulfil(storedTransfer.request.ilpPacket).replace('"', '')
152
+ response.body.fulfilment = generatedFulfilment
153
+ } else if (storedTransfer.request.CdtTrfTxInf?.VrfctnOfTerms?.IlpV4PrepPacket) {
154
+ const generatedFulfilment = ilpV4Obj.calculateFulfil(storedTransfer.request.CdtTrfTxInf.VrfctnOfTerms.IlpV4PrepPacket).replace('"', '')
155
+ response.body.TxInfAndSts.ExctnConf = generatedFulfilment
156
+ }
157
+ delete context.storedTransfers[transferId]
158
+ } else {
159
+ delete response.body.fulfilment
160
+ }
145
161
  }
146
162
  }
147
163
 
@@ -318,6 +318,23 @@ const generateAsyncCallback = async (item, context, req) => {
318
318
  return
319
319
  }
320
320
  } else {
321
+ // Store transfers early - right after validation
322
+ const transferPathMatch = /\/transfers\/([^/]+)$/
323
+ const fxTransferPathMatch = /\/fxTransfers\/([^/]+)$/
324
+ if (req.method === 'post' && (transferPathMatch.test(req.path) || fxTransferPathMatch.test(req.path))) {
325
+ if (!context.storedTransfers) {
326
+ context.storedTransfers = {}
327
+ }
328
+ const isFxTransfer = fxTransferPathMatch.test(req.path)
329
+ const transferId = req.path.match(isFxTransfer ? fxTransferPathMatch : transferPathMatch)[1]
330
+ customLogger.logMessage('debug', 'Storing transfer for validation', { additionalData: { transferId }, request: req })
331
+
332
+ context.storedTransfers[transferId] = {
333
+ request: req.payload,
334
+ type: isFxTransfer ? 'fxTransfer' : 'transfer'
335
+ }
336
+ }
337
+
321
338
  // Getting callback info from callback map file
322
339
  try {
323
340
  const cbMapRawdata = await utils.readFileAsync(item.callbackMapFile)