@webex/calling 3.12.0-next.30 → 3.12.0-next.32

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.
@@ -11,18 +11,60 @@ var _Logger = _interopRequireDefault(require("../../Logger"));
11
11
  var _constants = require("../constants");
12
12
  /** WDM device-settings key for routing Mobius traffic over WebSocket. */
13
13
  var WEBRTC_CALLING_OVER_WS_FEATURE_KEY = exports.WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';
14
+
15
+ /** Allowed origins for samples page localStorage override */
16
+ var ALLOWED_ORIGINS = ['localhost', '127.0.0.1', 'web-sdk.webex.com'];
17
+
18
+ /**
19
+ * Returns tri-state localStorage override: true (force-enable), false (force-disable), or null (defer to backend).
20
+ */
21
+ function samplesPageToggleValue() {
22
+ if (typeof window === 'undefined' || !window.localStorage) {
23
+ return null;
24
+ }
25
+ var hostname = window.location.hostname;
26
+ var isAllowedOrigin = ALLOWED_ORIGINS.some(function (origin) {
27
+ return hostname === origin || hostname.endsWith(".".concat(origin));
28
+ });
29
+ if (!isAllowedOrigin) {
30
+ return null;
31
+ }
32
+ var localStorageValue = localStorage.getItem('mobius-wss-enabled');
33
+ if (localStorageValue === 'true') {
34
+ _Logger.default.trace("Mobius WSS force-enabled via samples page localStorage override on ".concat(hostname), {
35
+ file: _constants.WS_FEATURE_FLAG_FILE,
36
+ method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
37
+ });
38
+ return true;
39
+ }
40
+ if (localStorageValue === 'false') {
41
+ _Logger.default.trace("Mobius WSS force-disabled via samples page localStorage override on ".concat(hostname), {
42
+ file: _constants.WS_FEATURE_FLAG_FILE,
43
+ method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
44
+ });
45
+ return false;
46
+ }
47
+ return null;
48
+ }
49
+
14
50
  /**
15
51
  * Whether Webex Calling should use the Mobius WebSocket transport for API requests.
16
52
  * Reads WDM `webex.internal.device.settings['webrtc-calling-over-ws'].value`; must be
17
53
  * strictly `true` to enable WebSocket—otherwise use HTTP.
54
+ *
55
+ * Additionally checks browser localStorage for 'mobius-wss-enabled' flag on allowed origins
56
+ * (localhost, 127.0.0.1, web-sdk.webex.com) to enable testing via samples page.
57
+ * localStorage can force-enable ('true'), force-disable ('false'), or defer to backend (null/unset).
18
58
  */
19
59
  function isMobiusWssEnabled(webex) {
20
60
  var _webex$internal, _webex$internal$devic, _webex$internal$devic2, _webex$internal$devic3, _webex$internal$devic4;
21
61
  var enabled = ((_webex$internal = webex.internal) === null || _webex$internal === void 0 ? void 0 : (_webex$internal$devic = _webex$internal.device) === null || _webex$internal$devic === void 0 ? void 0 : (_webex$internal$devic2 = _webex$internal$devic.features) === null || _webex$internal$devic2 === void 0 ? void 0 : (_webex$internal$devic3 = _webex$internal$devic2.developer) === null || _webex$internal$devic3 === void 0 ? void 0 : (_webex$internal$devic4 = _webex$internal$devic3.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)) === null || _webex$internal$devic4 === void 0 ? void 0 : _webex$internal$devic4.value) === true;
22
- _Logger.default.trace("Mobius WSS feature flag '".concat(WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: ").concat(enabled), {
62
+ var localStorageOverride = samplesPageToggleValue();
63
+ var finalValue = localStorageOverride !== null ? localStorageOverride : enabled;
64
+ _Logger.default.trace("Mobius WSS feature flag '".concat(WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: ").concat(finalValue, " (backend: ").concat(enabled, ", localStorage: ").concat(localStorageOverride, ")"), {
23
65
  file: _constants.WS_FEATURE_FLAG_FILE,
24
66
  method: _constants.METHODS.IS_MOBIUS_WSS_ENABLED
25
67
  });
26
- return enabled;
68
+ return finalValue;
27
69
  }
28
70
  //# sourceMappingURL=wsFeatureFlag.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_Logger","_interopRequireDefault","require","_constants","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","exports","isMobiusWssEnabled","webex","_webex$internal","_webex$internal$devic","_webex$internal$devic2","_webex$internal$devic3","_webex$internal$devic4","enabled","internal","device","features","developer","get","value","log","trace","concat","file","WS_FEATURE_FLAG_FILE","method","METHODS","IS_MOBIUS_WSS_ENABLED"],"sources":["wsFeatureFlag.ts"],"sourcesContent":["import {WebexSDK} from '../../SDKConnector/types';\nimport log from '../../Logger';\nimport {METHODS, WS_FEATURE_FLAG_FILE} from '../constants';\n\n/** WDM device-settings key for routing Mobius traffic over WebSocket. */\nexport const WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';\n/**\n * Whether Webex Calling should use the Mobius WebSocket transport for API requests.\n * Reads WDM `webex.internal.device.settings['webrtc-calling-over-ws'].value`; must be\n * strictly `true` to enable WebSocket—otherwise use HTTP.\n */\nexport function isMobiusWssEnabled(webex: WebexSDK): boolean {\n const enabled =\n webex.internal?.device?.features?.developer?.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)?.value ===\n true;\n\n log.trace(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: ${enabled}`,\n {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n }\n );\n\n return enabled;\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACO,IAAME,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAAG,oCAAoC;AACtF;AACA;AACA;AACA;AACA;AACO,SAASE,kBAAkBA,CAACC,KAAe,EAAW;EAAA,IAAAC,eAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAC3D,IAAMC,OAAO,GACX,EAAAL,eAAA,GAAAD,KAAK,CAACO,QAAQ,cAAAN,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBO,MAAM,cAAAN,qBAAA,wBAAAC,sBAAA,GAAtBD,qBAAA,CAAwBO,QAAQ,cAAAN,sBAAA,wBAAAC,sBAAA,GAAhCD,sBAAA,CAAkCO,SAAS,cAAAN,sBAAA,wBAAAC,sBAAA,GAA3CD,sBAAA,CAA6CO,GAAG,CAACd,kCAAkC,CAAC,cAAAQ,sBAAA,uBAApFA,sBAAA,CAAsFO,KAAK,MAC3F,IAAI;EAENC,eAAG,CAACC,KAAK,6BAAAC,MAAA,CACqBlB,kCAAkC,qBAAAkB,MAAA,CAAkBT,OAAO,GACvF;IACEU,IAAI,EAAEC,+BAAoB;IAC1BC,MAAM,EAAEC,kBAAO,CAACC;EAClB,CACF,CAAC;EAED,OAAOd,OAAO;AAChB","ignoreList":[]}
1
+ {"version":3,"names":["_Logger","_interopRequireDefault","require","_constants","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","exports","ALLOWED_ORIGINS","samplesPageToggleValue","window","localStorage","hostname","location","isAllowedOrigin","some","origin","endsWith","concat","localStorageValue","getItem","log","trace","file","WS_FEATURE_FLAG_FILE","method","METHODS","IS_MOBIUS_WSS_ENABLED","isMobiusWssEnabled","webex","_webex$internal","_webex$internal$devic","_webex$internal$devic2","_webex$internal$devic3","_webex$internal$devic4","enabled","internal","device","features","developer","get","value","localStorageOverride","finalValue"],"sources":["wsFeatureFlag.ts"],"sourcesContent":["import {WebexSDK} from '../../SDKConnector/types';\nimport log from '../../Logger';\nimport {METHODS, WS_FEATURE_FLAG_FILE} from '../constants';\n\n/** WDM device-settings key for routing Mobius traffic over WebSocket. */\nexport const WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';\n\n/** Allowed origins for samples page localStorage override */\nconst ALLOWED_ORIGINS = ['localhost', '127.0.0.1', 'web-sdk.webex.com'];\n\n/**\n * Returns tri-state localStorage override: true (force-enable), false (force-disable), or null (defer to backend).\n */\nfunction samplesPageToggleValue(): boolean | null {\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n const hostname = window.location.hostname;\n const isAllowedOrigin = ALLOWED_ORIGINS.some(\n (origin) => hostname === origin || hostname.endsWith(`.${origin}`)\n );\n\n if (!isAllowedOrigin) {\n return null;\n }\n\n const localStorageValue = localStorage.getItem('mobius-wss-enabled');\n\n if (localStorageValue === 'true') {\n log.trace(`Mobius WSS force-enabled via samples page localStorage override on ${hostname}`, {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n });\n\n return true;\n }\n\n if (localStorageValue === 'false') {\n log.trace(`Mobius WSS force-disabled via samples page localStorage override on ${hostname}`, {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n });\n\n return false;\n }\n\n return null;\n}\n\n/**\n * Whether Webex Calling should use the Mobius WebSocket transport for API requests.\n * Reads WDM `webex.internal.device.settings['webrtc-calling-over-ws'].value`; must be\n * strictly `true` to enable WebSocket—otherwise use HTTP.\n *\n * Additionally checks browser localStorage for 'mobius-wss-enabled' flag on allowed origins\n * (localhost, 127.0.0.1, web-sdk.webex.com) to enable testing via samples page.\n * localStorage can force-enable ('true'), force-disable ('false'), or defer to backend (null/unset).\n */\nexport function isMobiusWssEnabled(webex: WebexSDK): boolean {\n const enabled =\n webex.internal?.device?.features?.developer?.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)?.value ===\n true;\n\n const localStorageOverride = samplesPageToggleValue();\n const finalValue = localStorageOverride !== null ? localStorageOverride : enabled;\n\n log.trace(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: ${finalValue} (backend: ${enabled}, localStorage: ${localStorageOverride})`,\n {\n file: WS_FEATURE_FLAG_FILE,\n method: METHODS.IS_MOBIUS_WSS_ENABLED,\n }\n );\n\n return finalValue;\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA;AACO,IAAME,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAAG,oCAAoC;;AAEtF;AACA,IAAME,eAAe,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,mBAAmB,CAAC;;AAEvE;AACA;AACA;AACA,SAASC,sBAAsBA,CAAA,EAAmB;EAChD,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE;IACzD,OAAO,IAAI;EACb;EAEA,IAAMC,QAAQ,GAAGF,MAAM,CAACG,QAAQ,CAACD,QAAQ;EACzC,IAAME,eAAe,GAAGN,eAAe,CAACO,IAAI,CAC1C,UAACC,MAAM;IAAA,OAAKJ,QAAQ,KAAKI,MAAM,IAAIJ,QAAQ,CAACK,QAAQ,KAAAC,MAAA,CAAKF,MAAM,CAAE,CAAC;EAAA,CACpE,CAAC;EAED,IAAI,CAACF,eAAe,EAAE;IACpB,OAAO,IAAI;EACb;EAEA,IAAMK,iBAAiB,GAAGR,YAAY,CAACS,OAAO,CAAC,oBAAoB,CAAC;EAEpE,IAAID,iBAAiB,KAAK,MAAM,EAAE;IAChCE,eAAG,CAACC,KAAK,uEAAAJ,MAAA,CAAuEN,QAAQ,GAAI;MAC1FW,IAAI,EAAEC,+BAAoB;MAC1BC,MAAM,EAAEC,kBAAO,CAACC;IAClB,CAAC,CAAC;IAEF,OAAO,IAAI;EACb;EAEA,IAAIR,iBAAiB,KAAK,OAAO,EAAE;IACjCE,eAAG,CAACC,KAAK,wEAAAJ,MAAA,CAAwEN,QAAQ,GAAI;MAC3FW,IAAI,EAAEC,+BAAoB;MAC1BC,MAAM,EAAEC,kBAAO,CAACC;IAClB,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,KAAe,EAAW;EAAA,IAAAC,eAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAC3D,IAAMC,OAAO,GACX,EAAAL,eAAA,GAAAD,KAAK,CAACO,QAAQ,cAAAN,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBO,MAAM,cAAAN,qBAAA,wBAAAC,sBAAA,GAAtBD,qBAAA,CAAwBO,QAAQ,cAAAN,sBAAA,wBAAAC,sBAAA,GAAhCD,sBAAA,CAAkCO,SAAS,cAAAN,sBAAA,wBAAAC,sBAAA,GAA3CD,sBAAA,CAA6CO,GAAG,CAAClC,kCAAkC,CAAC,cAAA4B,sBAAA,uBAApFA,sBAAA,CAAsFO,KAAK,MAC3F,IAAI;EAEN,IAAMC,oBAAoB,GAAGjC,sBAAsB,CAAC,CAAC;EACrD,IAAMkC,UAAU,GAAGD,oBAAoB,KAAK,IAAI,GAAGA,oBAAoB,GAAGP,OAAO;EAEjFd,eAAG,CAACC,KAAK,6BAAAJ,MAAA,CACqBZ,kCAAkC,qBAAAY,MAAA,CAAkByB,UAAU,iBAAAzB,MAAA,CAAciB,OAAO,sBAAAjB,MAAA,CAAmBwB,oBAAoB,QACtJ;IACEnB,IAAI,EAAEC,+BAAoB;IAC1BC,MAAM,EAAEC,kBAAO,CAACC;EAClB,CACF,CAAC;EAED,OAAOgB,UAAU;AACnB","ignoreList":[]}
@@ -36,7 +36,7 @@ describe('wsFeatureFlag', function () {
36
36
  var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
37
37
  expect(result).toBe(true);
38
38
  expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY);
39
- expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: true"), {
39
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: true (backend: true, localStorage: null)"), {
40
40
  file: 'wsFeatureFlag',
41
41
  method: 'isMobiusWssEnabled'
42
42
  });
@@ -47,7 +47,7 @@ describe('wsFeatureFlag', function () {
47
47
  });
48
48
  var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
49
49
  expect(result).toBe(false);
50
- expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
50
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
51
51
  file: 'wsFeatureFlag',
52
52
  method: 'isMobiusWssEnabled'
53
53
  });
@@ -58,7 +58,7 @@ describe('wsFeatureFlag', function () {
58
58
  });
59
59
  var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
60
60
  expect(result).toBe(false);
61
- expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
61
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
62
62
  file: 'wsFeatureFlag',
63
63
  method: 'isMobiusWssEnabled'
64
64
  });
@@ -74,7 +74,7 @@ describe('wsFeatureFlag', function () {
74
74
  });
75
75
  var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
76
76
  expect(result).toBe(false);
77
- expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
77
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false (backend: false, localStorage: null)"), {
78
78
  file: 'wsFeatureFlag',
79
79
  method: 'isMobiusWssEnabled'
80
80
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_testUtil","require","_Logger","_interopRequireDefault","_wsFeatureFlag","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","describe","webex","beforeEach","getTestUtilsWebex","jest","clearAllMocks","it","expect","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","toBe","traceSpy","spyOn","log","internal","device","features","developer","get","fn","mockReturnValue","value","result","isMobiusWssEnabled","toHaveBeenCalledWith","concat","file","method","undefined","webexWithoutFeatures","webexWithoutDeveloper","entitlement","webexWithoutDevice","webexWithoutInternal"],"sources":["wsFeatureFlag.test.ts"],"sourcesContent":["import {getTestUtilsWebex} from '../../common/testUtil';\nimport log from '../../Logger';\nimport {isMobiusWssEnabled, WEBRTC_CALLING_OVER_WS_FEATURE_KEY} from './wsFeatureFlag';\n\ndescribe('wsFeatureFlag', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n\n beforeEach(() => {\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n });\n\n describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', () => {\n it('should export the correct feature key constant', () => {\n expect(WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');\n });\n });\n\n describe('isMobiusWssEnabled', () => {\n let traceSpy: jest.SpyInstance;\n\n beforeEach(() => {\n traceSpy = jest.spyOn(log, 'trace');\n });\n\n it('should return true when feature flag is enabled with boolean true', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: true});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(true);\n expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(\n WEBRTC_CALLING_OVER_WS_FEATURE_KEY\n );\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: true`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag is disabled with boolean false', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: false});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is undefined', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: undefined});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag returns null', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (number)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 1});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is truthy but not boolean true (string)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 'true'});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (object)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: {}});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features is missing', () => {\n const webexWithoutFeatures = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: undefined,\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutFeatures as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features.developer is missing', () => {\n const webexWithoutDeveloper = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: {\n entitlement: webex.internal.device.features.entitlement,\n developer: undefined,\n },\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDeveloper as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device is missing', () => {\n const webexWithoutDevice = {\n ...webex,\n internal: {\n ...webex.internal,\n device: undefined,\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDevice as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal is missing', () => {\n const webexWithoutInternal = {\n ...webex,\n internal: undefined,\n };\n\n const result = isMobiusWssEnabled(webexWithoutInternal as any);\n\n expect(result).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_testUtil","require","_Logger","_interopRequireDefault","_wsFeatureFlag","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","describe","webex","beforeEach","getTestUtilsWebex","jest","clearAllMocks","it","expect","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","toBe","traceSpy","spyOn","log","internal","device","features","developer","get","fn","mockReturnValue","value","result","isMobiusWssEnabled","toHaveBeenCalledWith","concat","file","method","undefined","webexWithoutFeatures","webexWithoutDeveloper","entitlement","webexWithoutDevice","webexWithoutInternal"],"sources":["wsFeatureFlag.test.ts"],"sourcesContent":["import {getTestUtilsWebex} from '../../common/testUtil';\nimport log from '../../Logger';\nimport {isMobiusWssEnabled, WEBRTC_CALLING_OVER_WS_FEATURE_KEY} from './wsFeatureFlag';\n\ndescribe('wsFeatureFlag', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n\n beforeEach(() => {\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n });\n\n describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', () => {\n it('should export the correct feature key constant', () => {\n expect(WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');\n });\n });\n\n describe('isMobiusWssEnabled', () => {\n let traceSpy: jest.SpyInstance;\n\n beforeEach(() => {\n traceSpy = jest.spyOn(log, 'trace');\n });\n\n it('should return true when feature flag is enabled with boolean true', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: true});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(true);\n expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(\n WEBRTC_CALLING_OVER_WS_FEATURE_KEY\n );\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: true (backend: true, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag is disabled with boolean false', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: false});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is undefined', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: undefined});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag returns null', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (number)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 1});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false (backend: false, localStorage: null)`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is truthy but not boolean true (string)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 'true'});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (object)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: {}});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features is missing', () => {\n const webexWithoutFeatures = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: undefined,\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutFeatures as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features.developer is missing', () => {\n const webexWithoutDeveloper = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: {\n entitlement: webex.internal.device.features.entitlement,\n developer: undefined,\n },\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDeveloper as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device is missing', () => {\n const webexWithoutDevice = {\n ...webex,\n internal: {\n ...webex.internal,\n device: undefined,\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDevice as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal is missing', () => {\n const webexWithoutInternal = {\n ...webex,\n internal: undefined,\n };\n\n const result = isMobiusWssEnabled(webexWithoutInternal as any);\n\n expect(result).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,41 @@
1
1
  import log from '../../Logger';
2
2
  import { METHODS, WS_FEATURE_FLAG_FILE } from '../constants';
3
3
  export const WEBRTC_CALLING_OVER_WS_FEATURE_KEY = 'webrtc-calling-over-ws-CALL-219562';
4
+ const ALLOWED_ORIGINS = ['localhost', '127.0.0.1', 'web-sdk.webex.com'];
5
+ function samplesPageToggleValue() {
6
+ if (typeof window === 'undefined' || !window.localStorage) {
7
+ return null;
8
+ }
9
+ const hostname = window.location.hostname;
10
+ const isAllowedOrigin = ALLOWED_ORIGINS.some((origin) => hostname === origin || hostname.endsWith(`.${origin}`));
11
+ if (!isAllowedOrigin) {
12
+ return null;
13
+ }
14
+ const localStorageValue = localStorage.getItem('mobius-wss-enabled');
15
+ if (localStorageValue === 'true') {
16
+ log.trace(`Mobius WSS force-enabled via samples page localStorage override on ${hostname}`, {
17
+ file: WS_FEATURE_FLAG_FILE,
18
+ method: METHODS.IS_MOBIUS_WSS_ENABLED,
19
+ });
20
+ return true;
21
+ }
22
+ if (localStorageValue === 'false') {
23
+ log.trace(`Mobius WSS force-disabled via samples page localStorage override on ${hostname}`, {
24
+ file: WS_FEATURE_FLAG_FILE,
25
+ method: METHODS.IS_MOBIUS_WSS_ENABLED,
26
+ });
27
+ return false;
28
+ }
29
+ return null;
30
+ }
4
31
  export function isMobiusWssEnabled(webex) {
5
32
  const enabled = webex.internal?.device?.features?.developer?.get(WEBRTC_CALLING_OVER_WS_FEATURE_KEY)?.value ===
6
33
  true;
7
- log.trace(`Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: ${enabled}`, {
34
+ const localStorageOverride = samplesPageToggleValue();
35
+ const finalValue = localStorageOverride !== null ? localStorageOverride : enabled;
36
+ log.trace(`Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: ${finalValue} (backend: ${enabled}, localStorage: ${localStorageOverride})`, {
8
37
  file: WS_FEATURE_FLAG_FILE,
9
38
  method: METHODS.IS_MOBIUS_WSS_ENABLED,
10
39
  });
11
- return enabled;
40
+ return finalValue;
12
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wsFeatureFlag.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/utils/wsFeatureFlag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAKlD,eAAO,MAAM,kCAAkC,uCAAuC,CAAC;AAMvF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAc3D"}
1
+ {"version":3,"file":"wsFeatureFlag.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/utils/wsFeatureFlag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAKlD,eAAO,MAAM,kCAAkC,uCAAuC,CAAC;AAsDvF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAiB3D"}
package/package.json CHANGED
@@ -147,5 +147,5 @@
147
147
  "staticpath": "docs",
148
148
  "noprompt": true
149
149
  },
150
- "version": "3.12.0-next.30"
150
+ "version": "3.12.0-next.32"
151
151
  }