@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.
Files changed (134) hide show
  1. package/README.md +616 -220
  2. package/build/GenerateNodes.js +3 -6
  3. package/build/Nodes.html +3 -1504
  4. package/build/Nodes.js +5 -15
  5. package/build/Plugins.html +227 -0
  6. package/build/Plugins.js +18 -8
  7. package/build/core/NodeConstructor.d.ts +9 -16
  8. package/build/core/NodeConstructor.d.ts.map +1 -1
  9. package/build/core/NodeConstructor.js +109 -146
  10. package/build/core/NodeGenerator.d.ts.map +1 -1
  11. package/build/core/NodeGenerator.js +79 -28
  12. package/build/core/NodeManagerRuntime.d.ts +44 -0
  13. package/build/core/NodeManagerRuntime.d.ts.map +1 -0
  14. package/build/core/NodeManagerRuntime.js +140 -0
  15. package/build/core/Utils.d.ts.map +1 -1
  16. package/build/core/logger/service/LoggerService.d.ts +6 -5
  17. package/build/core/logger/service/LoggerService.d.ts.map +1 -1
  18. package/build/core/logger/service/LoggerService.js +51 -20
  19. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
  20. package/build/core/metrics/MetricsDecorator.d.ts +1 -2
  21. package/build/core/metrics/MetricsDecorator.d.ts.map +1 -1
  22. package/build/core/metrics/MetricsDecorator.js +89 -116
  23. package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -1
  24. package/build/core/metrics/node/CounterMetricConfigNode.js +4 -5
  25. package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -1
  26. package/build/core/metrics/node/GaugeMetricConfigNode.js +5 -6
  27. package/build/core/metrics/node/MetricsConfigNode.d.ts +19 -9
  28. package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -1
  29. package/build/core/metrics/node/MetricsConfigNode.js +14 -45
  30. package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -1
  31. package/build/core/metrics/node/TimerMetricConfigNode.js +11 -17
  32. package/build/core/metrics/service/MetricsService.d.ts +110 -114
  33. package/build/core/metrics/service/MetricsService.d.ts.map +1 -1
  34. package/build/core/metrics/service/MetricsService.js +122 -339
  35. package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -1
  36. package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -1
  37. package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -1
  38. package/build/core/metrics/template/MetricsTemplate.js +1 -2
  39. package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -1
  40. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts +1 -1
  41. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts.map +1 -1
  42. package/build/core/other/node/DelegatedConfigReferenceNode.js +1 -1
  43. package/build/core/other/service/InputService.d.ts.map +1 -1
  44. package/build/core/other/service/SettingsService.d.ts +1 -2
  45. package/build/core/other/service/SettingsService.d.ts.map +1 -1
  46. package/build/core/other/service/SettingsService.js +19 -5
  47. package/build/core/other/template/BasicTemplate.d.ts.map +1 -1
  48. package/build/core/other/template/SettingsTemplate.d.ts.map +1 -1
  49. package/build/core/state/node/InternalStateConfigNode.d.ts +16 -0
  50. package/build/core/state/node/InternalStateConfigNode.d.ts.map +1 -0
  51. package/build/core/state/node/InternalStateConfigNode.js +89 -0
  52. package/build/core/state/node/StateConfigNode.d.ts +24 -0
  53. package/build/core/state/node/StateConfigNode.d.ts.map +1 -0
  54. package/build/core/state/node/StateConfigNode.js +22 -0
  55. package/build/core/state/service/StateService.d.ts +34 -0
  56. package/build/core/state/service/StateService.d.ts.map +1 -0
  57. package/build/core/state/service/StateService.js +201 -0
  58. package/build/core/state/template/StateTemplate.d.ts +8 -0
  59. package/build/core/state/template/StateTemplate.d.ts.map +1 -0
  60. package/build/core/state/template/StateTemplate.js +11 -0
  61. package/build/core/tagging/ServiceDescriptionDecorator.d.ts +10 -0
  62. package/build/core/tagging/ServiceDescriptionDecorator.d.ts.map +1 -0
  63. package/build/core/tagging/ServiceDescriptionDecorator.js +10 -0
  64. package/build/core/tagging/service/NodeTypeService.d.ts +1 -2
  65. package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -1
  66. package/build/core/tagging/service/NodeTypeService.js +19 -5
  67. package/build/core/ui/template/ScriptEditorTemplate.d.ts.map +1 -1
  68. package/build/core/ui/template/UIHelperTemplate.d.ts.map +1 -1
  69. package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -1
  70. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
  71. package/build/core/webhook/service/WebhookServerService.d.ts +3 -4
  72. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
  73. package/build/core/webhook/service/WebhookServerService.js +48 -18
  74. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
  75. package/build/index.d.ts +5 -2
  76. package/build/index.d.ts.map +1 -1
  77. package/build/index.js +6 -2
  78. package/build/runtime/NodeManagerRuntime.js +140 -0
  79. package/documentation/CounterMetricConfigNode.png +0 -0
  80. package/documentation/GaugeMetricConfigNode.png +0 -0
  81. package/documentation/LoggerTemplate.png +0 -0
  82. package/documentation/MetricsTemplate.png +0 -0
  83. package/documentation/StateTemplate.png +0 -0
  84. package/documentation/TimerMetricConfigNode_histogram.png +0 -0
  85. package/documentation/TimerMetricConfigNode_summary.png +0 -0
  86. package/documentation/WebhookServerConfigNode.png +0 -0
  87. package/documentation/WebhookTemplate.png +0 -0
  88. package/package.json +4 -10
  89. package/src/GenerateNodes.ts +7 -11
  90. package/src/core/NodeConstructor.ts +130 -186
  91. package/src/core/NodeGenerator.ts +88 -33
  92. package/src/core/NodeManagerRuntime.ts +179 -0
  93. package/src/core/logger/service/LoggerService.ts +39 -26
  94. package/src/core/logger/template/LoggerTemplate.html +11 -6
  95. package/src/core/metrics/MetricsDecorator.ts +140 -168
  96. package/src/core/metrics/node/CounterMetricConfigNode.ts +20 -20
  97. package/src/core/metrics/node/GaugeMetricConfigNode.ts +24 -25
  98. package/src/core/metrics/node/MetricsConfigNode.ts +29 -48
  99. package/src/core/metrics/node/TimerMetricConfigNode.ts +50 -59
  100. package/src/core/metrics/service/MetricsService.ts +214 -489
  101. package/src/core/metrics/template/CounterMetricTemplate.html +0 -1
  102. package/src/core/metrics/template/GaugeMetricTemplate.html +1 -1
  103. package/src/core/metrics/template/MetricsTemplate.html +132 -13
  104. package/src/core/metrics/template/MetricsTemplate.ts +3 -4
  105. package/src/core/other/node/DelegatedConfigReferenceNode.ts +1 -1
  106. package/src/core/other/service/SettingsService.ts +6 -10
  107. package/src/core/other/template/BasicTemplate.html +1 -1
  108. package/src/core/state/node/InternalStateConfigNode.html +77 -0
  109. package/src/core/state/node/InternalStateConfigNode.ts +102 -0
  110. package/src/core/state/node/StateConfigNode.ts +29 -0
  111. package/src/core/state/service/StateService.ts +180 -0
  112. package/src/core/state/template/StateTemplate.html +244 -0
  113. package/src/core/state/template/StateTemplate.ts +17 -0
  114. package/src/core/tagging/ServiceDescriptionDecorator.ts +23 -0
  115. package/src/core/tagging/service/NodeTypeService.ts +6 -11
  116. package/src/core/ui/template/UIHelperTemplate.html +41 -26
  117. package/src/core/webhook/service/WebhookServerService.ts +39 -23
  118. package/src/core/webhook/template/WebhookTemplate.html +28 -35
  119. package/src/index.ts +7 -2
  120. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +0 -20
  121. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +0 -1
  122. package/build/core/logger/node/ConsoleLoggerConfigNode.js +0 -62
  123. package/build/core/logger/node/RestLoggerConfigNode.d.ts +0 -40
  124. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +0 -1
  125. package/build/core/logger/node/RestLoggerConfigNode.js +0 -128
  126. package/documentation/ConsoleLoggerConfigNode.png +0 -0
  127. package/documentation/MetricsConfigNode.png +0 -0
  128. package/documentation/RestLoggerConfigNode.png +0 -0
  129. package/documentation/TimerMetricConfigNode.png +0 -0
  130. package/documentation/WebhookNode.png +0 -0
  131. package/src/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
  132. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +0 -71
  133. package/src/core/logger/node/RestLoggerConfigNode.html +0 -183
  134. package/src/core/logger/node/RestLoggerConfigNode.ts +0 -170
@@ -45,8 +45,6 @@ node
45
45
  </div>
46
46
 
47
47
  <script type="text/javascript" template-section="onIncludeEditPrepare">
48
- {
49
- let node = this;
50
48
 
51
49
  let showSelectedAutnetication = function(value){
52
50
  let webhookConfig = $("#section_webhookconfig");
@@ -133,12 +131,6 @@ node
133
131
  return types;
134
132
  }
135
133
 
136
- getProxyTypes().then(types => {
137
- if(types.length === 0){
138
- $("#section_reverseproxy_feature").hide();
139
- }
140
- });
141
-
142
134
  let getProxies = async () => {
143
135
  let proxies = [];
144
136
 
@@ -163,8 +155,8 @@ node
163
155
  scrollOnAdd: true,
164
156
  addButton: 'Add ProxyHost',
165
157
  header: $('<div>').append($.parseHTML(`
166
- <div style='width:30%; margin-left:5%; display:inline-grid;'>Proxy</div>
167
- <div style='width:auto; margin-right:5%; display:inline-grid;'>Domain Name</div>
158
+ <div style='width:30%; margin-left:5%; display:inline-block;'>Proxy</div>
159
+ <div style='width:auto; margin-right:5%; display:inline-block;'>Domain Name</div>
168
160
  `)
169
161
  ),
170
162
  buttons: [
@@ -265,15 +257,14 @@ node
265
257
 
266
258
  addItem: async function(container, i, proxy){
267
259
  let row = $('<div/>', {
268
- class: 'form-row',
269
- style: 'display: flex; margin-bottom: 0;'
260
+ style: 'display: flex; align-items: center; width: 100%; margin-bottom: 2px; box-sizing: border-box;'
270
261
  }).appendTo(container);
271
262
 
272
263
  let proxyColumn = $('<select/>', {
273
264
  type: 'text',
274
265
  name: i,
275
266
  required: true,
276
- style: 'margin-left: 5px; margin-bottom: 0;',
267
+ style: 'flex: 1; min-width: 0; margin-left: 5px; margin-bottom: 0;',
277
268
  class: 'proxy-proxy'
278
269
  }).appendTo(row);
279
270
 
@@ -295,7 +286,7 @@ node
295
286
  type: 'text',
296
287
  name: i,
297
288
  required: true,
298
- style: 'margin-left: 5px; margin-bottom: 0;',
289
+ style: 'flex: 1; min-width: 0; margin-left: 5px; margin-bottom: 0;',
299
290
  class: 'proxy-domainname'
300
291
  }).appendTo(row)
301
292
  domainnameColumn.val(proxy.domainname);
@@ -310,15 +301,19 @@ node
310
301
  $('.proxy-dropdown').remove();
311
302
  });
312
303
 
313
- this.reverseProxies_connections = (this.reverseProxies_connections) ? this.reverseProxies_connections : [];
314
- reverseProxyList.editableList('addItems', this.reverseProxies_connections);
315
- }
304
+ // Show the reverse proxy section only if at least one provider type is registered.
305
+ // The editableList is initialised above (while the section is still hidden) so that
306
+ // its wide toolbar buttons never participate in the tray's initial layout calculation.
307
+ getProxyTypes().then(types => {
308
+ if(types.length === 0) return;
309
+ $("#section_reverseproxy_feature").show();
310
+ let savedConnections = this.reverseProxies_connections || [];
311
+ reverseProxyList.editableList('addItems', savedConnections);
312
+ });
313
+
316
314
  </script>
317
315
 
318
316
  <script type="text/javascript" template-section="onIncludeEditSave">
319
- {
320
- let node = this;
321
-
322
317
  // pulling the values from the reverseproxy table.
323
318
  let connectionList = $("#reverseproxylist_table").editableList('items');
324
319
  node.reverseProxies_connections = [];
@@ -330,7 +325,6 @@ node
330
325
  });
331
326
 
332
327
  console.log(node.reverseProxies_connections);
333
- }
334
328
  </script>
335
329
 
336
330
  <script type="text/html" template-section="onIncludeEditForm">
@@ -340,7 +334,7 @@ node
340
334
  </div>
341
335
 
342
336
  <div class="editorgroupborder">
343
- <div class="form-row nomargin">
337
+ <div class="form-row">
344
338
  <label class="towb_editorlabel" for="{{defaults.webhook}}"><i class="fa fa-server"></i> Server</label>
345
339
  <input id="{{defaults.webhook}}" placeholder="webhook" />
346
340
  </div>
@@ -387,20 +381,19 @@ node
387
381
  </div>
388
382
  </div>
389
383
 
390
- <div id="section_reverseproxy_feature">
391
- <div class="form-row">
392
- <label>Reverse Proxy</label>
393
- <input type="checkbox" id="{{defaults.reverseProxies_enabled}}" style="width:20px; margin-right:5px;" />
394
- <label style="width:auto" for="{{defaults.reverseProxies_enabled}}"><span>Enable Reverse Proxy</span></label>
395
- </div>
396
- <div id="section_webhookconfig_reverseproxy" style="display:none">
384
+ <div id="section_reverseproxy_feature" style="display:none">
397
385
  <div class="form-row">
398
- <label></label>
399
- <ol id="reverseproxylist_table" class="theotherwillembotha-compact-table"></ol>
386
+ <label>Reverse Proxy</label>
387
+ <input type="checkbox" id="{{defaults.reverseProxies_enabled}}" style="width:20px; margin-right:5px;" />
388
+ <label style="width:auto" for="{{defaults.reverseProxies_enabled}}"><span>Enable Reverse Proxy</span></label>
389
+ </div>
390
+ <div id="section_webhookconfig_reverseproxy" style="display:none">
391
+ <div class="form-row">
392
+ <label></label>
393
+ <ol id="reverseproxylist_table" class="theotherwillembotha-compact-table"></ol>
394
+ </div>
400
395
  </div>
401
396
  </div>
402
- </div>
403
-
404
397
 
405
398
  </div>
406
399
  </div>
@@ -427,10 +420,10 @@ Validates the `Authorization` header on each incoming request against a username
427
420
  : *password* (string) : the password expected in the `Authorization` header
428
421
 
429
422
  - API Key:
430
- 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
+ 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.
431
424
  : *mechanism* (mechanism) : the transport mechanism for the key. Currently supported: `Header`
432
425
  : *key name* (string) : the name of the request header carrying the key (e.g. `x-api-key`)
433
- : *key value* (string) : the expected value requests not matching this value are rejected
426
+ : *key value* (string) : the expected value - requests not matching this value are rejected
434
427
 
435
428
  ### Reverse Proxy
436
429
  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.
package/src/index.ts CHANGED
@@ -4,8 +4,6 @@ export * from "./core/NodeConstructor";
4
4
 
5
5
  // LOGGER
6
6
  export * from "./core/logger/service/LoggerService";
7
- export * from "./core/logger/node/ConsoleLoggerConfigNode";
8
- export * from "./core/logger/node/RestLoggerConfigNode";
9
7
  export * from "./core/logger/template/LoggerTemplate";
10
8
 
11
9
 
@@ -20,9 +18,16 @@ export * from "./core/metrics/node/GaugeMetricConfigNode";
20
18
  export * from "./core/metrics/node/TimerMetricConfigNode";
21
19
  export * from "./core/metrics/template/TimerMetricTemplate";
22
20
 
21
+ // STATE
22
+ export * from "./core/state/service/StateService";
23
+ export * from "./core/state/node/StateConfigNode";
24
+ export * from "./core/state/node/InternalStateConfigNode";
25
+ export * from "./core/state/template/StateTemplate";
26
+
23
27
  // TAGGING
24
28
  export * from "./core/tagging/service/NodeTypeService";
25
29
  export * from "./core/tagging/NodeDescriptionDecorator";
30
+ export * from "./core/tagging/ServiceDescriptionDecorator";
26
31
 
27
32
  // UI
28
33
  export * from "./core/ui/template/UIHelperTemplate";
@@ -1,20 +0,0 @@
1
- import { Node } from "node-red";
2
- import { LoggerConfigNodeConfig, BaseLoggerConfig, AbstractLogger, LoggerConfigNode, Log, Level } from "../service/LoggerService";
3
- import { LoggerTemplateConfig } from "../template/LoggerTemplate";
4
- interface ConsoleLoggerConfigNodeConfig extends LoggerConfigNodeConfig {
5
- level: Level;
6
- template: string;
7
- }
8
- export declare class ConsoleLoggerConfigNode extends LoggerConfigNode<ConsoleLoggerConfigNodeConfig, ConsoleLogger> {
9
- private _logger;
10
- constructor(node: Node, config: ConsoleLoggerConfigNodeConfig);
11
- protected logger(): ConsoleLogger;
12
- }
13
- export interface ConsoleLoggerConfig extends BaseLoggerConfig {
14
- }
15
- declare class ConsoleLogger extends AbstractLogger<ConsoleLoggerConfig> {
16
- constructor(config: ConsoleLoggerConfig);
17
- protected createLogger(config: LoggerTemplateConfig): Log;
18
- }
19
- export {};
20
- //# sourceMappingURL=ConsoleLoggerConfigNode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConsoleLoggerConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/node/ConsoleLoggerConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAiB,sBAAsB,EAAE,gBAAgB,EAAE,cAAc,EAAU,gBAAgB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAGxJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,UAAU,6BAA8B,SAAQ,sBAAsB;IAClE,KAAK,EAAC,KAAK,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;CACnB;AAED,qBASa,uBAAwB,SAAQ,gBAAgB,CAAC,6BAA6B,EAAE,aAAa,CAAC;IAEvG,OAAO,CAAC,OAAO,CAAiB;gBAEpB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,6BAA6B;IAgB7D,SAAS,CAAC,MAAM,IAAG,aAAa;CAGnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;CAE5D;AAED,cAAM,aAAc,SAAQ,cAAc,CAAC,mBAAmB,CAAC;gBAE/C,MAAM,EAAC,mBAAmB;IAItC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,GAAG;CAG5D"}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ConsoleLoggerConfigNode = void 0;
13
- const LoggerService_1 = require("../service/LoggerService");
14
- const NodeGenerator_1 = require("../../NodeGenerator");
15
- const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
16
- let ConsoleLoggerConfigNode = class ConsoleLoggerConfigNode extends LoggerService_1.LoggerConfigNode {
17
- constructor(node, config) {
18
- super(node, config);
19
- let _this = this;
20
- // create logger config
21
- let loggerConfig = {
22
- id: this.id(),
23
- type: "CONSOLE",
24
- level: config.level,
25
- template: config.template,
26
- };
27
- // create logger instance:
28
- this._logger = new ConsoleLogger(loggerConfig);
29
- }
30
- logger() {
31
- return this._logger;
32
- }
33
- };
34
- exports.ConsoleLoggerConfigNode = ConsoleLoggerConfigNode;
35
- exports.ConsoleLoggerConfigNode = ConsoleLoggerConfigNode = __decorate([
36
- (0, NodeDescriptionDecorator_1.NodeDescription)({
37
- id: "ConsoleLoggerConfigNode",
38
- name: "Console Logger",
39
- group: "config",
40
- sourceFile: NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "ConsoleLoggerConfigNode.html",
41
- package: "@theotherwillembotha/node-red-plugincore",
42
- dependencies: [LoggerService_1.LoggerService],
43
- tags: ["LoggerType"]
44
- }),
45
- __metadata("design:paramtypes", [Object, Object])
46
- ], ConsoleLoggerConfigNode);
47
- class ConsoleLogger extends LoggerService_1.AbstractLogger {
48
- constructor(config) {
49
- super(config);
50
- }
51
- createLogger(config) {
52
- return new ConsoleAppender(config);
53
- }
54
- }
55
- class ConsoleAppender extends LoggerService_1.Log {
56
- constructor(config) {
57
- super(config);
58
- }
59
- writeToLog(level, message, tags) {
60
- console.log(new Date().toISOString(), this.config().id, level, tags, message);
61
- }
62
- }
@@ -1,40 +0,0 @@
1
- import { Node } from "node-red";
2
- import { ConfigNodeConfig } from "../../NodeConstructor";
3
- import { LoggerConfigNode, AbstractLogger, BaseLoggerConfig, Log } from "../service/LoggerService";
4
- import { ApiKeyMechanismType, Level, RestAuthType } from "../service/LoggerService";
5
- import { LoggerTemplateConfig } from "../template/LoggerTemplate";
6
- interface RestLoggerConfigNodeConfig extends ConfigNodeConfig {
7
- id: string;
8
- level: Level;
9
- template: string;
10
- rest_url: string;
11
- rest_ignoresslerror: boolean;
12
- rest_auth_type: RestAuthType;
13
- rest_auth_basic_username: string;
14
- rest_auth_basic_password: string;
15
- rest_auth_apikey_mechanism: ApiKeyMechanismType;
16
- rest_auth_apikey_name: string;
17
- rest_auth_apikey_value: string;
18
- }
19
- export declare class RestLoggerConfigNode extends LoggerConfigNode<RestLoggerConfigNodeConfig, RestLogger> {
20
- private _logger;
21
- constructor(node: Node, config: RestLoggerConfigNodeConfig);
22
- protected logger(): RestLogger;
23
- }
24
- declare class RestLogger extends AbstractLogger<RestLoggerConfig> {
25
- private winston;
26
- constructor(config: RestLoggerConfig);
27
- protected createLogger(config: LoggerTemplateConfig): Log;
28
- }
29
- interface RestLoggerConfig extends BaseLoggerConfig {
30
- url: string;
31
- ignoresslerror: boolean;
32
- auth_type: RestAuthType;
33
- auth_basic_username: string;
34
- auth_basic_password: string;
35
- auth_apikey_mechanism: ApiKeyMechanismType;
36
- auth_apikey_name: string;
37
- auth_apikey_value: string;
38
- }
39
- export {};
40
- //# sourceMappingURL=RestLoggerConfigNode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RestLoggerConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/node/RestLoggerConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAiB,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAU,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAEzH,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAKlE,UAAU,0BAA2B,SAAQ,gBAAgB;IAEzD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAC,KAAK,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAC,OAAO,CAAC;IAC5B,cAAc,EAAE,YAAY,CAAC;IAC7B,wBAAwB,EAAC,MAAM,CAAC;IAChC,wBAAwB,EAAC,MAAM,CAAC;IAChC,0BAA0B,EAAC,mBAAmB,CAAC;IAC/C,qBAAqB,EAAC,MAAM,CAAC;IAC7B,sBAAsB,EAAC,MAAM,CAAC;CACjC;AAED,qBASa,oBAAqB,SAAQ,gBAAgB,CAAC,0BAA0B,EAAE,UAAU,CAAC;IAE9F,OAAO,CAAC,OAAO,CAAc;gBAEjB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,0BAA0B;IAyB1D,SAAS,CAAC,MAAM,IAAG,UAAU;CAGhC;AAED,cAAM,UAAW,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAErD,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAC,gBAAgB;IA8DnC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,GAAG;CAG5D;AAoBD,UAAU,gBAAiB,SAAQ,gBAAgB;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAC,OAAO,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,mBAAmB,EAAC,MAAM,CAAC;IAC3B,mBAAmB,EAAC,MAAM,CAAC;IAC3B,qBAAqB,EAAC,mBAAmB,CAAC;IAC1C,gBAAgB,EAAC,MAAM,CAAC;IACxB,iBAAiB,EAAC,MAAM,CAAC;CAC5B"}
@@ -1,128 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RestLoggerConfigNode = void 0;
13
- const LoggerService_1 = require("../service/LoggerService");
14
- const NodeGenerator_1 = require("../../NodeGenerator");
15
- const LoggerService_2 = require("../service/LoggerService");
16
- const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
17
- const whatwg_url_1 = require("whatwg-url");
18
- const winston_1 = require("winston");
19
- let RestLoggerConfigNode = class RestLoggerConfigNode extends LoggerService_1.LoggerConfigNode {
20
- constructor(node, config) {
21
- super(node, config);
22
- let _this = this;
23
- // instantiate the logger.
24
- let loggerConfig = {
25
- id: this.id(),
26
- type: "REST",
27
- level: config.level,
28
- template: config.template,
29
- // additional properties.
30
- url: config.rest_url,
31
- ignoresslerror: config.rest_ignoresslerror,
32
- auth_type: config.rest_auth_type,
33
- auth_basic_username: config.rest_auth_basic_username,
34
- auth_basic_password: config.rest_auth_basic_password,
35
- auth_apikey_mechanism: config.rest_auth_apikey_mechanism,
36
- auth_apikey_name: config.rest_auth_apikey_name,
37
- auth_apikey_value: config.rest_auth_apikey_value,
38
- };
39
- this._logger = new RestLogger(loggerConfig);
40
- }
41
- logger() {
42
- return this._logger;
43
- }
44
- };
45
- exports.RestLoggerConfigNode = RestLoggerConfigNode;
46
- exports.RestLoggerConfigNode = RestLoggerConfigNode = __decorate([
47
- (0, NodeDescriptionDecorator_1.NodeDescription)({
48
- id: "RestLoggerConfigNode",
49
- name: "Rest Endpoint Logger",
50
- group: "config",
51
- sourceFile: NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "RestLoggerConfigNode.html",
52
- package: "@theotherwillembotha/node-red-plugincore",
53
- dependencies: [LoggerService_1.LoggerService],
54
- tags: ["LoggerType"]
55
- }),
56
- __metadata("design:paramtypes", [Object, Object])
57
- ], RestLoggerConfigNode);
58
- class RestLogger extends LoggerService_1.AbstractLogger {
59
- constructor(config) {
60
- super(config);
61
- // get the url.
62
- let hosturl = (0, whatwg_url_1.parseURL)(config.url);
63
- if (!hosturl) {
64
- throw Error("could not parse url: " + config.url);
65
- }
66
- // get the options
67
- let httpOptions = {};
68
- // get the params.
69
- let httpParams = {
70
- host: hosturl.host?.toString(),
71
- path: "/" + (hosturl.path ? [...hosturl.path].join("/") : "") + (hosturl.query ? ("?" + hosturl.query) : ""),
72
- port: (hosturl.port) ? hosturl.port : undefined,
73
- ssl: hosturl.scheme.toLowerCase() === "https",
74
- headers: {},
75
- };
76
- httpParams.options = httpOptions;
77
- // add the ignore ssl error flag if need be.
78
- if (config.ignoresslerror) {
79
- httpOptions.rejectUnauthorized = false;
80
- }
81
- // configure "none" authentication.
82
- if (config.auth_type === LoggerService_2.RestAuthType.none) { }
83
- // configure "basic" authentication.
84
- if (config.auth_type === LoggerService_2.RestAuthType.basic) {
85
- httpParams.auth = {
86
- username: config.auth_basic_username,
87
- password: config.auth_basic_password
88
- };
89
- }
90
- // configure "apikey" authentication.
91
- if (config.auth_type === LoggerService_2.RestAuthType.apikey) {
92
- if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.header) {
93
- httpParams.headers[config.auth_apikey_name] = config.auth_apikey_value;
94
- }
95
- if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.matrixparam) {
96
- httpParams.path = httpParams.path?.replace(`:${config.auth_apikey_name}`, config.auth_apikey_value);
97
- }
98
- if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.queryparam) {
99
- httpParams.path = httpParams.path + (httpParams.path?.includes("?") ? "&" : "?") + config.auth_apikey_name + "=" + config.auth_apikey_value;
100
- }
101
- }
102
- ;
103
- this.winston = (0, winston_1.createLogger)({
104
- level: config.level.toString().toLowerCase(),
105
- format: winston_1.format.json(),
106
- defaultMeta: {},
107
- transports: [
108
- new winston_1.transports.Http(httpParams),
109
- ],
110
- });
111
- }
112
- createLogger(config) {
113
- return new RestAppender(config, this.winston);
114
- }
115
- }
116
- class RestAppender extends LoggerService_1.Log {
117
- constructor(config, winston) {
118
- super(config);
119
- this.winston = winston;
120
- }
121
- writeToLog(level, message, tags) {
122
- this.winston.log({
123
- level: level,
124
- message: message,
125
- labels: tags
126
- });
127
- }
128
- }
Binary file
Binary file
@@ -1,90 +0,0 @@
1
-
2
- <script type="text/javascript" template-section="onCompose">
3
- node
4
- .addDefault("name", {value:"Logger Example", required:true})
5
- .addDefault("platform", {value:"rest", required:true})
6
- .addDefault("template", {value:`message:{{msg}}`, required:true})
7
- .addDefault("level", {value:"info", required:true})
8
- .setPaletteLabel("Console Logger Config Node")
9
- .setLabel(function() {return this.name })
10
- </script>
11
-
12
- <script type="text/javascript" template-section="onIncludeEditPrepare">
13
- {
14
- let node = this;
15
-
16
- let levelSelection = $("#node-config-input-level");
17
- levelSelection.typedInput({type:"level", types:[{
18
- value: "level",
19
- options: [
20
- { value: "DEBUG", label: "debug"},
21
- { value: "INFO", label: "info"},
22
- { value: "WARNING", label: "warning"},
23
- { value: "ERROR", label: "error"},
24
- ]
25
- }]});
26
-
27
- this.editor = RED.editor.createEditor({
28
- id: 'node-config-input-templateEditor',
29
- mode: 'ace/mode/handlebars',
30
- value: this.template
31
- });
32
- }
33
- </script>
34
-
35
- <script type="text/javascript" template-section="onIncludeEditSave">
36
- {
37
- let node = this;
38
-
39
- this.template = this.editor.getValue();
40
- this.editor.destroy();
41
- delete this.editor;
42
- }
43
-
44
- </script>
45
-
46
- <script type="text/html" template-section="onIncludeEditForm">
47
- <div id="LoggerConfig">
48
- <div class="form-row">
49
- <label class="towb_editorlabel" for="node-config-input-name"><i class="fa fa-font"></i> Name</label>
50
- <input type="text" id="node-config-input-name" />
51
- </div>
52
-
53
- <div class="form-row">
54
- <label class="towb_editorlabel" for="node-config-input-level"><i class="fa fa-signal"></i> Level</label>
55
- <input type="text" id="node-config-input-level" />
56
- </div>
57
-
58
- <div class="form-row">
59
- <label class="towb_editorlabel" for="node-config-input-templateEditor"><i class="fa fa-code"></i> Template</label>
60
- <div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-config-input-templateEditor"></div>
61
- </div>
62
- </div>
63
- </script>
64
-
65
- <script type="text/markdown" template-section="onIncludeDocumentation">
66
- Writes log output to the Node-RED runtime console (stdout). Suitable for local development and containerised environments where stdout is captured.
67
-
68
- ### Properties
69
- : *name* (string) : A descriptive name for this logger configuration.
70
- : *level* (level) : The minimum log level. Messages below this threshold are suppressed. Options: DEBUG, INFO, WARNING, ERROR.
71
- : *template* (mustache) : A Mustache/Handlebars template that formats the log message body.
72
-
73
- ### Mustache Templating
74
- Mustache/Handlebars templates build the message string written to the console.
75
-
76
- #### Provided Properties
77
- : *msg* (object) : The Node-RED message object passed through the node.
78
- : *currentTime* (string) : The current time in ISO 8601 format.
79
-
80
- #### Helpers
81
- : *json* (helper) : Serialises an object to a JSON string using `JSON.stringify`.
82
-
83
- #### Examples
84
- - `{{{json msg}}}` — serialises the full message object as JSON.
85
-
86
- #### References
87
- - [Mustache — Wikipedia](https://en.wikipedia.org/wiki/Mustache_(template_system))
88
- - [Mustache — Playground](https://jgonggrijp.gitlab.io/wontache/playground.html)
89
- </script>
90
-
@@ -1,71 +0,0 @@
1
-
2
- import { Node } from "node-red";
3
- import { LoggerService, LoggerConfigNodeConfig, BaseLoggerConfig, AbstractLogger, TagMap, LoggerConfigNode, Log, Level } from "../service/LoggerService"
4
- import { SourceUtility } from "../../NodeGenerator";
5
- import { NodeDescription } from "../../tagging/NodeDescriptionDecorator";
6
- import { LoggerTemplateConfig } from "../template/LoggerTemplate";
7
-
8
- interface ConsoleLoggerConfigNodeConfig extends LoggerConfigNodeConfig {
9
- level:Level;
10
- template:string;
11
- }
12
-
13
- @NodeDescription({
14
- id:"ConsoleLoggerConfigNode",
15
- name:"Console Logger",
16
- group:"config",
17
- sourceFile:SourceUtility.getSourcePath("/build/", "/src/") + "ConsoleLoggerConfigNode.html",
18
- package: "@theotherwillembotha/node-red-plugincore",
19
- dependencies:[ LoggerService ],
20
- tags: [ "LoggerType" ]
21
- })
22
- export class ConsoleLoggerConfigNode extends LoggerConfigNode<ConsoleLoggerConfigNodeConfig, ConsoleLogger> {
23
-
24
- private _logger!: ConsoleLogger;
25
-
26
- constructor(node: Node, config: ConsoleLoggerConfigNodeConfig){
27
- super(node, config);
28
- let _this = this;
29
-
30
- // create logger config
31
- let loggerConfig:ConsoleLoggerConfig = {
32
- id:this.id(),
33
- type:"CONSOLE",
34
- level:config.level,
35
- template:config.template,
36
- }
37
-
38
- // create logger instance:
39
- this._logger = new ConsoleLogger(loggerConfig);
40
- }
41
-
42
- protected logger():ConsoleLogger{
43
- return this._logger;
44
- }
45
- }
46
-
47
- export interface ConsoleLoggerConfig extends BaseLoggerConfig {
48
- // no additional values.
49
- }
50
-
51
- class ConsoleLogger extends AbstractLogger<ConsoleLoggerConfig> {
52
-
53
- constructor(config:ConsoleLoggerConfig){
54
- super(config);
55
- }
56
-
57
- protected createLogger(config: LoggerTemplateConfig): Log {
58
- return new ConsoleAppender(config);
59
- }
60
- }
61
-
62
- class ConsoleAppender extends Log {
63
-
64
- constructor(config:LoggerTemplateConfig){
65
- super(config);
66
- }
67
-
68
- protected writeToLog(level:string, message: string, tags: { [key: string]: string | boolean | number; }): void {
69
- console.log(new Date().toISOString(), this.config().id, level, tags, message)
70
- }
71
- }