@itentialopensource/adapter-aruba_central 2.6.1 → 2.7.1
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 +16 -0
- package/package.json +9 -9
- package/propertiesSchema.json +17 -16
- package/report/updateReport1770998724159.json +120 -0
- package/sampleProperties.json +1 -1
- package/test/unit/adapterTestUnit.js +3 -3
- package/utils/methodDocumentor.js +62 -37
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
|
|
2
|
+
## 2.7.1 [02-17-2026]
|
|
3
|
+
|
|
4
|
+
* Changes made at 2026.02.16_18:29PM
|
|
5
|
+
|
|
6
|
+
See merge request itentialopensource/adapters/adapter-aruba_central!37
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 2.7.0 [02-13-2026]
|
|
11
|
+
|
|
12
|
+
* minor/auto-migrate/20260213-110522
|
|
13
|
+
|
|
14
|
+
See merge request itentialopensource/adapters/adapter-aruba_central!34
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
2
18
|
## 2.2.6 [10-15-2024]
|
|
3
19
|
|
|
4
20
|
* Changes made at 2024.10.14_19:49PM
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itentialopensource/adapter-aruba_central",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "This adapter integrates with system described as: arubaCentralAllMethods.",
|
|
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,14 +47,14 @@
|
|
|
47
47
|
"author": "Itential",
|
|
48
48
|
"homepage": "https://gitlab.com/itentialopensource/adapters/adapter-aruba_central#readme",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@itentialopensource/adapter-utils": "6.1.
|
|
50
|
+
"@itentialopensource/adapter-utils": "6.1.15",
|
|
51
51
|
"acorn": "8.14.1",
|
|
52
|
-
"ajv": "8.
|
|
53
|
-
"axios": "1.
|
|
52
|
+
"ajv": "8.18.0",
|
|
53
|
+
"axios": "1.13.5",
|
|
54
54
|
"commander": "11.1.0",
|
|
55
55
|
"fs-extra": "11.3.0",
|
|
56
56
|
"json-query": "2.2.2",
|
|
57
|
-
"mocha": "
|
|
57
|
+
"mocha": "11.3.0",
|
|
58
58
|
"mocha-param": "2.0.1",
|
|
59
59
|
"mongodb": "4.17.2",
|
|
60
60
|
"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": {
|
|
@@ -483,7 +483,7 @@
|
|
|
483
483
|
"type": "integer",
|
|
484
484
|
"description": "How often the healthcheck should run (in milliseconds).",
|
|
485
485
|
"default": 300000,
|
|
486
|
-
"minimum":
|
|
486
|
+
"minimum": 30000,
|
|
487
487
|
"maximum": 3600000
|
|
488
488
|
},
|
|
489
489
|
"protocol": {
|
|
@@ -721,9 +721,10 @@
|
|
|
721
721
|
},
|
|
722
722
|
"keep_alive_interval": {
|
|
723
723
|
"type": "integer",
|
|
724
|
-
"description": "TCP keep-alive interval in
|
|
724
|
+
"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.",
|
|
725
725
|
"default": 0,
|
|
726
|
-
"minimum": 0
|
|
726
|
+
"minimum": 0,
|
|
727
|
+
"maximum": 3600000
|
|
727
728
|
}
|
|
728
729
|
},
|
|
729
730
|
"required": [
|
|
@@ -1135,7 +1136,7 @@
|
|
|
1135
1136
|
},
|
|
1136
1137
|
"requestFields": {
|
|
1137
1138
|
"type": "object",
|
|
1138
|
-
"description": "The json object with
|
|
1139
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1139
1140
|
"additionalProperties": {
|
|
1140
1141
|
"type": [
|
|
1141
1142
|
"string",
|
|
@@ -1278,7 +1279,7 @@
|
|
|
1278
1279
|
},
|
|
1279
1280
|
"requestFields": {
|
|
1280
1281
|
"type": "object",
|
|
1281
|
-
"description": "The json object with
|
|
1282
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1282
1283
|
"additionalProperties": {
|
|
1283
1284
|
"type": [
|
|
1284
1285
|
"string",
|
|
@@ -1389,7 +1390,7 @@
|
|
|
1389
1390
|
},
|
|
1390
1391
|
"requestFields": {
|
|
1391
1392
|
"type": "object",
|
|
1392
|
-
"description": "The json object with
|
|
1393
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1393
1394
|
"additionalProperties": {
|
|
1394
1395
|
"type": [
|
|
1395
1396
|
"string",
|
|
@@ -1485,7 +1486,7 @@
|
|
|
1485
1486
|
},
|
|
1486
1487
|
"requestFields": {
|
|
1487
1488
|
"type": "object",
|
|
1488
|
-
"description": "The json object with
|
|
1489
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1489
1490
|
"additionalProperties": {
|
|
1490
1491
|
"type": [
|
|
1491
1492
|
"string",
|
|
@@ -1570,7 +1571,7 @@
|
|
|
1570
1571
|
},
|
|
1571
1572
|
"requestFields": {
|
|
1572
1573
|
"type": "object",
|
|
1573
|
-
"description": "The json object with
|
|
1574
|
+
"description": "The json object with request fields of the call to getDevice",
|
|
1574
1575
|
"additionalProperties": {
|
|
1575
1576
|
"type": [
|
|
1576
1577
|
"string",
|
|
@@ -1653,12 +1654,12 @@
|
|
|
1653
1654
|
"properties": {
|
|
1654
1655
|
"path": {
|
|
1655
1656
|
"type": "string",
|
|
1656
|
-
"description": "The fully qualified path of the call to
|
|
1657
|
+
"description": "The fully qualified path of the call to populate the cache (e.g. /rest/api/devices)",
|
|
1657
1658
|
"default": ""
|
|
1658
1659
|
},
|
|
1659
1660
|
"method": {
|
|
1660
1661
|
"type": "string",
|
|
1661
|
-
"description": "The method of the call to
|
|
1662
|
+
"description": "The method of the call to populate the cache",
|
|
1662
1663
|
"default": "GET"
|
|
1663
1664
|
},
|
|
1664
1665
|
"pagination": {
|
|
@@ -1695,7 +1696,7 @@
|
|
|
1695
1696
|
},
|
|
1696
1697
|
"query": {
|
|
1697
1698
|
"type": "object",
|
|
1698
|
-
"description": "The json object with query parameters of the call to
|
|
1699
|
+
"description": "The json object with query parameters of the call to populate the cache",
|
|
1699
1700
|
"additionalProperties": {
|
|
1700
1701
|
"type": [
|
|
1701
1702
|
"string",
|
|
@@ -1705,7 +1706,7 @@
|
|
|
1705
1706
|
},
|
|
1706
1707
|
"body": {
|
|
1707
1708
|
"type": "object",
|
|
1708
|
-
"description": "The json object with body of the call to
|
|
1709
|
+
"description": "The json object with body of the call to populate the cache",
|
|
1709
1710
|
"additionalProperties": {
|
|
1710
1711
|
"type": [
|
|
1711
1712
|
"string",
|
|
@@ -1715,7 +1716,7 @@
|
|
|
1715
1716
|
},
|
|
1716
1717
|
"headers": {
|
|
1717
1718
|
"type": "object",
|
|
1718
|
-
"description": "The json object with headers of the call to
|
|
1719
|
+
"description": "The json object with headers of the call to populate the cache",
|
|
1719
1720
|
"additionalProperties": {
|
|
1720
1721
|
"type": [
|
|
1721
1722
|
"string",
|
|
@@ -1734,7 +1735,7 @@
|
|
|
1734
1735
|
},
|
|
1735
1736
|
"requestFields": {
|
|
1736
1737
|
"type": "object",
|
|
1737
|
-
"description": "The json object with
|
|
1738
|
+
"description": "The json object with request fields of the call to populate the cache",
|
|
1738
1739
|
"additionalProperties": {
|
|
1739
1740
|
"type": [
|
|
1740
1741
|
"string",
|
|
@@ -1750,7 +1751,7 @@
|
|
|
1750
1751
|
},
|
|
1751
1752
|
"responseFields": {
|
|
1752
1753
|
"type": "object",
|
|
1753
|
-
"description": "The json object with response fields of the call to
|
|
1754
|
+
"description": "The json object with response fields of the call to populate the cache",
|
|
1754
1755
|
"additionalProperties": {
|
|
1755
1756
|
"type": [
|
|
1756
1757
|
"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": 84
|
|
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": 40441
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"owner": "unitTestJS",
|
|
81
|
+
"description": "Number of unit tests",
|
|
82
|
+
"value": 2647
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"owner": "integrationTestJS",
|
|
86
|
+
"description": "Number of lines of code in integration tests",
|
|
87
|
+
"value": 28417
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"owner": "integrationTestJS",
|
|
91
|
+
"description": "Number of integration tests",
|
|
92
|
+
"value": 963
|
|
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": 70385
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"owner": "Overall",
|
|
111
|
+
"description": "Total Tests",
|
|
112
|
+
"value": 3610
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"owner": "Overall",
|
|
116
|
+
"description": "Total Files",
|
|
117
|
+
"value": 6
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
package/sampleProperties.json
CHANGED
|
@@ -279,11 +279,11 @@ describe('[unit] Aruba_central Adapter Test', () => {
|
|
|
279
279
|
assert.notEqual(undefined, packageDotJson.dependencies);
|
|
280
280
|
assert.notEqual(null, packageDotJson.dependencies);
|
|
281
281
|
assert.notEqual('', packageDotJson.dependencies);
|
|
282
|
-
assert.equal('8.
|
|
283
|
-
assert.equal('1.
|
|
282
|
+
assert.equal('8.18.0', packageDotJson.dependencies.ajv);
|
|
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
|
}
|