@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 8.5 kB
Source Map (JSON)
{"version":3,"file":"long-polling-connector.mjs","sources":["../../../src/pullClient/long-polling-connector.ts"],"sourcesContent":["import type { ConnectorConfig } from '../types/pull'\nimport { Type } from '../tools/type'\nimport { Text } from '../tools/text'\nimport { AbstractConnector } from './abstract-connector'\nimport { ConnectionType } from '../types/pull'\n\nconst LONG_POLLING_TIMEOUT = 60\n\nexport class LongPollingConnector extends AbstractConnector {\n private _active: boolean\n\n private _requestTimeout: ReturnType<typeof setTimeout> | null\n private _failureTimeout: ReturnType<typeof setTimeout> | null\n private readonly _xhr: XMLHttpRequest\n private _requestAborted: boolean\n\n constructor(config: ConnectorConfig) {\n super(config)\n\n this._active = false\n this._connectionType = ConnectionType.LongPolling\n\n this._requestTimeout = null\n this._failureTimeout = null\n this._xhr = this.createXhr()\n this._requestAborted = false\n }\n\n /**\n * @inheritDoc\n */\n override connect(): void {\n this._active = true\n this.performRequest()\n }\n\n /**\n * @inheritDoc\n * @param code\n * @param reason\n */\n override disconnect(code: number, reason: string): void {\n this._active = false\n\n this.clearTimeOut()\n\n if (this._xhr) {\n this._requestAborted = true\n this._xhr.abort()\n }\n\n this._disconnectCode = code\n this._disconnectReason = reason\n this.connected = false\n }\n\n private performRequest(): void {\n if (!this._active) {\n return\n }\n\n if (!this.connectionPath) {\n throw new Error('Long polling connection path is not defined')\n }\n\n if (this._xhr.readyState !== 0 && this._xhr.readyState !== 4) {\n return\n }\n\n this.clearTimeOut()\n\n this._failureTimeout = setTimeout(() => {\n this.connected = true\n }, 5_000)\n\n this._requestTimeout = setTimeout(\n this.onRequestTimeout.bind(this),\n LONG_POLLING_TIMEOUT * 1_000\n )\n\n this._xhr.open('GET', this.connectionPath)\n this._xhr.send()\n }\n\n private onRequestTimeout() {\n this._requestAborted = true\n this._xhr.abort()\n this.performRequest()\n }\n\n private onXhrReadyStateChange(): void {\n if (this._xhr.readyState === 4) {\n if (!this._requestAborted || this._xhr.status == 200) {\n this.onResponse(this._xhr.response)\n }\n\n this._requestAborted = false\n }\n }\n\n /**\n * Via http request\n * @inheritDoc\n */\n override send(buffer: ArrayBuffer | string): boolean {\n const path = this._parent.getPublicationPath()\n if (!path) {\n this.getLogger().error(`${Text.getDateForLog()}: Pull: publication path is empty`)\n return false\n }\n\n const xhr = new XMLHttpRequest()\n xhr.open('POST', path)\n xhr.send(buffer)\n\n return true\n }\n\n private onResponse(response: any): void {\n this.clearTimeOut()\n\n if (this._xhr.status === 200) {\n this.connected = true\n if (Type.isStringFilled(response) || response instanceof ArrayBuffer) {\n this._callbacks.onMessage(response)\n } else {\n this._parent.session.mid = null\n }\n this.performRequest()\n } else if (this._xhr.status === 304) {\n this.connected = true\n if (\n this._xhr.getResponseHeader('Expires')\n === 'Thu, 01 Jan 1973 11:11:01 GMT'\n ) {\n const lastMessageId = this._xhr.getResponseHeader('Last-Message-Id')\n if (Type.isStringFilled(lastMessageId)) {\n this._parent.setLastMessageId(lastMessageId || '')\n }\n }\n this.performRequest()\n } else {\n this._callbacks.onError(new Error('Could not connect to the server'))\n\n this.connected = false\n }\n }\n\n // region Tools ////\n private clearTimeOut(): void {\n if (this._failureTimeout) {\n clearTimeout(this._failureTimeout)\n this._failureTimeout = null\n }\n\n if (this._requestTimeout) {\n clearTimeout(this._requestTimeout)\n this._requestTimeout = null\n }\n }\n\n private createXhr(): XMLHttpRequest {\n const result = new XMLHttpRequest()\n\n if (this._parent.isProtobufSupported() && !this._parent.isJsonRpc()) {\n result.responseType = 'arraybuffer'\n }\n\n result.addEventListener(\n 'readystatechange',\n this.onXhrReadyStateChange.bind(this)\n )\n\n return result\n }\n // endregion ////\n}\n"],"names":[],"mappings":"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"}