// 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 => { 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, };