@itentialopensource/adapter-sevone 2.8.2 → 2.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/PROPERTIES.md CHANGED
@@ -29,7 +29,10 @@ This section defines **all** the properties that are available for the adapter,
29
29
  "auth_logging": false,
30
30
  "client_id": "",
31
31
  "client_secret": "",
32
- "grant_type": ""
32
+ "grant_type": "",
33
+ "auth_request_datatype": "",
34
+ "auth_response_datatype": "",
35
+ "token_response_placement": ""
33
36
  },
34
37
  "healthcheck": {
35
38
  "type": "startup",
@@ -51,7 +54,8 @@ This section defines **all** the properties that are available for the adapter,
51
54
  "healthcheck_on_timeout": false,
52
55
  "return_raw": false,
53
56
  "archiving": false,
54
- "return_request": false
57
+ "return_request": false,
58
+ "keep_alive_interval": 0
55
59
  },
56
60
  "ssl": {
57
61
  "ecdhCurve": "",
@@ -283,6 +287,18 @@ The following properties are used to define the authentication process to SevOne
283
287
  <td style="padding:15px">grant_type</td>
284
288
  <td style="padding:15px">Provide a grant type when needed, this is common on some types of OAuth.</td>
285
289
  </tr>
290
+ <tr>
291
+ <td style="padding:15px">auth_request_datatype</td>
292
+ <td style="padding:15px">Override the request data type for token authentication requests. When set, this overrides the schema's requestDatatype (JSON, JSON2XML, PLAIN, XML, URLENCODE, URLQUERY, FORM).</td>
293
+ </tr>
294
+ <tr>
295
+ <td style="padding:15px">auth_response_datatype</td>
296
+ <td style="padding:15px">Override the response data type for token authentication requests. When set, this overrides the schema's responseDatatype (JSON, XML2JSON, PLAIN, XML, URLENCODE).</td>
297
+ </tr>
298
+ <tr>
299
+ <td style="padding:15px">token_response_placement</td>
300
+ <td style="padding:15px">Override where to extract the token from the authentication response (HEADER or BODY). When set, this overrides the schema's token placement setting.</td>
301
+ </tr>
286
302
  </table>
287
303
  <br>
288
304
 
@@ -388,6 +404,10 @@ The request section defines properties to help handle requests.
388
404
  <td style="padding:15px">return_request</td>
389
405
  <td style="padding:15px">Optional flag. Default is false. Will return the actual request that is made including headers. This should only be used during debugging issues as there could be credentials in the actual request.</td>
390
406
  </tr>
407
+ <tr>
408
+ <td style="padding:15px">keep_alive_interval</td>
409
+ <td style="padding:15px">Optional. TCP keep-alive interval in seconds for long-lived connections. Set to 0 to disable keep-alive (default). When enabled, minimum value is 30 seconds.</td>
410
+ </tr>
391
411
  </table>
392
412
  <br>
393
413
 
package/TAB2.md CHANGED
@@ -81,6 +81,9 @@ Sample Properties can be used to help you configure the adapter in the Itential
81
81
  "client_id": "",
82
82
  "client_secret": "",
83
83
  "grant_type": "",
84
+ "auth_request_datatype": "",
85
+ "auth_response_datatype": "",
86
+ "token_response_placement": "",
84
87
  "sensitive": [],
85
88
  "sso": {
86
89
  "protocol": "",
@@ -132,7 +135,8 @@ Sample Properties can be used to help you configure the adapter in the Itential
132
135
  "healthcheck_on_timeout": false,
133
136
  "return_raw": false,
134
137
  "archiving": false,
135
- "return_request": false
138
+ "return_request": false,
139
+ "keep_alive_interval": 0
136
140
  },
137
141
  "proxy": {
138
142
  "enabled": false,
package/adapterBase.js CHANGED
@@ -1246,6 +1246,44 @@ class AdapterBase extends EventEmitterCl {
1246
1246
  return this.requestHandlerInst.iapGetDeviceCountAuth(callOptions, callback);
1247
1247
  }
1248
1248
 
1249
+ /**
1250
+ * @summary Parse and merge iapMetadata fields into reqObj
1251
+ *
1252
+ * @function parseIapMetadata
1253
+ * @param {Object} reqObj - the request object to merge metadata into
1254
+ * @param {Object} iapMetadata - the metadata object to parse and merge
1255
+ */
1256
+ parseIapMetadata(reqObj, iapMetadata) {
1257
+ const reqFields = ['payload', 'uriPathVars', 'uriQuery', 'uriOptions', 'addlHeaders', 'authData', 'callProperties', 'filter', 'priority', 'event'];
1258
+
1259
+ const result = { ...reqObj };
1260
+
1261
+ // Merge and add new iapMetadata fields in result
1262
+ Object.keys(iapMetadata).forEach((iapField) => {
1263
+ if (reqFields.includes(iapField) && iapMetadata[iapField]) {
1264
+ if (Array.isArray(result[iapField]) && Array.isArray(iapMetadata[iapField])) {
1265
+ result[iapField] = result[iapField].concat(iapMetadata[iapField]); // Merge arrays
1266
+ } else if (
1267
+ result[iapField]
1268
+ && iapMetadata[iapField]
1269
+ && typeof result[iapField] === 'object'
1270
+ && typeof iapMetadata[iapField] === 'object'
1271
+ && !Array.isArray(result[iapField])
1272
+ && !Array.isArray(iapMetadata[iapField])
1273
+ ) {
1274
+ result[iapField] = { ...result[iapField], ...iapMetadata[iapField] }; // Merge objects
1275
+ } else {
1276
+ // Otherwise, add new iapMetadata fields to result
1277
+ result[iapField] = iapMetadata[iapField];
1278
+ }
1279
+ }
1280
+ });
1281
+ // Add iapMetadata to result for further work
1282
+ result.iapMetadata = iapMetadata;
1283
+
1284
+ return result;
1285
+ }
1286
+
1249
1287
  /* ********************************************** */
1250
1288
  /* */
1251
1289
  /* EXPOSES GENERIC HANDLER */
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@itentialopensource/adapter-sevone",
3
- "version": "2.8.2",
3
+ "version": "2.9.0",
4
4
  "description": "Itential SevOne Adapter",
5
5
  "main": "adapter.js",
6
6
  "systemName": "SevOne",
7
- "wizardVersion": "2.44.7",
8
- "engineVersion": "1.71.2",
7
+ "wizardVersion": "3.8.0",
8
+ "engineVersion": "1.80.0",
9
9
  "adapterType": "http",
10
10
  "scripts": {
11
11
  "preinstall": "node utils/setup.js",
@@ -49,7 +49,7 @@
49
49
  "author": "Itential",
50
50
  "homepage": "https://gitlab.com/itentialopensource/adapters/adapter-sevone#readme",
51
51
  "dependencies": {
52
- "@itentialopensource/adapter-utils": "5.10.28",
52
+ "@itentialopensource/adapter-utils": "6.1.7",
53
53
  "acorn": "8.14.1",
54
54
  "ajv": "8.17.1",
55
55
  "axios": "1.12.2",
@@ -100,7 +100,7 @@
100
100
  "protocol": {
101
101
  "type": "string",
102
102
  "description": "the protocol to use to connect to server",
103
- "default": "http",
103
+ "default": "https",
104
104
  "enum": [
105
105
  "http",
106
106
  "https"
@@ -297,6 +297,44 @@
297
297
  "description": "The grant type for OAuth requests - can also provide in schema",
298
298
  "default": ""
299
299
  },
300
+ "auth_request_datatype": {
301
+ "type": "string",
302
+ "description": "Override the request data type for token authentication requests. When set, this overrides the schema's requestDatatype",
303
+ "default": "",
304
+ "enum": [
305
+ "",
306
+ "JSON",
307
+ "JSON2XML",
308
+ "PLAIN",
309
+ "XML",
310
+ "URLENCODE",
311
+ "URLQUERY",
312
+ "FORM"
313
+ ]
314
+ },
315
+ "auth_response_datatype": {
316
+ "type": "string",
317
+ "description": "Override the response data type for token authentication requests. When set, this overrides the schema's responseDatatype",
318
+ "default": "",
319
+ "enum": [
320
+ "",
321
+ "JSON",
322
+ "XML2JSON",
323
+ "PLAIN",
324
+ "XML",
325
+ "URLENCODE"
326
+ ]
327
+ },
328
+ "token_response_placement": {
329
+ "type": "string",
330
+ "description": "Override where to extract the token from the authentication response (HEADER or BODY). When set, this overrides the schema's token placement setting",
331
+ "default": "",
332
+ "enum": [
333
+ "",
334
+ "HEADER",
335
+ "BODY"
336
+ ]
337
+ },
300
338
  "sensitive": {
301
339
  "type": "array",
302
340
  "description": "List of sensitive keys to search and hide values from being logged",
@@ -680,6 +718,12 @@
680
718
  "type": "boolean",
681
719
  "description": "This property turns on returning the response information - need to be carefull in case credentials are in the path",
682
720
  "default": false
721
+ },
722
+ "keep_alive_interval": {
723
+ "type": "integer",
724
+ "description": "TCP keep-alive interval in seconds for long-lived connections. Set to 0 to disable (default). Minimum 30 seconds when enabled.",
725
+ "default": 0,
726
+ "minimum": 0
683
727
  }
684
728
  },
685
729
  "required": [
@@ -715,7 +759,7 @@
715
759
  "protocol": {
716
760
  "type": "string",
717
761
  "description": "the protocol to use to connect to the proxy",
718
- "default": "http",
762
+ "default": "https",
719
763
  "enum": [
720
764
  "http",
721
765
  "https",
@@ -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.0.2"
38
+ },
39
+ {
40
+ "owner": "propertiesSchemaJson",
41
+ "description": "Adapter properties defined in the propertiesSchema file",
42
+ "value": 83
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": 677
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": 13854
78
+ },
79
+ {
80
+ "owner": "unitTestJS",
81
+ "description": "Number of unit tests",
82
+ "value": 893
83
+ },
84
+ {
85
+ "owner": "integrationTestJS",
86
+ "description": "Number of lines of code in integration tests",
87
+ "value": 13590
88
+ },
89
+ {
90
+ "owner": "integrationTestJS",
91
+ "description": "Number of integration tests",
92
+ "value": 409
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": 28971
108
+ },
109
+ {
110
+ "owner": "Overall",
111
+ "description": "Total Tests",
112
+ "value": 1302
113
+ },
114
+ {
115
+ "owner": "Overall",
116
+ "description": "Total Files",
117
+ "value": 6
118
+ }
119
+ ]
120
+ }
@@ -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.7"
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": 13854
78
+ },
79
+ {
80
+ "owner": "unitTestJS",
81
+ "description": "Number of unit tests",
82
+ "value": 893
83
+ },
84
+ {
85
+ "owner": "integrationTestJS",
86
+ "description": "Number of lines of code in integration tests",
87
+ "value": 13590
88
+ },
89
+ {
90
+ "owner": "integrationTestJS",
91
+ "description": "Number of integration tests",
92
+ "value": 409
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": 28971
108
+ },
109
+ {
110
+ "owner": "Overall",
111
+ "description": "Total Tests",
112
+ "value": 1302
113
+ },
114
+ {
115
+ "owner": "Overall",
116
+ "description": "Total Files",
117
+ "value": 6
118
+ }
119
+ ]
120
+ }
@@ -27,6 +27,9 @@
27
27
  "client_id": "",
28
28
  "client_secret": "",
29
29
  "grant_type": "",
30
+ "auth_request_datatype": "",
31
+ "auth_response_datatype": "",
32
+ "token_response_placement": "",
30
33
  "sensitive": [],
31
34
  "sso": {
32
35
  "protocol": "",
@@ -78,7 +81,8 @@
78
81
  "healthcheck_on_timeout": false,
79
82
  "return_raw": false,
80
83
  "archiving": false,
81
- "return_request": false
84
+ "return_request": false,
85
+ "keep_alive_interval": 0
82
86
  },
83
87
  "proxy": {
84
88
  "enabled": false,
@@ -267,4 +271,4 @@
267
271
  "brokers": [],
268
272
  "logLevel": "none",
269
273
  "timeout": 60000
270
- }
274
+ }
@@ -387,7 +387,7 @@ describe('[unit] Adapter Base Test', () => {
387
387
  'healthCheck', 'iapActivateTasks', 'iapDeactivateTasks', 'iapExpandedGenericAdapterRequest', 'iapFindAdapterPath', 'iapGetAdapterInventory', 'iapGetAdapterQueue',
388
388
  'iapGetAdapterWorkflowFunctions', 'iapGetDeviceCount', 'iapGetDeviceCountAuth', 'iapMoveAdapterEntitiesToDB', 'iapPopulateEntityCache', 'iapRetrieveEntitiesCache',
389
389
  'iapRunAdapterBasicGet', 'iapRunAdapterConnectivity', 'iapRunAdapterHealthcheck', 'iapRunAdapterLint', 'iapRunAdapterTests', 'iapSuspendAdapter', 'iapTroubleshootAdapter',
390
- 'iapUnsuspendAdapter', 'iapUpdateAdapterConfiguration', 'isAlive', 'isAliveAuth', 'refreshProperties', 'addListener', 'emit', 'eventNames', 'getMaxListeners',
390
+ 'iapUnsuspendAdapter', 'iapUpdateAdapterConfiguration', 'isAlive', 'isAliveAuth', 'parseIapMetadata', 'refreshProperties', 'addListener', 'emit', 'eventNames', 'getMaxListeners',
391
391
  'listenerCount', 'listeners', 'off', 'on', 'once', 'prependListener', 'prependOnceListener', 'rawListeners', 'removeAllListeners', 'removeListener', 'setMaxListeners'];
392
392
  try {
393
393
  const expectedFunctions = a.getAllFunctions();
@@ -579,6 +579,9 @@ describe('[unit] SevOne Adapter Test', () => {
579
579
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_id.type);
580
580
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_secret.type);
581
581
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.grant_type.type);
582
+ assert.equal('string', propertiesDotJson.definitions.authentication.properties.auth_request_datatype.type);
583
+ assert.equal('string', propertiesDotJson.definitions.authentication.properties.auth_response_datatype.type);
584
+ assert.equal('string', propertiesDotJson.definitions.authentication.properties.token_response_placement.type);
582
585
  assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
583
586
  assert.notEqual(null, propertiesDotJson.definitions.ssl);
584
587
  assert.notEqual('', propertiesDotJson.definitions.ssl);
@@ -769,6 +772,9 @@ describe('[unit] SevOne Adapter Test', () => {
769
772
  assert.notEqual(undefined, sampleDotJson.properties.authentication.client_id);
770
773
  assert.notEqual(undefined, sampleDotJson.properties.authentication.client_secret);
771
774
  assert.notEqual(undefined, sampleDotJson.properties.authentication.grant_type);
775
+ assert.notEqual(undefined, sampleDotJson.properties.authentication.auth_request_datatype);
776
+ assert.notEqual(undefined, sampleDotJson.properties.authentication.auth_response_datatype);
777
+ assert.notEqual(undefined, sampleDotJson.properties.authentication.token_response_placement);
772
778
  assert.notEqual(undefined, sampleDotJson.properties.ssl);
773
779
  assert.notEqual(null, sampleDotJson.properties.ssl);
774
780
  assert.notEqual('', sampleDotJson.properties.ssl);