@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.
- package/README.md +9 -9
- package/build/GenerateNodes.js +0 -1
- package/build/Nodes.html +23 -162
- package/build/Nodes.js +0 -2
- package/build/Plugins.js +2 -3
- package/build/core/NodeConstructor.d.ts +1 -0
- package/build/core/NodeConstructor.d.ts.map +1 -1
- package/build/core/NodeConstructor.js +20 -62
- package/build/core/NodeGenerator.d.ts.map +1 -1
- package/build/core/NodeGenerator.js +8 -11
- package/build/core/logger/LoggerDecorator.d.ts.map +1 -1
- package/build/core/logger/LoggerDecorator.js +34 -38
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +11 -7
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -1
- package/build/core/logger/node/ConsoleLoggerConfigNode.js +24 -10
- package/build/core/logger/node/RestLoggerConfigNode.d.ts +22 -6
- package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -1
- package/build/core/logger/node/RestLoggerConfigNode.js +93 -23
- package/build/core/logger/service/LoggerService.d.ts +59 -68
- package/build/core/logger/service/LoggerService.d.ts.map +1 -1
- package/build/core/logger/service/LoggerService.js +76 -165
- package/build/core/logger/template/LoggerTemplate.d.ts +9 -1
- package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
- package/build/core/metrics/node/CounterMetricConfigNode.js +0 -2
- package/build/core/metrics/node/GaugeMetricConfigNode.js +0 -2
- package/build/core/metrics/node/MetricsConfigNode.js +0 -1
- package/build/core/metrics/node/TimerMetricConfigNode.js +0 -2
- package/build/core/metrics/service/MetricsService.js +10 -24
- package/build/core/other/service/SettingsService.js +0 -2
- package/build/core/tagging/service/NodeTypeService.js +1 -2
- package/build/core/webhook/WebhookDecorator.d.ts.map +1 -1
- package/build/core/webhook/WebhookDecorator.js +47 -10
- package/build/core/webhook/node/WebhookServerConfigNode.js +0 -1
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts +1 -2
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
- package/build/core/webhook/service/ReverseProxyTypeService.js +1 -6
- package/build/core/webhook/service/WebhookServerService.d.ts +1 -1
- package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
- package/build/core/webhook/service/WebhookServerService.js +6 -14
- package/build/core/webhook/template/WebhookTemplate.d.ts +1 -1
- package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
- package/build/index.d.ts +1 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -2
- package/build/resources/editorLanguageExtension.js +1 -2
- package/package.json +6 -5
- package/resources/editorLanguageExtension.js +1 -2
- package/src/GenerateNodes.ts +2 -2
- package/src/core/NodeConstructor.ts +7 -14
- package/src/core/NodeGenerator.ts +2 -3
- package/src/core/logger/LoggerDecorator.ts +56 -53
- package/src/core/logger/node/ConsoleLoggerConfigNode.ts +39 -14
- package/src/core/logger/node/RestLoggerConfigNode.ts +128 -25
- package/src/core/logger/service/LoggerService.ts +103 -239
- package/src/core/logger/template/LoggerTemplate.html +2 -2
- package/src/core/logger/template/LoggerTemplate.ts +11 -1
- package/src/core/metrics/node/TimerMetricConfigNode.html +2 -2
- package/src/core/other/template/BasicTemplate.html +5 -2
- package/src/core/webhook/WebhookDecorator.ts +54 -13
- package/src/core/webhook/service/ReverseProxyTypeService.ts +1 -4
- package/src/core/webhook/service/WebhookServerService.ts +1 -6
- package/src/core/webhook/template/WebhookTemplate.html +1 -1
- package/src/core/webhook/template/WebhookTemplate.ts +1 -1
- package/src/index.ts +2 -2
- package/build/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts +0 -20
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +0 -1
- package/build/core/logger/node/LokiLoggerConfigNode.html +0 -117
- package/build/core/logger/node/LokiLoggerConfigNode.js +0 -53
- package/build/core/logger/node/RestLoggerConfigNode.html +0 -183
- package/build/core/logger/service/LoggerServiceTypes.d.ts +0 -24
- package/build/core/logger/service/LoggerServiceTypes.d.ts.map +0 -1
- package/build/core/logger/service/LoggerServiceTypes.js +0 -30
- package/build/core/logger/template/LoggerTemplate.html +0 -331
- package/build/core/metrics/node/CounterMetricConfigNode.html +0 -48
- package/build/core/metrics/node/GaugeMetricConfigNode.html +0 -48
- package/build/core/metrics/node/MetricsConfigNode.html +0 -21
- package/build/core/metrics/node/TimerMetricConfigNode.html +0 -190
- package/build/core/metrics/template/CounterMetricTemplate.html +0 -40
- package/build/core/metrics/template/GaugeMetricTemplate.html +0 -39
- package/build/core/metrics/template/MetricsTemplate.html +0 -54
- package/build/core/metrics/template/TimerMetricTemplate.html +0 -39
- package/build/core/other/node/DelegatedConfigReferenceNode.html +0 -1
- package/build/core/other/template/BasicTemplate.html +0 -76
- package/build/core/other/template/SettingsTemplate.html +0 -128
- package/build/core/ui/template/ScriptEditorTemplate.html +0 -50
- package/build/core/ui/template/UIHelperTemplate.html +0 -229
- package/build/core/webhook/node/WebhookServerConfigNode.html +0 -61
- package/build/core/webhook/template/WebhookTemplate.html +0 -442
- package/documentation/LokiLoggerConfigNode.png +0 -0
- package/src/core/logger/node/LokiLoggerConfigNode.html +0 -117
- package/src/core/logger/node/LokiLoggerConfigNode.ts +0 -58
- 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
|
|
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 ===
|
|
27
|
+
if (endpoint.authentication.type === LoggerService_1.RestAuthType.none) {
|
|
31
28
|
authenticator = (request, response) => Promise.resolve(true);
|
|
32
29
|
}
|
|
33
|
-
if (endpoint.authentication.type ===
|
|
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 ===
|
|
36
|
+
if (endpoint.authentication.type === LoggerService_1.RestAuthType.apikey) {
|
|
40
37
|
let auth = endpoint.authentication;
|
|
41
38
|
authenticator = (request, response) => {
|
|
42
|
-
if (auth.mechanism ===
|
|
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 {
|
|
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,
|
|
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/
|
|
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";
|
package/build/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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/
|
|
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
|
|
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
|
|
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
|
}
|
package/src/GenerateNodes.ts
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
602
|
-
if(template.
|
|
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] = {
|
|
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,
|
|
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
|
-
|
|
24
|
-
let
|
|
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
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
logger
|
|
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
|
-
|
|
59
|
-
property.addInitializer(function(this:BaseNode<
|
|
60
|
-
let node = this as BaseNode<
|
|
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
|
-
|
|
72
|
+
try{
|
|
67
73
|
let config = node.config();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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
|
|
22
|
+
export class ConsoleLoggerConfigNode extends LoggerConfigNode<ConsoleLoggerConfigNodeConfig, ConsoleLogger> {
|
|
25
23
|
|
|
26
|
-
private _logger!:
|
|
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
|
-
//
|
|
33
|
-
let loggerConfig = {
|
|
30
|
+
// create logger config
|
|
31
|
+
let loggerConfig:ConsoleLoggerConfig = {
|
|
34
32
|
id:this.id(),
|
|
35
|
-
type:
|
|
36
|
-
template:config.template,
|
|
33
|
+
type:"CONSOLE",
|
|
37
34
|
level:config.level,
|
|
35
|
+
template:config.template,
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
// create logger instance:
|
|
39
|
+
this._logger = new ConsoleLogger(loggerConfig);
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
return this._logger
|
|
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
|
+
}
|