@theotherwillembotha/node-red-plugincore 0.0.54 → 0.1.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 (93) hide show
  1. package/README.md +9 -9
  2. package/build/GenerateNodes.js +0 -1
  3. package/build/Nodes.html +23 -162
  4. package/build/Nodes.js +0 -2
  5. package/build/Plugins.js +2 -3
  6. package/build/core/NodeConstructor.d.ts +1 -0
  7. package/build/core/NodeConstructor.d.ts.map +1 -1
  8. package/build/core/NodeConstructor.js +20 -62
  9. package/build/core/NodeGenerator.d.ts.map +1 -1
  10. package/build/core/NodeGenerator.js +8 -11
  11. package/build/core/logger/LoggerDecorator.d.ts.map +1 -1
  12. package/build/core/logger/LoggerDecorator.js +34 -38
  13. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +11 -7
  14. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -1
  15. package/build/core/logger/node/ConsoleLoggerConfigNode.js +24 -10
  16. package/build/core/logger/node/RestLoggerConfigNode.d.ts +22 -6
  17. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -1
  18. package/build/core/logger/node/RestLoggerConfigNode.js +93 -23
  19. package/build/core/logger/service/LoggerService.d.ts +59 -68
  20. package/build/core/logger/service/LoggerService.d.ts.map +1 -1
  21. package/build/core/logger/service/LoggerService.js +76 -165
  22. package/build/core/logger/template/LoggerTemplate.d.ts +9 -1
  23. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
  24. package/build/core/metrics/node/CounterMetricConfigNode.js +0 -2
  25. package/build/core/metrics/node/GaugeMetricConfigNode.js +0 -2
  26. package/build/core/metrics/node/MetricsConfigNode.js +0 -1
  27. package/build/core/metrics/node/TimerMetricConfigNode.js +0 -2
  28. package/build/core/metrics/service/MetricsService.js +10 -24
  29. package/build/core/other/service/SettingsService.js +0 -2
  30. package/build/core/tagging/service/NodeTypeService.js +1 -2
  31. package/build/core/webhook/WebhookDecorator.d.ts.map +1 -1
  32. package/build/core/webhook/WebhookDecorator.js +47 -10
  33. package/build/core/webhook/node/WebhookServerConfigNode.js +0 -1
  34. package/build/core/webhook/service/ReverseProxyTypeService.d.ts +1 -2
  35. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
  36. package/build/core/webhook/service/ReverseProxyTypeService.js +1 -6
  37. package/build/core/webhook/service/WebhookServerService.d.ts +1 -1
  38. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
  39. package/build/core/webhook/service/WebhookServerService.js +6 -14
  40. package/build/core/webhook/template/WebhookTemplate.d.ts +1 -1
  41. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
  42. package/build/index.d.ts +1 -2
  43. package/build/index.d.ts.map +1 -1
  44. package/build/index.js +1 -2
  45. package/build/resources/editorLanguageExtension.js +1 -2
  46. package/package.json +6 -5
  47. package/resources/editorLanguageExtension.js +1 -2
  48. package/src/GenerateNodes.ts +2 -2
  49. package/src/core/NodeConstructor.ts +7 -14
  50. package/src/core/NodeGenerator.ts +2 -3
  51. package/src/core/logger/LoggerDecorator.ts +56 -53
  52. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +39 -14
  53. package/src/core/logger/node/RestLoggerConfigNode.ts +128 -25
  54. package/src/core/logger/service/LoggerService.ts +103 -239
  55. package/src/core/logger/template/LoggerTemplate.html +2 -2
  56. package/src/core/logger/template/LoggerTemplate.ts +11 -1
  57. package/src/core/metrics/node/TimerMetricConfigNode.html +2 -2
  58. package/src/core/other/template/BasicTemplate.html +5 -2
  59. package/src/core/webhook/WebhookDecorator.ts +54 -13
  60. package/src/core/webhook/service/ReverseProxyTypeService.ts +1 -4
  61. package/src/core/webhook/service/WebhookServerService.ts +1 -6
  62. package/src/core/webhook/template/WebhookTemplate.html +1 -1
  63. package/src/core/webhook/template/WebhookTemplate.ts +1 -1
  64. package/src/index.ts +2 -2
  65. package/build/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
  66. package/build/core/logger/node/LokiLoggerConfigNode.d.ts +0 -20
  67. package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +0 -1
  68. package/build/core/logger/node/LokiLoggerConfigNode.html +0 -117
  69. package/build/core/logger/node/LokiLoggerConfigNode.js +0 -53
  70. package/build/core/logger/node/RestLoggerConfigNode.html +0 -183
  71. package/build/core/logger/service/LoggerServiceTypes.d.ts +0 -24
  72. package/build/core/logger/service/LoggerServiceTypes.d.ts.map +0 -1
  73. package/build/core/logger/service/LoggerServiceTypes.js +0 -30
  74. package/build/core/logger/template/LoggerTemplate.html +0 -331
  75. package/build/core/metrics/node/CounterMetricConfigNode.html +0 -48
  76. package/build/core/metrics/node/GaugeMetricConfigNode.html +0 -48
  77. package/build/core/metrics/node/MetricsConfigNode.html +0 -21
  78. package/build/core/metrics/node/TimerMetricConfigNode.html +0 -190
  79. package/build/core/metrics/template/CounterMetricTemplate.html +0 -40
  80. package/build/core/metrics/template/GaugeMetricTemplate.html +0 -39
  81. package/build/core/metrics/template/MetricsTemplate.html +0 -54
  82. package/build/core/metrics/template/TimerMetricTemplate.html +0 -39
  83. package/build/core/other/node/DelegatedConfigReferenceNode.html +0 -1
  84. package/build/core/other/template/BasicTemplate.html +0 -76
  85. package/build/core/other/template/SettingsTemplate.html +0 -128
  86. package/build/core/ui/template/ScriptEditorTemplate.html +0 -50
  87. package/build/core/ui/template/UIHelperTemplate.html +0 -229
  88. package/build/core/webhook/node/WebhookServerConfigNode.html +0 -61
  89. package/build/core/webhook/template/WebhookTemplate.html +0 -442
  90. package/documentation/LokiLoggerConfigNode.png +0 -0
  91. package/src/core/logger/node/LokiLoggerConfigNode.html +0 -117
  92. package/src/core/logger/node/LokiLoggerConfigNode.ts +0 -58
  93. package/src/core/logger/service/LoggerServiceTypes.ts +0 -26
@@ -8,7 +8,7 @@ const NodeConstructor_1 = require("../../NodeConstructor");
8
8
  const WebhookServerConfigNode_1 = require("../node/WebhookServerConfigNode");
9
9
  const WebhookTemplate_1 = require("../template/WebhookTemplate");
10
10
  const express_1 = __importDefault(require("express"));
11
- const LoggerServiceTypes_1 = require("../../logger/service/LoggerServiceTypes");
11
+ const LoggerService_1 = require("../../logger/service/LoggerService");
12
12
  var bodyParser = require('body-parser');
13
13
  var EndpointMethodType;
14
14
  (function (EndpointMethodType) {
@@ -16,9 +16,6 @@ var EndpointMethodType;
16
16
  EndpointMethodType["POST"] = "POST";
17
17
  })(EndpointMethodType || (exports.EndpointMethodType = EndpointMethodType = {}));
18
18
  class WebhookServer {
19
- _config;
20
- _app;
21
- _listener;
22
19
  constructor(config) {
23
20
  this._config = config;
24
21
  this._app = (0, express_1.default)();
@@ -27,19 +24,19 @@ class WebhookServer {
27
24
  }
28
25
  attach(endpoint, callback) {
29
26
  let authenticator;
30
- if (endpoint.authentication.type === LoggerServiceTypes_1.RestAuthType.none) {
27
+ if (endpoint.authentication.type === LoggerService_1.RestAuthType.none) {
31
28
  authenticator = (request, response) => Promise.resolve(true);
32
29
  }
33
- if (endpoint.authentication.type === LoggerServiceTypes_1.RestAuthType.basic) {
30
+ if (endpoint.authentication.type === LoggerService_1.RestAuthType.basic) {
34
31
  let header = "Basic " + Buffer.from(`${endpoint.authentication.username}:${endpoint.authentication.password}`).toString("base64");
35
32
  authenticator = (request, response) => {
36
33
  return Promise.resolve(header === request.headers.authorization);
37
34
  };
38
35
  }
39
- if (endpoint.authentication.type === LoggerServiceTypes_1.RestAuthType.apikey) {
36
+ if (endpoint.authentication.type === LoggerService_1.RestAuthType.apikey) {
40
37
  let auth = endpoint.authentication;
41
38
  authenticator = (request, response) => {
42
- if (auth.mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.header) {
39
+ if (auth.mechanism === LoggerService_1.ApiKeyMechanismType.header) {
43
40
  return Promise.resolve(request.headers[auth.key] === auth.value);
44
41
  }
45
42
  console.log("No APIKEY Authentication Handler Implementation for Type: " + auth.mechanism);
@@ -61,7 +58,6 @@ class WebhookServer {
61
58
  if (endpoint.methods.includes(EndpointMethodType.POST)) {
62
59
  this._app.post(endpoint.path, handlerChain);
63
60
  }
64
- console.log("added endpoint to " + endpoint.path);
65
61
  }
66
62
  detach(configuration) {
67
63
  configuration.methods.forEach(method => {
@@ -81,8 +77,6 @@ class WebhookServer {
81
77
  ;
82
78
  });
83
79
  });
84
- console.log("ROUTES REMOVED!");
85
- this._app.router.stack.forEach(route => console.log("KNOWN ROUTE", route, route.route?.path, route.route.methods.post));
86
80
  }
87
81
  config() {
88
82
  return this._config;
@@ -90,7 +84,7 @@ class WebhookServer {
90
84
  }
91
85
  exports.WebhookServer = WebhookServer;
92
86
  class WebhookServerService extends NodeConstructor_1.BaseService {
93
- static webhookServers = {};
87
+ static { this.webhookServers = {}; }
94
88
  constructor() {
95
89
  super("wehbookserver");
96
90
  }
@@ -111,7 +105,6 @@ class WebhookServerService extends NodeConstructor_1.BaseService {
111
105
  // compare the properties.
112
106
  if (!webhookServerNode) {
113
107
  // the node has been removed: TODO: alert the listeners that it has been removed.
114
- console.log("Webhook Service Removed", serverServiceConfig);
115
108
  removedServers.push(serverServiceConfig);
116
109
  }
117
110
  else {
@@ -121,7 +114,6 @@ class WebhookServerService extends NodeConstructor_1.BaseService {
121
114
  webhookServerNode.externalPort !== serverServiceConfig.externalPort;
122
115
  if (serviceChanged) {
123
116
  // TODO: notify the subscribers that the server has chaned.
124
- console.log("Notify the subscribers WebhookServer has changed.", serverServiceConfig, webhookServerNode);
125
117
  removedServers.push(serverServiceConfig);
126
118
  addedServers.push(webhookServerNode);
127
119
  }
@@ -1,5 +1,5 @@
1
1
  import { BaseNodeConfig, Template, TemplateDescriptor } from "../../NodeConstructor";
2
- import { ApiKeyMechanismType, RestAuthType } from "../../logger/service/LoggerServiceTypes";
2
+ import { RestAuthType, ApiKeyMechanismType } from "../../logger/service/LoggerService";
3
3
  export interface WebhookTemplateConfig extends BaseNodeConfig {
4
4
  webhook: string;
5
5
  webhookPath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/template/WebhookTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGpF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAE5F,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,OAAO,EAAC,MAAM,CAAC;IACf,WAAW,EAAC,MAAM,CAAC;IACnB,WAAW,EAAC,YAAY,CAAC;IACzB,0BAA0B,EAAC,MAAM,CAAC;IAClC,0BAA0B,EAAC,MAAM,CAAC;IAClC,4BAA4B,EAAC,mBAAmB,CAAC;IACjD,sBAAsB,EAAC,MAAM,CAAC;IAC9B,wBAAwB,EAAC,MAAM,CAAC;IAEhC,sBAAsB,EAAC,OAAO,CAAC;IAC/B,0BAA0B,EAAC,sBAAsB,EAAE,CAAC;CACvD;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,EAAC,MAAM,CAAC;IACb,UAAU,EAAC,MAAM,CAAA;CACpB,CAAA;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IAEzC,MAAM,CAAC,qBAAqB,IAAI,kBAAkB;CAMrD"}
1
+ {"version":3,"file":"WebhookTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/template/WebhookTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGpF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEvF,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,OAAO,EAAC,MAAM,CAAC;IACf,WAAW,EAAC,MAAM,CAAC;IACnB,WAAW,EAAC,YAAY,CAAC;IACzB,0BAA0B,EAAC,MAAM,CAAC;IAClC,0BAA0B,EAAC,MAAM,CAAC;IAClC,4BAA4B,EAAC,mBAAmB,CAAC;IACjD,sBAAsB,EAAC,MAAM,CAAC;IAC9B,wBAAwB,EAAC,MAAM,CAAC;IAEhC,sBAAsB,EAAC,OAAO,CAAC;IAC/B,0BAA0B,EAAC,sBAAsB,EAAE,CAAC;CACvD;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,EAAC,MAAM,CAAC;IACb,UAAU,EAAC,MAAM,CAAA;CACpB,CAAA;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IAEzC,MAAM,CAAC,qBAAqB,IAAI,kBAAkB;CAMrD"}
package/build/index.d.ts CHANGED
@@ -2,10 +2,9 @@ export * from "./core/Utils";
2
2
  export * from "./core/NodeGenerator";
3
3
  export * from "./core/NodeConstructor";
4
4
  export * from "./core/logger/service/LoggerService";
5
- export * from "./core/logger/template/LoggerTemplate";
6
5
  export * from "./core/logger/node/ConsoleLoggerConfigNode";
7
6
  export * from "./core/logger/node/RestLoggerConfigNode";
8
- export * from "./core/logger/node/LokiLoggerConfigNode";
7
+ export * from "./core/logger/template/LoggerTemplate";
9
8
  export * from "./core/metrics/service/MetricsService";
10
9
  export * from "./core/metrics/template/MetricsTemplate";
11
10
  export * from "./core/metrics/template/CounterMetricTemplate";
@@ -1 +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,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;AAGxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,gDAAgD,CAAC;AAC/D,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"}
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,4CAA4C,CAAC;AAC3D,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AAItD,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;AAGxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,gDAAgD,CAAC;AAC/D,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 CHANGED
@@ -19,10 +19,9 @@ __exportStar(require("./core/NodeGenerator"), exports);
19
19
  __exportStar(require("./core/NodeConstructor"), exports);
20
20
  // LOGGER
21
21
  __exportStar(require("./core/logger/service/LoggerService"), exports);
22
- __exportStar(require("./core/logger/template/LoggerTemplate"), exports);
23
22
  __exportStar(require("./core/logger/node/ConsoleLoggerConfigNode"), exports);
24
23
  __exportStar(require("./core/logger/node/RestLoggerConfigNode"), exports);
25
- __exportStar(require("./core/logger/node/LokiLoggerConfigNode"), exports);
24
+ __exportStar(require("./core/logger/template/LoggerTemplate"), exports);
26
25
  // METRICS
27
26
  __exportStar(require("./core/metrics/service/MetricsService"), exports);
28
27
  __exportStar(require("./core/metrics/template/MetricsTemplate"), exports);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  if (window.ScriptEditorLanguageManager === undefined) {
3
3
  class ScriptEditorLanguageManager {
4
- static counter = 0;
4
+ static { this.counter = 0; }
5
5
  static async createLanguage(monaco, template) {
6
6
  // generate a language name.
7
7
  let langName = "js_variant_" + ScriptEditorLanguageManager.counter;
@@ -327,7 +327,6 @@ if (window.ScriptEditorLanguageManager === undefined) {
327
327
  }
328
328
  }
329
329
  class ScriptEditorLanguage {
330
- name;
331
330
  constructor(name) {
332
331
  this.name = name;
333
332
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theotherwillembotha/node-red-plugincore",
3
- "version": "0.0.54",
3
+ "version": "0.1.0",
4
4
  "description": "A core framework for building production-grade Node-RED plugins, with built-in support for structured logging, metrics, and webhook ingestion.",
5
5
  "author": "Willem Botha (@theotherwillembotha)",
6
6
  "license": "ISC",
@@ -17,9 +17,8 @@
17
17
  "test": "echo \"Error: no test specified\" && exit 1",
18
18
  "prepare": "npm run build",
19
19
  "clean": "rm -rf ./build && rm -rf ./resources",
20
- "build": "npm run clean && tsc && npm run copy-html && npm run generate-nodes && npm run copy-files",
20
+ "build": "npm run clean && tsc && npm run generate-nodes && npm run copy-files",
21
21
  "generate-nodes": "node build/GenerateNodes.js",
22
- "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 ..",
23
22
  "copy-files": "cp -r ./icons ./build && mkdir -p ./resources && cp -r ./build/resources/. ./resources/"
24
23
  },
25
24
  "repository": {
@@ -40,6 +39,9 @@
40
39
  "README.md"
41
40
  ],
42
41
  "homepage": "https://github.com/theotherwillembotha/nodered_plugincore#readme",
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
43
45
  "engines": {
44
46
  "node": ">=18",
45
47
  "nodered": ">=4.0.0"
@@ -65,8 +67,7 @@
65
67
  "prom-client": "^15.1.3",
66
68
  "reflect-metadata": "^0.2.2",
67
69
  "whatwg-url": "^16.0.1",
68
- "winston": "^3.17.0",
69
- "winston-loki": "^6.1.3"
70
+ "winston": "^3.17.0"
70
71
  },
71
72
  "node-red": {
72
73
  "version": ">=4.0.0",
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  if (window.ScriptEditorLanguageManager === undefined) {
3
3
  class ScriptEditorLanguageManager {
4
- static counter = 0;
4
+ static { this.counter = 0; }
5
5
  static async createLanguage(monaco, template) {
6
6
  // generate a language name.
7
7
  let langName = "js_variant_" + ScriptEditorLanguageManager.counter;
@@ -327,7 +327,6 @@ if (window.ScriptEditorLanguageManager === undefined) {
327
327
  }
328
328
  }
329
329
  class ScriptEditorLanguage {
330
- name;
331
330
  constructor(name) {
332
331
  this.name = name;
333
332
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { DelegatedConfigReferenceNode } from "./core/other/node/DelegatedConfigReferenceNode.js";
3
3
  import { NodeTypeService } from "./core/tagging/service/NodeTypeService.js";
4
- import { NodeGenerator, SettingsService, BasicTemplate, SettingsTemplate, TimerMetricTemplate, ConsoleLoggerConfigNode, RestLoggerConfigNode, LokiLoggerConfigNode, UIHelperTemplate, ScriptEditorTemplate } from "./index.js"
4
+ import { NodeGenerator, SettingsService, BasicTemplate, SettingsTemplate, TimerMetricTemplate, ConsoleLoggerConfigNode, RestLoggerConfigNode, UIHelperTemplate, ScriptEditorTemplate } from "./index.js"
5
5
  import { WebhookServerConfigNode, WebhookServerService, WebhookTemplate, } from "./index.js"
6
6
 
7
7
  import {LoggerService, LoggerTemplate } from "./index.js";
@@ -33,7 +33,7 @@ new NodeGenerator("./src/core/")
33
33
  .registerNode(DelegatedConfigReferenceNode)
34
34
  .registerNode(ConsoleLoggerConfigNode)
35
35
  .registerNode(RestLoggerConfigNode)
36
- .registerNode(LokiLoggerConfigNode)
36
+
37
37
  .registerNode(MetricsConfigNode)
38
38
  .registerNode(CounterMetricConfigNode)
39
39
  .registerNode(GaugeMetricConfigNode)
@@ -9,7 +9,6 @@ import beautify from 'js-beautify';
9
9
  import markdownit from 'markdown-it'
10
10
  import Handlebars, { template } from "handlebars";
11
11
  import { NodeTypeService } from "./tagging/service/NodeTypeService";
12
- import { NodeDescriptionConfig } from "./tagging/NodeDescriptionDecorator";
13
12
 
14
13
 
15
14
 
@@ -400,12 +399,7 @@ export class NodeManager{
400
399
 
401
400
  // check if the reverserproxyttypesewrvice is installed yet.
402
401
  this.nodeTypeService = (RED.plugins.get("@theotherwillembotha/nodetypeservice") as any).instance as NodeTypeService;
403
- if(this.nodeTypeService) {
404
- console.log("NodeTypeService installed!")
405
- }
406
- else {
407
- // Register a listener to trigger when the RegerseProxyTypService gets installed.
408
- console.log("nodetypeservice not installed yet. waiting for it to be installed");
402
+ if(!this.nodeTypeService) {
409
403
  RED.events.on('plugin.instantiated', nodeTypeServiceListener);
410
404
  }
411
405
  }
@@ -432,7 +426,7 @@ export class NodeManager{
432
426
  }
433
427
 
434
428
  let nodeConstructor = function(this: any, config: BaseNodeConfig | NodeDef){
435
- console.log("constructing node", typeName);
429
+ //console.log("constructing node", typeName);
436
430
 
437
431
  try{
438
432
  // instantiate the node.
@@ -462,7 +456,6 @@ export class NodeManager{
462
456
  }
463
457
 
464
458
  try{
465
- console.log("registering node " + typeName);
466
459
  NodeManager.RED.nodes.registerType(typeName, nodeConstructor, { settings: {}});
467
460
 
468
461
  let nodeDescription = type.getNodeDescriptor();
@@ -477,7 +470,6 @@ export class NodeManager{
477
470
  this.typeBacklog.push(type);
478
471
  }
479
472
 
480
- console.log("registered node " + typeName);
481
473
  }
482
474
  catch(error){
483
475
  console.error("registering node: " + typeName + " failed", error);
@@ -569,6 +561,7 @@ export type DefaultTemplateType = {
569
561
  minInstances?:number;
570
562
  maxInstances?:number;
571
563
  validate?:Function;
564
+ list?:boolean;
572
565
  }
573
566
 
574
567
  export class NodeBuilder {
@@ -598,12 +591,12 @@ export class NodeBuilder {
598
591
  }
599
592
 
600
593
  public addDefault(name:string, template:DefaultTemplateType):NodeBuilder{
601
- // if the template type ends with squeare brackets, its an array type.
602
- if(template.type && template.type.endsWith("[]")) {
594
+ // if list:true, this is an array of config references generate shadow defaults for each slot.
595
+ if(template.list === true) {
603
596
  template.maxInstances = template.maxInstances ? template.maxInstances : 10;
604
- this._defaults[name] = {type:template.type, value:"", required:true, maxInstances:template.maxInstances};
597
+ this._defaults[name] = {value:"", required:(template.required) ? template.required : false, maxInstances:template.maxInstances};
605
598
  for(let i = 0; i < template.maxInstances; i++){
606
- this._defaults["_" + name + "_" + i] = {value:"", required:false};
599
+ this._defaults["_" + name + "_" + i] = {value:"", required:false, type: template.type};
607
600
  }
608
601
  }
609
602
  else{
@@ -195,7 +195,6 @@ module.exports = function (RED) {
195
195
  let plugin = RED.plugins.get(pluginID);
196
196
 
197
197
  if(addedPlugin && plugin.instantiate && !plugin.instance){
198
- console.log("Deploying instance of: " + plugin.id);
199
198
  plugin.instance = new plugin.class();
200
199
 
201
200
  // instantiate the plugin.
@@ -211,7 +210,7 @@ module.exports = function (RED) {
211
210
  RED.events.on('runtime-event', async (event) => {
212
211
  // startup deployment.
213
212
  if ("runtime-deploy" === event?.id && startupDeployment) {
214
- console.log("STARTUP DEPLOYMENT");
213
+ //console.log("STARTUP DEPLOYMENT");
215
214
  startupDeployment = false;
216
215
  const flows = await runtime.flows.getFlows({});
217
216
  await plugin.instance.onDeploy(flows);
@@ -219,7 +218,7 @@ module.exports = function (RED) {
219
218
 
220
219
  // stopping flows on redeployment.
221
220
  if ("runtime-state" === event?.id && event?.payload?.state === "stop" && event?.payload?.deploy) {
222
- console.log("REDEPLOY!");
221
+ //console.log("REDEPLOY!");
223
222
  const flows = await runtime.flows.getFlows({});
224
223
  await plugin.instance.onDeploy(flows);
225
224
  }
@@ -1,7 +1,6 @@
1
1
  import { BaseNode, NodeManager } from "../NodeConstructor";
2
- import { Log, LoggerRegistration } from "./service/LoggerService";
3
- import { LoggerTemplateConfig } from "./template/LoggerTemplate";
4
-
2
+ import { AbstractLogger, Log, BaseLoggerConfig, DoNothingAppender, LoggerConfigNode, LoggerConfigNodeConfig } from "./service/LoggerService";
3
+ import { LoggerTemplateConfig, LoggerTemplateNodeConfig } from "./template/LoggerTemplate";
5
4
 
6
5
  export function Logger(debug?:string):Function {
7
6
 
@@ -10,41 +9,43 @@ export function Logger(debug?:string):Function {
10
9
  // if the type is a string, then its probably defined in the local (core) module.
11
10
  if(typeof propertyKey === "string"){
12
11
  const valueSymbol = Symbol(`_${String(propertyKey)}_value`);
12
+
13
+ //console.log("BINDING:", "target", target, "propertyKey", propertyKey );
13
14
 
14
15
  Object.defineProperty(target, propertyKey, {
15
16
  get: function() {
17
+
18
+ //console.log("setting logger on node " + this.name() + " (localized)");
16
19
 
17
20
  if(!this[valueSymbol]){
18
- let node = this as BaseNode<LoggerTemplateConfig>;
19
- //console.log("setting logger on node " + node.name() + " (localized)");
20
- let config = node.config();
21
- let logger;
22
21
 
23
- if(config.logEnabled){
24
- let registration:LoggerRegistration = {
22
+ try{
23
+ let node = this as BaseNode<LoggerTemplateNodeConfig>;
24
+ let config = node.config();
25
+
26
+ if(!config.logEnabled){
27
+ return this[valueSymbol] = DoNothingAppender.get();
28
+ }
29
+
30
+ // get the logger config node.
31
+ let loggerConfigNode:LoggerConfigNode<LoggerConfigNodeConfig, AbstractLogger<BaseLoggerConfig>> =(NodeManager.RED.nodes.getNode(config.logger) as any).node();
32
+
33
+ let loggerTemplateConfig:LoggerTemplateConfig = {
25
34
  id:config.id,
26
35
  flow:node.flow(),
27
36
  type:node.type(),
28
37
  name:node.name(),
29
- enabled:config.logEnabled,
30
- override:config.logTemplateOverrideEnabled,
31
- template:config.logTemplateOverride
38
+ level:loggerConfigNode.config().level,
39
+ template: (config.logTemplateOverrideEnabled) ? config.logTemplateOverride : loggerConfigNode.config().template,
32
40
  };
33
-
41
+
34
42
  // get a reference to the loggerService.
35
- try{
36
- logger = (NodeManager.RED.nodes.getNode(config.logger) as any).node().registerLogger(registration) as Log;
37
- }
38
- catch(e){
39
- console.log("failed getting logger ", config.logger, e);
40
- logger = { log(){} };
41
- }
43
+ return this[valueSymbol] = loggerConfigNode.registerTemplate(loggerTemplateConfig);
42
44
  }
43
- else{
44
- logger = { log(){} };
45
+ catch(e){
46
+ console.log(`failed getting logger "${this?.config()?.logger}"`, e);
47
+ return this[valueSymbol] = DoNothingAppender.get();
45
48
  }
46
-
47
- this[valueSymbol] = logger;
48
49
  }
49
50
  return this[valueSymbol];
50
51
  },
@@ -55,43 +56,45 @@ export function Logger(debug?:string):Function {
55
56
  }
56
57
  else{
57
58
  let property = propertyKey as any;
58
- //property.addInitializer(() => {
59
- property.addInitializer(function(this:BaseNode<LoggerTemplateConfig>){
60
- let node = this as BaseNode<LoggerTemplateConfig>
59
+
60
+ property.addInitializer(function(this:BaseNode<LoggerTemplateNodeConfig>){
61
+ let node = this as BaseNode<LoggerTemplateNodeConfig>
61
62
  const valueSymbol = Symbol(`_${String(property.name)}_value`);
63
+
64
+ //console.log("ADDING INITIALIZER:", "node", node, "property.name", property.name );
65
+
62
66
  Object.defineProperty(node, property.name, {
63
67
  get: function() {
68
+
69
+ //console.log("setting logger on node " + node.name()+ " (externalized)");
64
70
 
65
71
  if(!this[valueSymbol]){
66
- //console.log("setting logger on node " + node.name()+ " (externalized)");
72
+ try{
67
73
  let config = node.config();
68
- let logger;
69
-
70
- if(config.logEnabled){
71
- let registration:LoggerRegistration = {
72
- id:config.id,
73
- flow:node.flow(),
74
- type:node.type(),
75
- name:node.name(),
76
- enabled:config.logEnabled,
77
- override:config.logTemplateOverrideEnabled,
78
- template:config.logTemplateOverride
79
- };
80
-
81
- // get a reference to the loggerService.
82
- try{
83
- logger = (NodeManager.RED.nodes.getNode(config.logger) as any).node().registerLogger(registration) as Log;
84
- }
85
- catch(e){
86
- console.log("failed getting logger ", config.logger, e);
87
- logger = { log(){} };
88
- }
89
- }
90
- else{
91
- logger = { log(){} };
74
+
75
+ if(!config.logEnabled){
76
+ return this[valueSymbol] = DoNothingAppender.get();
92
77
  }
93
78
 
94
- this[valueSymbol] = logger;
79
+ // get the logger config node.
80
+ let loggerConfigNode:LoggerConfigNode<LoggerConfigNodeConfig, AbstractLogger<BaseLoggerConfig>> =(NodeManager.RED.nodes.getNode(config.logger) as any).node();
81
+
82
+ let loggerTemplateConfig:LoggerTemplateConfig = {
83
+ id:config.id,
84
+ flow:node.flow(),
85
+ type:node.type(),
86
+ name:node.name(),
87
+ level: loggerConfigNode?.config().level ?? 'info',
88
+ template: (config.logTemplateOverrideEnabled) ? config.logTemplateOverride : (loggerConfigNode?.config().template ?? 'message:{{msg}}'),
89
+ };
90
+
91
+ // get a reference to the loggerService.
92
+ return this[valueSymbol] = loggerConfigNode.registerTemplate(loggerTemplateConfig);
93
+ }
94
+ catch(e){
95
+ console.log("failed getting logger ", e);
96
+ return this[valueSymbol] = DoNothingAppender.get();
97
+ }
95
98
  }
96
99
  return this[valueSymbol];
97
100
  },
@@ -1,13 +1,11 @@
1
1
 
2
2
  import { Node } from "node-red";
3
- import { ConfigNode, ConfigNodeConfig } from "../../NodeConstructor"
4
- import { NewLogger, Log, LoggerRegistration, LoggerService } from "../service/LoggerService"
3
+ import { LoggerService, LoggerConfigNodeConfig, BaseLoggerConfig, AbstractLogger, TagMap, LoggerConfigNode, Log, Level } from "../service/LoggerService"
5
4
  import { SourceUtility } from "../../NodeGenerator";
6
- import { Level, PlatformType } from "../service/LoggerServiceTypes";
7
5
  import { NodeDescription } from "../../tagging/NodeDescriptionDecorator";
6
+ import { LoggerTemplateConfig } from "../template/LoggerTemplate";
8
7
 
9
- interface ConsoleLoggerConfigNodeConfig extends ConfigNodeConfig {
10
- id: string;
8
+ interface ConsoleLoggerConfigNodeConfig extends LoggerConfigNodeConfig {
11
9
  level:Level;
12
10
  template:string;
13
11
  }
@@ -21,26 +19,53 @@ interface ConsoleLoggerConfigNodeConfig extends ConfigNodeConfig {
21
19
  dependencies:[ LoggerService ],
22
20
  tags: [ "LoggerType" ]
23
21
  })
24
- export class ConsoleLoggerConfigNode extends ConfigNode<ConsoleLoggerConfigNodeConfig> {
22
+ export class ConsoleLoggerConfigNode extends LoggerConfigNode<ConsoleLoggerConfigNodeConfig, ConsoleLogger> {
25
23
 
26
- private _logger!: NewLogger<any>;
24
+ private _logger!: ConsoleLogger;
27
25
 
28
26
  constructor(node: Node, config: ConsoleLoggerConfigNodeConfig){
29
27
  super(node, config);
30
28
  let _this = this;
31
29
 
32
- // instantiate the logger.
33
- let loggerConfig = {
30
+ // create logger config
31
+ let loggerConfig:ConsoleLoggerConfig = {
34
32
  id:this.id(),
35
- type:PlatformType.console,
36
- template:config.template,
33
+ type:"CONSOLE",
37
34
  level:config.level,
35
+ template:config.template,
38
36
  }
39
37
 
40
- this._logger = LoggerService.get(loggerConfig);
38
+ // create logger instance:
39
+ this._logger = new ConsoleLogger(loggerConfig);
41
40
  }
42
41
 
43
- public registerLogger(registration:LoggerRegistration):Log {
44
- return this._logger.register(registration)
42
+ protected logger():ConsoleLogger{
43
+ return this._logger;
45
44
  }
46
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
+ }