@theotherwillembotha/node-red-plugincore 0.0.54 → 0.0.55

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 (68) hide show
  1. package/README.md +5 -8
  2. package/build/GenerateNodes.js +0 -1
  3. package/build/Nodes.html +0 -141
  4. package/build/Nodes.js +0 -2
  5. package/build/Plugins.js +2 -2
  6. package/build/core/NodeConstructor.js +15 -50
  7. package/build/core/NodeGenerator.js +8 -10
  8. package/build/core/logger/LoggerDecorator.d.ts.map +1 -1
  9. package/build/core/logger/LoggerDecorator.js +34 -38
  10. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +11 -7
  11. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -1
  12. package/build/core/logger/node/ConsoleLoggerConfigNode.js +24 -10
  13. package/build/core/logger/node/RestLoggerConfigNode.d.ts +22 -6
  14. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -1
  15. package/build/core/logger/node/RestLoggerConfigNode.js +93 -23
  16. package/build/core/logger/service/LoggerService.d.ts +59 -68
  17. package/build/core/logger/service/LoggerService.d.ts.map +1 -1
  18. package/build/core/logger/service/LoggerService.js +76 -165
  19. package/build/core/logger/template/LoggerTemplate.d.ts +9 -1
  20. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
  21. package/build/core/metrics/node/CounterMetricConfigNode.js +0 -2
  22. package/build/core/metrics/node/GaugeMetricConfigNode.js +0 -2
  23. package/build/core/metrics/node/MetricsConfigNode.js +0 -1
  24. package/build/core/metrics/node/TimerMetricConfigNode.js +0 -2
  25. package/build/core/metrics/service/MetricsService.js +10 -24
  26. package/build/core/other/service/SettingsService.js +0 -2
  27. package/build/core/tagging/service/NodeTypeService.js +1 -2
  28. package/build/core/webhook/WebhookDecorator.d.ts.map +1 -1
  29. package/build/core/webhook/WebhookDecorator.js +4 -4
  30. package/build/core/webhook/node/WebhookServerConfigNode.js +0 -1
  31. package/build/core/webhook/service/ReverseProxyTypeService.d.ts +0 -2
  32. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
  33. package/build/core/webhook/service/ReverseProxyTypeService.js +1 -6
  34. package/build/core/webhook/service/WebhookServerService.d.ts +1 -1
  35. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
  36. package/build/core/webhook/service/WebhookServerService.js +6 -9
  37. package/build/core/webhook/template/WebhookTemplate.d.ts +1 -1
  38. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
  39. package/build/index.d.ts +1 -2
  40. package/build/index.d.ts.map +1 -1
  41. package/build/index.js +1 -2
  42. package/build/resources/editorLanguageExtension.js +1 -2
  43. package/package.json +5 -3
  44. package/resources/editorLanguageExtension.js +1 -2
  45. package/src/GenerateNodes.ts +2 -2
  46. package/src/core/NodeConstructor.ts +1 -1
  47. package/src/core/NodeGenerator.ts +2 -2
  48. package/src/core/logger/LoggerDecorator.ts +56 -53
  49. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +39 -14
  50. package/src/core/logger/node/RestLoggerConfigNode.ts +128 -25
  51. package/src/core/logger/service/LoggerService.ts +103 -239
  52. package/src/core/logger/template/LoggerTemplate.ts +11 -1
  53. package/src/core/webhook/WebhookDecorator.ts +1 -3
  54. package/src/core/webhook/service/ReverseProxyTypeService.ts +0 -4
  55. package/src/core/webhook/service/WebhookServerService.ts +1 -1
  56. package/src/core/webhook/template/WebhookTemplate.ts +1 -1
  57. package/src/index.ts +2 -2
  58. package/build/core/logger/node/LokiLoggerConfigNode.d.ts +0 -20
  59. package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +0 -1
  60. package/build/core/logger/node/LokiLoggerConfigNode.html +0 -117
  61. package/build/core/logger/node/LokiLoggerConfigNode.js +0 -53
  62. package/build/core/logger/service/LoggerServiceTypes.d.ts +0 -24
  63. package/build/core/logger/service/LoggerServiceTypes.d.ts.map +0 -1
  64. package/build/core/logger/service/LoggerServiceTypes.js +0 -30
  65. package/documentation/LokiLoggerConfigNode.png +0 -0
  66. package/src/core/logger/node/LokiLoggerConfigNode.html +0 -117
  67. package/src/core/logger/node/LokiLoggerConfigNode.ts +0 -58
  68. package/src/core/logger/service/LoggerServiceTypes.ts +0 -26
@@ -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":"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"}
@@ -3,185 +3,83 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LoggerService = exports.NewLogger = exports.LogImplementation = void 0;
6
+ exports.DoNothingAppender = exports.LoggerConfigNode = exports.LoggerService = exports.AbstractLogger = exports.Log = exports.ApiKeyMechanismType = exports.RestAuthType = exports.Level = void 0;
7
7
  const NodeConstructor_1 = require("../../NodeConstructor");
8
8
  const handlebars_1 = __importDefault(require("handlebars"));
9
- const winston_1 = require("winston");
10
- const winston_loki_1 = __importDefault(require("winston-loki"));
11
- const whatwg_url_1 = require("whatwg-url");
12
9
  const LoggerTemplate_1 = require("../template/LoggerTemplate");
13
10
  var network = require('network');
14
- const deep_equal_1 = __importDefault(require("deep-equal"));
15
- const LoggerServiceTypes_1 = require("./LoggerServiceTypes");
16
11
  // helper for serializing json objects inside handlebars tags.
17
12
  // you can then convert it like this: {{{json myobject}}}
18
13
  handlebars_1.default.registerHelper('json', function (context) {
19
14
  return JSON.stringify(context);
20
15
  });
21
- class LogImplementation {
22
- root;
23
- config;
24
- template;
25
- tagMap;
26
- constructor(root, config) {
27
- this.root = root;
28
- this.config = config;
29
- this.template = (config.override && config.template) ? handlebars_1.default.compile(config.template) : undefined;
30
- this.tagMap = {
31
- instance: LoggerService.instanceID,
32
- flow: config.flow,
16
+ var Level;
17
+ (function (Level) {
18
+ Level["DEBUG"] = "DEBUG";
19
+ Level["INFO"] = "INFO";
20
+ Level["WARNING"] = "WARNING";
21
+ Level["ERROR"] = "ERROR";
22
+ })(Level || (exports.Level = Level = {}));
23
+ var RestAuthType;
24
+ (function (RestAuthType) {
25
+ RestAuthType["none"] = "none";
26
+ RestAuthType["basic"] = "basic";
27
+ RestAuthType["apikey"] = "apikey";
28
+ })(RestAuthType || (exports.RestAuthType = RestAuthType = {}));
29
+ var ApiKeyMechanismType;
30
+ (function (ApiKeyMechanismType) {
31
+ ApiKeyMechanismType["header"] = "header";
32
+ ApiKeyMechanismType["queryparam"] = "queryparam";
33
+ ApiKeyMechanismType["matrixparam"] = "matrixparam";
34
+ })(ApiKeyMechanismType || (exports.ApiKeyMechanismType = ApiKeyMechanismType = {}));
35
+ class Log {
36
+ constructor(config) {
37
+ this._config = config;
38
+ this.template = handlebars_1.default.compile(config.template);
39
+ this.tags = {
40
+ id: config.id,
33
41
  node: config.name,
34
42
  type: config.type,
35
- id: config.id,
36
- };
37
- }
38
- log(message) {
39
- // enrich the logged content with additional properties.
40
- let content = {
41
- currentTime: new Date().toISOString(),
42
- msg: message,
43
+ flow: config.flow,
44
+ instance: LoggerService.instanceID
43
45
  };
44
- // send typ the logger.
45
- this.root.log(this, content);
46
- }
47
- serialize(content) {
48
- return !!this.template ? this.template(content) : this.root.serialize(content);
49
46
  }
50
- getTags() {
51
- return this.tagMap;
52
- }
53
- }
54
- exports.LogImplementation = LogImplementation;
55
- class NewLogger {
56
- _config;
57
- template;
58
- constructor(config) {
59
- this._config = config;
60
- this.template = handlebars_1.default.compile(config.template);
47
+ config() {
48
+ return this._config;
61
49
  }
62
- log(reference, content) {
50
+ log(payload) {
63
51
  try {
64
- // step 1, attempt to serialize the content.
65
- let serializedContent = reference.serialize(content);
66
- // step 2, get the tags.
67
- let tags = reference.getTags();
68
- // step 3. write to the logger.
69
- this.writeToLog(serializedContent, tags);
52
+ // step 1. serialize the payload using the template engine.
53
+ let message = (payload instanceof String) ? payload : this.template({ msg: payload });
54
+ // step 2. write to the log appender.
55
+ this.writeToLog(this.config().level, message, this.tags);
70
56
  }
71
- catch (exception) {
72
- console.log(exception.message);
57
+ catch (e) {
58
+ console.log(e);
73
59
  }
74
60
  }
75
- register(registration) {
76
- return new LogImplementation(this, registration);
77
- }
78
- serialize(content) {
79
- return this.template(content);
80
- }
81
- config() {
82
- return this._config;
83
- }
84
- }
85
- exports.NewLogger = NewLogger;
86
- class ConsoleLogger extends NewLogger {
87
- constructor(config) {
88
- super(config);
89
- }
90
- writeToLog(serializedContent, tags) {
91
- console.log(tags, serializedContent);
92
- }
93
61
  }
94
- class LokiLogger extends NewLogger {
95
- logger;
62
+ exports.Log = Log;
63
+ class AbstractLogger {
96
64
  constructor(config) {
97
- super(config);
98
- let transportConfig = {
99
- host: config.host,
100
- json: true,
101
- format: winston_1.format.json(),
102
- headers: {
103
- "X-Scope-OrgID": (config.tenantid) ? config.tenantid : undefined
104
- },
105
- replaceTimestamp: true,
106
- onConnectionError: (err) => console.error(err),
107
- basicAuth: (config.userid && config.authtoken)
108
- ? `${config.userid}:${config.authtoken}`
109
- : undefined
110
- };
111
- this.logger = (0, winston_1.createLogger)({
112
- level: this.config().level.toString().toLowerCase(),
113
- format: winston_1.format.json(),
114
- defaultMeta: {},
115
- transports: [
116
- new winston_loki_1.default(transportConfig),
117
- ],
118
- });
65
+ this._appenders = {};
66
+ this._config = config;
119
67
  }
120
- writeToLog(serializedContent, tags) {
121
- this.logger.log({ message: serializedContent, level: this.logger.level, labels: tags });
68
+ config() {
69
+ return this._config;
122
70
  }
123
- }
124
- class RestLogger extends NewLogger {
125
- logger;
126
- constructor(config) {
127
- super(config);
128
- let hosturl = (0, whatwg_url_1.parseURL)(config.url);
129
- if (!hosturl) {
130
- throw Error("could not parse url: " + config.url);
71
+ registerTemplate(config) {
72
+ let appender = this._appenders[config.id];
73
+ if (appender) {
74
+ return appender;
131
75
  }
132
- let httpOptions = {};
133
- let httpParams = {
134
- host: hosturl.host?.toString(),
135
- path: "/" + (hosturl.path ? [...hosturl.path].join("/") : "") + (hosturl.query ? ("?" + hosturl.query) : ""),
136
- port: (hosturl.port) ? hosturl.port : undefined,
137
- ssl: hosturl.scheme.toLowerCase() === "https",
138
- headers: {},
139
- };
140
- httpParams.options = httpOptions;
141
- if (config.ignoresslerror) {
142
- httpOptions.rejectUnauthorized = false;
143
- }
144
- if (config.auth_type === LoggerServiceTypes_1.RestAuthType.none) { }
145
- if (config.auth_type === LoggerServiceTypes_1.RestAuthType.basic) {
146
- httpParams.auth = {
147
- username: config.auth_basic_username,
148
- password: config.auth_basic_password
149
- };
150
- }
151
- if (config.auth_type === LoggerServiceTypes_1.RestAuthType.apikey) {
152
- if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.header) {
153
- httpParams.headers[config.auth_apikey_name] = config.auth_apikey_value;
154
- }
155
- if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.matrixparam) {
156
- httpParams.path = httpParams.path?.replace(`:${config.auth_apikey_name}`, config.auth_apikey_value);
157
- }
158
- if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.queryparam) {
159
- httpParams.path = httpParams.path + (httpParams.path?.includes("?") ? "&" : "?") + config.auth_apikey_name + "=" + config.auth_apikey_value;
160
- }
161
- }
162
- ;
163
- this.logger = (0, winston_1.createLogger)({
164
- level: config.level.toString().toLowerCase(),
165
- format: winston_1.format.json(),
166
- defaultMeta: {},
167
- transports: [
168
- new winston_1.transports.Http(httpParams),
169
- ],
170
- });
171
- }
172
- writeToLog(serializedContent, tags) {
173
- this.logger.log({ level: this.logger.level, message: serializedContent, labels: tags });
76
+ let _this = this;
77
+ this._appenders[config.id] = appender = this.createLogger(config);
78
+ return appender;
174
79
  }
175
80
  }
176
- let LoggerTypes = {
177
- console: ConsoleLogger,
178
- loki: LokiLogger,
179
- rest: RestLogger
180
- };
81
+ exports.AbstractLogger = AbstractLogger;
181
82
  class LoggerService extends NodeConstructor_1.BaseService {
182
- static instanceID;
183
- static loggers = {};
184
- red;
185
83
  constructor() {
186
84
  super("logger");
187
85
  }
@@ -194,20 +92,33 @@ class LoggerService extends NodeConstructor_1.BaseService {
194
92
  });
195
93
  }
196
94
  deinit(red) { }
197
- static get(config) {
198
- let logger = this.loggers[config.id];
199
- if (logger) {
200
- if (!(0, deep_equal_1.default)(config, logger.config())) {
201
- this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
202
- }
203
- }
204
- else {
205
- this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
206
- }
207
- return logger;
208
- }
209
95
  static getServiceDescriptor() {
210
96
  return new NodeConstructor_1.ServiceDescriptor("@theotherwillembotha/loggerservice", "LoggerService", "services-plugin", "@theotherwillembotha/node-red-plugincore", LoggerService, [LoggerTemplate_1.LoggerTemplate]);
211
97
  }
212
98
  }
213
99
  exports.LoggerService = LoggerService;
100
+ class LoggerConfigNode extends NodeConstructor_1.ConfigNode {
101
+ constructor(node, config) {
102
+ super(node, config);
103
+ }
104
+ registerTemplate(config) {
105
+ return this.logger().registerTemplate(config);
106
+ }
107
+ }
108
+ exports.LoggerConfigNode = LoggerConfigNode;
109
+ class DoNothingAppender extends Log {
110
+ static { this.instance = new DoNothingAppender(); }
111
+ static get() {
112
+ return DoNothingAppender.instance;
113
+ }
114
+ constructor() {
115
+ super({ flow: "", id: "", level: "", name: "", template: "", type: "" });
116
+ }
117
+ log(payload) {
118
+ // do nothing.
119
+ }
120
+ writeToLog(level, message, tags) {
121
+ // do nothing.
122
+ }
123
+ }
124
+ exports.DoNothingAppender = DoNothingAppender;
@@ -1,10 +1,18 @@
1
1
  import { BaseNodeConfig, Template, TemplateDescriptor } from "../../NodeConstructor";
2
- export interface LoggerTemplateConfig extends BaseNodeConfig {
2
+ export interface LoggerTemplateNodeConfig extends BaseNodeConfig {
3
3
  logEnabled: boolean;
4
4
  logger: string;
5
5
  logTemplateOverrideEnabled: boolean;
6
6
  logTemplateOverride: string;
7
7
  }
8
+ export type LoggerTemplateConfig = {
9
+ id: string;
10
+ flow: string;
11
+ type: string;
12
+ name: string;
13
+ template: string;
14
+ level: string;
15
+ };
8
16
  export declare class LoggerTemplate extends Template {
9
17
  static getTemplateDescriptor(): TemplateDescriptor;
10
18
  }