From 56e58521bdc3ecb3bb73c8072b68fead38fac285 Mon Sep 17 00:00:00 2001 From: Jayson Hurst Date: Sat, 17 Feb 2024 00:35:03 +0000 Subject: [PATCH 01/13] Removed offending MD5 crypto hash and replaced with SHA1 and SHA256 crypto hashes to work with the FIPS crypto policy. --- packages/node_modules/@node-red/editor-api/lib/editor/ui.js | 2 +- packages/node_modules/@node-red/runtime/lib/storage/index.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/ui.js b/packages/node_modules/@node-red/editor-api/lib/editor/ui.js index e7bf15069..37c79d415 100644 --- a/packages/node_modules/@node-red/editor-api/lib/editor/ui.js +++ b/packages/node_modules/@node-red/editor-api/lib/editor/ui.js @@ -99,7 +99,7 @@ module.exports = { // settings.instanceId is set asynchronously to the editor-api // being initiaised. So we defer calculating the cacheBuster hash // until the first load of the editor - cacheBuster = crypto.createHash('md5').update(`${settings.version || 'version'}-${settings.instanceId || 'instanceId'}`).digest("hex").substring(0,12) + cacheBuster = crypto.createHash('sha1').update(`${settings.version || 'version'}-${settings.instanceId || 'instanceId'}`).digest("hex").substring(0,12) } let sessionMessages; diff --git a/packages/node_modules/@node-red/runtime/lib/storage/index.js b/packages/node_modules/@node-red/runtime/lib/storage/index.js index f5e07e254..989989e1d 100644 --- a/packages/node_modules/@node-red/runtime/lib/storage/index.js +++ b/packages/node_modules/@node-red/runtime/lib/storage/index.js @@ -77,7 +77,7 @@ var storageModuleInterface = { flows: flows, credentials: creds }; - result.rev = crypto.createHash('md5').update(JSON.stringify(result.flows)).digest("hex"); + result.rev = crypto.createHash('sha256').update(JSON.stringify(result.flows)).digest("hex"); return result; }) }); @@ -95,7 +95,7 @@ var storageModuleInterface = { return credentialSavePromise.then(function() { return storageModule.saveFlows(flows, user).then(function() { - return crypto.createHash('md5').update(JSON.stringify(config.flows)).digest("hex"); + return crypto.createHash('sha256').update(JSON.stringify(config.flows)).digest("hex"); }) }); }, From aeb79bce2ac12ecf60f076425cea40cb9cffad79 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 19 Feb 2024 16:07:22 +0000 Subject: [PATCH 02/13] Fix missing node icons in workspace --- packages/node_modules/@node-red/editor-client/src/js/ui/view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index fa20f3f61..a71daaea1 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -4156,7 +4156,7 @@ RED.view = (function() { } var width = img.width * scaleFactor; if (width > 20) { - scalefactor *= 20/width; + scaleFactor *= 20/width; width = 20; } var height = img.height * scaleFactor; From 43b3589451636d79245faa52943c599bf229d510 Mon Sep 17 00:00:00 2001 From: giscafer Date: Thu, 22 Feb 2024 13:02:06 +0800 Subject: [PATCH 03/13] fix: template node zh-CN translation --- .../@node-red/nodes/locales/zh-CN/function/80-template.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/locales/zh-CN/function/80-template.html b/packages/node_modules/@node-red/nodes/locales/zh-CN/function/80-template.html index 938a77818..31b43c764 100644 --- a/packages/node_modules/@node-red/nodes/locales/zh-CN/function/80-template.html +++ b/packages/node_modules/@node-red/nodes/locales/zh-CN/function/80-template.html @@ -23,7 +23,7 @@
template string
msg.payload填充的模板。如果未在编辑面板中配置,则可以将设为msg的属性。
-

Outputs

+

输出

msg object
由来自传入msg的属性来填充已配置的模板后输出的带有属性的msg。
@@ -32,7 +32,7 @@

默认情况下使用mustache格式。如有需要也可以切换其他格式。

例如:

Hello {{payload.name}}. Today is {{date}}
-

receives a message containing: +

接收一条消息,其中包含:

{
   date: "Monday",
   payload: {

From 635334f0966d7089cbd01656f8fb1cb7f645ce04 Mon Sep 17 00:00:00 2001
From: Kazuhito Yokoi 
Date: Sun, 25 Feb 2024 17:04:42 +0900
Subject: [PATCH 04/13] Fix example flow name in import dialog

---
 packages/node_modules/@node-red/registry/lib/library.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/node_modules/@node-red/registry/lib/library.js b/packages/node_modules/@node-red/registry/lib/library.js
index 0b242b270..07cb54318 100644
--- a/packages/node_modules/@node-red/registry/lib/library.js
+++ b/packages/node_modules/@node-red/registry/lib/library.js
@@ -36,7 +36,7 @@ async function getFlowsFromPath(path) {
                     promises.push(getFlowsFromPath(fullPath));
                 } else if (/\.json$/.test(file)){
                     validFiles.push(file);
-                    promises.push(Promise.resolve(file.split(".")[0]))
+                    promises.push(Promise.resolve(file.replace(/\.json$/, '')))
                 }
             })
         }

From 7de0984d6d31f0b12a733c6da029ded96902808e Mon Sep 17 00:00:00 2001
From: Kazuhito Yokoi 
Date: Sun, 25 Feb 2024 17:38:46 +0900
Subject: [PATCH 05/13] Update test case for example flow name

---
 test/unit/@node-red/registry/lib/library_spec.js       | 10 ++++------
 .../registry/lib/resources/examples/1.2.3.json         |  0
 2 files changed, 4 insertions(+), 6 deletions(-)
 create mode 100644 test/unit/@node-red/registry/lib/resources/examples/1.2.3.json

diff --git a/test/unit/@node-red/registry/lib/library_spec.js b/test/unit/@node-red/registry/lib/library_spec.js
index 2e0e7e99a..75c444f67 100644
--- a/test/unit/@node-red/registry/lib/library_spec.js
+++ b/test/unit/@node-red/registry/lib/library_spec.js
@@ -33,16 +33,15 @@ describe("library api", function() {
         should.not.exist(library.getExampleFlowPath('foo','bar'));
     });
 
-    it('returns a valid example path', function(done) {
+    it('returns valid example paths', function(done) {
         library.init();
         library.addExamplesDir("test-module",path.resolve(__dirname+'/resources/examples')).then(function() {
             try {
                 var flows = library.getExampleFlows();
-                flows.should.deepEqual({"test-module":{"f":["one"]}});
+                flows.should.deepEqual({"test-module":{"f":["1.2.3","one"]}});
 
                 var examplePath = library.getExampleFlowPath('test-module','one');
-                examplePath.should.eql(path.resolve(__dirname+'/resources/examples/one.json'))
-
+                examplePath.should.eql(path.resolve(__dirname+'/resources/examples/one.json'));
 
                 library.removeExamplesDir('test-module');
 
@@ -57,6 +56,5 @@ describe("library api", function() {
                 done(err);
             }
         });
-
-    })
+    });
 });
diff --git a/test/unit/@node-red/registry/lib/resources/examples/1.2.3.json b/test/unit/@node-red/registry/lib/resources/examples/1.2.3.json
new file mode 100644
index 000000000..e69de29bb

From 4643f5e8cca9245625f389a73a45674d7838fa26 Mon Sep 17 00:00:00 2001
From: giscafer 
Date: Sun, 25 Feb 2024 22:44:01 +0800
Subject: [PATCH 06/13] chore: remove never use import code

---
 .../node_modules/@node-red/editor-api/lib/admin/settings.js    | 1 -
 .../node_modules/@node-red/editor-api/lib/auth/strategies.js   | 1 -
 packages/node_modules/@node-red/editor-api/lib/editor/index.js | 2 --
 .../node_modules/@node-red/editor-api/lib/editor/library.js    | 2 --
 .../node_modules/@node-red/editor-api/lib/editor/locales.js    | 3 ---
 .../node_modules/@node-red/editor-api/lib/editor/sshkeys.js    | 1 -
 packages/node_modules/@node-red/editor-api/lib/editor/theme.js | 1 -
 packages/node_modules/@node-red/editor-api/lib/index.js        | 3 ---
 8 files changed, 14 deletions(-)

diff --git a/packages/node_modules/@node-red/editor-api/lib/admin/settings.js b/packages/node_modules/@node-red/editor-api/lib/admin/settings.js
index d72f9e094..425d42415 100644
--- a/packages/node_modules/@node-red/editor-api/lib/admin/settings.js
+++ b/packages/node_modules/@node-red/editor-api/lib/admin/settings.js
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  **/
-var apiUtils = require("../util");
 var runtimeAPI;
 var settings;
 var theme = require("../editor/theme");
diff --git a/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js b/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js
index e18925c19..b071a9caf 100644
--- a/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js
+++ b/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js
@@ -18,7 +18,6 @@ var BearerStrategy = require('passport-http-bearer').Strategy;
 var ClientPasswordStrategy = require('passport-oauth2-client-password').Strategy;
 
 var passport = require("passport");
-var crypto = require("crypto");
 var util = require("util");
 
 var Tokens = require("./tokens");
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/index.js b/packages/node_modules/@node-red/editor-api/lib/editor/index.js
index 648daa09b..54cf17f12 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/index.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/index.js
@@ -14,11 +14,9 @@
  * limitations under the License.
  **/
 
-var express = require("express");
 var path = require('path');
 
 var comms = require("./comms");
-var library = require("./library");
 var info = require("./settings");
 
 var auth = require("../auth");
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/library.js b/packages/node_modules/@node-red/editor-api/lib/editor/library.js
index cd564b3f8..7853227ea 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/library.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/library.js
@@ -15,8 +15,6 @@
  **/
 
 var apiUtils = require("../util");
-var fs = require('fs');
-var fspath = require('path');
 
 var runtimeAPI;
 
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/locales.js b/packages/node_modules/@node-red/editor-api/lib/editor/locales.js
index 568f5837b..6109d8741 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/locales.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/locales.js
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  **/
-var fs = require('fs');
-var path = require('path');
-// var apiUtil = require('../util');
 
 var i18n = require("@node-red/util").i18n; // TODO: separate module
 
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js b/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js
index 08097571f..885967b91 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/sshkeys.js
@@ -15,7 +15,6 @@
  **/
 
 var apiUtils = require("../util");
-var express = require("express");
 var runtimeAPI;
 var settings;
 
diff --git a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
index e5c3904c7..c3808a751 100644
--- a/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
+++ b/packages/node_modules/@node-red/editor-api/lib/editor/theme.js
@@ -14,7 +14,6 @@
  * limitations under the License.
  **/
 
-var express = require("express");
 var util = require("util");
 var path = require("path");
 var fs = require("fs");
diff --git a/packages/node_modules/@node-red/editor-api/lib/index.js b/packages/node_modules/@node-red/editor-api/lib/index.js
index d9f34eafd..9264550b3 100644
--- a/packages/node_modules/@node-red/editor-api/lib/index.js
+++ b/packages/node_modules/@node-red/editor-api/lib/index.js
@@ -24,11 +24,8 @@
   * @namespace @node-red/editor-api
   */
 
-var express = require("express");
 var bodyParser = require("body-parser");
-var util = require('util');
 var passport = require('passport');
-var cors = require('cors');
 
 var auth = require("./auth");
 var apiUtil = require("./util");

From fa78bb3d78418fad126dddc02d497c0e35529f66 Mon Sep 17 00:00:00 2001
From: Nick O'Leary 
Date: Mon, 26 Feb 2024 16:17:09 +0000
Subject: [PATCH 07/13] Handle undefined env vars Fixes #4579

---
 packages/node_modules/@node-red/runtime/lib/flows/Flow.js    | 2 +-
 packages/node_modules/@node-red/runtime/lib/flows/Group.js   | 2 +-
 packages/node_modules/@node-red/runtime/lib/flows/Subflow.js | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js
index b541a9d95..dd3d335a2 100644
--- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js
+++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js
@@ -485,7 +485,7 @@ class Flow {
         }
         if (!key.startsWith("$parent.")) {
             if (this._env.hasOwnProperty(key)) {
-                return (Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
+                return (this._env[key] && Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
             }
         } else {
                 key = key.substring(8);
diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Group.js b/packages/node_modules/@node-red/runtime/lib/flows/Group.js
index 521b6ceda..90d93cf45 100644
--- a/packages/node_modules/@node-red/runtime/lib/flows/Group.js
+++ b/packages/node_modules/@node-red/runtime/lib/flows/Group.js
@@ -41,7 +41,7 @@ class Group {
         }
         if (!key.startsWith("$parent.")) {
             if (this._env.hasOwnProperty(key)) {
-                return (Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
+                return (this._env[key] && Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
             }
         } else {
             key = key.substring(8);
diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Subflow.js b/packages/node_modules/@node-red/runtime/lib/flows/Subflow.js
index 62948d203..c3a47e1f7 100644
--- a/packages/node_modules/@node-red/runtime/lib/flows/Subflow.js
+++ b/packages/node_modules/@node-red/runtime/lib/flows/Subflow.js
@@ -376,7 +376,7 @@ class Subflow extends Flow {
         }
         if (!key.startsWith("$parent.")) {
             if (this._env.hasOwnProperty(key)) {
-                return (Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
+                return (this._env[key] && Object.hasOwn(this._env[key], 'value') && this._env[key].__clone__) ? clone(this._env[key].value) : this._env[key]
             }
         } else {
             key = key.substring(8);

From 220786be60564381428347d9f7a3298413ca85ef Mon Sep 17 00:00:00 2001
From: Nick O'Leary 
Date: Mon, 26 Feb 2024 16:55:01 +0000
Subject: [PATCH 08/13] Do not flag env var in num typedInput as error

---
 .../editor-client/src/js/ui/utils.js          |  5 ++++-
 .../editor-client/src/js/validators.js        | 16 +++++++++++++--
 .../nodes/core/common/20-inject.html          | 20 +++++++++++++------
 3 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
index 6475b19f5..bdc6a06d2 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js
@@ -906,7 +906,10 @@ RED.utils = (function() {
      * @returns true if valid, String if invalid
      */
     function validateTypedProperty(propertyValue, propertyType, opt) {
-
+        if (propertyValue && /^\${[^}]+}$/.test(propertyValue)) {
+            // Allow ${ENV_VAR} value
+            return true
+        }
         let error
         if (propertyType === 'json') {
             try {
diff --git a/packages/node_modules/@node-red/editor-client/src/js/validators.js b/packages/node_modules/@node-red/editor-client/src/js/validators.js
index 1673495aa..c17955ce1 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/validators.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/validators.js
@@ -16,8 +16,20 @@
 RED.validators = {
     number: function(blankAllowed,mopt){
         return function(v, opt) {
-            if ((blankAllowed&&(v===''||v===undefined)) || (v!=='' && !isNaN(v))) {
-                return true;
+            if (blankAllowed && (v === '' || v === undefined)) {
+                return true
+            }
+            if (v !== '') {
+                if (/^NaN$|^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$|^[+-]?(0b|0B)[01]+$|^[+-]?(0o|0O)[0-7]+$|^[+-]?(0x|0X)[0-9a-fA-F]+$/.test(v)) {
+                    return true
+                }
+                if (/^\${[^}]+}$/.test(v)) {
+                    // Allow ${ENV_VAR} value
+                    return true
+                }
+            }
+            if (!isNaN(v)) {
+                return true
             }
             if (opt && opt.label) {
                 return RED._("validator.errors.invalid-num-prop", {
diff --git a/packages/node_modules/@node-red/nodes/core/common/20-inject.html b/packages/node_modules/@node-red/nodes/core/common/20-inject.html
index d50725d51..5895220d3 100644
--- a/packages/node_modules/@node-red/nodes/core/common/20-inject.html
+++ b/packages/node_modules/@node-red/nodes/core/common/20-inject.html
@@ -227,34 +227,42 @@
             name: {value:""},
             props:{value:[{p:"payload"},{p:"topic",vt:"str"}], validate:function(v, opt) {
                     if (!v || v.length === 0) { return true }
+                    const errors = []
                     for (var i=0;i 0) {
+                        return errors
+                    }
                     return true;
                 }
             },
             repeat: {
                 value:"", validate: function(v, opt) {
                     if ((v === "") ||
-                        (RED.validators.number(v) &&
+                        (RED.validators.number()(v) &&
                          (v >= 0) && (v <= 2147483))) {
                         return true;
                     }
@@ -263,7 +271,7 @@
             },
             crontab: {value:""},
             once: {value:false},
-            onceDelay: {value:0.1},
+            onceDelay: {value:0.1, validate: RED.validators.number(true)},
             topic: {value:""},
             payload: {value:"", validate: RED.validators.typedInput("payloadType", false) },
             payloadType: {value:"date"},

From fb50e2772a99f08ff8c241c6f94f541f898fcfa0 Mon Sep 17 00:00:00 2001
From: Nick O'Leary 
Date: Fri, 1 Mar 2024 10:50:06 +0000
Subject: [PATCH 09/13] Bump for 3.1.6 release

---
 CHANGELOG.md                                   | 18 ++++++++++++++++++
 package.json                                   |  2 +-
 .../@node-red/editor-api/package.json          |  6 +++---
 .../@node-red/editor-client/package.json       |  2 +-
 .../node_modules/@node-red/nodes/package.json  |  2 +-
 .../@node-red/registry/package.json            |  4 ++--
 .../@node-red/runtime/package.json             |  6 +++---
 .../node_modules/@node-red/util/package.json   |  2 +-
 packages/node_modules/node-red/package.json    | 10 +++++-----
 9 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 618c3d8b5..bbf45998a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,21 @@
+#### 3.1.6: Maintenance Release
+
+Editor
+
+ - Do not flag env var in num typedInput as error (#4582) @knolleary
+ - Fix example flow name in import dialog (#4578) @kazuhitoyokoi
+ - Fix missing node icons in workspace (#4570) @knolleary
+
+Runtime
+
+ - Handle undefined env vars (#4581) @knolleary
+ - fix: Removed offending MD5 crypto hash and replaced with SHA1 and SHA256 … (#4568) @JaysonHurst
+ - chore: remove never use import code (#4580) @giscafer
+
+Nodes
+
+ - fix: template node zh-CN translation (#4575) @giscafer
+
 #### 3.1.5: Maintenance Release
 
 Runtime
diff --git a/package.json b/package.json
index d9db20077..b490ddd75 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "node-red",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "description": "Low-code programming for event-driven applications",
     "homepage": "https://nodered.org",
     "license": "Apache-2.0",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index 978e84b9e..473e69f54 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/editor-api",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,8 +16,8 @@
         }
     ],
     "dependencies": {
-        "@node-red/util": "3.1.5",
-        "@node-red/editor-client": "3.1.5",
+        "@node-red/util": "3.1.6",
+        "@node-red/editor-client": "3.1.6",
         "bcryptjs": "2.4.3",
         "body-parser": "1.20.2",
         "clone": "2.1.2",
diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json
index 5f46e476c..77761bd82 100644
--- a/packages/node_modules/@node-red/editor-client/package.json
+++ b/packages/node_modules/@node-red/editor-client/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/editor-client",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index b003e4f07..f9e2dd0c6 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/nodes",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 187ebaf3b..0eee0c9dc 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/registry",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,7 +16,7 @@
         }
     ],
     "dependencies": {
-        "@node-red/util": "3.1.5",
+        "@node-red/util": "3.1.6",
         "clone": "2.1.2",
         "fs-extra": "11.1.1",
         "semver": "7.5.4",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index f1aa5b101..755d03bf2 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/runtime",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,8 +16,8 @@
         }
     ],
     "dependencies": {
-        "@node-red/registry": "3.1.5",
-        "@node-red/util": "3.1.5",
+        "@node-red/registry": "3.1.6",
+        "@node-red/util": "3.1.6",
         "async-mutex": "0.4.0",
         "clone": "2.1.2",
         "express": "4.18.2",
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index eea46d2c4..160eddabb 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/util",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index 9159c704e..b2d73055d 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -1,6 +1,6 @@
 {
     "name": "node-red",
-    "version": "3.1.5",
+    "version": "3.1.6",
     "description": "Low-code programming for event-driven applications",
     "homepage": "https://nodered.org",
     "license": "Apache-2.0",
@@ -31,10 +31,10 @@
         "flow"
     ],
     "dependencies": {
-        "@node-red/editor-api": "3.1.5",
-        "@node-red/runtime": "3.1.5",
-        "@node-red/util": "3.1.5",
-        "@node-red/nodes": "3.1.5",
+        "@node-red/editor-api": "3.1.6",
+        "@node-red/runtime": "3.1.6",
+        "@node-red/util": "3.1.6",
+        "@node-red/nodes": "3.1.6",
         "basic-auth": "2.0.1",
         "bcryptjs": "2.4.3",
         "express": "4.18.2",

From da380f74640c4ad86492aa691d72b1cfe78c142c Mon Sep 17 00:00:00 2001
From: Ben Hardill 
Date: Tue, 5 Mar 2024 10:22:49 +0000
Subject: [PATCH 10/13] Update jsonata version

Pulls in fix for CVE-2024-27307
---
 packages/node_modules/@node-red/util/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index 160eddabb..50b760bff 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -18,7 +18,7 @@
         "fs-extra": "11.1.1",
         "i18next": "21.10.0",
         "json-stringify-safe": "5.0.1",
-        "jsonata": "1.8.6",
+        "jsonata": "1.8.7",
         "lodash.clonedeep": "^4.5.0",
         "moment": "2.29.4",
         "moment-timezone": "0.5.43"

From a193b79d3dc7a28397ba810938483b18819a5c49 Mon Sep 17 00:00:00 2001
From: Ben Hardill 
Date: Tue, 5 Mar 2024 10:31:03 +0000
Subject: [PATCH 11/13] Bump jsonata to match utils

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index b490ddd75..56b7f7025 100644
--- a/package.json
+++ b/package.json
@@ -54,7 +54,7 @@
         "is-utf8": "0.2.1",
         "js-yaml": "4.1.0",
         "json-stringify-safe": "5.0.1",
-        "jsonata": "1.8.6",
+        "jsonata": "1.8.7",
         "lodash.clonedeep": "^4.5.0",
         "media-typer": "1.1.0",
         "memorystore": "1.6.7",

From a0d3ea62b29c5df5482a901f2b0af30970881133 Mon Sep 17 00:00:00 2001
From: Kazuhito Yokoi 
Date: Sun, 10 Mar 2024 23:36:20 +0900
Subject: [PATCH 12/13] Add Japanese translation for v3.1.6

---
 .../@node-red/editor-client/locales/ja/editor.json             | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
index 5d988c68a..53c8616fd 100644
--- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
+++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
@@ -303,7 +303,8 @@
                 "missingType": "不正なフロー - __index__ 番目の要素に'type'プロパティがありません"
             },
             "conflictNotification1": "読み込もうとしているノードのいくつかは、既にワークスペース内に存在しています。",
-            "conflictNotification2": "読み込むノードを選択し、また既存のノードを置き換えるか、もしくはそれらのコピーを読み込むかも選択してください。"
+            "conflictNotification2": "読み込むノードを選択し、また既存のノードを置き換えるか、もしくはそれらのコピーを読み込むかも選択してください。",
+            "alreadyExists": "本ノードは既に存在"
         },
         "copyMessagePath": "パスをコピーしました",
         "copyMessageValue": "値をコピーしました",

From 6a6f0d04d6723866c39588efb7d391d9de7bbde0 Mon Sep 17 00:00:00 2001
From: Nick O'Leary 
Date: Tue, 12 Mar 2024 14:25:41 +0000
Subject: [PATCH 13/13] Bump for 3.1.7 release

---
 CHANGELOG.md                                           |  5 +++++
 package.json                                           |  2 +-
 .../node_modules/@node-red/editor-api/package.json     |  6 +++---
 .../node_modules/@node-red/editor-client/package.json  |  2 +-
 packages/node_modules/@node-red/nodes/package.json     |  2 +-
 packages/node_modules/@node-red/registry/package.json  |  4 ++--
 packages/node_modules/@node-red/runtime/package.json   |  6 +++---
 packages/node_modules/@node-red/util/package.json      |  2 +-
 packages/node_modules/node-red/package.json            | 10 +++++-----
 9 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index bbf45998a..68ea56f85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+#### 3.1.7: Maintenance Release
+
+ - Add Japanese translation for v3.1.6 (#4603) @kazuhitoyokoi
+ - Update jsonata version (#4593) @hardillb
+
 #### 3.1.6: Maintenance Release
 
 Editor
diff --git a/package.json b/package.json
index 56b7f7025..aa61af324 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "node-red",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "description": "Low-code programming for event-driven applications",
     "homepage": "https://nodered.org",
     "license": "Apache-2.0",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index 473e69f54..39fbc748f 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/editor-api",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,8 +16,8 @@
         }
     ],
     "dependencies": {
-        "@node-red/util": "3.1.6",
-        "@node-red/editor-client": "3.1.6",
+        "@node-red/util": "3.1.7",
+        "@node-red/editor-client": "3.1.7",
         "bcryptjs": "2.4.3",
         "body-parser": "1.20.2",
         "clone": "2.1.2",
diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json
index 77761bd82..4012a1148 100644
--- a/packages/node_modules/@node-red/editor-client/package.json
+++ b/packages/node_modules/@node-red/editor-client/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/editor-client",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index f9e2dd0c6..b91d21385 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/nodes",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 0eee0c9dc..60f0e5863 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/registry",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,7 +16,7 @@
         }
     ],
     "dependencies": {
-        "@node-red/util": "3.1.6",
+        "@node-red/util": "3.1.7",
         "clone": "2.1.2",
         "fs-extra": "11.1.1",
         "semver": "7.5.4",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index 755d03bf2..d27ef3d8d 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/runtime",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "main": "./lib/index.js",
     "repository": {
@@ -16,8 +16,8 @@
         }
     ],
     "dependencies": {
-        "@node-red/registry": "3.1.6",
-        "@node-red/util": "3.1.6",
+        "@node-red/registry": "3.1.7",
+        "@node-red/util": "3.1.7",
         "async-mutex": "0.4.0",
         "clone": "2.1.2",
         "express": "4.18.2",
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index 50b760bff..eadb42586 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@node-red/util",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "license": "Apache-2.0",
     "repository": {
         "type": "git",
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index b2d73055d..6c9043fda 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -1,6 +1,6 @@
 {
     "name": "node-red",
-    "version": "3.1.6",
+    "version": "3.1.7",
     "description": "Low-code programming for event-driven applications",
     "homepage": "https://nodered.org",
     "license": "Apache-2.0",
@@ -31,10 +31,10 @@
         "flow"
     ],
     "dependencies": {
-        "@node-red/editor-api": "3.1.6",
-        "@node-red/runtime": "3.1.6",
-        "@node-red/util": "3.1.6",
-        "@node-red/nodes": "3.1.6",
+        "@node-red/editor-api": "3.1.7",
+        "@node-red/runtime": "3.1.7",
+        "@node-red/util": "3.1.7",
+        "@node-red/nodes": "3.1.7",
         "basic-auth": "2.0.1",
         "bcryptjs": "2.4.3",
         "express": "4.18.2",