n8n-nodes-logicmonitor 0.1.1 → 0.1.3
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/dist/credentials/LogicMonitorApi.credentials.d.ts.map +1 -1
- package/dist/credentials/LogicMonitorApi.credentials.js +40 -2
- package/dist/credentials/LogicMonitorApi.credentials.js.map +1 -1
- package/dist/nodes/LogicMonitor/helpers/apiRequest.d.ts.map +1 -1
- package/dist/nodes/LogicMonitor/helpers/apiRequest.js +35 -12
- package/dist/nodes/LogicMonitor/helpers/apiRequest.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogicMonitorApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/LogicMonitorApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,qBAAa,eAAgB,YAAW,eAAe;IACtD,IAAI,SAAqB;IACzB,WAAW,SAAsB;IACjC,gBAAgB,SAA0G;IAE1H,UAAU,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"LogicMonitorApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/LogicMonitorApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,qBAAa,eAAgB,YAAW,eAAe;IACtD,IAAI,SAAqB;IACzB,WAAW,SAAsB;IACjC,gBAAgB,SAA0G;IAE1H,UAAU,EAAE,eAAe,EAAE,CAiE3B;CACF"}
|
|
@@ -15,13 +15,31 @@ class LogicMonitorApi {
|
|
|
15
15
|
placeholder: 'mycompany',
|
|
16
16
|
description: 'Your LogicMonitor portal subdomain (e.g. "mycompany" for mycompany.logicmonitor.com)',
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
displayName: 'Authentication Method',
|
|
20
|
+
name: 'authMethod',
|
|
21
|
+
type: 'options',
|
|
22
|
+
options: [
|
|
23
|
+
{
|
|
24
|
+
name: 'LMv1 (Access ID + Access Key)',
|
|
25
|
+
value: 'lmv1',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'Bearer Token',
|
|
29
|
+
value: 'bearer',
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
default: 'lmv1',
|
|
33
|
+
},
|
|
18
34
|
{
|
|
19
35
|
displayName: 'Access ID',
|
|
20
36
|
name: 'accessId',
|
|
21
37
|
type: 'string',
|
|
22
38
|
default: '',
|
|
23
|
-
required: true,
|
|
24
39
|
description: 'The LogicMonitor API Access ID',
|
|
40
|
+
displayOptions: {
|
|
41
|
+
show: { authMethod: ['lmv1'] },
|
|
42
|
+
},
|
|
25
43
|
},
|
|
26
44
|
{
|
|
27
45
|
displayName: 'Access Key',
|
|
@@ -29,8 +47,28 @@ class LogicMonitorApi {
|
|
|
29
47
|
type: 'string',
|
|
30
48
|
typeOptions: { password: true },
|
|
31
49
|
default: '',
|
|
32
|
-
required: true,
|
|
33
50
|
description: 'The LogicMonitor API Access Key',
|
|
51
|
+
displayOptions: {
|
|
52
|
+
show: { authMethod: ['lmv1'] },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
displayName: 'Bearer Token',
|
|
57
|
+
name: 'bearerToken',
|
|
58
|
+
type: 'string',
|
|
59
|
+
typeOptions: { password: true },
|
|
60
|
+
default: '',
|
|
61
|
+
description: 'The LogicMonitor Bearer token',
|
|
62
|
+
displayOptions: {
|
|
63
|
+
show: { authMethod: ['bearer'] },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
displayName: 'Debug Mode',
|
|
68
|
+
name: 'debug',
|
|
69
|
+
type: 'boolean',
|
|
70
|
+
default: false,
|
|
71
|
+
description: 'Whether to log request details (method, URL, LMv1 signature components) to the n8n console for troubleshooting',
|
|
34
72
|
},
|
|
35
73
|
];
|
|
36
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogicMonitorApi.credentials.js","sourceRoot":"","sources":["../../credentials/LogicMonitorApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAC3B,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,kBAAkB,CAAC;IACjC,gBAAgB,GAAG,sGAAsG,CAAC;IAE1H,UAAU,GAAsB;QAC/B;YACC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,sFAAsF;SACnG;QACD;YACC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,
|
|
1
|
+
{"version":3,"file":"LogicMonitorApi.credentials.js","sourceRoot":"","sources":["../../credentials/LogicMonitorApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAC3B,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,kBAAkB,CAAC;IACjC,gBAAgB,GAAG,sGAAsG,CAAC;IAE1H,UAAU,GAAsB;QAC/B;YACC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,sFAAsF;SACnG;QACD;YACC,WAAW,EAAE,uBAAuB;YACpC,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,+BAA+B;oBACrC,KAAK,EAAE,MAAM;iBACb;gBACD;oBACC,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,QAAQ;iBACf;aACD;YACD,OAAO,EAAE,MAAM;SACf;QACD;YACC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,gCAAgC;YAC7C,cAAc,EAAE;gBACf,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;aAC9B;SACD;QACD;YACC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,iCAAiC;YAC9C,cAAc,EAAE;gBACf,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;aAC9B;SACD;QACD;YACC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,+BAA+B;YAC5C,cAAc,EAAE;gBACf,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE;aAChC;SACD;QACD;YACC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,gHAAgH;SAC7H;KACD,CAAC;CACF;AAvED,0CAuEC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiRequest.d.ts","sourceRoot":"","sources":["../../../../nodes/LogicMonitor/helpers/apiRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"apiRequest.d.ts","sourceRoot":"","sources":["../../../../nodes/LogicMonitor/helpers/apiRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,MAAM,cAAc,CAAC;AA2CtB,wBAAsB,UAAU,CAC/B,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,qBAAqB,EAChE,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,EACtB,KAAK,GAAE,WAAgB,GACrB,OAAO,CAAC,GAAG,CAAC,CA+Dd;AAED,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,iBAAiB,GAAG,qBAAqB,EAC/C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAgB,EACtB,KAAK,GAAE,WAAgB,GACrB,OAAO,CAAC,GAAG,EAAE,CAAC,CA0BhB"}
|
|
@@ -41,30 +41,46 @@ const errorHandler_1 = require("./errorHandler");
|
|
|
41
41
|
* Generate LMv1 Authorization header.
|
|
42
42
|
*
|
|
43
43
|
* Format: LMv1 <accessId>:<signature>:<epoch>
|
|
44
|
-
*
|
|
44
|
+
* String to sign: <HTTPVerb><epochMs><requestBody><resourcePath>
|
|
45
|
+
* - No newlines or separators between components
|
|
46
|
+
* - epochMs is the current time in milliseconds
|
|
47
|
+
* - requestBody is empty string for GET/DELETE
|
|
48
|
+
* - resourcePath is the path only, e.g. /device/devices (no /santaba/rest prefix)
|
|
45
49
|
*/
|
|
46
|
-
function generateLMv1Header(method, resourcePath, body, accessId, accessKey) {
|
|
50
|
+
function generateLMv1Header(method, resourcePath, body, accessId, accessKey, debug = false) {
|
|
47
51
|
const timestamp = Date.now();
|
|
48
|
-
const requestVars = `${method.toUpperCase()}
|
|
52
|
+
const requestVars = `${method.toUpperCase()}${timestamp}${body}${resourcePath}`;
|
|
49
53
|
const signature = crypto
|
|
50
54
|
.createHmac('sha256', accessKey)
|
|
51
55
|
.update(requestVars)
|
|
52
56
|
.digest('base64');
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
if (debug) {
|
|
58
|
+
console.log('[LogicMonitor] LMv1 debug:');
|
|
59
|
+
console.log(' method:', method.toUpperCase());
|
|
60
|
+
console.log(' epoch:', timestamp);
|
|
61
|
+
console.log(' body length:', body.length);
|
|
62
|
+
console.log(' resourcePath:', resourcePath);
|
|
63
|
+
console.log(' requestVars:', requestVars.substring(0, 120) + (requestVars.length > 120 ? '...' : ''));
|
|
64
|
+
console.log(' accessId:', accessId);
|
|
65
|
+
console.log(' signature:', signature);
|
|
66
|
+
}
|
|
67
|
+
return `LMv1 ${accessId}:${signature}:${timestamp}`;
|
|
57
68
|
}
|
|
58
69
|
async function apiRequest(method, endpoint, body = {}, query = {}) {
|
|
59
70
|
const credentials = await this.getCredentials('logicMonitorApi');
|
|
60
71
|
const company = credentials.company;
|
|
61
|
-
const
|
|
62
|
-
const
|
|
72
|
+
const authMethod = credentials.authMethod ?? 'lmv1';
|
|
73
|
+
const debug = credentials.debug ?? false;
|
|
63
74
|
const baseUrl = `https://${company}.logicmonitor.com/santaba/rest`;
|
|
64
|
-
// The resource path for LMv1 signing is just the path portion (no domain)
|
|
65
|
-
const resourcePath = `/santaba/rest${endpoint}`;
|
|
66
75
|
const bodyString = Object.keys(body).length > 0 ? JSON.stringify(body) : '';
|
|
67
|
-
|
|
76
|
+
let authorization;
|
|
77
|
+
if (authMethod === 'bearer') {
|
|
78
|
+
authorization = `Bearer ${credentials.bearerToken}`;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// resourcePath is the endpoint only — no /santaba/rest prefix
|
|
82
|
+
authorization = generateLMv1Header(method, endpoint, bodyString, credentials.accessId, credentials.accessKey, debug);
|
|
83
|
+
}
|
|
68
84
|
// Build query string
|
|
69
85
|
const queryParams = new URLSearchParams();
|
|
70
86
|
for (const [key, value] of Object.entries(query)) {
|
|
@@ -74,6 +90,9 @@ async function apiRequest(method, endpoint, body = {}, query = {}) {
|
|
|
74
90
|
}
|
|
75
91
|
const queryString = queryParams.toString();
|
|
76
92
|
const url = `${baseUrl}${endpoint}${queryString ? `?${queryString}` : ''}`;
|
|
93
|
+
if (debug) {
|
|
94
|
+
console.log('[LogicMonitor] Request:', method.toUpperCase(), url);
|
|
95
|
+
}
|
|
77
96
|
const options = {
|
|
78
97
|
method: method.toUpperCase(),
|
|
79
98
|
url,
|
|
@@ -81,6 +100,7 @@ async function apiRequest(method, endpoint, body = {}, query = {}) {
|
|
|
81
100
|
Authorization: authorization,
|
|
82
101
|
'Content-Type': 'application/json',
|
|
83
102
|
Accept: 'application/json',
|
|
103
|
+
'X-Version': '3',
|
|
84
104
|
},
|
|
85
105
|
json: true,
|
|
86
106
|
};
|
|
@@ -92,6 +112,9 @@ async function apiRequest(method, endpoint, body = {}, query = {}) {
|
|
|
92
112
|
return response;
|
|
93
113
|
}
|
|
94
114
|
catch (error) {
|
|
115
|
+
if (debug) {
|
|
116
|
+
console.log('[LogicMonitor] Error response:', JSON.stringify(error?.response?.body ?? error?.message));
|
|
117
|
+
}
|
|
95
118
|
throw (0, errorHandler_1.handleApiError)(error, endpoint);
|
|
96
119
|
}
|
|
97
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiRequest.js","sourceRoot":"","sources":["../../../../nodes/LogicMonitor/helpers/apiRequest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"apiRequest.js","sourceRoot":"","sources":["../../../../nodes/LogicMonitor/helpers/apiRequest.ts"],"names":[],"mappings":"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"}
|