@theotherwillembotha/node-red-plugincore 0.0.50
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/LICENSE +15 -0
- package/README.md +190 -0
- package/build/GenerateNodes.d.ts +2 -0
- package/build/GenerateNodes.d.ts.map +1 -0
- package/build/GenerateNodes.js +36 -0
- package/build/Nodes.html +1729 -0
- package/build/Nodes.js +32 -0
- package/build/Plugins.js +74 -0
- package/build/core/NodeConstructor.d.ts +188 -0
- package/build/core/NodeConstructor.d.ts.map +1 -0
- package/build/core/NodeConstructor.js +679 -0
- package/build/core/NodeGenerator.d.ts +37 -0
- package/build/core/NodeGenerator.d.ts.map +1 -0
- package/build/core/NodeGenerator.js +300 -0
- package/build/core/Utils.d.ts +7 -0
- package/build/core/Utils.d.ts.map +1 -0
- package/build/core/Utils.js +19 -0
- package/build/core/logger/LoggerDecorator.d.ts +2 -0
- package/build/core/logger/LoggerDecorator.d.ts.map +1 -0
- package/build/core/logger/LoggerDecorator.js +93 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +16 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.js +47 -0
- package/build/core/logger/node/LoggerConfigNode.d.ts +30 -0
- package/build/core/logger/node/LoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/LoggerConfigNode.html +307 -0
- package/build/core/logger/node/LoggerConfigNode.js +60 -0
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts +20 -0
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/LokiLoggerConfigNode.html +153 -0
- package/build/core/logger/node/LokiLoggerConfigNode.js +52 -0
- package/build/core/logger/node/RestLoggerConfigNode.d.ts +24 -0
- package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/RestLoggerConfigNode.html +209 -0
- package/build/core/logger/node/RestLoggerConfigNode.js +57 -0
- package/build/core/logger/service/LoggerService.d.ts +88 -0
- package/build/core/logger/service/LoggerService.d.ts.map +1 -0
- package/build/core/logger/service/LoggerService.js +204 -0
- package/build/core/logger/service/LoggerServiceTypes.d.ts +24 -0
- package/build/core/logger/service/LoggerServiceTypes.d.ts.map +1 -0
- package/build/core/logger/service/LoggerServiceTypes.js +30 -0
- package/build/core/logger/template/LoggerTemplate.d.ts +11 -0
- package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -0
- package/build/core/logger/template/LoggerTemplate.html +328 -0
- package/build/core/logger/template/LoggerTemplate.js +12 -0
- package/build/core/metrics/MetricsDecorator.d.ts +40 -0
- package/build/core/metrics/MetricsDecorator.d.ts.map +1 -0
- package/build/core/metrics/MetricsDecorator.js +166 -0
- package/build/core/metrics/node/CounterMetricConfigNode.d.ts +16 -0
- package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/CounterMetricConfigNode.html +48 -0
- package/build/core/metrics/node/CounterMetricConfigNode.js +61 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.d.ts +17 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.html +48 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.js +61 -0
- package/build/core/metrics/node/MetricsConfigNode.d.ts +14 -0
- package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/MetricsConfigNode.html +21 -0
- package/build/core/metrics/node/MetricsConfigNode.js +56 -0
- package/build/core/metrics/node/TimerMetricConfigNode.d.ts +28 -0
- package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/TimerMetricConfigNode.html +190 -0
- package/build/core/metrics/node/TimerMetricConfigNode.js +101 -0
- package/build/core/metrics/service/MetricsService.d.ts +187 -0
- package/build/core/metrics/service/MetricsService.d.ts.map +1 -0
- package/build/core/metrics/service/MetricsService.js +385 -0
- package/build/core/metrics/template/CounterMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/CounterMetricTemplate.html +40 -0
- package/build/core/metrics/template/CounterMetricTemplate.js +12 -0
- package/build/core/metrics/template/GaugeMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/GaugeMetricTemplate.html +39 -0
- package/build/core/metrics/template/GaugeMetricTemplate.js +12 -0
- package/build/core/metrics/template/MetricsTemplate.d.ts +8 -0
- package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/MetricsTemplate.html +54 -0
- package/build/core/metrics/template/MetricsTemplate.js +12 -0
- package/build/core/metrics/template/TimerMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/TimerMetricTemplate.html +39 -0
- package/build/core/metrics/template/TimerMetricTemplate.js +12 -0
- package/build/core/other/InputDecorator.d.ts +3 -0
- package/build/core/other/InputDecorator.d.ts.map +1 -0
- package/build/core/other/InputDecorator.js +43 -0
- package/build/core/other/service/InputService.d.ts +16 -0
- package/build/core/other/service/InputService.d.ts.map +1 -0
- package/build/core/other/service/InputService.js +31 -0
- package/build/core/other/service/SettingsService.d.ts +25 -0
- package/build/core/other/service/SettingsService.d.ts.map +1 -0
- package/build/core/other/service/SettingsService.js +74 -0
- package/build/core/other/template/BasicTemplate.d.ts +5 -0
- package/build/core/other/template/BasicTemplate.d.ts.map +1 -0
- package/build/core/other/template/BasicTemplate.html +76 -0
- package/build/core/other/template/BasicTemplate.js +11 -0
- package/build/core/other/template/SettingsTemplate.d.ts +5 -0
- package/build/core/other/template/SettingsTemplate.d.ts.map +1 -0
- package/build/core/other/template/SettingsTemplate.html +128 -0
- package/build/core/other/template/SettingsTemplate.js +11 -0
- package/build/core/tagging/NodeDescriptionDecorator.d.ts +17 -0
- package/build/core/tagging/NodeDescriptionDecorator.d.ts.map +1 -0
- package/build/core/tagging/NodeDescriptionDecorator.js +25 -0
- package/build/core/tagging/service/NodeTypeService.d.ts +15 -0
- package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -0
- package/build/core/tagging/service/NodeTypeService.js +47 -0
- package/build/core/webhook/WebhookDecorator.d.ts +3 -0
- package/build/core/webhook/WebhookDecorator.d.ts.map +1 -0
- package/build/core/webhook/WebhookDecorator.js +45 -0
- package/build/core/webhook/node/WebhookServerConfigNode.d.ts +16 -0
- package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -0
- package/build/core/webhook/node/WebhookServerConfigNode.html +61 -0
- package/build/core/webhook/node/WebhookServerConfigNode.js +40 -0
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts +29 -0
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -0
- package/build/core/webhook/service/ReverseProxyTypeService.js +24 -0
- package/build/core/webhook/service/WebhookServerService.d.ts +52 -0
- package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -0
- package/build/core/webhook/service/WebhookServerService.js +146 -0
- package/build/core/webhook/template/WebhookTemplate.d.ts +22 -0
- package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -0
- package/build/core/webhook/template/WebhookTemplate.html +434 -0
- package/build/core/webhook/template/WebhookTemplate.js +12 -0
- package/build/index.d.ts +33 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +55 -0
- package/package.json +67 -0
- package/src/GenerateNodes.ts +42 -0
- package/src/core/NodeConstructor.ts +889 -0
- package/src/core/NodeGenerator.ts +331 -0
- package/src/core/Utils.ts +19 -0
- package/src/core/logger/LoggerDecorator.ts +105 -0
- package/src/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
- package/src/core/logger/node/ConsoleLoggerConfigNode.ts +46 -0
- package/src/core/logger/node/LoggerConfigNode.html +307 -0
- package/src/core/logger/node/LoggerConfigNode.ts +95 -0
- package/src/core/logger/node/LokiLoggerConfigNode.html +153 -0
- package/src/core/logger/node/LokiLoggerConfigNode.ts +58 -0
- package/src/core/logger/node/RestLoggerConfigNode.html +209 -0
- package/src/core/logger/node/RestLoggerConfigNode.ts +67 -0
- package/src/core/logger/service/LoggerService.ts +317 -0
- package/src/core/logger/service/LoggerServiceTypes.ts +26 -0
- package/src/core/logger/template/LoggerTemplate.html +328 -0
- package/src/core/logger/template/LoggerTemplate.ts +23 -0
- package/src/core/metrics/MetricsDecorator.ts +227 -0
- package/src/core/metrics/node/CounterMetricConfigNode.html +48 -0
- package/src/core/metrics/node/CounterMetricConfigNode.ts +62 -0
- package/src/core/metrics/node/GaugeMetricConfigNode.html +48 -0
- package/src/core/metrics/node/GaugeMetricConfigNode.ts +62 -0
- package/src/core/metrics/node/MetricsConfigNode.html +21 -0
- package/src/core/metrics/node/MetricsConfigNode.ts +55 -0
- package/src/core/metrics/node/TimerMetricConfigNode.html +190 -0
- package/src/core/metrics/node/TimerMetricConfigNode.ts +118 -0
- package/src/core/metrics/service/MetricsService.ts +560 -0
- package/src/core/metrics/template/CounterMetricTemplate.html +40 -0
- package/src/core/metrics/template/CounterMetricTemplate.ts +15 -0
- package/src/core/metrics/template/GaugeMetricTemplate.html +39 -0
- package/src/core/metrics/template/GaugeMetricTemplate.ts +15 -0
- package/src/core/metrics/template/MetricsTemplate.html +54 -0
- package/src/core/metrics/template/MetricsTemplate.ts +18 -0
- package/src/core/metrics/template/TimerMetricTemplate.html +39 -0
- package/src/core/metrics/template/TimerMetricTemplate.ts +14 -0
- package/src/core/other/InputDecorator.ts +57 -0
- package/src/core/other/service/InputService.ts +36 -0
- package/src/core/other/service/SettingsService.ts +103 -0
- package/src/core/other/template/BasicTemplate.html +76 -0
- package/src/core/other/template/BasicTemplate.ts +15 -0
- package/src/core/other/template/SettingsTemplate.html +128 -0
- package/src/core/other/template/SettingsTemplate.ts +17 -0
- package/src/core/tagging/NodeDescriptionDecorator.ts +39 -0
- package/src/core/tagging/service/NodeTypeService.ts +67 -0
- package/src/core/webhook/WebhookDecorator.ts +70 -0
- package/src/core/webhook/node/WebhookServerConfigNode.html +61 -0
- package/src/core/webhook/node/WebhookServerConfigNode.ts +38 -0
- package/src/core/webhook/service/ReverseProxyTypeService.ts +46 -0
- package/src/core/webhook/service/WebhookServerService.ts +211 -0
- package/src/core/webhook/template/WebhookTemplate.html +434 -0
- package/src/core/webhook/template/WebhookTemplate.ts +36 -0
- package/src/index.ts +47 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<script type="text/javascript" template-section="onCompose">
|
|
4
|
+
node
|
|
5
|
+
.addDefault('webhook', {type:"WebhookServerConfigNode", required:true})
|
|
6
|
+
.addDefault('webhookPath', {value:"/example", required:true})
|
|
7
|
+
.addDefault('webhookAuth', { value:"none", required:true})
|
|
8
|
+
.addDefault('webhookAuth_basic_username', {value:"user", required:false})
|
|
9
|
+
.addDefault('webhookAuth_basic_password', {value:"pass", required:false})
|
|
10
|
+
.addDefault('webhookAuth_apikey_mechanism', {value:"header", required:false})
|
|
11
|
+
.addDefault('webhookAuth_apikey_key', {value:"x-api-key", required:false})
|
|
12
|
+
.addDefault('webhookAuth_apikey_value', {value:"testkey", required:false})
|
|
13
|
+
.addDefault('reverseProxies_enabled', {required:false})
|
|
14
|
+
.addDefault('reverseProxies_connections', { type:"ReverseProxyType[]", maxInstances:10})
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div template-section="onIncludeOnce">
|
|
18
|
+
<script type="text/javascript">
|
|
19
|
+
|
|
20
|
+
// CSS
|
|
21
|
+
dropdownStyles = `
|
|
22
|
+
.proxy-dropdown {
|
|
23
|
+
position: absolute;
|
|
24
|
+
background: white;
|
|
25
|
+
border: 1px solid #ccc;
|
|
26
|
+
border-radius: 4px;
|
|
27
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
|
|
28
|
+
max-height: 150px;
|
|
29
|
+
overflow-y: auto;
|
|
30
|
+
z-index: 1000;
|
|
31
|
+
min-width: 150px;
|
|
32
|
+
}
|
|
33
|
+
.proxy-dropdown .dropdown-item {
|
|
34
|
+
padding: 6px 12px;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
}
|
|
37
|
+
.proxy-dropdown .dropdown-item:hover {
|
|
38
|
+
background: #f0f0f0;
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
41
|
+
$('<style>').text(dropdownStyles).appendTo('head');
|
|
42
|
+
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<script type="text/javascript" template-section="onIncludeEditPrepare">
|
|
48
|
+
{
|
|
49
|
+
let node = this;
|
|
50
|
+
|
|
51
|
+
let showSelectedAutnetication = function(value){
|
|
52
|
+
let webhookConfig = $("#section_webhookconfig");
|
|
53
|
+
webhookConfig.find(".webhookauth").each((i, t) => {
|
|
54
|
+
t = $(t);
|
|
55
|
+
if(t.hasClass(`webhookauth-${value}`)){ t.show(); }
|
|
56
|
+
else { t.hide(); }
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
webhookConfig.find(`.webhookauth-${value}`).find(`.webhookauth-${value}-input.required`).each((i, entry) => {
|
|
60
|
+
let id = entry.id.replace("node-{{#if config.isConfigNode}}config-{{/if}}input-", "");
|
|
61
|
+
if(node._def.defaults[id]){
|
|
62
|
+
node._def.defaults[id].required = true;
|
|
63
|
+
}
|
|
64
|
+
else{
|
|
65
|
+
console.log(`you forgot to define ${id} in the defaults for WebhookTemplate`);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
Object.entries(node._def.defaults)
|
|
70
|
+
.filter(([k, v]) => k.startsWith(`webhookAuth_`))
|
|
71
|
+
.filter(([k, v]) => !k.startsWith(`webhookAuth_${value}_`))
|
|
72
|
+
.forEach(([k, v]) => v.required = false );
|
|
73
|
+
|
|
74
|
+
node.webhookAuth = value;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
let webhookAuthSelection = $("#{{defaults.webhookAuth}}");
|
|
78
|
+
webhookAuthSelection.typedInput({type:"authentication", types:[{
|
|
79
|
+
value: "authentication",
|
|
80
|
+
options: [
|
|
81
|
+
{ value: "none", label: "None"},
|
|
82
|
+
{ value: "basic", label: "BasicAuth"},
|
|
83
|
+
{ value: "apikey", label: "APIKey"}
|
|
84
|
+
]
|
|
85
|
+
}]});
|
|
86
|
+
webhookAuthSelection.on("change", () => showSelectedAutnetication(webhookAuthSelection.val()));
|
|
87
|
+
showSelectedAutnetication(webhookAuthSelection.val());
|
|
88
|
+
|
|
89
|
+
let webhookAPIKeyMechanism = $("#{{defaults.webhookAuth_apikey_mechanism}}");
|
|
90
|
+
webhookAPIKeyMechanism.typedInput({type:"apikeymechanism", types:[{
|
|
91
|
+
value: "apikeymechansim",
|
|
92
|
+
options: [
|
|
93
|
+
{ value: "header", label: "Header"},
|
|
94
|
+
{ value: "queryparam", label: "Query Param"},
|
|
95
|
+
{ value: "matrixparam", label: "Matrix Param"}
|
|
96
|
+
]
|
|
97
|
+
}]});
|
|
98
|
+
webhookAuthSelection.on("change", () => showSelectedAutnetication(webhookAuthSelection.val()));
|
|
99
|
+
showSelectedAutnetication(webhookAuthSelection.val());
|
|
100
|
+
|
|
101
|
+
let enableReverseProxy = $("#{{defaults.reverseProxies_enabled}}");
|
|
102
|
+
let reverseProxySection = $("#section_webhookconfig_reverseproxy");
|
|
103
|
+
enableReverseProxy.on("change", () => {
|
|
104
|
+
console.log("show / hide reverse proxy table");
|
|
105
|
+
if(enableReverseProxy.prop("checked")){
|
|
106
|
+
reverseProxySection.show();
|
|
107
|
+
}
|
|
108
|
+
else{
|
|
109
|
+
reverseProxySection.hide();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
if(this.reverseProxies_enabled){
|
|
113
|
+
reverseProxySection.show();
|
|
114
|
+
}
|
|
115
|
+
else{
|
|
116
|
+
reverseProxySection.hide();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let getProxyTypes = async () => {
|
|
120
|
+
let types = [];
|
|
121
|
+
await $.ajax({
|
|
122
|
+
url: "nodetypeservice/find?tag=ReverseProxyType",
|
|
123
|
+
type: "GET",
|
|
124
|
+
contentType: "application/json; charset=utf-8",
|
|
125
|
+
data:JSON.stringify({id:node.id}),
|
|
126
|
+
success: (response) => {
|
|
127
|
+
types = response;
|
|
128
|
+
},
|
|
129
|
+
error: (jqXHR, textStatus, errorThrown) => {
|
|
130
|
+
console.log(jqXHR, textStatus, errorThrown);
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
return types;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
let getProxies = async () => {
|
|
137
|
+
let proxies = [];
|
|
138
|
+
|
|
139
|
+
// get the list of types again.
|
|
140
|
+
let proxyTypes = (await getProxyTypes()).map(type => type.id);
|
|
141
|
+
|
|
142
|
+
// add all of the known proxies.
|
|
143
|
+
RED.nodes.eachConfig(cfg => {
|
|
144
|
+
if(proxyTypes.includes(cfg.type)){
|
|
145
|
+
proxies.push({id:cfg.id, name:cfg.label(), type:cfg.type});
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
return proxies;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
let reverseProxyList = $("#reverseproxylist_table");
|
|
153
|
+
reverseProxyList.editableList({
|
|
154
|
+
sortable: true,
|
|
155
|
+
removable: true,
|
|
156
|
+
height: 'auto',
|
|
157
|
+
scrollOnAdd: true,
|
|
158
|
+
addButton: 'Add ProxyHost',
|
|
159
|
+
header: $('<div>').append($.parseHTML(`
|
|
160
|
+
<div style='width:30%; margin-left:5%; display:inline-grid;'>Proxy</div>
|
|
161
|
+
<div style='width:auto; margin-right:5%; display:inline-grid;'>Domain Name</div>
|
|
162
|
+
`)
|
|
163
|
+
),
|
|
164
|
+
buttons: [
|
|
165
|
+
{
|
|
166
|
+
label: "Add Reverse Proxy",
|
|
167
|
+
icon: "fa fa-star",
|
|
168
|
+
title: "Add a reverse proxy configuration",
|
|
169
|
+
click: () => {
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
let $btn = $(event.target);
|
|
172
|
+
|
|
173
|
+
// Remove any existing dropdown
|
|
174
|
+
$('.proxy-dropdown').remove();
|
|
175
|
+
|
|
176
|
+
// Fetch the list of reverseproxy types.
|
|
177
|
+
getProxyTypes().then(proxyTypes => {
|
|
178
|
+
let $dropdown = $('<div class="proxy-dropdown red-ui-editor"></div>');
|
|
179
|
+
|
|
180
|
+
proxyTypes.forEach(proxyType => {
|
|
181
|
+
$('<div class="dropdown-item"></div>')
|
|
182
|
+
.text(proxyType.name)
|
|
183
|
+
.data('value', proxyType.id)
|
|
184
|
+
.css({
|
|
185
|
+
padding: '4px 8px',
|
|
186
|
+
cursor: 'pointer'
|
|
187
|
+
})
|
|
188
|
+
.appendTo($dropdown);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Position it near the button
|
|
192
|
+
$dropdown.css({
|
|
193
|
+
top: $btn.offset().top + $btn.height(),
|
|
194
|
+
left: $btn.offset().left
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
$('body').append($dropdown);
|
|
198
|
+
|
|
199
|
+
// Handle item selection
|
|
200
|
+
$dropdown.on('click', '.dropdown-item', function(e) {
|
|
201
|
+
e.stopPropagation();
|
|
202
|
+
const selectedValue = $(this).data('value');
|
|
203
|
+
const selectedText = $(this).text();
|
|
204
|
+
|
|
205
|
+
// Do whatever you need with the selection
|
|
206
|
+
$dropdown.remove();
|
|
207
|
+
RED.editor.editConfig("reverseproxy", selectedValue, "_ADD_");
|
|
208
|
+
});
|
|
209
|
+
})
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
label: "Edit Reverse Proxy",
|
|
214
|
+
icon: "fa fa-edit",
|
|
215
|
+
title: "Edit a reverse proxy configuration",
|
|
216
|
+
click: async (event) => {
|
|
217
|
+
event.stopPropagation();
|
|
218
|
+
|
|
219
|
+
// Remove any existing dropdown
|
|
220
|
+
$('.proxy-dropdown').remove();
|
|
221
|
+
|
|
222
|
+
// Build the dropdown from the select's options
|
|
223
|
+
const $dropdown = $('<div class="proxy-dropdown red-ui-editor"></div>');
|
|
224
|
+
|
|
225
|
+
(await getProxies()).forEach(proxy => {
|
|
226
|
+
$('<div class="dropdown-item"></div>')
|
|
227
|
+
.text(proxy.name)
|
|
228
|
+
.data('value', proxy.id)
|
|
229
|
+
.data('type', proxy.type)
|
|
230
|
+
.css({
|
|
231
|
+
padding: '4px 8px',
|
|
232
|
+
cursor: 'pointer'
|
|
233
|
+
})
|
|
234
|
+
.appendTo($dropdown);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// Position it near the button
|
|
238
|
+
let $btn = $(event.target);
|
|
239
|
+
$dropdown.css({
|
|
240
|
+
top: $btn.offset().top + $btn.height(),
|
|
241
|
+
left: $btn.offset().left
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
$('body').append($dropdown);
|
|
245
|
+
|
|
246
|
+
// Handle item selection
|
|
247
|
+
$dropdown.on('click', '.dropdown-item', function(e) {
|
|
248
|
+
e.stopPropagation();
|
|
249
|
+
const selectedType = $(this).data('type');
|
|
250
|
+
const selectedValue = $(this).data('value');
|
|
251
|
+
const selectedText = $(this).text();
|
|
252
|
+
|
|
253
|
+
// Do whatever you need with the selection
|
|
254
|
+
$dropdown.remove();
|
|
255
|
+
RED.editor.editConfig("reverseproxy", selectedType, selectedValue);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}],
|
|
259
|
+
|
|
260
|
+
addItem: async function(container, i, proxy){
|
|
261
|
+
let row = $('<div/>', {
|
|
262
|
+
class: 'form-row',
|
|
263
|
+
style: 'display: flex; margin-bottom: 0;'
|
|
264
|
+
}).appendTo(container);
|
|
265
|
+
|
|
266
|
+
let proxyColumn = $('<select/>', {
|
|
267
|
+
type: 'text',
|
|
268
|
+
name: i,
|
|
269
|
+
required: true,
|
|
270
|
+
style: 'margin-left: 5px; margin-bottom: 0;',
|
|
271
|
+
class: 'proxy-proxy'
|
|
272
|
+
}).appendTo(row);
|
|
273
|
+
|
|
274
|
+
(await getProxies()).forEach(proxy => {
|
|
275
|
+
$('<option value="' + proxy.id + '">' + proxy.name + '</option>').appendTo(proxyColumn);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
proxyColumn.on("focus", async () => {
|
|
279
|
+
proxyColumn.empty();
|
|
280
|
+
(await getProxies()).forEach(proxy => {
|
|
281
|
+
$('<option value="' + proxy.id + '">' + proxy.name + '</option>').appendTo(proxyColumn);
|
|
282
|
+
})
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
proxyColumn.val(proxy.proxy);
|
|
286
|
+
|
|
287
|
+
// Add the Domain Name column
|
|
288
|
+
let domainnameColumn = $('<input/>', {
|
|
289
|
+
type: 'text',
|
|
290
|
+
name: i,
|
|
291
|
+
required: true,
|
|
292
|
+
style: 'margin-left: 5px; margin-bottom: 0;',
|
|
293
|
+
class: 'proxy-domainname'
|
|
294
|
+
}).appendTo(row)
|
|
295
|
+
domainnameColumn.val(proxy.domainname);
|
|
296
|
+
},
|
|
297
|
+
removeItem :function(data){
|
|
298
|
+
// nothing to do here.
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
// Close dropdown when clicking anywhere else
|
|
303
|
+
$(document).on('click', function() {
|
|
304
|
+
$('.proxy-dropdown').remove();
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
this.reverseProxies_connections = (this.reverseProxies_connections) ? this.reverseProxies_connections : [];
|
|
308
|
+
reverseProxyList.editableList('addItems', this.reverseProxies_connections);
|
|
309
|
+
}
|
|
310
|
+
</script>
|
|
311
|
+
|
|
312
|
+
<script type="text/javascript" template-section="onIncludeEditSave">
|
|
313
|
+
{
|
|
314
|
+
let node = this;
|
|
315
|
+
|
|
316
|
+
// pulling the values from the reverseproxy table.
|
|
317
|
+
let connectionList = $("#reverseproxylist_table").editableList('items');
|
|
318
|
+
node.reverseProxies_connections = [];
|
|
319
|
+
connectionList.each(function(i) {
|
|
320
|
+
node.reverseProxies_connections.push({
|
|
321
|
+
proxy: $(this).find('.proxy-proxy').val(),
|
|
322
|
+
domainname: $(this).find('.proxy-domainname').val(),
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
console.log(node.reverseProxies_connections);
|
|
327
|
+
}
|
|
328
|
+
</script>
|
|
329
|
+
|
|
330
|
+
<script type="text/html" template-section="onIncludeEditForm">
|
|
331
|
+
<div id="section_webhookconfig">
|
|
332
|
+
<div class="form-row editorsectionheading">
|
|
333
|
+
<i class="w-16 fa fa-eye"></i> <span>Webhook</span>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<div class="editorgroupborder">
|
|
337
|
+
<div class="form-row nomargin">
|
|
338
|
+
<label for="{{defaults.webhook}}">Server</label>
|
|
339
|
+
<input id="{{defaults.webhook}}" placeholder="webhook" />
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<div class="form-row">
|
|
343
|
+
<label for="{{defaults.webhookPath}}">Path</label>
|
|
344
|
+
<input type="text" id="{{defaults.webhookPath}}" placeholder="/example" />
|
|
345
|
+
</div>
|
|
346
|
+
|
|
347
|
+
<div class="form-row">
|
|
348
|
+
<label for="{{defaults.webhookAuth}}">Authentication</label>
|
|
349
|
+
<input type="text" id="{{defaults.webhookAuth}}" placeholder="none" />
|
|
350
|
+
</div>
|
|
351
|
+
|
|
352
|
+
<div class="webhookauth webhookauth-none">
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<div class="webhookauth webhookauth-basic">
|
|
356
|
+
<div class="form-row">
|
|
357
|
+
<label for="{{defaults.webhookAuth_basic_username}}">Auth Username:</label>
|
|
358
|
+
<input type="text" id="{{defaults.webhookAuth_basic_username}}" placeholder="testUser" />
|
|
359
|
+
</div>
|
|
360
|
+
|
|
361
|
+
<div class="form-row">
|
|
362
|
+
<label for="{{defaults.webhookAuth_basic_password}}">Auth Password:</label>
|
|
363
|
+
<input type="password" id="{{defaults.webhookAuth_basic_password}}" placeholder="password" />
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
<div class="webhookauth webhookauth-apikey">
|
|
368
|
+
<div class="form-row">
|
|
369
|
+
<label for="{{defaults.webhookAuth_apikey_mechanism}}">APIKey Mechanism:</label>
|
|
370
|
+
<input type="text" id="{{defaults.webhookAuth_apikey_mechanism}}"/>
|
|
371
|
+
</div>
|
|
372
|
+
|
|
373
|
+
<div class="form-row">
|
|
374
|
+
<label for="{{defaults.webhookAuth_apikey_key}}">APIKey Key:</label>
|
|
375
|
+
<input type="text" id="{{defaults.webhookAuth_apikey_key}}" placeholder="x-api-key" />
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<div class="form-row">
|
|
379
|
+
<label for="{{defaults.webhookAuth_apikey_value}}">APIKey Value</label>
|
|
380
|
+
<input type="text" id="{{defaults.webhookAuth_apikey_value}}" placeholder="testvalue" />
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
<div class="form-row">
|
|
385
|
+
<label>Reverse Proxy</label>
|
|
386
|
+
<input type="checkbox" id="{{defaults.reverseProxies_enabled}}" style="width:20px; margin-right:5px;" />
|
|
387
|
+
<label style="width:auto" for="{{defaults.reverseProxies_enabled}}"><span>Enable Reverse Proxy</span></label>
|
|
388
|
+
</div>
|
|
389
|
+
<div id="section_webhookconfig_reverseproxy" style="display:none">
|
|
390
|
+
<div class="form-row">
|
|
391
|
+
<label></label>
|
|
392
|
+
<ol id="reverseproxylist_table" class="theotherwillembotha-compact-table"></ol>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
</div>
|
|
398
|
+
</div>
|
|
399
|
+
</script>
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
<script type="text/markdown" template-section="onIncludeDocumentation">
|
|
403
|
+
### Webhook
|
|
404
|
+
: *server* (webhookserverconfig) : the web server that this webhook will be bound to.
|
|
405
|
+
: *path* (string) : the url path eg '/service' that should be regeistered on the webserver for this webhook callback
|
|
406
|
+
: *authentication* (auth) : the authentication mechanism that should be used on this endpoint
|
|
407
|
+
: *enable reverse proxy* (boolean) : whether this webhook will be exposed using a reverse proxy or not.
|
|
408
|
+
: *reverse proxies* (reverse proxies) : the list of reverse proxies thie endpoint will be exposed on.
|
|
409
|
+
|
|
410
|
+
### Webhook Authentication
|
|
411
|
+
Three strategies are available for securing the webhook endpoint.
|
|
412
|
+
|
|
413
|
+
- None:
|
|
414
|
+
The endpoint accepts all incoming requests without any credential check.
|
|
415
|
+
|
|
416
|
+
- Basic Auth:
|
|
417
|
+
Validates the `Authorization` header on each incoming request against a username and password pair using HTTP Basic Authentication (RFC 7617).
|
|
418
|
+
: *username* (string) : the username expected in the `Authorization` header
|
|
419
|
+
: *password* (string) : the password expected in the `Authorization` header
|
|
420
|
+
|
|
421
|
+
- API Key:
|
|
422
|
+
Validates a key/value pair carried in the request. Only the `Header` mechanism is currently supported — the key is read from a named request header and compared against the configured value. Requests that do not supply the correct key receive a `401` response.
|
|
423
|
+
: *mechanism* (mechanism) : the transport mechanism for the key. Currently supported: `Header`
|
|
424
|
+
: *key name* (string) : the name of the request header carrying the key (e.g. `x-api-key`)
|
|
425
|
+
: *key value* (string) : the expected value — requests not matching this value are rejected
|
|
426
|
+
|
|
427
|
+
### Reverse Proxy
|
|
428
|
+
When *enable reverse proxy* is checked, the webhook endpoint is registered with one or more reverse proxy services installed in Node-RED. Reverse proxy types are discovered automatically from any plugin that registers a service tagged `ReverseProxyType` (e.g. an Nginx Proxy Manager integration). Each row in the list maps the internal webhook server to a public-facing domain.
|
|
429
|
+
|
|
430
|
+
: *proxy* (ReverseProxyType) : the reverse proxy service to register the endpoint with
|
|
431
|
+
: *domain name* (string) : the public domain name to expose the endpoint on
|
|
432
|
+
|
|
433
|
+
The *external host* and *external port* fields on the linked **Webhook Server** config node must be set correctly for the proxy registration to resolve to the right internal address.
|
|
434
|
+
</script>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebhookTemplate = void 0;
|
|
4
|
+
const NodeConstructor_1 = require("../../NodeConstructor");
|
|
5
|
+
const WebhookServerConfigNode_1 = require("../node/WebhookServerConfigNode");
|
|
6
|
+
const NodeGenerator_1 = require("../../NodeGenerator");
|
|
7
|
+
class WebhookTemplate extends NodeConstructor_1.Template {
|
|
8
|
+
static getTemplateDescriptor() {
|
|
9
|
+
return new NodeConstructor_1.TemplateDescriptor("webhook", WebhookTemplate, NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "WebhookTemplate.html", [WebhookServerConfigNode_1.WebhookServerConfigNode]);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.WebhookTemplate = WebhookTemplate;
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export * from "./core/Utils";
|
|
2
|
+
export * from "./core/NodeGenerator";
|
|
3
|
+
export * from "./core/NodeConstructor";
|
|
4
|
+
export * from "./core/logger/service/LoggerService";
|
|
5
|
+
export * from "./core/logger/node/LoggerConfigNode";
|
|
6
|
+
export * from "./core/logger/template/LoggerTemplate";
|
|
7
|
+
export * from "./core/logger/node/ConsoleLoggerConfigNode";
|
|
8
|
+
export * from "./core/logger/node/RestLoggerConfigNode";
|
|
9
|
+
export * from "./core/logger/node/LokiLoggerConfigNode";
|
|
10
|
+
export * from "./core/metrics/service/MetricsService";
|
|
11
|
+
export * from "./core/metrics/template/MetricsTemplate";
|
|
12
|
+
export * from "./core/metrics/template/CounterMetricTemplate";
|
|
13
|
+
export * from "./core/metrics/template/GaugeMetricTemplate";
|
|
14
|
+
export * from "./core/metrics/node/MetricsConfigNode";
|
|
15
|
+
export * from "./core/metrics/node/CounterMetricConfigNode";
|
|
16
|
+
export * from "./core/metrics/node/GaugeMetricConfigNode";
|
|
17
|
+
export * from "./core/metrics/node/TimerMetricConfigNode";
|
|
18
|
+
export * from "./core/metrics/template/TimerMetricTemplate";
|
|
19
|
+
export * from "./core/tagging/service/NodeTypeService";
|
|
20
|
+
export * from "./core/tagging/NodeDescriptionDecorator";
|
|
21
|
+
export * from "./core/other/service/InputService";
|
|
22
|
+
export * from "./core/other/service/SettingsService";
|
|
23
|
+
export * from "./core/other/template/BasicTemplate";
|
|
24
|
+
export * from "./core/other/template/SettingsTemplate";
|
|
25
|
+
export * from "./core/webhook/template/WebhookTemplate";
|
|
26
|
+
export * from "./core/webhook/node/WebhookServerConfigNode";
|
|
27
|
+
export * from "./core/webhook/service/WebhookServerService";
|
|
28
|
+
export * from "./core/webhook/service/ReverseProxyTypeService";
|
|
29
|
+
export * from "./core/logger/LoggerDecorator";
|
|
30
|
+
export * from "./core/metrics/MetricsDecorator";
|
|
31
|
+
export * from "./core/webhook/WebhookDecorator";
|
|
32
|
+
export * from "./core/other/InputDecorator";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,6CAA6C,CAAC;AAG5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AAIxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,6CAA6C,CAAC;AAG5D,cAAc,gDAAgD,CAAC;AAG/D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./core/Utils"), exports);
|
|
18
|
+
__exportStar(require("./core/NodeGenerator"), exports);
|
|
19
|
+
__exportStar(require("./core/NodeConstructor"), exports);
|
|
20
|
+
// LOGGER
|
|
21
|
+
__exportStar(require("./core/logger/service/LoggerService"), exports);
|
|
22
|
+
__exportStar(require("./core/logger/node/LoggerConfigNode"), exports);
|
|
23
|
+
__exportStar(require("./core/logger/template/LoggerTemplate"), exports);
|
|
24
|
+
__exportStar(require("./core/logger/node/ConsoleLoggerConfigNode"), exports);
|
|
25
|
+
__exportStar(require("./core/logger/node/RestLoggerConfigNode"), exports);
|
|
26
|
+
__exportStar(require("./core/logger/node/LokiLoggerConfigNode"), exports);
|
|
27
|
+
// METRICS
|
|
28
|
+
__exportStar(require("./core/metrics/service/MetricsService"), exports);
|
|
29
|
+
__exportStar(require("./core/metrics/template/MetricsTemplate"), exports);
|
|
30
|
+
__exportStar(require("./core/metrics/template/CounterMetricTemplate"), exports);
|
|
31
|
+
__exportStar(require("./core/metrics/template/GaugeMetricTemplate"), exports);
|
|
32
|
+
__exportStar(require("./core/metrics/node/MetricsConfigNode"), exports);
|
|
33
|
+
__exportStar(require("./core/metrics/node/CounterMetricConfigNode"), exports);
|
|
34
|
+
__exportStar(require("./core/metrics/node/GaugeMetricConfigNode"), exports);
|
|
35
|
+
__exportStar(require("./core/metrics/node/TimerMetricConfigNode"), exports);
|
|
36
|
+
__exportStar(require("./core/metrics/template/TimerMetricTemplate"), exports);
|
|
37
|
+
// TAGGING
|
|
38
|
+
__exportStar(require("./core/tagging/service/NodeTypeService"), exports);
|
|
39
|
+
__exportStar(require("./core/tagging/NodeDescriptionDecorator"), exports);
|
|
40
|
+
// OTHER
|
|
41
|
+
__exportStar(require("./core/other/service/InputService"), exports);
|
|
42
|
+
__exportStar(require("./core/other/service/SettingsService"), exports);
|
|
43
|
+
__exportStar(require("./core/other/template/BasicTemplate"), exports);
|
|
44
|
+
__exportStar(require("./core/other/template/SettingsTemplate"), exports);
|
|
45
|
+
// WEBHOOK
|
|
46
|
+
__exportStar(require("./core/webhook/template/WebhookTemplate"), exports);
|
|
47
|
+
__exportStar(require("./core/webhook/node/WebhookServerConfigNode"), exports);
|
|
48
|
+
__exportStar(require("./core/webhook/service/WebhookServerService"), exports);
|
|
49
|
+
// REVERSE PROXY
|
|
50
|
+
__exportStar(require("./core/webhook/service/ReverseProxyTypeService"), exports);
|
|
51
|
+
// DECORATORS
|
|
52
|
+
__exportStar(require("./core/logger/LoggerDecorator"), exports);
|
|
53
|
+
__exportStar(require("./core/metrics/MetricsDecorator"), exports);
|
|
54
|
+
__exportStar(require("./core/webhook/WebhookDecorator"), exports);
|
|
55
|
+
__exportStar(require("./core/other/InputDecorator"), exports);
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@theotherwillembotha/node-red-plugincore",
|
|
3
|
+
"version": "0.0.50",
|
|
4
|
+
"description": "A TypeScript framework for building production-grade Node-RED plugins, with built-in logging, Prometheus metrics, and webhook support.",
|
|
5
|
+
"author": "Willem Botha (@theotherwillembotha)",
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"node-red", "logging", "metrics", "webhook", "reverseproxy"
|
|
9
|
+
],
|
|
10
|
+
"main": "./build/index.js",
|
|
11
|
+
"exports": "./build/index.js",
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
14
|
+
"prepare": "npm run build",
|
|
15
|
+
"clean": "rm -rf ./build",
|
|
16
|
+
"build": "npm run clean && tsc && npm run copy-html && npm run generate-nodes && npm run copy-files",
|
|
17
|
+
"generate-nodes": "node build/GenerateNodes.js",
|
|
18
|
+
"copy-html": "cd src && find -type f -name '*Template.html' -exec cp --parents '{}' ../build/ ';' && find -type f -name '*Node.html' -exec cp --parents '{}' ../build/ ';' && cd ..",
|
|
19
|
+
"copy-files": "cp -r ./icons ./build"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/theotherwillembotha/nodered_plugincore.git"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/theotherwillembotha/nodered_plugincore/issues"
|
|
27
|
+
},
|
|
28
|
+
"types": "./build/index.d.ts",
|
|
29
|
+
"files": ["build/", "src/", "icons/", "LICENSE", "README.md"],
|
|
30
|
+
"homepage": "https://github.com/theotherwillembotha/nodered_plugincore#readme",
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18",
|
|
33
|
+
"nodered": ">=4.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/deep-equal": "^1.0.4",
|
|
37
|
+
"@types/js-beautify": "^1.14.3",
|
|
38
|
+
"@types/jsdom": "^21.1.7",
|
|
39
|
+
"@types/markdown-it": "^14.1.2",
|
|
40
|
+
"@types/node": "^22.15.29",
|
|
41
|
+
"@types/node-red": "~1.3.5",
|
|
42
|
+
"@types/whatwg-url": "^13.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"body-parser": "^2.2.0",
|
|
46
|
+
"deep-equal": "^2.2.3",
|
|
47
|
+
"express": "^5.1.0",
|
|
48
|
+
"handlebars": "^4.7.8",
|
|
49
|
+
"js-beautify": "^1.15.4",
|
|
50
|
+
"jsdom": "^26.1.0",
|
|
51
|
+
"markdown-it": "^14.1.0",
|
|
52
|
+
"network": "^0.7.0",
|
|
53
|
+
"prom-client": "^15.1.3",
|
|
54
|
+
"reflect-metadata": "^0.2.2",
|
|
55
|
+
"whatwg-url": "^14.2.0",
|
|
56
|
+
"winston": "^3.17.0",
|
|
57
|
+
"winston-loki": "^6.1.3"
|
|
58
|
+
},
|
|
59
|
+
"node-red": {
|
|
60
|
+
"nodes": {
|
|
61
|
+
"core": "./build/Nodes.js"
|
|
62
|
+
},
|
|
63
|
+
"plugins": {
|
|
64
|
+
"core": "./build/Plugins.js"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
|
|
2
|
+
import { NodeTypeService } from "./core/tagging/service/NodeTypeService.js";
|
|
3
|
+
import { NodeGenerator, SettingsService, BasicTemplate, SettingsTemplate, TimerMetricTemplate, ConsoleLoggerConfigNode, RestLoggerConfigNode, LokiLoggerConfigNode } from "./index.js"
|
|
4
|
+
import { WebhookServerConfigNode, WebhookServerService, WebhookTemplate, } from "./index.js"
|
|
5
|
+
|
|
6
|
+
import {LoggerService, LoggerTemplate, LoggerConfigNode } from "./index.js";
|
|
7
|
+
|
|
8
|
+
import { MetricsService, MetricsTemplate, CounterMetricTemplate, GaugeMetricTemplate} from "./index.js";
|
|
9
|
+
import { MetricsConfigNode, GaugeMetricConfigNode, TimerMetricConfigNode, CounterMetricConfigNode } from "./index.js";
|
|
10
|
+
|
|
11
|
+
new NodeGenerator("./src/core/")
|
|
12
|
+
// services.
|
|
13
|
+
.registerService(LoggerService)
|
|
14
|
+
.registerService(MetricsService)
|
|
15
|
+
.registerService(SettingsService)
|
|
16
|
+
.registerService(WebhookServerService)
|
|
17
|
+
.registerService(NodeTypeService)
|
|
18
|
+
|
|
19
|
+
// templates.
|
|
20
|
+
.registerTemplate(BasicTemplate)
|
|
21
|
+
.registerTemplate(LoggerTemplate)
|
|
22
|
+
.registerTemplate(SettingsTemplate)
|
|
23
|
+
.registerTemplate(MetricsTemplate)
|
|
24
|
+
.registerTemplate(CounterMetricTemplate)
|
|
25
|
+
.registerTemplate(GaugeMetricTemplate)
|
|
26
|
+
.registerTemplate(TimerMetricTemplate)
|
|
27
|
+
.registerTemplate(WebhookTemplate)
|
|
28
|
+
|
|
29
|
+
// nodes
|
|
30
|
+
.registerNode(ConsoleLoggerConfigNode)
|
|
31
|
+
.registerNode(RestLoggerConfigNode)
|
|
32
|
+
.registerNode(LokiLoggerConfigNode)
|
|
33
|
+
.registerNode(MetricsConfigNode)
|
|
34
|
+
.registerNode(CounterMetricConfigNode)
|
|
35
|
+
.registerNode(GaugeMetricConfigNode)
|
|
36
|
+
.registerNode(TimerMetricConfigNode)
|
|
37
|
+
.registerNode(WebhookServerConfigNode)
|
|
38
|
+
|
|
39
|
+
// done.
|
|
40
|
+
.generate("./build/Nodes", "./build/Plugins");
|
|
41
|
+
|
|
42
|
+
process.exit(0);
|