Compare commits

..

16 Commits

Author SHA1 Message Date
Stephen McLaughlin
2ccd4b5224 Allow empty string header value
closes #4789
2024-06-24 10:18:01 +01:00
Nick O'Leary
cb0c484579 Merge branch 'dev' 2024-06-20 13:26:22 +01:00
Nick O'Leary
a1bf270ba6 Update tour version 2024-06-20 13:23:34 +01:00
Nick O'Leary
be5694f149 Merge pull request #4777 from node-red/rel400
Update for 4.0 final release
2024-06-20 11:53:56 +01:00
Nick O'Leary
4ff364e2c3 Reorder tour features 2024-06-20 11:45:23 +01:00
Nick O'Leary
2fa6f35873 Update for 4.0 final 2024-06-20 11:41:25 +01:00
Nick O'Leary
2a4fb7123d Merge pull request #4772 from node-red/rel3111
Bump for 3.1.11 release
2024-06-18 11:44:55 +01:00
Nick O'Leary
38a77d2b78 Bump for 3.1.11 release 2024-06-18 11:37:59 +01:00
Nick O'Leary
dc239db256 Merge pull request #4762 from node-red/Update-German-delay-node-translations
Add/Update German Translations for delay node
2024-06-17 16:07:20 +01:00
Nick O'Leary
a622d19ba7 Merge pull request #4761 from node-red/4759-add-httpStaticCors
Add `httpStaticCors`
2024-06-17 16:06:58 +01:00
Nick O'Leary
9842d9116c Merge pull request #4763 from node-red/bump-nr-admin
Update dependencies
2024-06-17 11:46:02 +01:00
Nick O'Leary
19ea8f8515 Update dependencies 2024-06-17 11:24:59 +01:00
Dave Conway-Jones
4ba3c937a8 Add/Update German Translations for delay node
To close #4748
2024-06-14 15:36:25 +01:00
Nick O'Leary
dbd3f0f85b Add httpStaticCors to default settings file 2024-06-14 15:21:02 +01:00
Nick O'Leary
48a2876c48 Add support for httpStaticCors 2024-06-14 15:18:40 +01:00
Nick O'Leary
10398b05d8 Merge pull request #4756 from node-red/sync-dev
Sync master to dev
2024-06-11 14:34:24 +01:00
14 changed files with 112 additions and 55 deletions

View File

@@ -1,3 +1,23 @@
#### 4.0.0: Milestone Release
This marks the next major release of Node-RED. The following changes represent
those added since the last beta. Check the beta release details below for the complete
list.
Breaking Changes
- Node-RED now requires Node 18.x or later. At the time of release, we recommend
using Node 20.
Editor
- Add `httpStaticCors` (#4761) @knolleary
- Update dependencies (#4763) @knolleary
- Sync master to dev (#4756) @knolleary
- Add tooltip and message validation to `typedInput` (#4747) @GogoVega
- Replace bcrypt with @node-rs/bcrypt (#4744) @knolleary
- Export Nodes dialog refinement (#4746) @Steve-Mcl
#### 4.0.0-beta.4: Beta Release
Editor

View File

@@ -1,6 +1,6 @@
{
"name": "node-red",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -64,7 +64,7 @@
"mqtt": "5.7.0",
"multer": "1.4.5-lts.1",
"mustache": "4.2.0",
"node-red-admin": "^3.1.3",
"node-red-admin": "^4.0.0",
"node-watch": "0.7.4",
"nopt": "5.0.0",
"oauth2orize": "1.12.0",
@@ -79,7 +79,7 @@
"tough-cookie": "4.1.4",
"uglify-js": "3.17.4",
"uuid": "9.0.1",
"ws": "7.5.6",
"ws": "7.5.10",
"xml2js": "0.6.2"
},
"optionalDependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-api",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
"@node-red/util": "4.0.0-beta.4",
"@node-red/editor-client": "4.0.0-beta.4",
"@node-red/util": "4.0.0",
"@node-red/editor-client": "4.0.0",
"bcryptjs": "2.4.3",
"body-parser": "1.20.2",
"clone": "2.1.2",
@@ -32,7 +32,7 @@
"passport-http-bearer": "1.0.1",
"passport-oauth2-client-password": "0.1.2",
"passport": "0.7.0",
"ws": "7.5.6"
"ws": "7.5.10"
},
"optionalDependencies": {
"@node-rs/bcrypt": "1.10.4"

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-client",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"repository": {
"type": "git",

View File

@@ -1,5 +1,5 @@
export default {
version: "4.0.0-beta.4",
version: "4.0.0",
steps: [
{
titleIcon: "fa fa-map-o",
@@ -91,37 +91,6 @@ export default {
<p>C'est un petit changement, mais cela devrait faciliter le travail avec vos noeuds de configuration.</p>`
}
},
{
title: {
"en-US": "Remembering palette state",
"ja": "パレットの状態を維持",
"fr": "Mémorisation de l'état de la palette"
},
description: {
"en-US": `<p>The palette now remembers what categories you have hidden between reloads - as well as any
filter you have applied.</p>`,
"ja": `<p>パレット上で非表示にしたカテゴリや適用したフィルタが、リロードしても記憶されるようになりました。</p>`,
"fr": `<p>La palette se souvient désormais des catégories que vous avez masquées entre les rechargements,
ainsi que le filtre que vous avez appliqué.</p>`
}
},
{
title: {
"en-US": "Plugins shown in the Palette Manager",
"ja": "パレット管理にプラグインを表示",
"fr": "Affichage des Plugins dans le gestionnaire de palettes"
},
image: 'images/nr4-plugins.png',
description: {
"en-US": `<p>The palette manager now shows any plugin modules you have installed, such as
<code>node-red-debugger</code>. Previously they would only be shown if the plugins include
nodes for the palette.</p>`,
"ja": `<p>パレットの管理に <code>node-red-debugger</code> の様なインストールしたプラグインが表示されます。以前はプラグインにパレット向けのノードが含まれている時のみ表示されていました。</p>`,
"fr": `<p>Le gestionnaire de palettes affiche désormais tous les plugins que vous avez installés,
tels que <code>node-red-debugger</code>. Auparavant, ils n'étaient affichés que s'ils contenaient
des noeuds pour la palette.</p>`
}
},
{
title: {
"en-US": "Timestamp formatting options",
@@ -194,6 +163,37 @@ export default {
`
}
},
{
title: {
"en-US": "Remembering palette state",
"ja": "パレットの状態を維持",
"fr": "Mémorisation de l'état de la palette"
},
description: {
"en-US": `<p>The palette now remembers what categories you have hidden between reloads - as well as any
filter you have applied.</p>`,
"ja": `<p>パレット上で非表示にしたカテゴリや適用したフィルタが、リロードしても記憶されるようになりました。</p>`,
"fr": `<p>La palette se souvient désormais des catégories que vous avez masquées entre les rechargements,
ainsi que le filtre que vous avez appliqué.</p>`
}
},
{
title: {
"en-US": "Plugins shown in the Palette Manager",
"ja": "パレット管理にプラグインを表示",
"fr": "Affichage des Plugins dans le gestionnaire de palettes"
},
image: 'images/nr4-plugins.png',
description: {
"en-US": `<p>The palette manager now shows any plugin modules you have installed, such as
<code>node-red-debugger</code>. Previously they would only be shown if the plugins include
nodes for the palette.</p>`,
"ja": `<p>パレットの管理に <code>node-red-debugger</code> の様なインストールしたプラグインが表示されます。以前はプラグインにパレット向けのノードが含まれている時のみ表示されていました。</p>`,
"fr": `<p>Le gestionnaire de palettes affiche désormais tous les plugins que vous avez installés,
tels que <code>node-red-debugger</code>. Auparavant, ils n'étaient affichés que s'ils contenaient
des noeuds pour la palette.</p>`
}
},
{
title: {
"en-US": "Node Updates",

View File

@@ -132,7 +132,7 @@ in your Node-RED user directory (${RED.settings.userDir}).
const matchingKeys = keys.filter(e => e.toLowerCase() == hn)
const updateKey = (k,v) => {
delete headersObject[k]; //delete incase of case change
if(v) { headersObject[name] = v } //re-add with requested name & value
if(v || v === '') { headersObject[name] = v } //re-add with requested name & value
}
if(matchingKeys.length == 0) {
updateKey(name, value)

View File

@@ -20,12 +20,26 @@
<dt class="optional">delay <span class="property-type">number</span></dt>
<dd>Legt die Verzögerung in Millisekunden fest, die auf die Nachricht angewendet werden soll.
Zur Nutzung dieser Option muss <i>Verzög. mit msg.delay überschreibbar</i> aktiviert sein.</dd>
<dt class="optional">rate <span class="property-type">number</span></dt>
<dd>Setzt die Verzögerung in Millisekunden zwischen den Nachrichten. Diese Node überschreibt die
bestehende Verzögerung die in der Node konfiguration, wenn die empfangende Nachricht <code>msg.rate</code>
in Millisekunden enthält. Dies trifft nur zu, wenn in der Node konfiguriert ist, das empfangene
Nachrichten den konfigurierten Wert überschreiben können.</dd>
<dt class="optional">reset</dt>
<dd>Wenn bei der empfangenen Nachricht diese Eigenschaft auf einen beliebigen Wert gesetzt ist,
werden alle im Node gepufferten Nachrichten gelöscht.</dd>
<dt class="optional">flush</dt>
<dd>Wenn bei der empfangenen Nachricht diese Eigenschaft auf einen beliebigen Wert gesetzt ist,
werden alle im Node gepufferten Nachrichten sofort gesendet.</dd>
<dt class="optional">flush</dt>
<dd>Wenn bei der empfangenen Nachricht diese Eigenschaft auf einen numerischen Wert gesetzt ist,
wird diese Anzahl an Nachrichten sofort gesendet. Wenn ein anderer Typ gesetzt ist (z.B. Boolean),
werden alle in der Node gepufferten Nachrichten gesendet.</dd>
<dt class="optional">toFront</dt>
<dd>Wenn diese Eigenschaft im Ratenbegrenzungsmodus für die empfangene Nachricht auf den booleschen Wert
<code>true</code> gesetzt ist, Anschließend wird die Nachricht an den Anfang der Warteschlange verschoben
und als nächstes freigegeben. Dies kann in Kombination mit <code>msg.flush=1</code> verwendet werden, um sofort erneut zu senden.
</dd>
</dl>
<h3>Details</h3>
<p>Wenn Verzögerung als Nachrichtenaktion eingestellt ist, kann die Verzögerungszeit ein fixer Wert,

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/nodes",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -43,7 +43,7 @@
"raw-body": "2.5.2",
"tough-cookie": "4.1.4",
"uuid": "9.0.1",
"ws": "7.5.6",
"ws": "7.5.10",
"xml2js": "0.6.2",
"iconv-lite": "0.6.3"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/registry",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,7 +16,7 @@
}
],
"dependencies": {
"@node-red/util": "4.0.0-beta.4",
"@node-red/util": "4.0.0",
"clone": "2.1.2",
"fs-extra": "11.2.0",
"semver": "7.5.4",

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/runtime",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,8 +16,8 @@
}
],
"dependencies": {
"@node-red/registry": "4.0.0-beta.4",
"@node-red/util": "4.0.0-beta.4",
"@node-red/registry": "4.0.0",
"@node-red/util": "4.0.0",
"async-mutex": "0.5.0",
"clone": "2.1.2",
"express": "4.19.2",

View File

@@ -1,6 +1,6 @@
{
"name": "@node-red/util",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"license": "Apache-2.0",
"repository": {
"type": "git",

View File

@@ -1,6 +1,6 @@
{
"name": "node-red",
"version": "4.0.0-beta.4",
"version": "4.0.0",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -31,15 +31,16 @@
"flow"
],
"dependencies": {
"@node-red/editor-api": "4.0.0-beta.4",
"@node-red/runtime": "4.0.0-beta.4",
"@node-red/util": "4.0.0-beta.4",
"@node-red/nodes": "4.0.0-beta.4",
"@node-red/editor-api": "4.0.0",
"@node-red/runtime": "4.0.0",
"@node-red/util": "4.0.0",
"@node-red/nodes": "4.0.0",
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
"express": "4.19.2",
"fs-extra": "11.2.0",
"node-red-admin": "^3.1.3",
"node-red-admin": "^4.0.0",
"nopt": "5.0.0",
"semver": "7.5.4"
},

View File

@@ -44,6 +44,8 @@ var nopt = require("nopt");
var path = require("path");
const os = require("os")
var fs = require("fs-extra");
const cors = require('cors');
var RED = require("./lib/red.js");
var server;
@@ -441,10 +443,16 @@ httpsPromise.then(function(startupHttps) {
const thisRoot = sp.root || "/";
const options = sp.options;
const middleware = sp.middleware;
const corsOptions = sp.cors || settings.httpStaticCors;
if(appUseMem[filePath + "::" + thisRoot]) {
continue;// this path and root already registered!
}
appUseMem[filePath + "::" + thisRoot] = true;
if (corsOptions) {
const corsHandler = cors(corsOptions);
app.options(thisRoot, corsHandler)
app.use(thisRoot, corsHandler)
}
if (settings.httpStaticAuth) {
app.use(thisRoot, basicAuthMiddleware(settings.httpStaticAuth.user, settings.httpStaticAuth.pass));
}

View File

@@ -139,6 +139,7 @@ module.exports = {
* - httpNodeMiddleware
* - httpStatic
* - httpStaticRoot
* - httpStaticCors
******************************************************************************/
/** the tcp port that the Node-RED web server is listening on */
@@ -233,6 +234,9 @@ module.exports = {
* OR multiple static sources can be created using an array of objects...
* Each object can also contain an options object for further configuration.
* See https://expressjs.com/en/api.html#express.static for available options.
* They can also contain an option `cors` object to set specific Cross-Origin
* Resource Sharing rules for the source. `httpStaticCors` can be used to
* set a default cors policy across all static routes.
*/
//httpStatic: [
// {path: '/home/nol/pics/', root: "/img/"},
@@ -250,6 +254,16 @@ module.exports = {
*/
//httpStaticRoot: '/static/',
/** The following property can be used to configure cross-origin resource sharing
* in the http static routes.
* See https://github.com/troygoode/node-cors#configuration-options for
* details on its contents. The following is a basic permissive set of options:
*/
//httpStaticCors: {
// origin: "*",
// methods: "GET,PUT,POST,DELETE"
//},
/** The following property can be used to modify proxy options */
// proxyOptions: {
// mode: "legacy", // legacy mode is for non-strict previous proxy determination logic (node-red < v4 compatible)