@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
@@ -2,41 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Logger = Logger;
4
4
  const NodeConstructor_1 = require("../NodeConstructor");
5
+ const LoggerService_1 = require("./service/LoggerService");
5
6
  function Logger(debug) {
6
7
  return function (target, propertyKey) {
7
8
  // if the type is a string, then its probably defined in the local (core) module.
8
9
  if (typeof propertyKey === "string") {
9
10
  const valueSymbol = Symbol(`_${String(propertyKey)}_value`);
11
+ //console.log("BINDING:", "target", target, "propertyKey", propertyKey );
10
12
  Object.defineProperty(target, propertyKey, {
11
13
  get: function () {
14
+ //console.log("setting logger on node " + this.name() + " (localized)");
12
15
  if (!this[valueSymbol]) {
13
- let node = this;
14
- //console.log("setting logger on node " + node.name() + " (localized)");
15
- let config = node.config();
16
- let logger;
17
- if (config.logEnabled) {
18
- let registration = {
16
+ try {
17
+ let node = this;
18
+ let config = node.config();
19
+ if (!config.logEnabled) {
20
+ return this[valueSymbol] = LoggerService_1.DoNothingAppender.get();
21
+ }
22
+ // get the logger config node.
23
+ let loggerConfigNode = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.logger).node();
24
+ let loggerTemplateConfig = {
19
25
  id: config.id,
20
26
  flow: node.flow(),
21
27
  type: node.type(),
22
28
  name: node.name(),
23
- enabled: config.logEnabled,
24
- override: config.logTemplateOverrideEnabled,
25
- template: config.logTemplateOverride
29
+ level: loggerConfigNode.config().level,
30
+ template: (config.logTemplateOverrideEnabled) ? config.logTemplateOverride : loggerConfigNode.config().template,
26
31
  };
27
32
  // get a reference to the loggerService.
28
- try {
29
- logger = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.logger).node().registerLogger(registration);
30
- }
31
- catch (e) {
32
- console.log("failed getting logger ", config.logger, e);
33
- logger = { log() { } };
34
- }
33
+ return this[valueSymbol] = loggerConfigNode.registerTemplate(loggerTemplateConfig);
35
34
  }
36
- else {
37
- logger = { log() { } };
35
+ catch (e) {
36
+ console.log(`failed getting logger "${this?.config()?.logger}"`, e);
37
+ return this[valueSymbol] = LoggerService_1.DoNothingAppender.get();
38
38
  }
39
- this[valueSymbol] = logger;
40
39
  }
41
40
  return this[valueSymbol];
42
41
  },
@@ -47,39 +46,36 @@ function Logger(debug) {
47
46
  }
48
47
  else {
49
48
  let property = propertyKey;
50
- //property.addInitializer(() => {
51
49
  property.addInitializer(function () {
52
50
  let node = this;
53
51
  const valueSymbol = Symbol(`_${String(property.name)}_value`);
52
+ //console.log("ADDING INITIALIZER:", "node", node, "property.name", property.name );
54
53
  Object.defineProperty(node, property.name, {
55
54
  get: function () {
55
+ //console.log("setting logger on node " + node.name()+ " (externalized)");
56
56
  if (!this[valueSymbol]) {
57
- //console.log("setting logger on node " + node.name()+ " (externalized)");
58
- let config = node.config();
59
- let logger;
60
- if (config.logEnabled) {
61
- let registration = {
57
+ try {
58
+ let config = node.config();
59
+ if (!config.logEnabled) {
60
+ return this[valueSymbol] = LoggerService_1.DoNothingAppender.get();
61
+ }
62
+ // get the logger config node.
63
+ let loggerConfigNode = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.logger).node();
64
+ let loggerTemplateConfig = {
62
65
  id: config.id,
63
66
  flow: node.flow(),
64
67
  type: node.type(),
65
68
  name: node.name(),
66
- enabled: config.logEnabled,
67
- override: config.logTemplateOverrideEnabled,
68
- template: config.logTemplateOverride
69
+ level: loggerConfigNode?.config().level ?? 'info',
70
+ template: (config.logTemplateOverrideEnabled) ? config.logTemplateOverride : (loggerConfigNode?.config().template ?? 'message:{{msg}}'),
69
71
  };
70
72
  // get a reference to the loggerService.
71
- try {
72
- logger = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.logger).node().registerLogger(registration);
73
- }
74
- catch (e) {
75
- console.log("failed getting logger ", config.logger, e);
76
- logger = { log() { } };
77
- }
73
+ return this[valueSymbol] = loggerConfigNode.registerTemplate(loggerTemplateConfig);
78
74
  }
79
- else {
80
- logger = { log() { } };
75
+ catch (e) {
76
+ console.log("failed getting logger ", e);
77
+ return this[valueSymbol] = LoggerService_1.DoNothingAppender.get();
81
78
  }
82
- this[valueSymbol] = logger;
83
79
  }
84
80
  return this[valueSymbol];
85
81
  },
@@ -1,16 +1,20 @@
1
1
  import { Node } from "node-red";
2
- import { ConfigNode, ConfigNodeConfig } from "../../NodeConstructor";
3
- import { Log, LoggerRegistration } from "../service/LoggerService";
4
- import { Level } from "../service/LoggerServiceTypes";
5
- interface ConsoleLoggerConfigNodeConfig extends ConfigNodeConfig {
6
- id: string;
2
+ import { LoggerConfigNodeConfig, BaseLoggerConfig, AbstractLogger, LoggerConfigNode, Log, Level } from "../service/LoggerService";
3
+ import { LoggerTemplateConfig } from "../template/LoggerTemplate";
4
+ interface ConsoleLoggerConfigNodeConfig extends LoggerConfigNodeConfig {
7
5
  level: Level;
8
6
  template: string;
9
7
  }
10
- export declare class ConsoleLoggerConfigNode extends ConfigNode<ConsoleLoggerConfigNodeConfig> {
8
+ export declare class ConsoleLoggerConfigNode extends LoggerConfigNode<ConsoleLoggerConfigNodeConfig, ConsoleLogger> {
11
9
  private _logger;
12
10
  constructor(node: Node, config: ConsoleLoggerConfigNodeConfig);
13
- registerLogger(registration: LoggerRegistration): Log;
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;
14
18
  }
15
19
  export {};
16
20
  //# sourceMappingURL=ConsoleLoggerConfigNode.d.ts.map
@@ -1 +1 @@
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,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAa,GAAG,EAAE,kBAAkB,EAAiB,MAAM,0BAA0B,CAAA;AAE5F,OAAO,EAAE,KAAK,EAAgB,MAAM,+BAA+B,CAAC;AAGpE,UAAU,6BAA8B,SAAQ,gBAAgB;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAC,KAAK,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;CACnB;AAED,qBASa,uBAAwB,SAAQ,UAAU,CAAC,6BAA6B,CAAC;IAElF,OAAO,CAAC,OAAO,CAAkB;gBAErB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,6BAA6B;IAetD,cAAc,CAAC,YAAY,EAAC,kBAAkB,GAAE,GAAG;CAG7D"}
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"}
@@ -10,27 +10,25 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ConsoleLoggerConfigNode = void 0;
13
- const NodeConstructor_1 = require("../../NodeConstructor");
14
13
  const LoggerService_1 = require("../service/LoggerService");
15
14
  const NodeGenerator_1 = require("../../NodeGenerator");
16
- const LoggerServiceTypes_1 = require("../service/LoggerServiceTypes");
17
15
  const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
18
- let ConsoleLoggerConfigNode = class ConsoleLoggerConfigNode extends NodeConstructor_1.ConfigNode {
19
- _logger;
16
+ let ConsoleLoggerConfigNode = class ConsoleLoggerConfigNode extends LoggerService_1.LoggerConfigNode {
20
17
  constructor(node, config) {
21
18
  super(node, config);
22
19
  let _this = this;
23
- // instantiate the logger.
20
+ // create logger config
24
21
  let loggerConfig = {
25
22
  id: this.id(),
26
- type: LoggerServiceTypes_1.PlatformType.console,
27
- template: config.template,
23
+ type: "CONSOLE",
28
24
  level: config.level,
25
+ template: config.template,
29
26
  };
30
- this._logger = LoggerService_1.LoggerService.get(loggerConfig);
27
+ // create logger instance:
28
+ this._logger = new ConsoleLogger(loggerConfig);
31
29
  }
32
- registerLogger(registration) {
33
- return this._logger.register(registration);
30
+ logger() {
31
+ return this._logger;
34
32
  }
35
33
  };
36
34
  exports.ConsoleLoggerConfigNode = ConsoleLoggerConfigNode;
@@ -46,3 +44,19 @@ exports.ConsoleLoggerConfigNode = ConsoleLoggerConfigNode = __decorate([
46
44
  }),
47
45
  __metadata("design:paramtypes", [Object, Object])
48
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,13 +1,14 @@
1
1
  import { Node } from "node-red";
2
- import { ConfigNode, ConfigNodeConfig } from "../../NodeConstructor";
3
- import { Log, LoggerRegistration } from "../service/LoggerService";
4
- import { ApiKeyMechanismType, Level, PlatformType, RestAuthType } from "../service/LoggerServiceTypes";
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";
5
6
  interface RestLoggerConfigNodeConfig extends ConfigNodeConfig {
6
7
  id: string;
7
- platform: PlatformType;
8
8
  level: Level;
9
9
  template: string;
10
10
  rest_url: string;
11
+ rest_ignoresslerror: boolean;
11
12
  rest_auth_type: RestAuthType;
12
13
  rest_auth_basic_username: string;
13
14
  rest_auth_basic_password: string;
@@ -15,10 +16,25 @@ interface RestLoggerConfigNodeConfig extends ConfigNodeConfig {
15
16
  rest_auth_apikey_name: string;
16
17
  rest_auth_apikey_value: string;
17
18
  }
18
- export declare class RestLoggerConfigNode extends ConfigNode<RestLoggerConfigNodeConfig> {
19
+ export declare class RestLoggerConfigNode extends LoggerConfigNode<RestLoggerConfigNodeConfig, RestLogger> {
19
20
  private _logger;
20
21
  constructor(node: Node, config: RestLoggerConfigNodeConfig);
21
- registerLogger(registration: LoggerRegistration): Log;
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;
22
38
  }
23
39
  export {};
24
40
  //# sourceMappingURL=RestLoggerConfigNode.d.ts.map
@@ -1 +1 @@
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,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAa,GAAG,EAAE,kBAAkB,EAAmC,MAAM,0BAA0B,CAAA;AAE9G,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGvG,UAAU,0BAA2B,SAAQ,gBAAgB;IAEzD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAC,KAAK,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IACjB,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,UAAU,CAAC,0BAA0B,CAAC;IAE5E,OAAO,CAAC,OAAO,CAAkB;gBAErB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,0BAA0B;IA0BnD,cAAc,CAAC,YAAY,EAAC,kBAAkB,GAAE,GAAG;CAG7D"}
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"}
@@ -10,37 +10,36 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.RestLoggerConfigNode = void 0;
13
- const NodeConstructor_1 = require("../../NodeConstructor");
14
13
  const LoggerService_1 = require("../service/LoggerService");
15
14
  const NodeGenerator_1 = require("../../NodeGenerator");
16
- const LoggerServiceTypes_1 = require("../service/LoggerServiceTypes");
15
+ const LoggerService_2 = require("../service/LoggerService");
17
16
  const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
18
- let RestLoggerConfigNode = class RestLoggerConfigNode extends NodeConstructor_1.ConfigNode {
19
- _logger;
17
+ const whatwg_url_1 = require("whatwg-url");
18
+ const winston_1 = require("winston");
19
+ let RestLoggerConfigNode = class RestLoggerConfigNode extends LoggerService_1.LoggerConfigNode {
20
20
  constructor(node, config) {
21
21
  super(node, config);
22
22
  let _this = this;
23
23
  // instantiate the logger.
24
- let loggerConfig;
25
- if (config.platform === LoggerServiceTypes_1.PlatformType.rest) {
26
- loggerConfig = {
27
- id: this.id(),
28
- type: LoggerServiceTypes_1.PlatformType.rest,
29
- template: config.template,
30
- level: config.level,
31
- url: config.rest_url,
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
- }
40
- this._logger = LoggerService_1.LoggerService.get(loggerConfig);
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);
41
40
  }
42
- registerLogger(registration) {
43
- return this._logger.register(registration);
41
+ logger() {
42
+ return this._logger;
44
43
  }
45
44
  };
46
45
  exports.RestLoggerConfigNode = RestLoggerConfigNode;
@@ -56,3 +55,74 @@ exports.RestLoggerConfigNode = RestLoggerConfigNode = __decorate([
56
55
  }),
57
56
  __metadata("design:paramtypes", [Object, Object])
58
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
+ }
@@ -1,88 +1,79 @@
1
- import { BaseService, ServiceDescriptor } from "../../NodeConstructor";
2
- import { NodeAPI, NodeAPISettingsWithData } from "node-red";
3
- import { ApiKeyMechanismType, Level, PlatformType, RestAuthType } from "./LoggerServiceTypes";
4
- type TagMap = {
5
- instance: string;
6
- flow: string;
1
+ import { BaseService, ServiceDescriptor, ConfigNodeConfig, ConfigNode } from "../../NodeConstructor";
2
+ import { NodeAPI, NodeAPISettingsWithData, Node } from "node-red";
3
+ import { LoggerTemplateConfig } from "../template/LoggerTemplate";
4
+ export declare enum Level {
5
+ DEBUG = "DEBUG",
6
+ INFO = "INFO",
7
+ WARNING = "WARNING",
8
+ ERROR = "ERROR"
9
+ }
10
+ export declare enum RestAuthType {
11
+ none = "none",
12
+ basic = "basic",
13
+ apikey = "apikey"
14
+ }
15
+ export declare enum ApiKeyMechanismType {
16
+ header = "header",
17
+ queryparam = "queryparam",
18
+ matrixparam = "matrixparam"
19
+ }
20
+ export type TagMap = {
21
+ id: string;
7
22
  node: string;
8
23
  type: string;
9
- id: string;
10
- };
11
- export type Log = {
12
- log(message: {
13
- [key: string]: any;
14
- } | string): void;
24
+ flow: string;
25
+ instance: string;
15
26
  };
16
- export declare class LogImplementation implements Log {
17
- private root;
18
- private config;
19
- private template?;
20
- private tagMap;
21
- constructor(root: NewLogger<any>, config: LoggerRegistration);
22
- log(message: {
27
+ export declare abstract class Log {
28
+ private _config;
29
+ private template;
30
+ private tags;
31
+ protected constructor(config: LoggerTemplateConfig);
32
+ protected config(): LoggerTemplateConfig;
33
+ log(payload: {
23
34
  [key: string]: any;
24
35
  } | string): void;
25
- serialize(content: {
26
- [key: string]: any;
27
- }): string;
28
- getTags(): TagMap;
36
+ protected abstract writeToLog(level: string, message: string, tags: {
37
+ [key: string]: string | boolean | number;
38
+ }): void;
29
39
  }
30
- export interface BaseLoggerConfig {
40
+ export type BaseLoggerConfig = {
31
41
  id: string;
32
- type: PlatformType;
42
+ type: string;
33
43
  level: Level;
34
44
  template: string;
35
- }
36
- export declare abstract class NewLogger<ConfigType extends BaseLoggerConfig> {
45
+ };
46
+ export declare abstract class AbstractLogger<BaseLoggerConfig> {
37
47
  private _config;
38
- private template;
39
- constructor(config: ConfigType);
40
- log(reference: LogImplementation, content: {
41
- [key: string]: any;
42
- }): void;
43
- register(registration: LoggerRegistration): Log;
44
- serialize(content: any): string;
45
- config(): ConfigType;
46
- protected abstract writeToLog(serializedContent: string, tags: TagMap): void;
47
- }
48
- export interface ConsoleLoggerConfig extends BaseLoggerConfig {
49
- }
50
- export interface LokiLoggerConfig extends BaseLoggerConfig {
51
- type: PlatformType.loki;
52
- host: string;
53
- userid?: string;
54
- authtoken?: string;
55
- tenantid?: string;
56
- }
57
- export interface RestLoggerConfig extends BaseLoggerConfig {
58
- type: PlatformType.rest;
59
- url: string;
60
- ignoresslerror: boolean;
61
- auth_type: RestAuthType;
62
- auth_basic_username: string;
63
- auth_basic_password: string;
64
- auth_apikey_mechanism: ApiKeyMechanismType;
65
- auth_apikey_name: string;
66
- auth_apikey_value: string;
48
+ private _appenders;
49
+ constructor(config: BaseLoggerConfig);
50
+ config(): BaseLoggerConfig;
51
+ registerTemplate(config: LoggerTemplateConfig): Log;
52
+ protected abstract createLogger(config: LoggerTemplateConfig): Log;
67
53
  }
68
54
  export declare class LoggerService extends BaseService {
69
55
  static instanceID: string;
70
- private static loggers;
71
56
  private red;
72
57
  constructor();
73
58
  init(red: NodeAPI<NodeAPISettingsWithData>): void | Promise<void>;
74
59
  deinit(red: NodeAPI<NodeAPISettingsWithData>): void | Promise<void>;
75
- static get<ConfigType extends BaseLoggerConfig>(config: ConfigType): NewLogger<ConfigType>;
76
60
  static getServiceDescriptor(): ServiceDescriptor;
77
61
  }
78
- export type LoggerRegistration = {
79
- id: string;
80
- flow: string;
81
- type: string;
82
- name: string;
83
- enabled: boolean;
84
- template?: string;
85
- override?: boolean;
86
- };
87
- export {};
62
+ export type LoggerConfigNodeConfig = ConfigNodeConfig & BaseLoggerConfig & {};
63
+ export declare abstract class LoggerConfigNode<CNC extends LoggerConfigNodeConfig, LoggerType extends AbstractLogger<BaseLoggerConfig>> extends ConfigNode<CNC> {
64
+ protected constructor(node: Node, config: CNC);
65
+ protected abstract logger(): LoggerType;
66
+ registerTemplate(config: LoggerTemplateConfig): Log;
67
+ }
68
+ export declare class DoNothingAppender extends Log {
69
+ private static instance;
70
+ static get(): any;
71
+ private constructor();
72
+ log(payload: {
73
+ [key: string]: any;
74
+ } | string): void;
75
+ protected writeToLog(level: string, message: string, tags: {
76
+ [key: string]: string | boolean | number;
77
+ }): void;
78
+ }
88
79
  //# sourceMappingURL=LoggerService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/service/LoggerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/service/LoggerService.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAElE,OAAO,EAAkB,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AASlF,oBAAY,KAAK;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,KAAK,UAAU;CAClB;AAED,oBAAY,YAAY;IACpB,IAAI,SAAO;IACX,KAAK,UAAQ;IACb,MAAM,WAAS;CAClB;AAED,oBAAY,mBAAmB;IAC3B,MAAM,WAAS;IACf,UAAU,eAAa;IACvB,WAAW,gBAAc;CAC5B;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAA;AAED,8BAAsB,GAAG;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,IAAI,CAAQ;IAEpB,SAAS,aAAa,MAAM,EAAC,oBAAoB;IAYjD,SAAS,CAAC,MAAM,IAAG,oBAAoB;IAIhC,GAAG,CAAC,OAAO,EAAC;QAAC,CAAC,GAAG,EAAC,MAAM,GAAE,GAAG,CAAA;KAAC,GAAC,MAAM,GAAE,IAAI;IAalD,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAE,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC;QAAC,CAAC,GAAG,EAAC,MAAM,GAAE,MAAM,GAAC,OAAO,GAAC,MAAM,CAAA;KAAC,GAAE,IAAI;CAC9G;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,EAAE,EAAC,MAAM,CAAC;IACV,IAAI,EAAC,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAC,MAAM,CAAC;CACnB,CAAA;AAED,8BAAsB,cAAc,CAAC,gBAAgB;IAEjD,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,UAAU,CAAyB;gBAE/B,MAAM,EAAC,gBAAgB;IAI5B,MAAM,IAAG,gBAAgB;IAIzB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,GAAG;IAY1D,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAE,GAAG;CACpE;AAED,qBAAa,aAAc,SAAQ,WAAW;IAE1C,OAAc,UAAU,EAAC,MAAM,CAAC;IAChC,OAAO,CAAC,GAAG,CAAoC;;IAMxC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;WAE1D,oBAAoB,IAAG,iBAAiB;CAU3D;AAED,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,EAAE,CAAA;AAE7E,8BAAsB,gBAAgB,CAAC,GAAG,SAAS,sBAAsB,EAAE,UAAU,SAAS,cAAc,CAAC,gBAAgB,CAAC,CAAE,SAAQ,UAAU,CAAC,GAAG,CAAC;IAEnJ,SAAS,aAAa,IAAI,EAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAI5C,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAG,UAAU;IAE/B,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,GAAG;CAG7D;AAED,qBAAa,iBAAkB,SAAQ,GAAG;IAEtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6C;IAEpE,MAAM,CAAC,GAAG,IAAI,GAAG;IAIjB,OAAO;IAIA,GAAG,CAAC,OAAO,EAAC;QAAC,CAAC,GAAG,EAAC,MAAM,GAAE,GAAG,CAAA;KAAC,GAAC,MAAM,GAAE,IAAI;IAIlD,SAAS,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;KAAE,GAAG,IAAI;CAGjH"}