in src/directLine.ts [481:544]
constructor(options: DirectLineOptions & Partial<Services>) {
this.secret = options.secret;
this.token = options.secret || options.token;
this.webSocket = (options.webSocket === undefined ? true : options.webSocket) && typeof WebSocket !== 'undefined' && WebSocket !== undefined;
if (options.conversationStartProperties && options.conversationStartProperties.locale) {
if (Object.prototype.toString.call(options.conversationStartProperties.locale) === '[object String]') {
this.localeOnStartConversation = options.conversationStartProperties.locale;
} else {
console.warn('DirectLineJS: conversationStartProperties.locale was ignored: the locale name may be a BCP 47 language tag');
}
}
if (options.domain) {
this.domain = options.domain;
}
if (options.conversationId) {
this.conversationId = options.conversationId;
}
if (options.watermark) {
this.watermark = options.watermark;
}
if (options.streamUrl) {
if (options.token && options.conversationId) {
this.streamUrl = options.streamUrl;
} else {
console.warn('DirectLineJS: streamUrl was ignored: you need to provide a token and a conversationid');
}
}
if (options.timeout !== undefined) {
this.timeout = options.timeout;
}
this.retries = (lifetimeRefreshToken - intervalRefreshToken) / this.timeout;
this._botAgent = this.getBotAgent(options.botAgent);
this.services = makeServices(options);
const parsedPollingInterval = ~~options.pollingInterval;
if (parsedPollingInterval < POLLING_INTERVAL_LOWER_BOUND) {
if (typeof options.pollingInterval !== 'undefined') {
console.warn(`DirectLineJS: provided pollingInterval (${ options.pollingInterval }) is under lower bound (200ms), using default of 1000ms`);
}
} else {
this.pollingInterval = parsedPollingInterval;
}
this.expiredTokenExhaustion = this.setConnectionStatusFallback(
ConnectionStatus.ExpiredToken,
ConnectionStatus.FailedToConnect,
5
);
this.activity$ = (this.webSocket
? this.webSocketActivity$()
: this.pollingGetActivity$()
).share();
}