@theotherwillembotha/node-red-plugincore 0.0.53 → 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.
- package/README.md +62 -8
- package/build/GenerateNodes.js +0 -1
- package/build/Nodes.html +0 -141
- package/build/Nodes.js +0 -2
- package/build/Plugins.js +2 -2
- package/build/core/NodeConstructor.d.ts +1 -0
- package/build/core/NodeConstructor.d.ts.map +1 -1
- package/build/core/NodeConstructor.js +5 -2
- package/build/core/NodeGenerator.js +9 -9
- 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 -9
- 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 -22
- 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 -155
- 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/service/MetricsService.js +1 -1
- package/build/core/webhook/WebhookDecorator.d.ts.map +1 -1
- package/build/core/webhook/WebhookDecorator.js +4 -4
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts +0 -2
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
- package/build/core/webhook/service/ReverseProxyTypeService.js +1 -4
- 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 -6
- 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 -1
- package/package.json +5 -3
- package/resources/editorLanguageExtension.js +1 -1
- package/src/GenerateNodes.ts +2 -2
- package/src/core/NodeConstructor.ts +5 -1
- package/src/core/NodeGenerator.ts +2 -2
- 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.ts +11 -1
- package/src/core/webhook/WebhookDecorator.ts +1 -3
- package/src/core/webhook/service/ReverseProxyTypeService.ts +0 -4
- package/src/core/webhook/service/WebhookServerService.ts +1 -1
- package/src/core/webhook/template/WebhookTemplate.ts +1 -1
- package/src/index.ts +2 -2
- 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 -52
- 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/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
|
@@ -3,173 +3,82 @@ 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.
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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,
|
|
29
41
|
node: config.name,
|
|
30
42
|
type: config.type,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
log(message) {
|
|
35
|
-
// enrich the logged content with additional properties.
|
|
36
|
-
let content = {
|
|
37
|
-
currentTime: new Date().toISOString(),
|
|
38
|
-
msg: message,
|
|
43
|
+
flow: config.flow,
|
|
44
|
+
instance: LoggerService.instanceID
|
|
39
45
|
};
|
|
40
|
-
// send typ the logger.
|
|
41
|
-
this.root.log(this, content);
|
|
42
|
-
}
|
|
43
|
-
serialize(content) {
|
|
44
|
-
return !!this.template ? this.template(content) : this.root.serialize(content);
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
-
return this.
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.LogImplementation = LogImplementation;
|
|
51
|
-
class NewLogger {
|
|
52
|
-
constructor(config) {
|
|
53
|
-
this._config = config;
|
|
54
|
-
this.template = handlebars_1.default.compile(config.template);
|
|
47
|
+
config() {
|
|
48
|
+
return this._config;
|
|
55
49
|
}
|
|
56
|
-
log(
|
|
50
|
+
log(payload) {
|
|
57
51
|
try {
|
|
58
|
-
// step 1
|
|
59
|
-
let
|
|
60
|
-
// step 2
|
|
61
|
-
|
|
62
|
-
// step 3. write to the logger.
|
|
63
|
-
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);
|
|
64
56
|
}
|
|
65
|
-
catch (
|
|
66
|
-
console.log(
|
|
57
|
+
catch (e) {
|
|
58
|
+
console.log(e);
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
|
-
register(registration) {
|
|
70
|
-
return new LogImplementation(this, registration);
|
|
71
|
-
}
|
|
72
|
-
serialize(content) {
|
|
73
|
-
return this.template(content);
|
|
74
|
-
}
|
|
75
|
-
config() {
|
|
76
|
-
return this._config;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
exports.NewLogger = NewLogger;
|
|
80
|
-
class ConsoleLogger extends NewLogger {
|
|
81
|
-
constructor(config) {
|
|
82
|
-
super(config);
|
|
83
|
-
}
|
|
84
|
-
writeToLog(serializedContent, tags) {
|
|
85
|
-
console.log(tags, serializedContent);
|
|
86
|
-
}
|
|
87
61
|
}
|
|
88
|
-
|
|
62
|
+
exports.Log = Log;
|
|
63
|
+
class AbstractLogger {
|
|
89
64
|
constructor(config) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
host: config.host,
|
|
93
|
-
json: true,
|
|
94
|
-
format: winston_1.format.json(),
|
|
95
|
-
headers: {
|
|
96
|
-
"X-Scope-OrgID": (config.tenantid) ? config.tenantid : undefined
|
|
97
|
-
},
|
|
98
|
-
replaceTimestamp: true,
|
|
99
|
-
onConnectionError: (err) => console.error(err),
|
|
100
|
-
basicAuth: (config.userid && config.authtoken)
|
|
101
|
-
? `${config.userid}:${config.authtoken}`
|
|
102
|
-
: undefined
|
|
103
|
-
};
|
|
104
|
-
this.logger = (0, winston_1.createLogger)({
|
|
105
|
-
level: this.config().level.toString().toLowerCase(),
|
|
106
|
-
format: winston_1.format.json(),
|
|
107
|
-
defaultMeta: {},
|
|
108
|
-
transports: [
|
|
109
|
-
new winston_loki_1.default(transportConfig),
|
|
110
|
-
],
|
|
111
|
-
});
|
|
65
|
+
this._appenders = {};
|
|
66
|
+
this._config = config;
|
|
112
67
|
}
|
|
113
|
-
|
|
114
|
-
|
|
68
|
+
config() {
|
|
69
|
+
return this._config;
|
|
115
70
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
let hosturl = (0, whatwg_url_1.parseURL)(config.url);
|
|
121
|
-
if (!hosturl) {
|
|
122
|
-
throw Error("could not parse url: " + config.url);
|
|
71
|
+
registerTemplate(config) {
|
|
72
|
+
let appender = this._appenders[config.id];
|
|
73
|
+
if (appender) {
|
|
74
|
+
return appender;
|
|
123
75
|
}
|
|
124
|
-
let
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
path: "/" + (hosturl.path ? [...hosturl.path].join("/") : "") + (hosturl.query ? ("?" + hosturl.query) : ""),
|
|
128
|
-
port: (hosturl.port) ? hosturl.port : undefined,
|
|
129
|
-
ssl: hosturl.scheme.toLowerCase() === "https",
|
|
130
|
-
headers: {},
|
|
131
|
-
};
|
|
132
|
-
httpParams.options = httpOptions;
|
|
133
|
-
if (config.ignoresslerror) {
|
|
134
|
-
httpOptions.rejectUnauthorized = false;
|
|
135
|
-
}
|
|
136
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.none) { }
|
|
137
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.basic) {
|
|
138
|
-
httpParams.auth = {
|
|
139
|
-
username: config.auth_basic_username,
|
|
140
|
-
password: config.auth_basic_password
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.apikey) {
|
|
144
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.header) {
|
|
145
|
-
httpParams.headers[config.auth_apikey_name] = config.auth_apikey_value;
|
|
146
|
-
}
|
|
147
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.matrixparam) {
|
|
148
|
-
httpParams.path = httpParams.path?.replace(`:${config.auth_apikey_name}`, config.auth_apikey_value);
|
|
149
|
-
}
|
|
150
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.queryparam) {
|
|
151
|
-
httpParams.path = httpParams.path + (httpParams.path?.includes("?") ? "&" : "?") + config.auth_apikey_name + "=" + config.auth_apikey_value;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
;
|
|
155
|
-
this.logger = (0, winston_1.createLogger)({
|
|
156
|
-
level: config.level.toString().toLowerCase(),
|
|
157
|
-
format: winston_1.format.json(),
|
|
158
|
-
defaultMeta: {},
|
|
159
|
-
transports: [
|
|
160
|
-
new winston_1.transports.Http(httpParams),
|
|
161
|
-
],
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
writeToLog(serializedContent, tags) {
|
|
165
|
-
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;
|
|
166
79
|
}
|
|
167
80
|
}
|
|
168
|
-
|
|
169
|
-
console: ConsoleLogger,
|
|
170
|
-
loki: LokiLogger,
|
|
171
|
-
rest: RestLogger
|
|
172
|
-
};
|
|
81
|
+
exports.AbstractLogger = AbstractLogger;
|
|
173
82
|
class LoggerService extends NodeConstructor_1.BaseService {
|
|
174
83
|
constructor() {
|
|
175
84
|
super("logger");
|
|
@@ -183,21 +92,33 @@ class LoggerService extends NodeConstructor_1.BaseService {
|
|
|
183
92
|
});
|
|
184
93
|
}
|
|
185
94
|
deinit(red) { }
|
|
186
|
-
static get(config) {
|
|
187
|
-
let logger = this.loggers[config.id];
|
|
188
|
-
if (logger) {
|
|
189
|
-
if (!(0, deep_equal_1.default)(config, logger.config())) {
|
|
190
|
-
this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
|
|
195
|
-
}
|
|
196
|
-
return logger;
|
|
197
|
-
}
|
|
198
95
|
static getServiceDescriptor() {
|
|
199
96
|
return new NodeConstructor_1.ServiceDescriptor("@theotherwillembotha/loggerservice", "LoggerService", "services-plugin", "@theotherwillembotha/node-red-plugincore", LoggerService, [LoggerTemplate_1.LoggerTemplate]);
|
|
200
97
|
}
|
|
201
98
|
}
|
|
202
99
|
exports.LoggerService = LoggerService;
|
|
203
|
-
|
|
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
|
|
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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggerTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/template/LoggerTemplate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"LoggerTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/template/LoggerTemplate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGpF,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC5D,UAAU,EAAC,OAAO,CAAC;IACnB,MAAM,EAAC,MAAM,CAAC;IACd,0BAA0B,EAAC,OAAO,CAAC;IACnC,mBAAmB,EAAC,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,EAAE,EAAC,MAAM,CAAC;IACV,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAChB,KAAK,EAAC,MAAM,CAAC;CAChB,CAAA;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAGxC,MAAM,CAAC,qBAAqB,IAAI,kBAAkB;CAQrD"}
|
|
@@ -328,6 +328,7 @@ class MetricsContainer {
|
|
|
328
328
|
}
|
|
329
329
|
exports.MetricsContainer = MetricsContainer;
|
|
330
330
|
class MetricsService extends NodeConstructor_1.BaseService {
|
|
331
|
+
static { this.metrics = {}; }
|
|
331
332
|
constructor() {
|
|
332
333
|
super("MetricsService");
|
|
333
334
|
}
|
|
@@ -365,7 +366,6 @@ class MetricsService extends NodeConstructor_1.BaseService {
|
|
|
365
366
|
}
|
|
366
367
|
}
|
|
367
368
|
exports.MetricsService = MetricsService;
|
|
368
|
-
MetricsService.metrics = {};
|
|
369
369
|
/*
|
|
370
370
|
Quick explanation of how this is supposed to work:
|
|
371
371
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookDecorator.d.ts","sourceRoot":"","sources":["../../../src/core/webhook/WebhookDecorator.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"WebhookDecorator.d.ts","sourceRoot":"","sources":["../../../src/core/webhook/WebhookDecorator.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,OAAO,KAkDD,CAAC;AAGb,OAAO,EACH,OAAO,EACV,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Webhook = void 0;
|
|
4
|
-
const
|
|
4
|
+
const LoggerService_1 = require("../logger/service/LoggerService");
|
|
5
5
|
const NodeConstructor_1 = require("../NodeConstructor");
|
|
6
6
|
const Webhook = (0, NodeConstructor_1.createPostConstructDecorator)('Webhook')
|
|
7
7
|
.withInitLogic(async (instance, propertyKey, webhookconfig) => {
|
|
@@ -9,9 +9,9 @@ const Webhook = (0, NodeConstructor_1.createPostConstructDecorator)('Webhook')
|
|
|
9
9
|
let node = instance;
|
|
10
10
|
let nodeConfig = node.config();
|
|
11
11
|
// create the authentication.
|
|
12
|
-
let authentication = (nodeConfig.webhookAuth ===
|
|
13
|
-
(nodeConfig.webhookAuth ===
|
|
14
|
-
{ type:
|
|
12
|
+
let authentication = (nodeConfig.webhookAuth === LoggerService_1.RestAuthType.basic) ? { type: LoggerService_1.RestAuthType.basic, username: nodeConfig.webhookAuth_basic_username, password: nodeConfig.webhookAuth_basic_password } :
|
|
13
|
+
(nodeConfig.webhookAuth === LoggerService_1.RestAuthType.apikey) ? { type: LoggerService_1.RestAuthType.apikey, mechanism: nodeConfig.webhookAuth_apikey_mechanism, key: nodeConfig.webhookAuth_apikey_key, value: nodeConfig.webhookAuth_apikey_value } :
|
|
14
|
+
{ type: LoggerService_1.RestAuthType.none };
|
|
15
15
|
// register a callback listener to the webserver.
|
|
16
16
|
let endpointConfig = {
|
|
17
17
|
path: nodeConfig.webhookPath,
|
|
@@ -9,8 +9,6 @@ export interface ProxyManagerClient {
|
|
|
9
9
|
updateHost(data: Partial<HostEntry>): Promise<void>;
|
|
10
10
|
getHosts(): Promise<Partial<HostEntry>[]>;
|
|
11
11
|
}
|
|
12
|
-
export declare abstract class ReverseProxyClient {
|
|
13
|
-
}
|
|
14
12
|
export type HostEntry = {
|
|
15
13
|
id: number;
|
|
16
14
|
domainNames: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReverseProxyTypeService.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/service/ReverseProxyTypeService.ts"],"names":[],"mappings":"AAGA,8BAAsB,gBAAgB;IAElC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;gBAEV,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM;IAK3B,EAAE,IAAG,MAAM;IAGX,IAAI,IAAG,MAAM;CAGvB;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,IAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CAC5C;AAED,
|
|
1
|
+
{"version":3,"file":"ReverseProxyTypeService.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/service/ReverseProxyTypeService.ts"],"names":[],"mappings":"AAGA,8BAAsB,gBAAgB;IAElC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;gBAEV,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM;IAK3B,EAAE,IAAG,MAAM;IAGX,IAAI,IAAG,MAAM;CAGvB;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,IAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,EAAC,MAAM,CAAC;IACV,WAAW,EAAC,MAAM,EAAE,CAAC;IACrB,MAAM,EAAC,UAAU,CAAC;IAClB,WAAW,EAAC,MAAM,CAAC;IACnB,WAAW,EAAC,MAAM,CAAC;IACnB,UAAU,EAAC,MAAM,CAAC;IAClB,WAAW,EAAC,OAAO,CAAC;IACpB,mBAAmB,EAAC,OAAO,CAAC;IAC5B,gBAAgB,EAAC,OAAO,CAAC;CAC5B,CAAA;AAED,oBAAY,UAAU;IAClB,IAAI,SAAS;IACb,KAAK,UAAU;CAClB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HTTPScheme = exports.
|
|
3
|
+
exports.HTTPScheme = exports.ReverseProxyType = void 0;
|
|
4
4
|
class ReverseProxyType {
|
|
5
5
|
constructor(id, name) {
|
|
6
6
|
this._id = id;
|
|
@@ -14,9 +14,6 @@ class ReverseProxyType {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.ReverseProxyType = ReverseProxyType;
|
|
17
|
-
class ReverseProxyClient {
|
|
18
|
-
}
|
|
19
|
-
exports.ReverseProxyClient = ReverseProxyClient;
|
|
20
17
|
var HTTPScheme;
|
|
21
18
|
(function (HTTPScheme) {
|
|
22
19
|
HTTPScheme["HTTP"] = "http";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseService, FlowDeployment, ServiceDescriptor } from "../../NodeConstructor";
|
|
2
2
|
import { NodeAPI, NodeAPISettingsWithData } from "node-red";
|
|
3
3
|
import { Request, Response } from "express";
|
|
4
|
-
import { ApiKeyMechanismType, RestAuthType } from "../../logger/service/
|
|
4
|
+
import { ApiKeyMechanismType, RestAuthType } from "../../logger/service/LoggerService";
|
|
5
5
|
export declare enum EndpointMethodType {
|
|
6
6
|
GET = "GET",
|
|
7
7
|
POST = "POST"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookServerService.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/service/WebhookServerService.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAgB,EAAU,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"WebhookServerService.d.ts","sourceRoot":"","sources":["../../../../src/core/webhook/service/WebhookServerService.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAG5D,OAAgB,EAAU,OAAO,EAAE,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIvF,oBAAY,kBAAkB;IAC1B,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,EAAC,YAAY,CAAC,IAAI,CAAC;CAC1B,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACpC,IAAI,EAAC,YAAY,CAAC,KAAK,CAAA;IACvB,QAAQ,EAAC,MAAM,CAAC;IAChB,QAAQ,EAAC,MAAM,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,IAAI,EAAC,YAAY,CAAC,MAAM,CAAC;IACzB,SAAS,EAAC,mBAAmB,CAAC;IAC9B,GAAG,EAAC,MAAM,CAAC;IACX,KAAK,EAAC,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAC,kBAAkB,EAAE,CAAC;IAC7B,cAAc,EAAE,sBAAsB,GAAG,yBAAyB,GAAG,0BAA0B,CAAC;CACnG,CAAA;AAED,qBAAa,aAAa;IAEtB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEP,MAAM,EAAC,mBAAmB;IAQtC,MAAM,CAAC,QAAQ,EAAC,cAAc,EAAE,QAAQ,EAAC,CAAC,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,QAAQ,KAAK,GAAG;IA+CpF,MAAM,CAAC,aAAa,EAAC,cAAc;IAsBnC,MAAM,IAAG,mBAAmB;CAGtC;AAED,MAAM,MAAO,mBAAmB,GAAG;IAC/B,EAAE,EAAC,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAC,MAAM,CAAC;IACpB,YAAY,EAAC,MAAM,CAAC;CACvB,CAAA;AAED,qBAAa,oBAAqB,SAAQ,WAAW;IAEjD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAmC;;IAMzD,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;WAyCvD,GAAG,CAAE,MAAM,EAAC,mBAAmB,GAAG,aAAa;WAS7C,oBAAoB,IAAG,iBAAiB;CAU3D"}
|
|
@@ -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) {
|
|
@@ -24,19 +24,19 @@ class WebhookServer {
|
|
|
24
24
|
}
|
|
25
25
|
attach(endpoint, callback) {
|
|
26
26
|
let authenticator;
|
|
27
|
-
if (endpoint.authentication.type ===
|
|
27
|
+
if (endpoint.authentication.type === LoggerService_1.RestAuthType.none) {
|
|
28
28
|
authenticator = (request, response) => Promise.resolve(true);
|
|
29
29
|
}
|
|
30
|
-
if (endpoint.authentication.type ===
|
|
30
|
+
if (endpoint.authentication.type === LoggerService_1.RestAuthType.basic) {
|
|
31
31
|
let header = "Basic " + Buffer.from(`${endpoint.authentication.username}:${endpoint.authentication.password}`).toString("base64");
|
|
32
32
|
authenticator = (request, response) => {
|
|
33
33
|
return Promise.resolve(header === request.headers.authorization);
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
if (endpoint.authentication.type ===
|
|
36
|
+
if (endpoint.authentication.type === LoggerService_1.RestAuthType.apikey) {
|
|
37
37
|
let auth = endpoint.authentication;
|
|
38
38
|
authenticator = (request, response) => {
|
|
39
|
-
if (auth.mechanism ===
|
|
39
|
+
if (auth.mechanism === LoggerService_1.ApiKeyMechanismType.header) {
|
|
40
40
|
return Promise.resolve(request.headers[auth.key] === auth.value);
|
|
41
41
|
}
|
|
42
42
|
console.log("No APIKEY Authentication Handler Implementation for Type: " + auth.mechanism);
|
|
@@ -87,6 +87,7 @@ class WebhookServer {
|
|
|
87
87
|
}
|
|
88
88
|
exports.WebhookServer = WebhookServer;
|
|
89
89
|
class WebhookServerService extends NodeConstructor_1.BaseService {
|
|
90
|
+
static { this.webhookServers = {}; }
|
|
90
91
|
constructor() {
|
|
91
92
|
super("wehbookserver");
|
|
92
93
|
}
|
|
@@ -143,4 +144,3 @@ class WebhookServerService extends NodeConstructor_1.BaseService {
|
|
|
143
144
|
}
|
|
144
145
|
}
|
|
145
146
|
exports.WebhookServerService = WebhookServerService;
|
|
146
|
-
WebhookServerService.webhookServers = {};
|
|
@@ -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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
if (window.ScriptEditorLanguageManager === undefined) {
|
|
3
3
|
class ScriptEditorLanguageManager {
|
|
4
|
+
static { this.counter = 0; }
|
|
4
5
|
static async createLanguage(monaco, template) {
|
|
5
6
|
// generate a language name.
|
|
6
7
|
let langName = "js_variant_" + ScriptEditorLanguageManager.counter;
|
|
@@ -325,7 +326,6 @@ if (window.ScriptEditorLanguageManager === undefined) {
|
|
|
325
326
|
});
|
|
326
327
|
}
|
|
327
328
|
}
|
|
328
|
-
ScriptEditorLanguageManager.counter = 0;
|
|
329
329
|
class ScriptEditorLanguage {
|
|
330
330
|
constructor(name) {
|
|
331
331
|
this.name = name;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theotherwillembotha/node-red-plugincore",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.55",
|
|
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",
|
|
@@ -40,6 +40,9 @@
|
|
|
40
40
|
"README.md"
|
|
41
41
|
],
|
|
42
42
|
"homepage": "https://github.com/theotherwillembotha/nodered_plugincore#readme",
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
43
46
|
"engines": {
|
|
44
47
|
"node": ">=18",
|
|
45
48
|
"nodered": ">=4.0.0"
|
|
@@ -65,8 +68,7 @@
|
|
|
65
68
|
"prom-client": "^15.1.3",
|
|
66
69
|
"reflect-metadata": "^0.2.2",
|
|
67
70
|
"whatwg-url": "^16.0.1",
|
|
68
|
-
"winston": "^3.17.0"
|
|
69
|
-
"winston-loki": "^6.1.3"
|
|
71
|
+
"winston": "^3.17.0"
|
|
70
72
|
},
|
|
71
73
|
"node-red": {
|
|
72
74
|
"version": ">=4.0.0",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
if (window.ScriptEditorLanguageManager === undefined) {
|
|
3
3
|
class ScriptEditorLanguageManager {
|
|
4
|
+
static { this.counter = 0; }
|
|
4
5
|
static async createLanguage(monaco, template) {
|
|
5
6
|
// generate a language name.
|
|
6
7
|
let langName = "js_variant_" + ScriptEditorLanguageManager.counter;
|
|
@@ -325,7 +326,6 @@ if (window.ScriptEditorLanguageManager === undefined) {
|
|
|
325
326
|
});
|
|
326
327
|
}
|
|
327
328
|
}
|
|
328
|
-
ScriptEditorLanguageManager.counter = 0;
|
|
329
329
|
class ScriptEditorLanguage {
|
|
330
330
|
constructor(name) {
|
|
331
331
|
this.name = name;
|
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)
|
|
@@ -432,7 +432,7 @@ export class NodeManager{
|
|
|
432
432
|
}
|
|
433
433
|
|
|
434
434
|
let nodeConstructor = function(this: any, config: BaseNodeConfig | NodeDef){
|
|
435
|
-
console.log("constructing node", typeName);
|
|
435
|
+
//console.log("constructing node", typeName);
|
|
436
436
|
|
|
437
437
|
try{
|
|
438
438
|
// instantiate the node.
|
|
@@ -568,6 +568,7 @@ export type DefaultTemplateType = {
|
|
|
568
568
|
required:boolean;
|
|
569
569
|
minInstances?:number;
|
|
570
570
|
maxInstances?:number;
|
|
571
|
+
validate?:Function;
|
|
571
572
|
}
|
|
572
573
|
|
|
573
574
|
export class NodeBuilder {
|
|
@@ -715,6 +716,9 @@ export class NodeBuilder {
|
|
|
715
716
|
case "string": {
|
|
716
717
|
return `'${value}'`
|
|
717
718
|
}
|
|
719
|
+
case "function": {
|
|
720
|
+
return (value as Function).toString();
|
|
721
|
+
}
|
|
718
722
|
case "object": {
|
|
719
723
|
if(Array.isArray(value)){
|
|
720
724
|
return `[${(value as []).map(t => this.serializeProperty(t)).join(", ")}]`
|
|
@@ -211,7 +211,7 @@ module.exports = function (RED) {
|
|
|
211
211
|
RED.events.on('runtime-event', async (event) => {
|
|
212
212
|
// startup deployment.
|
|
213
213
|
if ("runtime-deploy" === event?.id && startupDeployment) {
|
|
214
|
-
console.log("STARTUP DEPLOYMENT");
|
|
214
|
+
//console.log("STARTUP DEPLOYMENT");
|
|
215
215
|
startupDeployment = false;
|
|
216
216
|
const flows = await runtime.flows.getFlows({});
|
|
217
217
|
await plugin.instance.onDeploy(flows);
|
|
@@ -219,7 +219,7 @@ module.exports = function (RED) {
|
|
|
219
219
|
|
|
220
220
|
// stopping flows on redeployment.
|
|
221
221
|
if ("runtime-state" === event?.id && event?.payload?.state === "stop" && event?.payload?.deploy) {
|
|
222
|
-
console.log("REDEPLOY!");
|
|
222
|
+
//console.log("REDEPLOY!");
|
|
223
223
|
const flows = await runtime.flows.getFlows({});
|
|
224
224
|
await plugin.instance.onDeploy(flows);
|
|
225
225
|
}
|