@itentialopensource/adapter-robustel 0.8.0 → 0.9.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/CHANGELOG.md +8 -0
- package/package.json +8 -8
- package/propertiesSchema.json +17 -16
- package/report/updateReport1770999177838.json +120 -0
- package/sampleProperties.json +1 -1
- package/test/unit/adapterTestUnit.js +2 -2
- package/utils/methodDocumentor.js +62 -37
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itentialopensource/adapter-robustel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "This adapter integrates with system described as: robustel.",
|
|
5
5
|
"main": "adapter.js",
|
|
6
|
-
"wizardVersion": "3.
|
|
7
|
-
"engineVersion": "1.
|
|
6
|
+
"wizardVersion": "3.12.1",
|
|
7
|
+
"engineVersion": "1.82.5",
|
|
8
8
|
"adapterType": "http",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"preinstall": "node utils/setup.js",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
],
|
|
38
38
|
"license": "Apache-2.0",
|
|
39
39
|
"engines": {
|
|
40
|
-
"node": ">=
|
|
41
|
-
"npm": ">=
|
|
40
|
+
"node": ">= 18.18.0",
|
|
41
|
+
"npm": ">= 9.8.1"
|
|
42
42
|
},
|
|
43
43
|
"repository": {
|
|
44
44
|
"type": "git",
|
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
"author": "Itential",
|
|
48
48
|
"homepage": "https://gitlab.com/itentialopensource/adapters/adapter-robustel#readme",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@itentialopensource/adapter-utils": "6.1.
|
|
50
|
+
"@itentialopensource/adapter-utils": "6.1.14",
|
|
51
51
|
"acorn": "8.14.1",
|
|
52
52
|
"ajv": "8.17.1",
|
|
53
|
-
"axios": "1.
|
|
53
|
+
"axios": "1.13.5",
|
|
54
54
|
"commander": "11.1.0",
|
|
55
55
|
"crypto-js": "4.2.0",
|
|
56
56
|
"fs-extra": "11.3.0",
|
|
57
57
|
"json-query": "2.2.2",
|
|
58
|
-
"mocha": "
|
|
58
|
+
"mocha": "11.3.0",
|
|
59
59
|
"mocha-param": "2.0.1",
|
|
60
60
|
"mongodb": "4.17.2",
|
|
61
61
|
"ping": "0.4.4",
|
package/propertiesSchema.json
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"boolean",
|
|
67
67
|
"string"
|
|
68
68
|
],
|
|
69
|
-
"description": "When true the metrics collected by the adapter will be stored in mongo or
|
|
69
|
+
"description": "When true the metrics collected by the adapter will be stored in mongo or in the adapter. If a full path is provided, metrics will be saved in the path provided.",
|
|
70
70
|
"default": false
|
|
71
71
|
},
|
|
72
72
|
"stub": {
|
|
@@ -475,7 +475,7 @@
|
|
|
475
475
|
"type": "integer",
|
|
476
476
|
"description": "How often the healthcheck should run (in milliseconds).",
|
|
477
477
|
"default": 300000,
|
|
478
|
-
"minimum":
|
|
478
|
+
"minimum": 30000,
|
|
479
479
|
"maximum": 3600000
|
|
480
480
|
},
|
|
481
481
|
"protocol": {
|
|
@@ -713,9 +713,10 @@
|
|
|
713
713
|
},
|
|
714
714
|
"keep_alive_interval": {
|
|
715
715
|
"type": "integer",
|
|
716
|
-
"description": "TCP keep-alive interval in
|
|
716
|
+
"description": "TCP keep-alive interval in milliseconds to prevent connection timeout during long-running requests. 0 = disabled (default). Minimum value when enabled is 30000ms (30 seconds). Values below 30000ms will be auto-corrected to 30000ms with a warning.",
|
|
717
717
|
"default": 0,
|
|
718
|
-
"minimum": 0
|
|
718
|
+
"minimum": 0,
|
|
719
|
+
"maximum": 3600000
|
|
719
720
|
}
|
|
720
721
|
},
|
|
721
722
|
"required": [
|
|
@@ -1127,7 +1128,7 @@
|
|
|
1127
1128
|
},
|
|
1128
1129
|
"requestFields": {
|
|
1129
1130
|
"type": "object",
|
|
1130
|
-
"description": "The json object with
|
|
1131
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1131
1132
|
"additionalProperties": {
|
|
1132
1133
|
"type": [
|
|
1133
1134
|
"string",
|
|
@@ -1270,7 +1271,7 @@
|
|
|
1270
1271
|
},
|
|
1271
1272
|
"requestFields": {
|
|
1272
1273
|
"type": "object",
|
|
1273
|
-
"description": "The json object with
|
|
1274
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1274
1275
|
"additionalProperties": {
|
|
1275
1276
|
"type": [
|
|
1276
1277
|
"string",
|
|
@@ -1381,7 +1382,7 @@
|
|
|
1381
1382
|
},
|
|
1382
1383
|
"requestFields": {
|
|
1383
1384
|
"type": "object",
|
|
1384
|
-
"description": "The json object with
|
|
1385
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1385
1386
|
"additionalProperties": {
|
|
1386
1387
|
"type": [
|
|
1387
1388
|
"string",
|
|
@@ -1477,7 +1478,7 @@
|
|
|
1477
1478
|
},
|
|
1478
1479
|
"requestFields": {
|
|
1479
1480
|
"type": "object",
|
|
1480
|
-
"description": "The json object with
|
|
1481
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1481
1482
|
"additionalProperties": {
|
|
1482
1483
|
"type": [
|
|
1483
1484
|
"string",
|
|
@@ -1562,7 +1563,7 @@
|
|
|
1562
1563
|
},
|
|
1563
1564
|
"requestFields": {
|
|
1564
1565
|
"type": "object",
|
|
1565
|
-
"description": "The json object with
|
|
1566
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1566
1567
|
"additionalProperties": {
|
|
1567
1568
|
"type": [
|
|
1568
1569
|
"string",
|
|
@@ -1645,12 +1646,12 @@
|
|
|
1645
1646
|
"properties": {
|
|
1646
1647
|
"path": {
|
|
1647
1648
|
"type": "string",
|
|
1648
|
-
"description": "The fully qualified path of the call to
|
|
1649
|
+
"description": "The fully qualified path of the call to populate the cache (e.g. /rest/api/devices)",
|
|
1649
1650
|
"default": ""
|
|
1650
1651
|
},
|
|
1651
1652
|
"method": {
|
|
1652
1653
|
"type": "string",
|
|
1653
|
-
"description": "The method of the call to
|
|
1654
|
+
"description": "The method of the call to populate the cache",
|
|
1654
1655
|
"default": "GET"
|
|
1655
1656
|
},
|
|
1656
1657
|
"pagination": {
|
|
@@ -1687,7 +1688,7 @@
|
|
|
1687
1688
|
},
|
|
1688
1689
|
"query": {
|
|
1689
1690
|
"type": "object",
|
|
1690
|
-
"description": "The json object with query parameters of the call to
|
|
1691
|
+
"description": "The json object with query parameters of the call to populate the cache",
|
|
1691
1692
|
"additionalProperties": {
|
|
1692
1693
|
"type": [
|
|
1693
1694
|
"string",
|
|
@@ -1697,7 +1698,7 @@
|
|
|
1697
1698
|
},
|
|
1698
1699
|
"body": {
|
|
1699
1700
|
"type": "object",
|
|
1700
|
-
"description": "The json object with body of the call to
|
|
1701
|
+
"description": "The json object with body of the call to populate the cache",
|
|
1701
1702
|
"additionalProperties": {
|
|
1702
1703
|
"type": [
|
|
1703
1704
|
"string",
|
|
@@ -1707,7 +1708,7 @@
|
|
|
1707
1708
|
},
|
|
1708
1709
|
"headers": {
|
|
1709
1710
|
"type": "object",
|
|
1710
|
-
"description": "The json object with headers of the call to
|
|
1711
|
+
"description": "The json object with headers of the call to populate the cache",
|
|
1711
1712
|
"additionalProperties": {
|
|
1712
1713
|
"type": [
|
|
1713
1714
|
"string",
|
|
@@ -1726,7 +1727,7 @@
|
|
|
1726
1727
|
},
|
|
1727
1728
|
"requestFields": {
|
|
1728
1729
|
"type": "object",
|
|
1729
|
-
"description": "The json object with
|
|
1730
|
+
"description": "The json object with request fields of the call to populate the cache",
|
|
1730
1731
|
"additionalProperties": {
|
|
1731
1732
|
"type": [
|
|
1732
1733
|
"string",
|
|
@@ -1742,7 +1743,7 @@
|
|
|
1742
1743
|
},
|
|
1743
1744
|
"responseFields": {
|
|
1744
1745
|
"type": "object",
|
|
1745
|
-
"description": "The json object with response fields of the call to
|
|
1746
|
+
"description": "The json object with response fields of the call to populate the cache",
|
|
1746
1747
|
"additionalProperties": {
|
|
1747
1748
|
"type": [
|
|
1748
1749
|
"string",
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"errors": [],
|
|
3
|
+
"statistics": [
|
|
4
|
+
{
|
|
5
|
+
"owner": "errorJson",
|
|
6
|
+
"description": "New adapter errors available for use",
|
|
7
|
+
"value": 0
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"owner": "errorJson",
|
|
11
|
+
"description": "Adapter errors no longer available for use",
|
|
12
|
+
"value": 0
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"owner": "errorJson",
|
|
16
|
+
"description": "Adapter errors that have been updated (e.g. recommendation changes)",
|
|
17
|
+
"value": 31
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"owner": "packageJson",
|
|
21
|
+
"description": "Number of production dependencies",
|
|
22
|
+
"value": 15
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"owner": "packageJson",
|
|
26
|
+
"description": "Number of development dependencies",
|
|
27
|
+
"value": 6
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"owner": "packageJson",
|
|
31
|
+
"description": "Number of npm scripts",
|
|
32
|
+
"value": 17
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"owner": "packageJson",
|
|
36
|
+
"description": "Runtime Library dependency",
|
|
37
|
+
"value": "6.1.14"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"owner": "propertiesSchemaJson",
|
|
41
|
+
"description": "Adapter properties defined in the propertiesSchema file",
|
|
42
|
+
"value": 86
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"owner": "markdown",
|
|
46
|
+
"description": "Number of lines in the README.md",
|
|
47
|
+
"value": 345
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"owner": "markdown",
|
|
51
|
+
"description": "Number of lines in the SUMMARY.md",
|
|
52
|
+
"value": 9
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"owner": "markdown",
|
|
56
|
+
"description": "Number of lines in the PROPERTIES.md",
|
|
57
|
+
"value": 682
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"owner": "markdown",
|
|
61
|
+
"description": "Number of lines in the TROUBLESHOOT.md",
|
|
62
|
+
"value": 57
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"owner": "markdown",
|
|
66
|
+
"description": "Number of lines in the ENHANCE.md",
|
|
67
|
+
"value": 70
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"owner": "markdown",
|
|
71
|
+
"description": "Number of lines in the BROKER.md",
|
|
72
|
+
"value": 70
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"owner": "unitTestJS",
|
|
76
|
+
"description": "Number of lines of code in unit tests",
|
|
77
|
+
"value": 1635
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"owner": "unitTestJS",
|
|
81
|
+
"description": "Number of unit tests",
|
|
82
|
+
"value": 79
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"owner": "integrationTestJS",
|
|
86
|
+
"description": "Number of lines of code in integration tests",
|
|
87
|
+
"value": 596
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"owner": "integrationTestJS",
|
|
91
|
+
"description": "Number of integration tests",
|
|
92
|
+
"value": 15
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"owner": "staticFile",
|
|
96
|
+
"description": "Number of lines of code in adapterBase.js",
|
|
97
|
+
"value": 1527
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"owner": "staticFile",
|
|
101
|
+
"description": "Number of static files added",
|
|
102
|
+
"value": 37
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"owner": "Overall",
|
|
106
|
+
"description": "Total lines of Code",
|
|
107
|
+
"value": 3758
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"owner": "Overall",
|
|
111
|
+
"description": "Total Tests",
|
|
112
|
+
"value": 94
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"owner": "Overall",
|
|
116
|
+
"description": "Total Files",
|
|
117
|
+
"value": 6
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
package/sampleProperties.json
CHANGED
|
@@ -280,10 +280,10 @@ describe('[unit] Robustel Adapter Test', () => {
|
|
|
280
280
|
assert.notEqual(null, packageDotJson.dependencies);
|
|
281
281
|
assert.notEqual('', packageDotJson.dependencies);
|
|
282
282
|
assert.equal('8.17.1', packageDotJson.dependencies.ajv);
|
|
283
|
-
assert.equal('1.
|
|
283
|
+
assert.equal('1.13.5', packageDotJson.dependencies.axios);
|
|
284
284
|
assert.equal('11.1.0', packageDotJson.dependencies.commander);
|
|
285
285
|
assert.equal('11.3.0', packageDotJson.dependencies['fs-extra']);
|
|
286
|
-
assert.equal('
|
|
286
|
+
assert.equal('11.3.0', packageDotJson.dependencies.mocha);
|
|
287
287
|
assert.equal('2.0.1', packageDotJson.dependencies['mocha-param']);
|
|
288
288
|
assert.equal('0.4.4', packageDotJson.dependencies.ping);
|
|
289
289
|
assert.equal('1.4.10', packageDotJson.dependencies['readline-sync']);
|
|
@@ -19,17 +19,14 @@ function createObjectForFunction(
|
|
|
19
19
|
workflow
|
|
20
20
|
) {
|
|
21
21
|
const funcObject = {};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
funcObject.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
funcObject.description = description;
|
|
31
|
-
funcObject.workflow = workflow;
|
|
32
|
-
}
|
|
22
|
+
funcObject.method_signature = `${funcName}(${funcArgs.join(', ')})`;
|
|
23
|
+
funcObject.path = entityPath !== undefined ? entityPath : '';
|
|
24
|
+
if (description === undefined) {
|
|
25
|
+
funcObject.description = '';
|
|
26
|
+
funcObject.workflow = 'No';
|
|
27
|
+
} else {
|
|
28
|
+
funcObject.description = description;
|
|
29
|
+
funcObject.workflow = workflow;
|
|
33
30
|
}
|
|
34
31
|
return funcObject;
|
|
35
32
|
}
|
|
@@ -77,7 +74,8 @@ function readFileUsingLib(filename, descriptionObj, workflowObj, functionList) {
|
|
|
77
74
|
// parsing the file to get the function and class declarations.
|
|
78
75
|
const aFileFuncArgs = acorn.parse(aFile, { ecmaVersion: 2020 });
|
|
79
76
|
|
|
80
|
-
|
|
77
|
+
// Track all method names that can be called (identifyRequest + any proxy methods)
|
|
78
|
+
const allowedCallNames = new Set(['identifyRequest']);
|
|
81
79
|
// Looping through all the declarations parsed:
|
|
82
80
|
aFileFuncArgs.body.forEach((e) => {
|
|
83
81
|
// Getting only the class declaration as it has our required functions.
|
|
@@ -103,9 +101,10 @@ function readFileUsingLib(filename, descriptionObj, workflowObj, functionList) {
|
|
|
103
101
|
method.value.body.body.forEach((statement) => {
|
|
104
102
|
recurseCallExpressions(statement, callList);
|
|
105
103
|
});
|
|
104
|
+
// Find calls to identifyRequest OR any discovered proxy methods
|
|
106
105
|
const requests = [];
|
|
107
106
|
for (let i = 0; i < callList.length; i += 1) {
|
|
108
|
-
if (callList[i].callee.property && callList[i].callee.property.name
|
|
107
|
+
if (callList[i].callee.property && allowedCallNames.has(callList[i].callee.property.name)) {
|
|
109
108
|
requests.push(callList[i]);
|
|
110
109
|
}
|
|
111
110
|
}
|
|
@@ -114,34 +113,60 @@ function readFileUsingLib(filename, descriptionObj, workflowObj, functionList) {
|
|
|
114
113
|
if (expr.arguments.length < 2) {
|
|
115
114
|
throw new Error(`Bad inputs in method ${funcName}`);
|
|
116
115
|
}
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
|
|
117
|
+
const arg0Type = expr.arguments[0].type;
|
|
118
|
+
const arg1Type = expr.arguments[1].type;
|
|
119
|
+
|
|
120
|
+
let entityPath;
|
|
121
|
+
|
|
122
|
+
if (arg0Type === 'Literal' && arg1Type === 'Literal') {
|
|
123
|
+
const entity = expr.arguments[0].value;
|
|
124
|
+
const actionName = expr.arguments[1].value;
|
|
125
|
+
entityPath = getPathFromEntity(entity, actionName);
|
|
126
|
+
} else {
|
|
127
|
+
// Non-standard format: anything that's not both literals
|
|
128
|
+
// Special handling for proxy methods (both args are identifiers matching first 2 params)
|
|
129
|
+
if (arg0Type === 'Identifier' && arg1Type === 'Identifier') {
|
|
130
|
+
const param1 = method.value.params[0];
|
|
131
|
+
const param2 = method.value.params[1];
|
|
132
|
+
const arg0Name = expr.arguments[0].name;
|
|
133
|
+
const arg1Name = expr.arguments[1].name;
|
|
134
|
+
|
|
135
|
+
// Check if this is a valid proxy method
|
|
136
|
+
const isValidProxy = param1 && param2
|
|
137
|
+
&& param1.type === 'Identifier' && param2.type === 'Identifier'
|
|
138
|
+
&& param1.name === arg0Name && param2.name === arg1Name;
|
|
139
|
+
|
|
140
|
+
// Only process valid proxy methods
|
|
141
|
+
if (isValidProxy) {
|
|
142
|
+
const calledMethod = expr.callee.property.name;
|
|
143
|
+
|
|
144
|
+
// Skip nested proxies (proxies calling other proxies)
|
|
145
|
+
if (calledMethod !== 'identifyRequest') {
|
|
146
|
+
console.log(`Skipping nested proxy method: ${funcName} (calls ${calledMethod})`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// First-level proxy: calls identifyRequest directly
|
|
151
|
+
// Add this proxy to the set so other methods can call it
|
|
152
|
+
allowedCallNames.add(funcName);
|
|
153
|
+
}
|
|
128
154
|
}
|
|
129
|
-
|
|
155
|
+
|
|
156
|
+
// All non-standard formats get documented without path
|
|
157
|
+
entityPath = undefined;
|
|
130
158
|
}
|
|
131
|
-
const entityPath = getPathFromEntity(entity, actionName);
|
|
132
159
|
|
|
133
160
|
// Creating and storing the object for the method.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
);
|
|
144
|
-
}
|
|
161
|
+
functionList.push(
|
|
162
|
+
createObjectForFunction(
|
|
163
|
+
funcName,
|
|
164
|
+
funcArgs,
|
|
165
|
+
entityPath,
|
|
166
|
+
descriptionObj[funcName],
|
|
167
|
+
workflowObj[funcName]
|
|
168
|
+
)
|
|
169
|
+
);
|
|
145
170
|
}
|
|
146
171
|
});
|
|
147
172
|
}
|