Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/samples/calling/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ async function initCalling(e) {
},
serviceData,
jwe: jwtTokenForDestElm.value,
mobiusUrl: 'wss://mobius.wamswxc-p-2.prod.infra.webex.com/v1/calling/web',
};

if (callingClientConfig.discovery.country === 'Country') {
Expand Down
20 changes: 20 additions & 0 deletions packages/calling/src/CallingClient/CallingClient.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,26 @@ describe('CallingClient Tests', () => {
});
});

it('uses configured Mobius URL override instead of catalog discovery', async () => {
const mobiusUrl = 'wss://mobius.wamswxc-p-2.prod.infra.webex.com/v1/calling/web';

webex.request.mockClear();

callingClient = await createClient(webex, {
logger: {level: LOGGER.INFO},
mobiusUrl,
});

expect(webex.request).not.toHaveBeenCalled();
expect(callingClient.primaryWssMobiusUris).toEqual([`${mobiusUrl}/`]);
expect(callingClient.primaryMobiusUris).toEqual([
'https://mobius.wamswxc-p-2.prod.infra.webex.com/v1/calling/web/',
]);
expect(callingClient.backupWssMobiusUris).toEqual([]);
expect(callingClient.backupMobiusUris).toEqual([]);
expect(callingClient['apiRequest'].isSocketEnabled()).toBe(true);
});

it('when region discovery succeeds but region based mobius url discovery fails with final error', async () => {
const failurePayload = {
statusCode: 401,
Expand Down
29 changes: 29 additions & 0 deletions packages/calling/src/CallingClient/CallingClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,13 @@ export class CallingClient extends Eventing<CallingClientEventTypes> implements
file: CALLING_CLIENT_FILE,
method: METHODS.GET_MOBIUS_SERVERS,
});

if (this.sdkConfig?.mobiusUrl) {
this.applyMobiusUrlOverride(this.sdkConfig.mobiusUrl);

return;
}

/* Following operations are performed in a synchronous way ->

1. Get RegionInfo
Expand Down Expand Up @@ -688,6 +695,28 @@ export class CallingClient extends Eventing<CallingClientEventTypes> implements
}
}

private applyMobiusUrlOverride(mobiusUrl: string): void {
const endpointPath = URL_ENDPOINT.replace(/\/$/, '');
const urlWithoutTrailingSlash = mobiusUrl.trim().replace(/\/+$/, '');
const urlWithEndpoint = urlWithoutTrailingSlash.endsWith(endpointPath)
? urlWithoutTrailingSlash
: `${urlWithoutTrailingSlash}${endpointPath}`;
const httpUrl = urlWithEndpoint.replace(/^wss:\/\//, 'https://').replace(/^ws:\/\//, 'http://');
const wssUrl = urlWithEndpoint.replace(/^https:\/\//, 'wss://').replace(/^http:\/\//, 'ws://');

this.mobiusHost = httpUrl;
this.primaryMobiusUris = normalizeMobiusUris([httpUrl]);
this.backupMobiusUris = [];
this.primaryWssMobiusUris = normalizeMobiusUris([wssUrl]);
this.backupWssMobiusUris = [];
this.apiRequest.setSocketEnabled(wssUrl.startsWith('wss://') || wssUrl.startsWith('ws://'));

log.warn(`Using configured Mobius URL override: ${wssUrl}`, {
file: CALLING_CLIENT_FILE,
method: GET_MOBIUS_SERVERS_UTIL,
});
}

/**
* Connects to the Mobius WebSocket using WSS URIs discovered during Mobius server discovery.
* Attempts primary WSS URIs first, then falls back to backup WSS URIs.
Expand Down
2 changes: 2 additions & 0 deletions packages/calling/src/CallingClient/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ export interface CallingClientConfig {
discovery?: DiscoveryConfig;
serviceData?: ServiceData;
jwe?: string;
/** Overrides Mobius discovery with a specific Mobius HTTP or WSS endpoint. */
mobiusUrl?: string;
}

export type CallingClientErrorEmitterCallback = (
Expand Down
Loading