@itentialopensource/adapter-meraki 0.8.2 → 0.8.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/adapter.js CHANGED
@@ -83,7 +83,14 @@ class Meraki extends AdapterBaseCl {
83
83
  * @iapGetAdapterWorkflowFunctions
84
84
  */
85
85
  iapGetAdapterWorkflowFunctions(inIgnore) {
86
- let myIgnore = ['hasEntities', 'hasDevices'];
86
+ let myIgnore = [
87
+ 'healthCheck',
88
+ 'iapGetAdapterWorkflowFunctions',
89
+ 'iapHasAdapterEntity',
90
+ 'iapVerifyAdapterCapability',
91
+ 'iapUpdateAdapterEntityCache',
92
+ 'hasEntities'
93
+ ];
87
94
  if (!inIgnore && Array.isArray(inIgnore)) {
88
95
  myIgnore = inIgnore;
89
96
  } else if (!inIgnore && typeof inIgnore === 'string') {
@@ -111,8 +118,10 @@ class Meraki extends AdapterBaseCl {
111
118
  * @param {Callback} callback - The results of the call
112
119
  */
113
120
  iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, callback) {
114
- const origin = `${this.id}-adapter-iapUpdateAdapterConfiguration`;
121
+ const meth = 'adapter-iapUpdateAdapterConfiguration';
122
+ const origin = `${this.id}-${meth}`;
115
123
  log.trace(origin);
124
+
116
125
  super.iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, callback);
117
126
  }
118
127
 
@@ -124,8 +133,10 @@ class Meraki extends AdapterBaseCl {
124
133
  * @param {Callback} callback - The results of the call
125
134
  */
126
135
  iapFindAdapterPath(apiPath, callback) {
127
- const origin = `${this.id}-adapter-iapFindAdapterPath`;
136
+ const meth = 'adapter-iapFindAdapterPath';
137
+ const origin = `${this.id}-${meth}`;
128
138
  log.trace(origin);
139
+
129
140
  super.iapFindAdapterPath(apiPath, callback);
130
141
  }
131
142
 
@@ -136,8 +147,10 @@ class Meraki extends AdapterBaseCl {
136
147
  * @param {Callback} callback - callback function
137
148
  */
138
149
  iapSuspendAdapter(mode, callback) {
139
- const origin = `${this.id}-adapter-iapSuspendAdapter`;
150
+ const meth = 'adapter-iapSuspendAdapter';
151
+ const origin = `${this.id}-${meth}`;
140
152
  log.trace(origin);
153
+
141
154
  try {
142
155
  return super.iapSuspendAdapter(mode, callback);
143
156
  } catch (error) {
@@ -153,8 +166,10 @@ class Meraki extends AdapterBaseCl {
153
166
  * @param {Callback} callback - callback function
154
167
  */
155
168
  iapUnsuspendAdapter(callback) {
156
- const origin = `${this.id}-adapter-iapUnsuspendAdapter`;
169
+ const meth = 'adapter-iapUnsuspendAdapter';
170
+ const origin = `${this.id}-${meth}`;
157
171
  log.trace(origin);
172
+
158
173
  try {
159
174
  return super.iapUnsuspendAdapter(callback);
160
175
  } catch (error) {
@@ -170,8 +185,10 @@ class Meraki extends AdapterBaseCl {
170
185
  * @param {Callback} callback - callback function
171
186
  */
172
187
  iapGetAdapterQueue(callback) {
173
- const origin = `${this.id}-adapter-iapGetAdapterQueue`;
188
+ const meth = 'adapter-iapGetAdapterQueue';
189
+ const origin = `${this.id}-${meth}`;
174
190
  log.trace(origin);
191
+
175
192
  return super.iapGetAdapterQueue(callback);
176
193
  }
177
194
 
@@ -185,8 +202,10 @@ class Meraki extends AdapterBaseCl {
185
202
  * @param {Callback} callback - The results of the call
186
203
  */
187
204
  iapTroubleshootAdapter(props, persistFlag, callback) {
188
- const origin = `${this.id}-adapter-iapTroubleshootAdapter`;
205
+ const meth = 'adapter-iapTroubleshootAdapter';
206
+ const origin = `${this.id}-${meth}`;
189
207
  log.trace(origin);
208
+
190
209
  try {
191
210
  return super.iapTroubleshootAdapter(props, persistFlag, this, callback);
192
211
  } catch (error) {
@@ -203,8 +222,10 @@ class Meraki extends AdapterBaseCl {
203
222
  * @param {Callback} callback - callback function
204
223
  */
205
224
  iapRunAdapterHealthcheck(callback) {
206
- const origin = `${this.id}-adapter-iapRunAdapterHealthcheck`;
225
+ const meth = 'adapter-iapRunAdapterHealthcheck';
226
+ const origin = `${this.id}-${meth}`;
207
227
  log.trace(origin);
228
+
208
229
  try {
209
230
  return super.iapRunAdapterHealthcheck(this, callback);
210
231
  } catch (error) {
@@ -220,8 +241,10 @@ class Meraki extends AdapterBaseCl {
220
241
  * @param {Callback} callback - callback function
221
242
  */
222
243
  iapRunAdapterConnectivity(callback) {
223
- const origin = `${this.id}-adapter-iapRunAdapterConnectivity`;
244
+ const meth = 'adapter-iapRunAdapterConnectivity';
245
+ const origin = `${this.id}-${meth}`;
224
246
  log.trace(origin);
247
+
225
248
  try {
226
249
  return super.iapRunAdapterConnectivity(callback);
227
250
  } catch (error) {
@@ -237,8 +260,10 @@ class Meraki extends AdapterBaseCl {
237
260
  * @param {Callback} callback - callback function
238
261
  */
239
262
  iapRunAdapterBasicGet(callback) {
240
- const origin = `${this.id}-adapter-iapRunAdapterBasicGet`;
263
+ const meth = 'adapter-iapRunAdapterBasicGet';
264
+ const origin = `${this.id}-${meth}`;
241
265
  log.trace(origin);
266
+
242
267
  try {
243
268
  return super.iapRunAdapterBasicGet(callback);
244
269
  } catch (error) {
@@ -255,8 +280,10 @@ class Meraki extends AdapterBaseCl {
255
280
  * or the error
256
281
  */
257
282
  iapMoveAdapterEntitiesToDB(callback) {
258
- const origin = `${this.id}-adapter-iapMoveAdapterEntitiesToDB`;
283
+ const meth = 'adapter-iapMoveAdapterEntitiesToDB';
284
+ const origin = `${this.id}-${meth}`;
259
285
  log.trace(origin);
286
+
260
287
  try {
261
288
  return super.iapMoveAdapterEntitiesToDB(callback);
262
289
  } catch (err) {
@@ -446,56 +473,18 @@ class Meraki extends AdapterBaseCl {
446
473
  * value is true or false
447
474
  */
448
475
  hasEntities(entityType, entityList, callback) {
449
- const origin = `${this.id}-adapter-hasEntities`;
476
+ const meth = 'adapter-hasEntities';
477
+ const origin = `${this.id}-${meth}`;
450
478
  log.trace(origin);
451
479
 
452
- switch (entityType) {
453
- case 'Device':
454
- return this.hasDevices(entityList, callback);
455
- default:
456
- return callback(null, `${this.id} does not support entity ${entityType}`);
480
+ try {
481
+ return super.hasEntities(entityType, entityList, callback);
482
+ } catch (err) {
483
+ log.error(`${origin}: ${err}`);
484
+ return callback(null, err);
457
485
  }
458
486
  }
459
487
 
460
- /**
461
- * @summary Helper method for hasEntities for the specific device case
462
- *
463
- * @param {Array} deviceList - array of unique device identifiers
464
- * @param {Callback} callback - A map where the device is the key and the
465
- * value is true or false
466
- */
467
- hasDevices(deviceList, callback) {
468
- const origin = `${this.id}-adapter-hasDevices`;
469
- log.trace(origin);
470
-
471
- const findings = deviceList.reduce((map, device) => {
472
- // eslint-disable-next-line no-param-reassign
473
- map[device] = false;
474
- log.debug(`In reduce: ${JSON.stringify(map)}`);
475
- return map;
476
- }, {});
477
- const apiCalls = deviceList.map((device) => new Promise((resolve) => {
478
- this.getDevice(device, (result, error) => {
479
- if (error) {
480
- log.debug(`In map error: ${JSON.stringify(device)}`);
481
- return resolve({ name: device, found: false });
482
- }
483
- log.debug(`In map: ${JSON.stringify(device)}`);
484
- return resolve({ name: device, found: true });
485
- });
486
- }));
487
- Promise.all(apiCalls).then((results) => {
488
- results.forEach((device) => {
489
- findings[device.name] = device.found;
490
- });
491
- log.debug(`FINDINGS: ${JSON.stringify(findings)}`);
492
- return callback(findings);
493
- }).catch((errors) => {
494
- log.error('Unable to do device lookup.');
495
- return callback(null, { code: 503, message: 'Unable to do device lookup.', error: errors });
496
- });
497
- }
498
-
499
488
  /**
500
489
  * @summary Get Appliance that match the deviceName
501
490
  *
@@ -510,75 +499,11 @@ class Meraki extends AdapterBaseCl {
510
499
  const origin = `${this.id}-${meth}`;
511
500
  log.trace(origin);
512
501
 
513
- // make sure we are set up for device broker getDevice
514
- if (!this.allProps.devicebroker || !this.allProps.devicebroker.getDevice || this.allProps.devicebroker.getDevice.length === 0 || !this.allProps.devicebroker.getDevice[0].path) {
515
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Properties', ['devicebroker.getDevice.path'], null, null, null);
516
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
517
- return callback(null, errorObj);
518
- }
519
-
520
- /* HERE IS WHERE YOU VALIDATE DATA */
521
- if (deviceName === undefined || deviceName === null || deviceName === '' || deviceName.length === 0) {
522
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deviceName'], null, null, null);
523
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
524
- return callback(null, errorObj);
525
- }
526
-
527
502
  try {
528
- // need to get the device so we can convert the deviceName to an id
529
- // !! if we can do a lookup by name the getDevicesFiltered may not be necessary
530
- const opts = {
531
- filter: {
532
- name: deviceName
533
- }
534
- };
535
- return this.getDevicesFiltered(opts, (devs, ferr) => {
536
- // if we received an error or their is no response on the results return an error
537
- if (ferr) {
538
- return callback(null, ferr);
539
- }
540
- if (devs.list.length < 1) {
541
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, `Did Not Find Device ${deviceName}`, [], null, null, null);
542
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
543
- return callback(null, errorObj);
544
- }
545
-
546
- const callPromises = [];
547
- for (let i = 0; i < this.allProps.devicebroker.getDevice.length; i += 1) {
548
- // Perform component calls here.
549
- callPromises.push(
550
- new Promise((resolve, reject) => {
551
- this.iapMakeBrokerCall('getDevice', this.allProps.devicebroker.getDevice[i], devs.list[0], null, (callRet, callErr) => {
552
- // return an error
553
- if (callErr) {
554
- reject(callErr);
555
- } else {
556
- // return the data
557
- resolve(callRet);
558
- }
559
- });
560
- })
561
- );
562
- }
563
-
564
- // return an array of repsonses
565
- return Promise.all(callPromises).then((results) => {
566
- let myResult = {};
567
- results.forEach((result) => {
568
- myResult = { ...myResult, ...result };
569
- });
570
-
571
- return callback(myResult, null);
572
- })
573
- .catch((error) => {
574
- log.debug(`Caught ${JSON.stringify(error)}`);
575
- return callback(null, error);
576
- });
577
- });
578
- } catch (ex) {
579
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
580
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
581
- return callback(null, errorObj);
503
+ return super.getDevice(deviceName, callback);
504
+ } catch (err) {
505
+ log.error(`${origin}: ${err}`);
506
+ return callback(null, err);
582
507
  }
583
508
  }
584
509
 
@@ -596,88 +521,11 @@ class Meraki extends AdapterBaseCl {
596
521
  const origin = `${this.id}-${meth}`;
597
522
  log.trace(origin);
598
523
 
599
- // make sure we are set up for device broker getDevicesFiltered
600
- if (!this.allProps.devicebroker || !this.allProps.devicebroker.getDevicesFiltered || this.allProps.devicebroker.getDevicesFiltered.length === 0 || !this.allProps.devicebroker.getDevicesFiltered[0].path) {
601
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Properties', ['devicebroker.getDevicesFiltered.path'], null, null, null);
602
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
603
- return callback(null, errorObj);
604
- }
605
-
606
- // verify the required fields have been provided
607
- if (options === undefined || options === null || options === '' || options.length === 0) {
608
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['options'], null, null, null);
609
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
610
- return callback(null, errorObj);
611
- }
612
- log.debug(`Device Filter Options: ${JSON.stringify(options)}`);
613
-
614
524
  try {
615
- // TODO - get pagination working
616
- // const nextToken = options.start;
617
- // const maxResults = options.limit;
618
-
619
- // set up the filter of Device Names
620
- let filterName = [];
621
- if (options && options.filter && options.filter.name) {
622
- // when this hack is removed, remove the lint ignore above
623
- if (Array.isArray(options.filter.name)) {
624
- // eslint-disable-next-line prefer-destructuring
625
- filterName = options.filter.name;
626
- } else {
627
- filterName = [options.filter.name];
628
- }
629
- }
630
-
631
- // TODO - get sort and order working
632
- /*
633
- if (options && options.sort) {
634
- reqObj.uriOptions.sort = JSON.stringify(options.sort);
635
- }
636
- if (options && options.order) {
637
- reqObj.uriOptions.order = options.order;
638
- }
639
- */
640
- const callPromises = [];
641
- for (let i = 0; i < this.allProps.devicebroker.getDevicesFiltered.length; i += 1) {
642
- // Perform component calls here.
643
- callPromises.push(
644
- new Promise((resolve, reject) => {
645
- this.iapMakeBrokerCall('getDevicesFiltered', this.allProps.devicebroker.getDevicesFiltered[i], {}, filterName, (callRet, callErr) => {
646
- // return an error
647
- if (callErr) {
648
- reject(callErr);
649
- } else {
650
- // return the data
651
- resolve(callRet);
652
- }
653
- });
654
- })
655
- );
656
- }
657
-
658
- // return an array of repsonses
659
- return Promise.all(callPromises).then((results) => {
660
- let myResult = [];
661
- results.forEach((result) => {
662
- if (Array.isArray(result)) {
663
- myResult = [...myResult, ...result];
664
- } else if (Object.keys(result).length > 0) {
665
- myResult.push(result);
666
- }
667
- });
668
-
669
- log.debug(`${origin}: Found #${myResult.length} devices.`);
670
- log.debug(`Devices: ${JSON.stringify(myResult)}`);
671
- return callback({ total: myResult.length, list: myResult });
672
- })
673
- .catch((error) => {
674
- log.debug(`Caught ${JSON.stringify(error)}`);
675
- return callback(null, error);
676
- });
677
- } catch (ex) {
678
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
679
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
680
- return callback(null, errorObj);
525
+ return super.getDevicesFiltered(options, callback);
526
+ } catch (err) {
527
+ log.error(`${origin}: ${err}`);
528
+ return callback(null, err);
681
529
  }
682
530
  }
683
531
 
@@ -695,79 +543,11 @@ class Meraki extends AdapterBaseCl {
695
543
  const origin = `${this.id}-${meth}`;
696
544
  log.trace(origin);
697
545
 
698
- // make sure we are set up for device broker isAlive
699
- if (!this.allProps.devicebroker || !this.allProps.devicebroker.isAlive || this.allProps.devicebroker.isAlive.length === 0 || !this.allProps.devicebroker.isAlive[0].path) {
700
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Properties', ['devicebroker.isAlive.path'], null, null, null);
701
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
702
- return callback(null, errorObj);
703
- }
704
-
705
- // verify the required fields have been provided
706
- if (deviceName === undefined || deviceName === null || deviceName === '' || deviceName.length === 0) {
707
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deviceName'], null, null, null);
708
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
709
- return callback(null, errorObj);
710
- }
711
-
712
546
  try {
713
- // need to get the device so we can convert the deviceName to an id
714
- // !! if we can do a lookup by name the getDevicesFiltered may not be necessary
715
- const opts = {
716
- filter: {
717
- name: deviceName
718
- }
719
- };
720
- return this.getDevicesFiltered(opts, (devs, ferr) => {
721
- // if we received an error or their is no response on the results return an error
722
- if (ferr) {
723
- return callback(null, ferr);
724
- }
725
- if (devs.list.length < 1) {
726
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, `Did Not Find Device ${deviceName}`, [], null, null, null);
727
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
728
- return callback(null, errorObj);
729
- }
730
-
731
- const callPromises = [];
732
- for (let i = 0; i < this.allProps.devicebroker.isAlive.length; i += 1) {
733
- // Perform component calls here.
734
- callPromises.push(
735
- new Promise((resolve, reject) => {
736
- this.iapMakeBrokerCall('isAlive', this.allProps.devicebroker.isAlive[i], devs.list[0], null, (callRet, callErr) => {
737
- // return an error
738
- if (callErr) {
739
- reject(callErr);
740
- } else {
741
- // return the data
742
- resolve(callRet);
743
- }
744
- });
745
- })
746
- );
747
- }
748
-
749
- // return an array of repsonses
750
- return Promise.all(callPromises).then((results) => {
751
- let myResult = {};
752
- results.forEach((result) => {
753
- myResult = { ...myResult, ...result };
754
- });
755
-
756
- let response = true;
757
- if (myResult.isAlive !== null && myResult.isAlive !== undefined && myResult.isAlive === false) {
758
- response = false;
759
- }
760
- return callback(response);
761
- })
762
- .catch((error) => {
763
- log.debug(`Caught ${JSON.stringify(error)}`);
764
- return callback(null, error);
765
- });
766
- });
767
- } catch (ex) {
768
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
769
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
770
- return callback(null, errorObj);
547
+ return super.isAlive(deviceName, callback);
548
+ } catch (err) {
549
+ log.error(`${origin}: ${err}`);
550
+ return callback(null, err);
771
551
  }
772
552
  }
773
553
 
@@ -786,79 +566,11 @@ class Meraki extends AdapterBaseCl {
786
566
  const origin = `${this.id}-${meth}`;
787
567
  log.trace(origin);
788
568
 
789
- // make sure we are set up for device broker getConfig
790
- if (!this.allProps.devicebroker || !this.allProps.devicebroker.getConfig || this.allProps.devicebroker.getConfig.length === 0 || !this.allProps.devicebroker.getConfig[0].path) {
791
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Properties', ['devicebroker.getConfig.path'], null, null, null);
792
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
793
- return callback(null, errorObj);
794
- }
795
-
796
- // verify the required fields have been provided
797
- if (deviceName === undefined || deviceName === null || deviceName === '' || deviceName.length === 0) {
798
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['deviceName'], null, null, null);
799
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
800
- return callback(null, errorObj);
801
- }
802
-
803
569
  try {
804
- // need to get the device so we can convert the deviceName to an id
805
- // !! if we can do a lookup by name the getDevicesFiltered may not be necessary
806
- const opts = {
807
- filter: {
808
- name: deviceName
809
- }
810
- };
811
- return this.getDevicesFiltered(opts, (devs, ferr) => {
812
- // if we received an error or their is no response on the results return an error
813
- if (ferr) {
814
- return callback(null, ferr);
815
- }
816
- if (devs.list.length < 1) {
817
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, `Did Not Find Device ${deviceName}`, [], null, null, null);
818
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
819
- return callback(null, errorObj);
820
- }
821
-
822
- const callPromises = [];
823
- for (let i = 0; i < this.allProps.devicebroker.getConfig.length; i += 1) {
824
- // Perform component calls here.
825
- callPromises.push(
826
- new Promise((resolve, reject) => {
827
- this.iapMakeBrokerCall('getConfig', this.allProps.devicebroker.getConfig[i], devs.list[0], null, (callRet, callErr) => {
828
- // return an error
829
- if (callErr) {
830
- reject(callErr);
831
- } else {
832
- // return the data
833
- resolve(callRet);
834
- }
835
- });
836
- })
837
- );
838
- }
839
-
840
- // return an array of repsonses
841
- return Promise.all(callPromises).then((results) => {
842
- let myResult = {};
843
- results.forEach((result) => {
844
- myResult = { ...myResult, ...result };
845
- });
846
-
847
- // return the result
848
- const newResponse = {
849
- response: JSON.stringify(myResult, null, 2)
850
- };
851
- return callback(newResponse, null);
852
- })
853
- .catch((error) => {
854
- log.debug(`Caught ${JSON.stringify(error)}`);
855
- return callback(null, error);
856
- });
857
- });
858
- } catch (ex) {
859
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
860
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
861
- return callback(null, errorObj);
570
+ return super.getConfig(deviceName, format, callback);
571
+ } catch (err) {
572
+ log.error(`${origin}: ${err}`);
573
+ return callback(null, err);
862
574
  }
863
575
  }
864
576
 
@@ -875,52 +587,11 @@ class Meraki extends AdapterBaseCl {
875
587
  const origin = `${this.id}-${meth}`;
876
588
  log.trace(origin);
877
589
 
878
- // make sure we are set up for device broker getCount
879
- if (!this.allProps.devicebroker || !this.allProps.devicebroker.getCount || this.allProps.devicebroker.getCount.length === 0 || !this.allProps.devicebroker.getCount[0].path) {
880
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Properties', ['devicebroker.getCount.path'], null, null, null);
881
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
882
- return callback(null, errorObj);
883
- }
884
-
885
- // verify the required fields have been provided
886
-
887
590
  try {
888
- const callPromises = [];
889
- for (let i = 0; i < this.allProps.devicebroker.getCount.length; i += 1) {
890
- // Perform component calls here.
891
- callPromises.push(
892
- new Promise((resolve, reject) => {
893
- this.iapMakeBrokerCall('getCount', this.allProps.devicebroker.getCount[i], null, null, (callRet, callErr) => {
894
- // return an error
895
- if (callErr) {
896
- reject(callErr);
897
- } else {
898
- // return the data
899
- resolve(callRet);
900
- }
901
- });
902
- })
903
- );
904
- }
905
-
906
- // return an array of repsonses
907
- return Promise.all(callPromises).then((results) => {
908
- let myResult = {};
909
- results.forEach((result) => {
910
- myResult = { ...myResult, ...result };
911
- });
912
-
913
- // return the result
914
- return callback({ count: myResult.length });
915
- })
916
- .catch((error) => {
917
- log.debug(`Caught ${JSON.stringify(error)}`);
918
- return callback(null, error);
919
- });
920
- } catch (ex) {
921
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
922
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
923
- return callback(null, errorObj);
591
+ return super.iapGetDeviceCount(callback);
592
+ } catch (err) {
593
+ log.error(`${origin}: ${err}`);
594
+ return callback(null, err);
924
595
  }
925
596
  }
926
597
 
@@ -1035,6 +706,116 @@ class Meraki extends AdapterBaseCl {
1035
706
  }
1036
707
  }
1037
708
 
709
+ /**
710
+ * Makes the requested generic call with no base path or version
711
+ *
712
+ * @function genericAdapterRequestNoBasePath
713
+ * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (required)
714
+ * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (required)
715
+ * @param {Object} queryData - the parameters to be put on the url (optional).
716
+ * Can be a stringified Object.
717
+ * @param {Object} requestBody - the body to add to the request (optional).
718
+ * Can be a stringified Object.
719
+ * @param {Object} addlHeaders - additional headers to be put on the call (optional).
720
+ * Can be a stringified Object.
721
+ * @param {getCallback} callback - a callback function to return the result (Generics)
722
+ * or the error
723
+ */
724
+ genericAdapterRequestNoBasePath(uriPath, restMethod, queryData, requestBody, addlHeaders, callback) {
725
+ const meth = 'adapter-genericAdapterRequestNoBasePath';
726
+ const origin = `${this.id}-${meth}`;
727
+ log.trace(origin);
728
+
729
+ if (this.suspended && this.suspendMode === 'error') {
730
+ const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);
731
+ log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
732
+ return callback(null, errorObj);
733
+ }
734
+
735
+ /* HERE IS WHERE YOU VALIDATE DATA */
736
+ if (uriPath === undefined || uriPath === null || uriPath === '') {
737
+ const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['uriPath'], null, null, null);
738
+ log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
739
+ return callback(null, errorObj);
740
+ }
741
+ if (restMethod === undefined || restMethod === null || restMethod === '') {
742
+ const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['restMethod'], null, null, null);
743
+ log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
744
+ return callback(null, errorObj);
745
+ }
746
+
747
+ /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */
748
+ // remove any leading / and split the uripath into path variables
749
+ let myPath = uriPath;
750
+ while (myPath.indexOf('/') === 0) {
751
+ myPath = myPath.substring(1);
752
+ }
753
+ const pathVars = myPath.split('/');
754
+ const queryParamsAvailable = queryData;
755
+ const queryParams = {};
756
+ const bodyVars = requestBody;
757
+
758
+ // loop in template. long callback arg name to avoid identifier conflicts
759
+ Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {
760
+ if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null
761
+ && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {
762
+ queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];
763
+ }
764
+ });
765
+
766
+ // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders
767
+ const reqObj = {
768
+ payload: bodyVars,
769
+ uriPathVars: pathVars,
770
+ uriQuery: queryParams,
771
+ uriOptions: {}
772
+ };
773
+ // add headers if provided
774
+ if (addlHeaders) {
775
+ reqObj.addlHeaders = addlHeaders;
776
+ }
777
+
778
+ // determine the call and return flag
779
+ let action = 'getGenericsNoBase';
780
+ let returnF = true;
781
+ if (restMethod.toUpperCase() === 'POST') {
782
+ action = 'createGenericNoBase';
783
+ } else if (restMethod.toUpperCase() === 'PUT') {
784
+ action = 'updateGenericNoBase';
785
+ } else if (restMethod.toUpperCase() === 'PATCH') {
786
+ action = 'patchGenericNoBase';
787
+ } else if (restMethod.toUpperCase() === 'DELETE') {
788
+ action = 'deleteGenericNoBase';
789
+ returnF = false;
790
+ }
791
+
792
+ try {
793
+ // Make the call -
794
+ // identifyRequest(entity, action, requestObj, returnDataFlag, callback)
795
+ return this.requestHandlerInst.identifyRequest('.generic', action, reqObj, returnF, (irReturnData, irReturnError) => {
796
+ // if we received an error or their is no response on the results
797
+ // return an error
798
+ if (irReturnError) {
799
+ /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */
800
+ return callback(null, irReturnError);
801
+ }
802
+ if (!Object.hasOwnProperty.call(irReturnData, 'response')) {
803
+ const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['genericAdapterRequestNoBasePath'], null, null, null);
804
+ log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
805
+ return callback(null, errorObj);
806
+ }
807
+
808
+ /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */
809
+ // return the response
810
+ return callback(irReturnData, null);
811
+ });
812
+ } catch (ex) {
813
+ const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
814
+ log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
815
+ return callback(null, errorObj);
816
+ }
817
+ }
818
+
1038
819
  /**
1039
820
  * @callback healthCallback
1040
821
  * @param {Object} result - the result of the get request (contains an id and a status)