@azure/communication-signaling
Version:
Azure Communication Signaling Client
73 lines (62 loc) • 2.72 kB
text/typescript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import { TrouterSettings, TrouterTelemetrySettings } from "@skype/tstrouter";
import { CommunicationTokenCredential, SignalingClientOptions } from "./SignalingClient";
import { generateUuid } from "./TrouterUtils";
import { TrouterConfigClient } from "./TrouterConfigClient";
const defaultSettings: TrouterSettings = {
version: "1.0.0", // SignalingClient version, required for trouter connection
registrationId: "", // Required for trouter connection
sessionId: "", // Required for trouter connection
pnhAppId: "AcsWeb",
pnhTemplate: "AcsWeb_Chat_2.1",
platform: "SPOOL",
platformUIVersion: "0.0.0",
environment: "", // TBD
productName: "acs-chat-web",
trouterServiceUrl: "",
registrarServiceUrl: "",
registrarRefreshTimeoutInMs: 350000,
timeoutOptions: {
connectionTimeoutMs: 20000,
fetchTimeoutMs: 10000,
pingTimeoutMs: 40000,
pongTimeoutMs: 5000,
maxBackoffMs: 50000,
requestTimeoutMs: 5000,
},
maxRegistrationTimeInMs: 7200000,
};
// Main function to create settings based on environment
export const createSettings = async (
credential: CommunicationTokenCredential,
options?: SignalingClientOptions
): Promise<TrouterSettings> => {
const endpoint = options?.resourceEndpoint;
// Throw an error if resourceEndpoint is null or undefined
if (endpoint === undefined) {
throw new Error("'endpoint' cannot be null");
}
// Initialize the settings by cloning the default ones
const settings = { ...defaultSettings };
settings.registrationId = generateUuid(); // Generate unique IDs
settings.sessionId = generateUuid();
// Fetch the real time configuration from the service
const trouterConfigClient = new TrouterConfigClient(endpoint, options);
const realTimeNotificationConfiguration = await trouterConfigClient.fetchServiceUrls(credential);
// Append suffix to trouterServiceUrl and registrarServiceUrl
settings.trouterServiceUrl = `${realTimeNotificationConfiguration.trouterServiceUrl}/v4/a`;
settings.registrarServiceUrl = `${realTimeNotificationConfiguration.registrarServiceUrl}/v3/registrations`;
// Customize settings if the environment is INT
if (realTimeNotificationConfiguration.cloudType === "int") {
settings.pnhAppId = "cns-e2e-test";
settings.pnhTemplate = "cns-e2e-test:1.8";
}
settings.maxRegistrationTimeInMs =
options?.registrationTimeInMs ?? defaultSettings.maxRegistrationTimeInMs;
return settings;
};
export const defaultTelemetrySettings: TrouterTelemetrySettings = {
// TBD Can we hook up OpenTelemetry?
enabled: false,
};