@webex/plugin-meetings 3.11.0-next.7 → 3.11.0-next.8

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.
@@ -95,6 +95,8 @@ export default class Meetings extends WebexPlugin {
95
95
  preferredWebexSite: any;
96
96
  reachability: Reachability;
97
97
  registered: any;
98
+ registrationPromise: Promise<void>;
99
+ unregistrationPromise: Promise<void>;
98
100
  request: any;
99
101
  geoHintInfo: any;
100
102
  meetingInfo: any;
@@ -287,7 +289,7 @@ export default class Meetings extends WebexPlugin {
287
289
  * @public
288
290
  * @memberof Meetings
289
291
  */
290
- unregister(): any;
292
+ unregister(): Promise<void>;
291
293
  /**
292
294
  * Creates a noise reduction effect
293
295
  *
@@ -506,7 +506,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
506
506
  }, _callee8);
507
507
  }))();
508
508
  },
509
- version: "3.11.0-next.7"
509
+ version: "3.11.0-next.8"
510
510
  });
511
511
  var _default = exports.default = Webinar;
512
512
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -93,5 +93,5 @@
93
93
  "//": [
94
94
  "TODO: upgrade jwt-decode when moving to node 18"
95
95
  ],
96
- "version": "3.11.0-next.7"
96
+ "version": "3.11.0-next.8"
97
97
  }
@@ -195,6 +195,8 @@ export default class Meetings extends WebexPlugin {
195
195
  preferredWebexSite: any;
196
196
  reachability: Reachability;
197
197
  registered: any;
198
+ registrationPromise: Promise<void>;
199
+ unregistrationPromise: Promise<void>;
198
200
  request: any;
199
201
  geoHintInfo: any;
200
202
  meetingInfo: any;
@@ -929,9 +931,20 @@ export default class Meetings extends WebexPlugin {
929
931
  * @returns {Promise} A promise that resolves when the step is completed.
930
932
  */
931
933
  executeRegistrationStep(step: () => Promise<any>, stepName: string) {
932
- return step().then(() => {
933
- this.registrationStatus[stepName] = true;
934
- });
934
+ return step()
935
+ .then(() => {
936
+ LoggerProxy.logger.info(
937
+ `Meetings:index#executeRegistrationStep --> INFO, ${stepName} completed`
938
+ );
939
+ this.registrationStatus[stepName] = true;
940
+ })
941
+ .catch((error) => {
942
+ LoggerProxy.logger.error(
943
+ `Meetings:index#executeRegistrationStep --> ERROR, ${stepName} failed: ${error.message}`
944
+ );
945
+
946
+ return Promise.reject(error);
947
+ });
935
948
  }
936
949
 
937
950
  /**
@@ -944,7 +957,33 @@ export default class Meetings extends WebexPlugin {
944
957
  * @memberof Meetings
945
958
  */
946
959
  public register(deviceRegistrationOptions?: DeviceRegistrationOptions): Promise<any> {
947
- this.registrationStatus = clone(INITIAL_REGISTRATION_STATUS);
960
+ if (this.unregistrationPromise) {
961
+ LoggerProxy.logger.info(
962
+ 'Meetings:index#register --> INFO, Meetings plugin unregistration in progress, waiting to register'
963
+ );
964
+
965
+ this.registrationPromise = this.unregistrationPromise
966
+ .catch(() => {}) // It doesn't matter what happened during unregistration
967
+ .finally(() => {
968
+ LoggerProxy.logger.info(
969
+ 'Meetings:index#register --> INFO, Meetings plugin unregistration completed, proceeding to register'
970
+ );
971
+
972
+ this.registrationPromise = null;
973
+
974
+ return this.register(deviceRegistrationOptions);
975
+ });
976
+
977
+ return this.registrationPromise;
978
+ }
979
+
980
+ if (this.registrationPromise) {
981
+ LoggerProxy.logger.info(
982
+ 'Meetings:index#register --> INFO, Meetings plugin registration in progress, returning existing promise'
983
+ );
984
+
985
+ return this.registrationPromise;
986
+ }
948
987
 
949
988
  // @ts-ignore
950
989
  if (!this.webex.canAuthorize) {
@@ -963,7 +1002,11 @@ export default class Meetings extends WebexPlugin {
963
1002
  return Promise.resolve();
964
1003
  }
965
1004
 
966
- return Promise.all([
1005
+ LoggerProxy.logger.info('Meetings:index#register --> INFO, Registering Meetings plugin');
1006
+
1007
+ this.registrationStatus = clone(INITIAL_REGISTRATION_STATUS);
1008
+
1009
+ this.registrationPromise = Promise.all([
967
1010
  this.executeRegistrationStep(() => this.fetchUserPreferredWebexSite(), 'fetchWebexSite'),
968
1011
  this.executeRegistrationStep(() => this.getGeoHint(), 'getGeoHint'),
969
1012
  this.executeRegistrationStep(
@@ -1022,7 +1065,12 @@ export default class Meetings extends WebexPlugin {
1022
1065
  });
1023
1066
 
1024
1067
  return Promise.reject(error);
1068
+ })
1069
+ .finally(() => {
1070
+ this.registrationPromise = null;
1025
1071
  });
1072
+
1073
+ return this.registrationPromise;
1026
1074
  }
1027
1075
 
1028
1076
  /**
@@ -1034,6 +1082,35 @@ export default class Meetings extends WebexPlugin {
1034
1082
  * @memberof Meetings
1035
1083
  */
1036
1084
  unregister() {
1085
+ if (this.unregistrationPromise) {
1086
+ LoggerProxy.logger.info(
1087
+ 'Meetings:index#unregister --> INFO, Meetings plugin unregistration in progress, returning existing promise'
1088
+ );
1089
+
1090
+ return this.unregistrationPromise;
1091
+ }
1092
+
1093
+ if (this.registrationPromise) {
1094
+ LoggerProxy.logger.info(
1095
+ 'Meetings:index#unregister --> INFO, Meetings plugin registration in progress, waiting to unregister'
1096
+ );
1097
+
1098
+ // Wait for registration to complete (success or failure), then call unregister again
1099
+ this.unregistrationPromise = this.registrationPromise
1100
+ .catch(() => {}) // It doesn't matter what happened during registration
1101
+ .finally(() => {
1102
+ LoggerProxy.logger.info(
1103
+ 'Meetings:index#unregister --> INFO, Meetings plugin registration completed, proceeding to unregister'
1104
+ );
1105
+
1106
+ this.unregistrationPromise = null;
1107
+
1108
+ return this.unregister();
1109
+ });
1110
+
1111
+ return this.unregistrationPromise;
1112
+ }
1113
+
1037
1114
  if (!this.registered) {
1038
1115
  LoggerProxy.logger.info(
1039
1116
  'Meetings:index#unregister --> INFO, Meetings plugin already unregistered'
@@ -1044,7 +1121,7 @@ export default class Meetings extends WebexPlugin {
1044
1121
 
1045
1122
  this.stopListeningForEvents();
1046
1123
 
1047
- return (
1124
+ this.unregistrationPromise =
1048
1125
  // @ts-ignore
1049
1126
  this.webex.internal.mercury
1050
1127
  // Use code 3050 with a non-reconnecting reason to prevent Mercury auto-reconnect
@@ -1081,7 +1158,11 @@ export default class Meetings extends WebexPlugin {
1081
1158
  this.registered = false;
1082
1159
  this.registrationStatus = clone(INITIAL_REGISTRATION_STATUS);
1083
1160
  })
1084
- );
1161
+ .finally(() => {
1162
+ this.unregistrationPromise = null;
1163
+ });
1164
+
1165
+ return this.unregistrationPromise;
1085
1166
  }
1086
1167
 
1087
1168
  /**