@theotherwillembotha/node-red-plugincore 0.1.0 → 0.2.0
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/README.md +616 -220
- package/build/GenerateNodes.js +3 -6
- package/build/Nodes.html +3 -1504
- package/build/Nodes.js +5 -15
- package/build/Plugins.html +227 -0
- package/build/Plugins.js +18 -8
- package/build/core/NodeConstructor.d.ts +9 -16
- package/build/core/NodeConstructor.d.ts.map +1 -1
- package/build/core/NodeConstructor.js +109 -146
- package/build/core/NodeGenerator.d.ts.map +1 -1
- package/build/core/NodeGenerator.js +79 -28
- package/build/core/NodeManagerRuntime.d.ts +44 -0
- package/build/core/NodeManagerRuntime.d.ts.map +1 -0
- package/build/core/NodeManagerRuntime.js +140 -0
- package/build/core/Utils.d.ts.map +1 -1
- package/build/core/logger/service/LoggerService.d.ts +6 -5
- package/build/core/logger/service/LoggerService.d.ts.map +1 -1
- package/build/core/logger/service/LoggerService.js +51 -20
- package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
- package/build/core/metrics/MetricsDecorator.d.ts +1 -2
- package/build/core/metrics/MetricsDecorator.d.ts.map +1 -1
- package/build/core/metrics/MetricsDecorator.js +89 -116
- package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -1
- package/build/core/metrics/node/CounterMetricConfigNode.js +4 -5
- package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -1
- package/build/core/metrics/node/GaugeMetricConfigNode.js +5 -6
- package/build/core/metrics/node/MetricsConfigNode.d.ts +19 -9
- package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -1
- package/build/core/metrics/node/MetricsConfigNode.js +14 -45
- package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -1
- package/build/core/metrics/node/TimerMetricConfigNode.js +11 -17
- package/build/core/metrics/service/MetricsService.d.ts +110 -114
- package/build/core/metrics/service/MetricsService.d.ts.map +1 -1
- package/build/core/metrics/service/MetricsService.js +122 -339
- package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -1
- package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -1
- package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -1
- package/build/core/metrics/template/MetricsTemplate.js +1 -2
- package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -1
- package/build/core/other/node/DelegatedConfigReferenceNode.d.ts +1 -1
- package/build/core/other/node/DelegatedConfigReferenceNode.d.ts.map +1 -1
- package/build/core/other/node/DelegatedConfigReferenceNode.js +1 -1
- package/build/core/other/service/InputService.d.ts.map +1 -1
- package/build/core/other/service/SettingsService.d.ts +1 -2
- package/build/core/other/service/SettingsService.d.ts.map +1 -1
- package/build/core/other/service/SettingsService.js +19 -5
- package/build/core/other/template/BasicTemplate.d.ts.map +1 -1
- package/build/core/other/template/SettingsTemplate.d.ts.map +1 -1
- package/build/core/state/node/InternalStateConfigNode.d.ts +16 -0
- package/build/core/state/node/InternalStateConfigNode.d.ts.map +1 -0
- package/build/core/state/node/InternalStateConfigNode.js +89 -0
- package/build/core/state/node/StateConfigNode.d.ts +24 -0
- package/build/core/state/node/StateConfigNode.d.ts.map +1 -0
- package/build/core/state/node/StateConfigNode.js +22 -0
- package/build/core/state/service/StateService.d.ts +34 -0
- package/build/core/state/service/StateService.d.ts.map +1 -0
- package/build/core/state/service/StateService.js +201 -0
- package/build/core/state/template/StateTemplate.d.ts +8 -0
- package/build/core/state/template/StateTemplate.d.ts.map +1 -0
- package/build/core/state/template/StateTemplate.js +11 -0
- package/build/core/tagging/ServiceDescriptionDecorator.d.ts +10 -0
- package/build/core/tagging/ServiceDescriptionDecorator.d.ts.map +1 -0
- package/build/core/tagging/ServiceDescriptionDecorator.js +10 -0
- package/build/core/tagging/service/NodeTypeService.d.ts +1 -2
- package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -1
- package/build/core/tagging/service/NodeTypeService.js +19 -5
- package/build/core/ui/template/ScriptEditorTemplate.d.ts.map +1 -1
- package/build/core/ui/template/UIHelperTemplate.d.ts.map +1 -1
- package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -1
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
- package/build/core/webhook/service/WebhookServerService.d.ts +3 -4
- package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
- package/build/core/webhook/service/WebhookServerService.js +48 -18
- package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
- package/build/index.d.ts +5 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +6 -2
- package/build/runtime/NodeManagerRuntime.js +140 -0
- package/documentation/CounterMetricConfigNode.png +0 -0
- package/documentation/GaugeMetricConfigNode.png +0 -0
- package/documentation/LoggerTemplate.png +0 -0
- package/documentation/MetricsTemplate.png +0 -0
- package/documentation/StateTemplate.png +0 -0
- package/documentation/TimerMetricConfigNode_histogram.png +0 -0
- package/documentation/TimerMetricConfigNode_summary.png +0 -0
- package/documentation/WebhookServerConfigNode.png +0 -0
- package/documentation/WebhookTemplate.png +0 -0
- package/package.json +4 -10
- package/src/GenerateNodes.ts +7 -11
- package/src/core/NodeConstructor.ts +130 -186
- package/src/core/NodeGenerator.ts +88 -33
- package/src/core/NodeManagerRuntime.ts +179 -0
- package/src/core/logger/service/LoggerService.ts +39 -26
- package/src/core/logger/template/LoggerTemplate.html +11 -6
- package/src/core/metrics/MetricsDecorator.ts +140 -168
- package/src/core/metrics/node/CounterMetricConfigNode.ts +20 -20
- package/src/core/metrics/node/GaugeMetricConfigNode.ts +24 -25
- package/src/core/metrics/node/MetricsConfigNode.ts +29 -48
- package/src/core/metrics/node/TimerMetricConfigNode.ts +50 -59
- package/src/core/metrics/service/MetricsService.ts +214 -489
- package/src/core/metrics/template/CounterMetricTemplate.html +0 -1
- package/src/core/metrics/template/GaugeMetricTemplate.html +1 -1
- package/src/core/metrics/template/MetricsTemplate.html +132 -13
- package/src/core/metrics/template/MetricsTemplate.ts +3 -4
- package/src/core/other/node/DelegatedConfigReferenceNode.ts +1 -1
- package/src/core/other/service/SettingsService.ts +6 -10
- package/src/core/other/template/BasicTemplate.html +1 -1
- package/src/core/state/node/InternalStateConfigNode.html +77 -0
- package/src/core/state/node/InternalStateConfigNode.ts +102 -0
- package/src/core/state/node/StateConfigNode.ts +29 -0
- package/src/core/state/service/StateService.ts +180 -0
- package/src/core/state/template/StateTemplate.html +244 -0
- package/src/core/state/template/StateTemplate.ts +17 -0
- package/src/core/tagging/ServiceDescriptionDecorator.ts +23 -0
- package/src/core/tagging/service/NodeTypeService.ts +6 -11
- package/src/core/ui/template/UIHelperTemplate.html +41 -26
- package/src/core/webhook/service/WebhookServerService.ts +39 -23
- package/src/core/webhook/template/WebhookTemplate.html +28 -35
- package/src/index.ts +7 -2
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +0 -20
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +0 -1
- package/build/core/logger/node/ConsoleLoggerConfigNode.js +0 -62
- package/build/core/logger/node/RestLoggerConfigNode.d.ts +0 -40
- package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +0 -1
- package/build/core/logger/node/RestLoggerConfigNode.js +0 -128
- package/documentation/ConsoleLoggerConfigNode.png +0 -0
- package/documentation/MetricsConfigNode.png +0 -0
- package/documentation/RestLoggerConfigNode.png +0 -0
- package/documentation/TimerMetricConfigNode.png +0 -0
- package/documentation/WebhookNode.png +0 -0
- package/src/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
- package/src/core/logger/node/ConsoleLoggerConfigNode.ts +0 -71
- package/src/core/logger/node/RestLoggerConfigNode.html +0 -183
- package/src/core/logger/node/RestLoggerConfigNode.ts +0 -170
package/build/Nodes.js
CHANGED
|
@@ -8,25 +8,15 @@
|
|
|
8
8
|
|
|
9
9
|
*/
|
|
10
10
|
"use strict";
|
|
11
|
-
const NodeManager = require("
|
|
11
|
+
const { NodeManager } = require("./runtime/NodeManagerRuntime");
|
|
12
12
|
const DelegatedConfigReferenceNode = require("@theotherwillembotha/node-red-plugincore").DelegatedConfigReferenceNode;
|
|
13
|
-
const ConsoleLoggerConfigNode = require("@theotherwillembotha/node-red-plugincore").ConsoleLoggerConfigNode;
|
|
14
|
-
const RestLoggerConfigNode = require("@theotherwillembotha/node-red-plugincore").RestLoggerConfigNode;
|
|
15
|
-
const MetricsConfigNode = require("@theotherwillembotha/node-red-plugincore").MetricsConfigNode;
|
|
16
|
-
const CounterMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").CounterMetricConfigNode;
|
|
17
|
-
const GaugeMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").GaugeMetricConfigNode;
|
|
18
|
-
const TimerMetricConfigNode = require("@theotherwillembotha/node-red-plugincore").TimerMetricConfigNode;
|
|
19
13
|
const WebhookServerConfigNode = require("@theotherwillembotha/node-red-plugincore").WebhookServerConfigNode;
|
|
14
|
+
const InternalStateConfigNode = require("@theotherwillembotha/node-red-plugincore").InternalStateConfigNode;
|
|
20
15
|
module.exports = (RED) => {
|
|
21
16
|
let manager = new NodeManager(RED);
|
|
22
17
|
manager.registerNodeType("DelegatedConfigReferenceNode", DelegatedConfigReferenceNode);
|
|
23
|
-
manager.registerNodeType("ConsoleLoggerConfigNode", ConsoleLoggerConfigNode);
|
|
24
|
-
manager.registerNodeType("RestLoggerConfigNode", RestLoggerConfigNode);
|
|
25
|
-
manager.registerNodeType("MetricsConfigNode", MetricsConfigNode);
|
|
26
|
-
manager.registerNodeType("CounterMetricConfigNode", CounterMetricConfigNode);
|
|
27
|
-
manager.registerNodeType("GaugeMetricConfigNode", GaugeMetricConfigNode);
|
|
28
|
-
manager.registerNodeType("TimerMetricConfigNode", TimerMetricConfigNode);
|
|
29
18
|
manager.registerNodeType("WebhookServerConfigNode", WebhookServerConfigNode);
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
manager.registerNodeType("InternalStateConfigNode", InternalStateConfigNode);
|
|
20
|
+
}
|
|
21
|
+
|
|
32
22
|
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
|
|
2
|
+
<!--
|
|
3
|
+
|
|
4
|
+
This file was automatically generated using the NODERED Core utility.
|
|
5
|
+
Any modifications to his file will be overwritten the next time the code is regenerated.
|
|
6
|
+
|
|
7
|
+
You have been warned.
|
|
8
|
+
|
|
9
|
+
-->
|
|
10
|
+
<!-- WebhookServerConfigNode -->
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
<script type="text/javascript">
|
|
15
|
+
(function() {
|
|
16
|
+
RED.events.on('registry:node-set-added', function(ns) {
|
|
17
|
+
if (ns.types && ns.types.indexOf('DelegatedConfigReferenceNode') !== -1) {
|
|
18
|
+
RED.nodes.registerType('DelegatedConfigReferenceNode', {
|
|
19
|
+
category: 'config',
|
|
20
|
+
defaults: {},
|
|
21
|
+
oneditprepare: function() {},
|
|
22
|
+
oneditsave: function() {},
|
|
23
|
+
oneditcancel: function() {},
|
|
24
|
+
oneditdelete: function() {},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}());
|
|
29
|
+
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
<script type="text/html" data-template-name='DelegatedConfigReferenceNode'>
|
|
34
|
+
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<script type="text/markdown" data-help-name='DelegatedConfigReferenceNode'>
|
|
38
|
+
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<script type="text/javascript">
|
|
42
|
+
(function() {
|
|
43
|
+
RED.events.on('registry:node-set-added', function(ns) {
|
|
44
|
+
if (ns.types && ns.types.indexOf('WebhookServerConfigNode') !== -1) {
|
|
45
|
+
RED.nodes.registerType('WebhookServerConfigNode', {
|
|
46
|
+
category: 'config',
|
|
47
|
+
label: function() {
|
|
48
|
+
return this.name
|
|
49
|
+
},
|
|
50
|
+
paletteLabel: 'Webhook',
|
|
51
|
+
defaults: {
|
|
52
|
+
name: {
|
|
53
|
+
value: 'Example Test Node',
|
|
54
|
+
required: true
|
|
55
|
+
},
|
|
56
|
+
port: {
|
|
57
|
+
value: 6644,
|
|
58
|
+
required: true
|
|
59
|
+
},
|
|
60
|
+
externalHost: {
|
|
61
|
+
value: 'localhost',
|
|
62
|
+
required: true
|
|
63
|
+
},
|
|
64
|
+
externalPort: {
|
|
65
|
+
value: 6644,
|
|
66
|
+
required: true
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
oneditprepare: function() {},
|
|
70
|
+
oneditsave: function() {},
|
|
71
|
+
oneditcancel: function() {},
|
|
72
|
+
oneditdelete: function() {},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}());
|
|
77
|
+
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<script type="text/html" data-template-name='WebhookServerConfigNode'>
|
|
82
|
+
<div id='section_WebhookServerConfigNode'>
|
|
83
|
+
<div id="WebhookServerConfig">
|
|
84
|
+
<div class="form-row">
|
|
85
|
+
<label class="towb_editorlabel" for="node-config-input-name"><i class="fa fa-font"></i> Name</label>
|
|
86
|
+
<input type="text" id="node-config-input-name" />
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<div class="form-row">
|
|
90
|
+
<label class="towb_editorlabel" for="node-config-input-port"><i class="fa fa-plug"></i> Port</label>
|
|
91
|
+
<input type="number" id="node-config-input-port" />
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<div class="form-row">
|
|
95
|
+
<label class="towb_editorlabel" for="node-config-input-externalHost"><i class="fa fa-globe"></i> External Host</label>
|
|
96
|
+
<input type="text" id="node-config-input-externalHost" />
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<div class="form-row">
|
|
100
|
+
<label class="towb_editorlabel" for="node-config-input-externalPort"><i class="fa fa-plug"></i> External Port</label>
|
|
101
|
+
<input type="number" id="node-config-input-externalPort" />
|
|
102
|
+
</div>
|
|
103
|
+
<!-- add a button here to autmatically find an open port -->
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
</div>
|
|
108
|
+
</script>
|
|
109
|
+
|
|
110
|
+
<script type="text/markdown" data-help-name='WebhookServerConfigNode'>
|
|
111
|
+
Configuration node for an Express HTTP server that webhook nodes attach to. A single server instance is shared by all webhook nodes that reference it. The server is started when the flow is first deployed and stopped when it is torn down.
|
|
112
|
+
|
|
113
|
+
### Inputs
|
|
114
|
+
: *name* (string) : A descriptive name for this webhook server.
|
|
115
|
+
: *port* (number) : The local port the HTTP server will listen on. Defaults to `6644`. Each server instance must use a unique port.
|
|
116
|
+
|
|
117
|
+
### Reverse Proxy
|
|
118
|
+
When this server sits behind a reverse proxy, configure the following fields so that webhook nodes know the externally-visible address. This is used when registering endpoints with a reverse proxy service.
|
|
119
|
+
|
|
120
|
+
: *external host* (string) : The public hostname or IP of the reverse proxy (e.g. `myserver.example.com`).
|
|
121
|
+
: *external port* (number) : The public port exposed by the reverse proxy.
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<script type="text/javascript">
|
|
125
|
+
(function() {
|
|
126
|
+
RED.events.on('registry:node-set-added', function(ns) {
|
|
127
|
+
if (ns.types && ns.types.indexOf('InternalStateConfigNode') !== -1) {
|
|
128
|
+
RED.nodes.registerType('InternalStateConfigNode', {
|
|
129
|
+
category: 'config',
|
|
130
|
+
label: function() {
|
|
131
|
+
return this.name || "Internal State";
|
|
132
|
+
},
|
|
133
|
+
paletteLabel: 'Internal State',
|
|
134
|
+
defaults: {
|
|
135
|
+
name: {
|
|
136
|
+
value: 'Internal State',
|
|
137
|
+
required: true
|
|
138
|
+
},
|
|
139
|
+
survivesRedeploy: {
|
|
140
|
+
value: false,
|
|
141
|
+
required: false
|
|
142
|
+
},
|
|
143
|
+
survivesRestart: {
|
|
144
|
+
value: false,
|
|
145
|
+
required: false
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
oneditprepare: function() {
|
|
149
|
+
// **** InternalStateConfigNode **** //
|
|
150
|
+
{
|
|
151
|
+
// Auto-populate the name from the consumer node's context when this is a fresh node.
|
|
152
|
+
let nameInput = $("#node-config-input-name");
|
|
153
|
+
let ctx = window.__stateTemplateContext || {};
|
|
154
|
+
if (ctx.defaultName && (!nameInput.val() || nameInput.val() === "Internal State")) {
|
|
155
|
+
nameInput.val(ctx.defaultName);
|
|
156
|
+
}
|
|
157
|
+
window.__stateTemplateContext = null;
|
|
158
|
+
// When "survives restart" is checked, "survives redeploy" must also be checked.
|
|
159
|
+
let survivesRestart = $("#node-config-input-survivesRestart");
|
|
160
|
+
let survivesRedeploy = $("#node-config-input-survivesRedeploy");
|
|
161
|
+
survivesRestart.on("change", function() {
|
|
162
|
+
if (survivesRestart.prop("checked")) {
|
|
163
|
+
survivesRedeploy.prop("checked", true).prop("disabled", true);
|
|
164
|
+
} else {
|
|
165
|
+
survivesRedeploy.prop("disabled", false);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
survivesRestart.trigger("change");
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
oneditsave: function() {
|
|
172
|
+
// **** InternalStateConfigNode **** //
|
|
173
|
+
{}
|
|
174
|
+
},
|
|
175
|
+
oneditcancel: function() {},
|
|
176
|
+
oneditdelete: function() {},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}());
|
|
181
|
+
|
|
182
|
+
</script>
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
<script type="text/html" data-template-name='InternalStateConfigNode'>
|
|
186
|
+
<div id='section_InternalStateConfigNode'>
|
|
187
|
+
<div class="form-row">
|
|
188
|
+
<span style="display:inline-block; padding: 4px 0; color:#888;">
|
|
189
|
+
<i class="fa fa-database" style="margin-right:6px;"></i>Internal State Provider
|
|
190
|
+
</span>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<!-- Name is stored but not shown - auto-set from the consumer node's name + suffix. -->
|
|
194
|
+
<input type="hidden" id="node-config-input-name" />
|
|
195
|
+
|
|
196
|
+
<div class="form-row editorsectionheading" style="margin-top:8px;">
|
|
197
|
+
<i class="w-16 fa fa-database"></i> <span>Persistence</span>
|
|
198
|
+
</div>
|
|
199
|
+
<div class="editorgroupborder">
|
|
200
|
+
<div class="form-row nomargin">
|
|
201
|
+
<input type="checkbox" id="node-config-input-survivesRedeploy" style="margin: 8px 0 10px 130px; width:20px;" />
|
|
202
|
+
<label style="width:auto;" for="node-config-input-survivesRedeploy">Survives redeploy</label>
|
|
203
|
+
</div>
|
|
204
|
+
<div class="form-row nomargin">
|
|
205
|
+
<input type="checkbox" id="node-config-input-survivesRestart" style="margin: 8px 0 10px 130px; width:20px;" />
|
|
206
|
+
<label style="width:auto;" for="node-config-input-survivesRestart">Survives restart <span style="color:#aaa; font-size:0.85em;">(also writes to disk)</span></label>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
</div>
|
|
211
|
+
</script>
|
|
212
|
+
|
|
213
|
+
<script type="text/markdown" data-help-name='InternalStateConfigNode'>
|
|
214
|
+
Stores a named state value in memory, optionally persisted across redeployments or process restarts.
|
|
215
|
+
|
|
216
|
+
### Properties
|
|
217
|
+
|
|
218
|
+
: *survives redeploy* (boolean) : When checked, the current state value is preserved across Node-RED flow redeployments. When unchecked (default), state resets on each deploy.
|
|
219
|
+
: *survives restart* (boolean) : When checked, the current state is written to disk and restored after a process restart. Automatically implies "survives redeploy".
|
|
220
|
+
|
|
221
|
+
### Details
|
|
222
|
+
|
|
223
|
+
The initial (default) state value is provided by the node that owns this config - for example, a Circuit Breaker Config Node sets the state to its configured **Default State** if no value has been stored yet.
|
|
224
|
+
|
|
225
|
+
When **Survives Restart** is enabled, state is persisted to `<userDir>/internalstate/<nodeId>.json` and automatically restored on the next startup.
|
|
226
|
+
</script>
|
|
227
|
+
|
package/build/Plugins.js
CHANGED
|
@@ -14,11 +14,12 @@ const MetricsService = require("@theotherwillembotha/node-red-plugincore").Metri
|
|
|
14
14
|
const SettingsService = require("@theotherwillembotha/node-red-plugincore").SettingsService;
|
|
15
15
|
const WebhookServerService = require("@theotherwillembotha/node-red-plugincore").WebhookServerService;
|
|
16
16
|
const NodeTypeService = require("@theotherwillembotha/node-red-plugincore").NodeTypeService;
|
|
17
|
+
const StateService = require("@theotherwillembotha/node-red-plugincore").StateService;
|
|
17
18
|
|
|
18
19
|
module.exports = function (RED) {
|
|
19
20
|
|
|
20
21
|
// 1. make a list of all the plugins that need to be installed.
|
|
21
|
-
let pluginList = [LoggerService, MetricsService, SettingsService, WebhookServerService, NodeTypeService]
|
|
22
|
+
let pluginList = [LoggerService, MetricsService, SettingsService, WebhookServerService, NodeTypeService, StateService]
|
|
22
23
|
.map(service => service.getServiceDescriptor())
|
|
23
24
|
.filter(plugin => !RED.plugins.get(plugin.id()));
|
|
24
25
|
|
|
@@ -31,29 +32,38 @@ module.exports = function (RED) {
|
|
|
31
32
|
|
|
32
33
|
if(addedPlugin && plugin.instantiate && !plugin.instance){
|
|
33
34
|
plugin.instance = new plugin.class();
|
|
34
|
-
|
|
35
|
+
|
|
35
36
|
// instantiate the plugin.
|
|
36
37
|
await plugin.instance.init(RED);
|
|
37
38
|
|
|
39
|
+
// Eagerly call onDeploy with any pre-existing saved flows so that
|
|
40
|
+
// service registries (MetricsService, WebhookServerService, etc.) are
|
|
41
|
+
// populated before config nodes are constructed during flow startup.
|
|
42
|
+
// Without this, MetricsConfigNode._metrics is undefined on first boot.
|
|
43
|
+
const existingFlows = await runtime.flows.getFlows({});
|
|
44
|
+
const hasExistingFlows = existingFlows && existingFlows.flows && existingFlows.flows.length > 0;
|
|
45
|
+
if (hasExistingFlows) {
|
|
46
|
+
await plugin.instance.onDeploy(existingFlows);
|
|
47
|
+
}
|
|
48
|
+
|
|
38
49
|
// publish an event that it has ben deployed.
|
|
39
50
|
RED.events.emit("plugin.instantiated", pluginID);
|
|
40
|
-
|
|
51
|
+
|
|
41
52
|
pluginList.splice(pluginList.findIndex(current => current.id() === addedPlugin.id()), 1);
|
|
42
53
|
|
|
43
54
|
// register a flow deployment listener.
|
|
44
|
-
|
|
55
|
+
// startupDeployment is only needed for a truly fresh Node-RED with no saved flows.
|
|
56
|
+
let startupDeployment = !hasExistingFlows;
|
|
45
57
|
RED.events.on('runtime-event', async (event) => {
|
|
46
|
-
// startup deployment.
|
|
58
|
+
// startup deployment (fresh Node-RED with no pre-existing flows).
|
|
47
59
|
if ("runtime-deploy" === event?.id && startupDeployment) {
|
|
48
|
-
//console.log("STARTUP DEPLOYMENT");
|
|
49
60
|
startupDeployment = false;
|
|
50
61
|
const flows = await runtime.flows.getFlows({});
|
|
51
62
|
await plugin.instance.onDeploy(flows);
|
|
52
63
|
}
|
|
53
|
-
|
|
64
|
+
|
|
54
65
|
// stopping flows on redeployment.
|
|
55
66
|
if ("runtime-state" === event?.id && event?.payload?.state === "stop" && event?.payload?.deploy) {
|
|
56
|
-
//console.log("REDEPLOY!");
|
|
57
67
|
const flows = await runtime.flows.getFlows({});
|
|
58
68
|
await plugin.instance.onDeploy(flows);
|
|
59
69
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { Node, NodeAPI, NodeAPISettingsWithData } from "node-red";
|
|
2
2
|
import { INamedType, INodeClass, ITemplateClass } from "./NodeGenerator";
|
|
3
3
|
import "reflect-metadata";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
name: string;
|
|
7
|
-
type: string;
|
|
8
|
-
}
|
|
4
|
+
import { NODEMANAGER_API_VERSION, POST_CONSTRUCT_KEY, BaseNodeConfig, runPostConstructInitializers, NodeManager } from "./NodeManagerRuntime";
|
|
5
|
+
export { NODEMANAGER_API_VERSION, POST_CONSTRUCT_KEY, BaseNodeConfig, runPostConstructInitializers, NodeManager };
|
|
9
6
|
export declare abstract class BaseNode<Config extends BaseNodeConfig> {
|
|
10
7
|
private _node;
|
|
11
8
|
node(): Node<{}>;
|
|
@@ -102,16 +99,6 @@ declare class PostConstructDecoratorBuilder<TMetadata = any> {
|
|
|
102
99
|
build(): any;
|
|
103
100
|
}
|
|
104
101
|
export declare function createPostConstructDecorator<TMetadata = any>(decoratorName: string): PostConstructDecoratorBuilder<TMetadata>;
|
|
105
|
-
export declare class NodeManager {
|
|
106
|
-
private static PLUGINID;
|
|
107
|
-
private static _RED;
|
|
108
|
-
private nodeTypeService;
|
|
109
|
-
private typeBacklog;
|
|
110
|
-
constructor(RED: NodeAPI<NodeAPISettingsWithData>);
|
|
111
|
-
static get RED(): NodeAPI<NodeAPISettingsWithData>;
|
|
112
|
-
registerService(type: IServiceClass): NodeManager;
|
|
113
|
-
registerNodeType(typeName: string, type: INodeClass): NodeManager;
|
|
114
|
-
}
|
|
115
102
|
export type FlowDeployment = {
|
|
116
103
|
rev: string;
|
|
117
104
|
flows: [FlowElement];
|
|
@@ -177,6 +164,11 @@ export declare class NodeBuilder {
|
|
|
177
164
|
addIncludeEditDelete(source: string, script: string): NodeBuilder;
|
|
178
165
|
addIncludeEditForm(source: string, script: string): NodeBuilder;
|
|
179
166
|
addIncludeDocumentation(source: string, script: string): NodeBuilder;
|
|
167
|
+
buildOnceHtml(): {
|
|
168
|
+
source: string;
|
|
169
|
+
html: string;
|
|
170
|
+
}[];
|
|
171
|
+
buildDeferredType(): string;
|
|
180
172
|
private serializeProperty;
|
|
181
173
|
private serializeHTML;
|
|
182
174
|
private serializeJavaScript;
|
|
@@ -187,6 +179,7 @@ export declare class NodeBuilder {
|
|
|
187
179
|
buildHtml(): string;
|
|
188
180
|
buildDocumentation(): string;
|
|
189
181
|
}
|
|
182
|
+
declare let buildNodeBuilder: (node: INodeClass) => NodeBuilder;
|
|
190
183
|
declare let buildNode: (node: INodeClass) => string;
|
|
191
|
-
export { buildNode };
|
|
184
|
+
export { buildNode, buildNodeBuilder };
|
|
192
185
|
//# sourceMappingURL=NodeConstructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeConstructor.d.ts","sourceRoot":"","sources":["../../src/core/NodeConstructor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeConstructor.d.ts","sourceRoot":"","sources":["../../src/core/NodeConstructor.ts"],"names":[],"mappings":"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"}
|