@itentialopensource/adapter-gcp_compute 1.14.0 → 1.15.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 CHANGED
@@ -1,4 +1,20 @@
1
1
 
2
+ ## 1.15.1 [02-17-2026]
3
+
4
+ * Changes made at 2026.02.16_19:06PM
5
+
6
+ See merge request itentialopensource/adapters/adapter-gcp_compute!45
7
+
8
+ ---
9
+
10
+ ## 1.15.0 [02-13-2026]
11
+
12
+ * minor/auto-migrate/20260213-112806
13
+
14
+ See merge request itentialopensource/adapters/adapter-gcp_compute!42
15
+
16
+ ---
17
+
2
18
  ## 1.8.4 [10-15-2024]
3
19
 
4
20
  * Changes made at 2024.10.14_20:41PM
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@itentialopensource/adapter-gcp_compute",
3
- "version": "1.14.0",
3
+ "version": "1.15.1",
4
4
  "description": "This adapter integrates with system described as: computeEngineApi.",
5
5
  "main": "adapter.js",
6
6
  "systemName": "Google Cloud Platform Compute",
7
- "wizardVersion": "3.8.0",
8
- "engineVersion": "1.80.0",
7
+ "wizardVersion": "3.12.1",
8
+ "engineVersion": "1.82.5",
9
9
  "adapterType": "http",
10
10
  "scripts": {
11
11
  "preinstall": "node utils/setup.js",
@@ -40,8 +40,8 @@
40
40
  ],
41
41
  "license": "Apache-2.0",
42
42
  "engines": {
43
- "node": ">= 14.0.0",
44
- "npm": ">= 6.0.0"
43
+ "node": ">= 18.18.0",
44
+ "npm": ">= 9.8.1"
45
45
  },
46
46
  "repository": {
47
47
  "type": "git",
@@ -50,15 +50,15 @@
50
50
  "author": "Itential",
51
51
  "homepage": "https://gitlab.com/itentialopensource/adapters/adapter-gcp_compute#readme",
52
52
  "dependencies": {
53
- "@itentialopensource/adapter-utils": "6.1.7",
53
+ "@itentialopensource/adapter-utils": "6.1.15",
54
54
  "acorn": "8.14.1",
55
- "ajv": "8.17.1",
56
- "axios": "1.12.2",
55
+ "ajv": "8.18.0",
56
+ "axios": "1.13.5",
57
57
  "commander": "11.1.0",
58
58
  "fs-extra": "11.3.0",
59
59
  "gtoken": "7.1.0",
60
60
  "json-query": "2.2.2",
61
- "mocha": "10.8.2",
61
+ "mocha": "11.3.0",
62
62
  "mocha-param": "2.0.1",
63
63
  "mongodb": "4.17.2",
64
64
  "ping": "0.4.4",
@@ -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 on the filesystem",
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": {
@@ -506,7 +506,7 @@
506
506
  "type": "integer",
507
507
  "description": "How often the healthcheck should run (in milliseconds).",
508
508
  "default": 300000,
509
- "minimum": 60000,
509
+ "minimum": 30000,
510
510
  "maximum": 3600000
511
511
  },
512
512
  "protocol": {
@@ -744,9 +744,10 @@
744
744
  },
745
745
  "keep_alive_interval": {
746
746
  "type": "integer",
747
- "description": "TCP keep-alive interval in seconds for long-lived connections. Set to 0 to disable (default). Minimum 30 seconds when enabled.",
747
+ "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.",
748
748
  "default": 0,
749
- "minimum": 0
749
+ "minimum": 0,
750
+ "maximum": 3600000
750
751
  }
751
752
  },
752
753
  "required": [
@@ -1158,7 +1159,7 @@
1158
1159
  },
1159
1160
  "requestFields": {
1160
1161
  "type": "object",
1161
- "description": "The json object with response fields of the call to getDevice",
1162
+ "description": "The json object with request fields of the call to getDevice",
1162
1163
  "additionalProperties": {
1163
1164
  "type": [
1164
1165
  "string",
@@ -1301,7 +1302,7 @@
1301
1302
  },
1302
1303
  "requestFields": {
1303
1304
  "type": "object",
1304
- "description": "The json object with response fields of the call to getDevice",
1305
+ "description": "The json object with request fields of the call to getDevice",
1305
1306
  "additionalProperties": {
1306
1307
  "type": [
1307
1308
  "string",
@@ -1412,7 +1413,7 @@
1412
1413
  },
1413
1414
  "requestFields": {
1414
1415
  "type": "object",
1415
- "description": "The json object with response fields of the call to getDevice",
1416
+ "description": "The json object with request fields of the call to getDevice",
1416
1417
  "additionalProperties": {
1417
1418
  "type": [
1418
1419
  "string",
@@ -1508,7 +1509,7 @@
1508
1509
  },
1509
1510
  "requestFields": {
1510
1511
  "type": "object",
1511
- "description": "The json object with response fields of the call to getDevice",
1512
+ "description": "The json object with request fields of the call to getDevice",
1512
1513
  "additionalProperties": {
1513
1514
  "type": [
1514
1515
  "string",
@@ -1593,7 +1594,7 @@
1593
1594
  },
1594
1595
  "requestFields": {
1595
1596
  "type": "object",
1596
- "description": "The json object with response fields of the call to getDevice",
1597
+ "description": "The json object with request fields of the call to getDevice",
1597
1598
  "additionalProperties": {
1598
1599
  "type": [
1599
1600
  "string",
@@ -1676,12 +1677,12 @@
1676
1677
  "properties": {
1677
1678
  "path": {
1678
1679
  "type": "string",
1679
- "description": "The fully qualified path of the call to getDevice (e.g. /rest/api/device/{deviceid})",
1680
+ "description": "The fully qualified path of the call to populate the cache (e.g. /rest/api/devices)",
1680
1681
  "default": ""
1681
1682
  },
1682
1683
  "method": {
1683
1684
  "type": "string",
1684
- "description": "The method of the call to getDevice",
1685
+ "description": "The method of the call to populate the cache",
1685
1686
  "default": "GET"
1686
1687
  },
1687
1688
  "pagination": {
@@ -1718,7 +1719,7 @@
1718
1719
  },
1719
1720
  "query": {
1720
1721
  "type": "object",
1721
- "description": "The json object with query parameters of the call to getDevice",
1722
+ "description": "The json object with query parameters of the call to populate the cache",
1722
1723
  "additionalProperties": {
1723
1724
  "type": [
1724
1725
  "string",
@@ -1728,7 +1729,7 @@
1728
1729
  },
1729
1730
  "body": {
1730
1731
  "type": "object",
1731
- "description": "The json object with body of the call to getDevice",
1732
+ "description": "The json object with body of the call to populate the cache",
1732
1733
  "additionalProperties": {
1733
1734
  "type": [
1734
1735
  "string",
@@ -1738,7 +1739,7 @@
1738
1739
  },
1739
1740
  "headers": {
1740
1741
  "type": "object",
1741
- "description": "The json object with headers of the call to getDevice",
1742
+ "description": "The json object with headers of the call to populate the cache",
1742
1743
  "additionalProperties": {
1743
1744
  "type": [
1744
1745
  "string",
@@ -1757,7 +1758,7 @@
1757
1758
  },
1758
1759
  "requestFields": {
1759
1760
  "type": "object",
1760
- "description": "The json object with response fields of the call to getDevice",
1761
+ "description": "The json object with request fields of the call to populate the cache",
1761
1762
  "additionalProperties": {
1762
1763
  "type": [
1763
1764
  "string",
@@ -1773,7 +1774,7 @@
1773
1774
  },
1774
1775
  "responseFields": {
1775
1776
  "type": "object",
1776
- "description": "The json object with response fields of the call to getDevice",
1777
+ "description": "The json object with response fields of the call to populate the cache",
1777
1778
  "additionalProperties": {
1778
1779
  "type": [
1779
1780
  "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": 29141
78
+ },
79
+ {
80
+ "owner": "unitTestJS",
81
+ "description": "Number of unit tests",
82
+ "value": 1865
83
+ },
84
+ {
85
+ "owner": "integrationTestJS",
86
+ "description": "Number of lines of code in integration tests",
87
+ "value": 31273
88
+ },
89
+ {
90
+ "owner": "integrationTestJS",
91
+ "description": "Number of integration tests",
92
+ "value": 567
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": 61941
108
+ },
109
+ {
110
+ "owner": "Overall",
111
+ "description": "Total Tests",
112
+ "value": 2432
113
+ },
114
+ {
115
+ "owner": "Overall",
116
+ "description": "Total Files",
117
+ "value": 6
118
+ }
119
+ ]
120
+ }
@@ -284,4 +284,4 @@
284
284
  "brokers": [],
285
285
  "logLevel": "none",
286
286
  "timeout": 120000
287
- }
287
+ }
@@ -279,11 +279,11 @@ describe('[unit] GcpCompute 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.17.1', packageDotJson.dependencies.ajv);
283
- assert.equal('1.12.2', packageDotJson.dependencies.axios);
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('10.8.2', packageDotJson.dependencies.mocha);
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
- // if the entity path is not set, then the object is not created.
23
- if (entityPath !== undefined) {
24
- funcObject.method_signature = `${funcName}(${funcArgs.join(', ')})`;
25
- funcObject.path = entityPath;
26
- if (description === undefined) {
27
- funcObject.description = '';
28
- funcObject.workflow = 'No';
29
- } else {
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
- let callName = 'identifyRequest';
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 === callName) {
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
- const entity = expr.arguments[0].value;
118
- const actionName = expr.arguments[1].value;
119
- if (expr !== undefined && (expr.arguments[0].type !== 'Literal' || expr.arguments[1].type !== 'Literal')) {
120
- const param1 = method.value.params[0];
121
- const param2 = method.value.params[1];
122
- if (param1.type !== 'Identifier' || param2.type !== 'Identifier'
123
- || expr.arguments[0].type !== 'Identifier' || expr.arguments[1].type !== 'Identifier'
124
- || param1.name !== expr.arguments[0].name || param2.name !== expr.arguments[1].name) {
125
- throw new Error(`identifyRequest proxy method ${funcName} unknown format`);
126
- } else if (callName !== 'identifyRequest') {
127
- throw new Error(`MethodDocumentor not yet programmed to handle multiple helper methods: 1) ${callName}, 2) ${funcName}`);
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
- callName = funcName;
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
- if (entityPath !== undefined) {
135
- functionList.push(
136
- createObjectForFunction(
137
- funcName,
138
- funcArgs,
139
- entityPath,
140
- descriptionObj[funcName],
141
- workflowObj[funcName]
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
  }