@node-red/nodes 2.1.2 → 2.1.6

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.
Files changed (52) hide show
  1. package/core/common/20-inject.html +11 -9
  2. package/core/common/21-debug.js +13 -1
  3. package/core/function/10-function.html +6 -4
  4. package/core/function/10-function.js +1 -2
  5. package/core/function/89-delay.html +2 -1
  6. package/core/function/89-delay.js +1 -0
  7. package/core/function/rbe.js +1 -1
  8. package/core/network/21-httprequest.js +8 -10
  9. package/core/network/22-websocket.js +15 -13
  10. package/examples/common/link/03 - Link call.json +156 -0
  11. package/examples/storage/{file/01 - Write string to a file.json → read file/01 - Read string from a file.json } +22 -22
  12. package/examples/storage/{file-in → read file}/02 - Read data in specified encoding.json +23 -22
  13. package/examples/storage/{file-in → read file}/03 - Read data breaking lines into messages.json +25 -25
  14. package/examples/storage/{file-in → read file}/04 - Create a message stream.json +37 -37
  15. package/examples/storage/{file-in/01 - Read string from a file.json → write file/01 - Write string to a file.json } +15 -15
  16. package/examples/storage/{file → write file}/02 - Write string to a file specified by property.json +22 -22
  17. package/examples/storage/{file → write file}/03 - Delete a file.json +16 -16
  18. package/examples/storage/{file → write file}/04 - Specify encoding of written data.json +23 -23
  19. package/locales/de/common/20-inject.html +2 -2
  20. package/locales/de/common/21-debug.html +6 -6
  21. package/locales/de/common/24-complete.html +2 -2
  22. package/locales/de/common/25-catch.html +4 -4
  23. package/locales/de/common/60-link.html +2 -2
  24. package/locales/de/function/10-function.html +1 -1
  25. package/locales/de/function/10-switch.html +1 -1
  26. package/locales/de/function/90-exec.html +3 -3
  27. package/locales/de/messages.json +10 -11
  28. package/locales/de/network/10-mqtt.html +2 -2
  29. package/locales/de/network/21-httpin.html +3 -3
  30. package/locales/de/parsers/70-JSON.html +3 -3
  31. package/locales/de/sequence/17-split.html +6 -6
  32. package/locales/de/sequence/18-sort.html +2 -2
  33. package/locales/de/storage/10-file.html +1 -1
  34. package/locales/en-US/function/80-template.html +1 -1
  35. package/locales/en-US/function/89-delay.html +1 -1
  36. package/locales/en-US/function/rbe.html +2 -2
  37. package/locales/en-US/network/10-mqtt.html +1 -1
  38. package/locales/en-US/network/21-httprequest.html +1 -1
  39. package/locales/en-US/sequence/17-split.html +1 -1
  40. package/locales/ja/common/60-link.html +9 -0
  41. package/locales/ja/function/80-template.html +2 -0
  42. package/locales/ja/function/89-delay.html +5 -2
  43. package/locales/ja/function/rbe.html +1 -1
  44. package/locales/ja/messages.json +32 -6
  45. package/locales/ja/network/10-mqtt.html +65 -4
  46. package/locales/ja/parsers/70-CSV.html +1 -1
  47. package/locales/ja/sequence/17-split.html +5 -2
  48. package/locales/ko/messages.json +0 -1
  49. package/locales/ru/messages.json +0 -1
  50. package/locales/zh-CN/messages.json +0 -1
  51. package/locales/zh-TW/messages.json +0 -1
  52. package/package.json +8 -8
@@ -234,7 +234,7 @@
234
234
  }
235
235
  } else if (v[i].vt === "jsonata") {
236
236
  try{jsonata(v[i].v);}catch(e){return false;}
237
- } else if ([i].vt === "json") {
237
+ } else if (v[i].vt === "json") {
238
238
  try{JSON.parse(v[i].v);}catch(e){return false;}
239
239
  }
240
240
  }
@@ -353,14 +353,16 @@
353
353
  },
354
354
  oneditprepare: function() {
355
355
  var node = this;
356
+ var payloadType = node.payloadType;
357
+
356
358
  if (node.payloadType == null) {
357
359
  if (node.payload == "") {
358
- node.payloadType = "date";
360
+ payloadType = "date";
359
361
  } else {
360
- node.payloadType = "str";
362
+ payloadType = "str";
361
363
  }
362
364
  } else if (node.payloadType === 'string' || node.payloadType === 'none') {
363
- node.payloadType = "str";
365
+ payloadType = "str";
364
366
  }
365
367
 
366
368
  $("#inject-time-type-select").on("change", function() {
@@ -557,7 +559,7 @@
557
559
  var payload = {
558
560
  p:'payload',
559
561
  v: node.payload ? node.payload : '',
560
- vt:node.payloadType ? node.payloadType : 'date'
562
+ vt:payloadType ? payloadType : 'date'
561
563
  };
562
564
  var topic = {
563
565
  p:'topic',
@@ -573,7 +575,7 @@
573
575
  if (newProp.v === undefined) {
574
576
  if (prop.p === 'payload') {
575
577
  newProp.v = node.payload ? node.payload : '';
576
- newProp.vt = node.payloadType ? node.payloadType : 'date';
578
+ newProp.vt = payloadType ? payloadType : 'date';
577
579
  } else if (prop.p === 'topic' && prop.vt === "str") {
578
580
  newProp.v = node.topic ? node.topic : '';
579
581
  }
@@ -688,9 +690,9 @@
688
690
  this.topic = "";
689
691
  var result = getProps(items, true);
690
692
  this.props = result.props;
691
- if(result.payloadType) { this.payloadType = result.payloadType; };
692
- if(result.payload) { this.payload = result.payload; };
693
- if(result.topic) { this.topic = result.topic; };
693
+ if(result.hasOwnProperty('payloadType')) { this.payloadType = result.payloadType; };
694
+ if(result.hasOwnProperty('payload')) { this.payload = result.payload; };
695
+ if(result.hasOwnProperty('topic')) { this.topic = result.topic; };
694
696
  },
695
697
  button: {
696
698
  enabled: function() {
@@ -280,6 +280,18 @@ module.exports = function(RED) {
280
280
  root: path.join(__dirname,"lib","debug"),
281
281
  dotfiles: 'deny'
282
282
  };
283
- res.sendFile(req.params[0], options);
283
+ try {
284
+ res.sendFile(
285
+ req.params[0],
286
+ options,
287
+ err => {
288
+ if (err) {
289
+ res.sendStatus(404);
290
+ }
291
+ }
292
+ )
293
+ } catch(err) {
294
+ res.sendStatus(404);
295
+ }
284
296
  });
285
297
  };
@@ -91,21 +91,21 @@
91
91
  <div id="func-tab-init" style="display:none">
92
92
  <div class="form-row node-text-editor-row" style="position:relative">
93
93
  <div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-init-editor" ></div>
94
- <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 5;"><button id="node-init-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
94
+ <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 10;"><button id="node-init-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
95
95
  </div>
96
96
  </div>
97
97
 
98
98
  <div id="func-tab-body" style="display:none">
99
99
  <div class="form-row node-text-editor-row" style="position:relative">
100
100
  <div style="height: 220px; min-height:150px;" class="node-text-editor" id="node-input-func-editor" ></div>
101
- <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 5;"><button id="node-function-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
101
+ <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 10;"><button id="node-function-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
102
102
  </div>
103
103
  </div>
104
104
 
105
105
  <div id="func-tab-finalize" style="display:none">
106
106
  <div class="form-row node-text-editor-row" style="position:relative">
107
107
  <div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-finalize-editor" ></div>
108
- <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 5;"><button id="node-finalize-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
108
+ <div style="position: absolute; right:0; bottom: calc(100% - 20px); z-Index: 10;"><button id="node-finalize-expand-js" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button></div>
109
109
  </div>
110
110
  </div>
111
111
 
@@ -512,6 +512,7 @@
512
512
  return function(e) {
513
513
  e.preventDefault();
514
514
  var value = editor.getValue();
515
+ var extraLibs = that.libs || [];
515
516
  RED.editor.editJavaScript({
516
517
  value: value,
517
518
  width: "Infinity",
@@ -523,7 +524,8 @@
523
524
  setTimeout(function() {
524
525
  editor.focus();
525
526
  },300);
526
- }
527
+ },
528
+ extraLibs: extraLibs
527
529
  })
528
530
  }
529
531
  }
@@ -234,8 +234,7 @@ module.exports = function(RED) {
234
234
  },
235
235
  env: {
236
236
  get: function(envVar) {
237
- var flow = node._flow;
238
- return flow.getSetting(envVar);
237
+ return RED.util.getSetting(node, envVar);
239
238
  }
240
239
  },
241
240
  setTimeout: function () {
@@ -114,7 +114,8 @@
114
114
  timeout: {value:"5", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
115
115
  timeoutUnits: {value:"seconds"},
116
116
  rate: {value:"1", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
117
- nbRateUnits: {value:"1", required:false, validate:RED.validators.regex(/\d+|/)},
117
+ nbRateUnits: {value:"1", required:false,
118
+ validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
118
119
  rateUnits: {value: "second"},
119
120
  randomFirst: {value:"1", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
120
121
  randomLast: {value:"5", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
@@ -372,6 +372,7 @@ module.exports = function(RED) {
372
372
  hit = false;
373
373
  for (var b in node.buffer) { // check if already in queue
374
374
  if (msg.topic === node.buffer[b].msg.topic) {
375
+ if (node.outputs === 2) { send([null,node.buffer[b].msg]) }
375
376
  node.buffer[b].done();
376
377
  node.buffer[b] = {msg, send, done}; // if so - replace existing entry
377
378
  hit = true;
@@ -58,7 +58,7 @@ module.exports = function(RED) {
58
58
  else {
59
59
  var n = parseFloat(value);
60
60
  if (!isNaN(n)) {
61
- if ((typeof node.previous[t] === 'undefined') && (this.func === "narrowband")) {
61
+ if ((typeof node.previous[t] === 'undefined') && (this.func === "narrowband" || this.func === "narrowbandEq")) {
62
62
  if (node.start === '') { node.previous[t] = n; }
63
63
  else { node.previous[t] = node.start; }
64
64
  }
@@ -298,18 +298,16 @@ in your Node-RED user directory (${RED.settings.userDir}).
298
298
  }
299
299
  if (Object.keys(this.credentials).length != 0) {
300
300
  if (this.authType === "basic") {
301
- // Workaround for https://github.com/sindresorhus/got/issues/1169
302
- var cred = ""
303
- if (this.credentials.user) {
304
- // opts.username = this.credentials.user;
305
- cred = this.credentials.user
306
- }
307
- if (this.credentials.password) {
308
- // opts.password = this.credentials.password;
309
- cred += ":" + this.credentials.password
301
+ // Workaround for https://github.com/sindresorhus/got/issues/1169 (fixed in got v12)
302
+ // var cred = ""
303
+ if (this.credentials.user || this.credentials.password) {
304
+ // cred = `${this.credentials.user}:${this.credentials.password}`;
305
+ if (this.credentials.user === undefined) { this.credentials.user = ""}
306
+ if (this.credentials.password === undefined) { this.credentials.password = ""}
307
+ opts.headers.Authorization = "Basic " + Buffer.from(`${this.credentials.user}:${this.credentials.password}`).toString("base64");
310
308
  }
311
309
  // build own basic auth header
312
- opts.headers.Authorization = "Basic " + Buffer.from(cred).toString("base64");
310
+ // opts.headers.Authorization = "Basic " + Buffer.from(cred).toString("base64");
313
311
  } else if (this.authType === "digest") {
314
312
  let digestCreds = this.credentials;
315
313
  let sentCreds = false;
@@ -105,22 +105,24 @@ module.exports = function(RED) {
105
105
  if (node.isServer) {
106
106
  node._clients[id] = socket;
107
107
  node.emit('opened',{count:Object.keys(node._clients).length,id:id});
108
- } else {
109
- if (node.heartbeat) {
110
- node.heartbeatInterval = setInterval(function() {
111
- if (socket.nrPendingHeartbeat) {
112
- // No pong received
113
- socket.terminate();
114
- socket.nrErrorHandler(new Error("timeout"));
115
- return;
116
- }
117
- socket.nrPendingHeartbeat = true;
118
- socket.ping();
119
- },node.heartbeat);
120
- }
121
108
  }
122
109
  socket.on('open',function() {
123
110
  if (!node.isServer) {
111
+ if (node.heartbeat) {
112
+ clearInterval(node.heartbeatInterval);
113
+ node.heartbeatInterval = setInterval(function() {
114
+ if (socket.nrPendingHeartbeat) {
115
+ // No pong received
116
+ socket.terminate();
117
+ socket.nrErrorHandler(new Error("timeout"));
118
+ return;
119
+ }
120
+ socket.nrPendingHeartbeat = true;
121
+ try {
122
+ socket.ping();
123
+ } catch(err) {}
124
+ },node.heartbeat);
125
+ }
124
126
  node.emit('opened',{count:'',id:id});
125
127
  }
126
128
  });
@@ -0,0 +1,156 @@
1
+ [
2
+ {
3
+ "id": "62ea32aa.d73aac",
4
+ "type": "comment",
5
+ "z": "6312c0588348b2d4",
6
+ "name": "Example: Link Call Node",
7
+ "info": "Link call node can call link in node then get result from link out node.",
8
+ "x": 230,
9
+ "y": 180,
10
+ "wires": []
11
+ },
12
+ {
13
+ "id": "c588bc36.87fec",
14
+ "type": "comment",
15
+ "z": "6312c0588348b2d4",
16
+ "name": "↓ call link in node",
17
+ "info": "",
18
+ "x": 440,
19
+ "y": 220,
20
+ "wires": []
21
+ },
22
+ {
23
+ "id": "cd31efb4d2c6967e",
24
+ "type": "link call",
25
+ "z": "6312c0588348b2d4",
26
+ "name": "",
27
+ "links": [
28
+ "dbc46892c8d14c37"
29
+ ],
30
+ "timeout": "30",
31
+ "x": 420,
32
+ "y": 260,
33
+ "wires": [
34
+ [
35
+ "c3db64d1d2260340"
36
+ ]
37
+ ]
38
+ },
39
+ {
40
+ "id": "dbc46892c8d14c37",
41
+ "type": "link in",
42
+ "z": "6312c0588348b2d4",
43
+ "name": "",
44
+ "links": [],
45
+ "x": 315,
46
+ "y": 340,
47
+ "wires": [
48
+ [
49
+ "e10575d73f2e5352"
50
+ ]
51
+ ]
52
+ },
53
+ {
54
+ "id": "6b61792143b3b0a3",
55
+ "type": "inject",
56
+ "z": "6312c0588348b2d4",
57
+ "name": "",
58
+ "props": [
59
+ {
60
+ "p": "payload"
61
+ },
62
+ {
63
+ "p": "topic",
64
+ "vt": "str"
65
+ }
66
+ ],
67
+ "repeat": "",
68
+ "crontab": "",
69
+ "once": false,
70
+ "onceDelay": 0.1,
71
+ "topic": "",
72
+ "payload": "",
73
+ "payloadType": "date",
74
+ "x": 240,
75
+ "y": 260,
76
+ "wires": [
77
+ [
78
+ "cd31efb4d2c6967e"
79
+ ]
80
+ ]
81
+ },
82
+ {
83
+ "id": "e10575d73f2e5352",
84
+ "type": "change",
85
+ "z": "6312c0588348b2d4",
86
+ "name": "",
87
+ "rules": [
88
+ {
89
+ "t": "set",
90
+ "p": "payload",
91
+ "pt": "msg",
92
+ "to": "Hello, World!",
93
+ "tot": "str"
94
+ }
95
+ ],
96
+ "action": "",
97
+ "property": "",
98
+ "from": "",
99
+ "to": "",
100
+ "reg": false,
101
+ "x": 450,
102
+ "y": 340,
103
+ "wires": [
104
+ [
105
+ "cf8438e7137bc0f0"
106
+ ]
107
+ ]
108
+ },
109
+ {
110
+ "id": "cf8438e7137bc0f0",
111
+ "type": "link out",
112
+ "z": "6312c0588348b2d4",
113
+ "name": "",
114
+ "mode": "return",
115
+ "links": [],
116
+ "x": 595,
117
+ "y": 340,
118
+ "wires": []
119
+ },
120
+ {
121
+ "id": "c3db64d1d2260340",
122
+ "type": "debug",
123
+ "z": "6312c0588348b2d4",
124
+ "name": "",
125
+ "active": true,
126
+ "tosidebar": true,
127
+ "console": false,
128
+ "tostatus": false,
129
+ "complete": "false",
130
+ "statusVal": "",
131
+ "statusType": "auto",
132
+ "x": 600,
133
+ "y": 260,
134
+ "wires": []
135
+ },
136
+ {
137
+ "id": "6d077dfa0987febb",
138
+ "type": "comment",
139
+ "z": "6312c0588348b2d4",
140
+ "name": "↑called from link call node",
141
+ "info": "",
142
+ "x": 410,
143
+ "y": 380,
144
+ "wires": []
145
+ },
146
+ {
147
+ "id": "53b9a0adfd8c4217",
148
+ "type": "comment",
149
+ "z": "6312c0588348b2d4",
150
+ "name": "↑return to link call node",
151
+ "info": "",
152
+ "x": 680,
153
+ "y": 380,
154
+ "wires": []
155
+ }
156
+ ]
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "84222b92.d65d18",
4
4
  "type": "inject",
5
- "z": "4b63452d.672afc",
5
+ "z": "6312c0588348b2d4",
6
6
  "name": "",
7
7
  "props": [
8
8
  {
@@ -20,8 +20,8 @@
20
20
  "topic": "",
21
21
  "payload": "Hello, World!",
22
22
  "payloadType": "str",
23
- "x": 230,
24
- "y": 200,
23
+ "x": 190,
24
+ "y": 180,
25
25
  "wires": [
26
26
  [
27
27
  "b4b9f603.739598"
@@ -31,25 +31,25 @@
31
31
  {
32
32
  "id": "7b014430.dfd94c",
33
33
  "type": "comment",
34
- "z": "4b63452d.672afc",
34
+ "z": "6312c0588348b2d4",
35
35
  "name": "Write string to a file, then read from the file",
36
- "info": "File node can write string to a file.",
37
- "x": 260,
38
- "y": 120,
36
+ "info": "Read file node can read string from a file.",
37
+ "x": 220,
38
+ "y": 100,
39
39
  "wires": []
40
40
  },
41
41
  {
42
42
  "id": "b4b9f603.739598",
43
43
  "type": "file",
44
- "z": "4b63452d.672afc",
44
+ "z": "6312c0588348b2d4",
45
45
  "name": "",
46
46
  "filename": "/tmp/hello.txt",
47
47
  "appendNewline": true,
48
48
  "createDir": false,
49
49
  "overwriteFile": "true",
50
50
  "encoding": "none",
51
- "x": 420,
52
- "y": 200,
51
+ "x": 380,
52
+ "y": 180,
53
53
  "wires": [
54
54
  [
55
55
  "6dc01cac.5c4bf4"
@@ -59,7 +59,7 @@
59
59
  {
60
60
  "id": "2587adb9.7e60f2",
61
61
  "type": "debug",
62
- "z": "4b63452d.672afc",
62
+ "z": "6312c0588348b2d4",
63
63
  "name": "",
64
64
  "active": true,
65
65
  "tosidebar": true,
@@ -68,22 +68,22 @@
68
68
  "complete": "false",
69
69
  "statusVal": "",
70
70
  "statusType": "auto",
71
- "x": 810,
72
- "y": 200,
71
+ "x": 770,
72
+ "y": 180,
73
73
  "wires": []
74
74
  },
75
75
  {
76
76
  "id": "6dc01cac.5c4bf4",
77
77
  "type": "file in",
78
- "z": "4b63452d.672afc",
78
+ "z": "6312c0588348b2d4",
79
79
  "name": "",
80
80
  "filename": "/tmp/hello.txt",
81
81
  "format": "utf8",
82
82
  "chunk": false,
83
83
  "sendError": false,
84
84
  "encoding": "none",
85
- "x": 620,
86
- "y": 200,
85
+ "x": 580,
86
+ "y": 180,
87
87
  "wires": [
88
88
  [
89
89
  "2587adb9.7e60f2"
@@ -93,21 +93,21 @@
93
93
  {
94
94
  "id": "f4b4309a.3b78a",
95
95
  "type": "comment",
96
- "z": "4b63452d.672afc",
96
+ "z": "6312c0588348b2d4",
97
97
  "name": "↑read result from file",
98
98
  "info": "",
99
- "x": 630,
100
- "y": 240,
99
+ "x": 590,
100
+ "y": 220,
101
101
  "wires": []
102
102
  },
103
103
  {
104
104
  "id": "672d3693.3cabd8",
105
105
  "type": "comment",
106
- "z": "4b63452d.672afc",
106
+ "z": "6312c0588348b2d4",
107
107
  "name": "↓write to /tmp/hello.txt",
108
108
  "info": "",
109
- "x": 440,
110
- "y": 160,
109
+ "x": 400,
110
+ "y": 140,
111
111
  "wires": []
112
112
  }
113
113
  ]
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "8997398f.c5d628",
4
4
  "type": "inject",
5
- "z": "194a3e4f.a92772",
5
+ "z": "6312c0588348b2d4",
6
6
  "name": "",
7
7
  "props": [
8
8
  {
@@ -20,8 +20,8 @@
20
20
  "topic": "",
21
21
  "payload": "😀",
22
22
  "payloadType": "str",
23
- "x": 210,
24
- "y": 480,
23
+ "x": 170,
24
+ "y": 260,
25
25
  "wires": [
26
26
  [
27
27
  "56e32d23.050f44"
@@ -31,25 +31,25 @@
31
31
  {
32
32
  "id": "4e598e65.1799d",
33
33
  "type": "comment",
34
- "z": "194a3e4f.a92772",
34
+ "z": "6312c0588348b2d4",
35
35
  "name": "Read data in specified encoding",
36
- "info": "File-in node can specify encoding of data read from a file.",
37
- "x": 230,
38
- "y": 400,
36
+ "info": "Read file node can specify encoding of data read from a file.",
37
+ "x": 190,
38
+ "y": 180,
39
39
  "wires": []
40
40
  },
41
41
  {
42
42
  "id": "56e32d23.050f44",
43
43
  "type": "file",
44
- "z": "194a3e4f.a92772",
44
+ "z": "6312c0588348b2d4",
45
45
  "name": "",
46
46
  "filename": "/tmp/hello.txt",
47
47
  "appendNewline": true,
48
48
  "createDir": false,
49
49
  "overwriteFile": "true",
50
50
  "encoding": "none",
51
- "x": 380,
52
- "y": 480,
51
+ "x": 340,
52
+ "y": 260,
53
53
  "wires": [
54
54
  [
55
55
  "38fa0579.f2cd8a"
@@ -59,7 +59,7 @@
59
59
  {
60
60
  "id": "d28c8994.99c0a8",
61
61
  "type": "debug",
62
- "z": "194a3e4f.a92772",
62
+ "z": "6312c0588348b2d4",
63
63
  "name": "",
64
64
  "active": true,
65
65
  "tosidebar": true,
@@ -68,22 +68,23 @@
68
68
  "complete": "false",
69
69
  "statusVal": "",
70
70
  "statusType": "auto",
71
- "x": 770,
72
- "y": 480,
71
+ "x": 730,
72
+ "y": 260,
73
73
  "wires": []
74
74
  },
75
75
  {
76
76
  "id": "38fa0579.f2cd8a",
77
77
  "type": "file in",
78
- "z": "194a3e4f.a92772",
78
+ "z": "6312c0588348b2d4",
79
79
  "name": "",
80
80
  "filename": "/tmp/hello.txt",
81
81
  "format": "utf8",
82
82
  "chunk": false,
83
83
  "sendError": false,
84
84
  "encoding": "base64",
85
- "x": 580,
86
- "y": 480,
85
+ "allProps": false,
86
+ "x": 540,
87
+ "y": 260,
87
88
  "wires": [
88
89
  [
89
90
  "d28c8994.99c0a8"
@@ -93,21 +94,21 @@
93
94
  {
94
95
  "id": "fa22ca20.ae4528",
95
96
  "type": "comment",
96
- "z": "194a3e4f.a92772",
97
+ "z": "6312c0588348b2d4",
97
98
  "name": "↑read data from file as base64 string",
98
99
  "info": "",
99
- "x": 640,
100
- "y": 520,
100
+ "x": 600,
101
+ "y": 300,
101
102
  "wires": []
102
103
  },
103
104
  {
104
105
  "id": "148e25ad.98891a",
105
106
  "type": "comment",
106
- "z": "194a3e4f.a92772",
107
+ "z": "6312c0588348b2d4",
107
108
  "name": "↓write to /tmp/hello.txt",
108
109
  "info": "",
109
- "x": 400,
110
- "y": 440,
110
+ "x": 360,
111
+ "y": 220,
111
112
  "wires": []
112
113
  }
113
114
  ]