diff --git a/src/matrix/SessionContainer.js b/src/matrix/SessionContainer.js index 44d7b3e4..89325d49 100644 --- a/src/matrix/SessionContainer.js +++ b/src/matrix/SessionContainer.js @@ -21,7 +21,7 @@ import {AbortableOperation} from "../utils/AbortableOperation"; import {ObservableValue} from "../observable/ObservableValue"; import {HomeServerApi} from "./net/HomeServerApi.js"; import {Reconnector, ConnectionStatus} from "./net/Reconnector.js"; -import {ExponentialRetryDelay} from "./net/ExponentialRetryDelay.js"; +import {ExponentialRetryDelay} from "./net/ExponentialRetryDelay"; import {MediaRepository} from "./net/MediaRepository.js"; import {RequestScheduler} from "./net/RequestScheduler.js"; import {Sync, SyncStatus} from "./Sync.js"; diff --git a/src/matrix/net/ExponentialRetryDelay.js b/src/matrix/net/ExponentialRetryDelay.ts similarity index 86% rename from src/matrix/net/ExponentialRetryDelay.js rename to src/matrix/net/ExponentialRetryDelay.ts index 853f8758..a6a874f3 100644 --- a/src/matrix/net/ExponentialRetryDelay.js +++ b/src/matrix/net/ExponentialRetryDelay.ts @@ -15,18 +15,28 @@ limitations under the License. */ import {AbortError} from "../../utils/error"; +import type {Timeout} from "../../platform/web/dom/Clock.js"; + +type TimeoutCreator = (ms: number) => Timeout; + +const enum Default { start = 2000 } export class ExponentialRetryDelay { - constructor(createTimeout) { + private readonly _start: number = Default.start; + private _current: number = Default.start; + private readonly _createTimeout: TimeoutCreator; + private readonly _max: number; + private _timeout?: Timeout; + + constructor(createTimeout: TimeoutCreator) { const start = 2000; this._start = start; this._current = start; this._createTimeout = createTimeout; this._max = 60 * 5 * 1000; //5 min - this._timeout = null; } - async waitForRetry() { + async waitForRetry(): Promise { this._timeout = this._createTimeout(this._current); try { await this._timeout.elapsed(); @@ -39,22 +49,22 @@ export class ExponentialRetryDelay { throw err; } } finally { - this._timeout = null; + this._timeout = undefined; } } - abort() { + abort(): void { if (this._timeout) { this._timeout.abort(); } } - reset() { + reset(): void { this._current = this._start; this.abort(); } - get nextValue() { + get nextValue(): number { return this._current; } } diff --git a/src/matrix/net/HomeServerApi.js b/src/matrix/net/HomeServerApi.js index 308e71d9..01f5cb45 100644 --- a/src/matrix/net/HomeServerApi.js +++ b/src/matrix/net/HomeServerApi.js @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {encodeQueryParams, encodeBody} from "./common.js"; +import {encodeQueryParams, encodeBody} from "./common"; import {HomeServerRequest} from "./HomeServerRequest.js"; const CS_R0_PREFIX = "/_matrix/client/r0"; diff --git a/src/matrix/net/MediaRepository.js b/src/matrix/net/MediaRepository.js index 3f718c85..a7875d99 100644 --- a/src/matrix/net/MediaRepository.js +++ b/src/matrix/net/MediaRepository.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {encodeQueryParams} from "./common.js"; +import {encodeQueryParams} from "./common"; import {decryptAttachment} from "../e2ee/attachment.js"; export class MediaRepository { diff --git a/src/matrix/net/Reconnector.js b/src/matrix/net/Reconnector.js index 6eaa78d7..c4231c79 100644 --- a/src/matrix/net/Reconnector.js +++ b/src/matrix/net/Reconnector.js @@ -120,7 +120,7 @@ export class Reconnector { import {Clock as MockClock} from "../../mocks/Clock.js"; -import {ExponentialRetryDelay} from "./ExponentialRetryDelay.js"; +import {ExponentialRetryDelay} from "./ExponentialRetryDelay"; import {ConnectionError} from "../error.js" export function tests() { diff --git a/src/matrix/net/RequestScheduler.js b/src/matrix/net/RequestScheduler.js index f9adec97..b5c5a8fc 100644 --- a/src/matrix/net/RequestScheduler.js +++ b/src/matrix/net/RequestScheduler.js @@ -18,7 +18,7 @@ limitations under the License. import {AbortError} from "../../utils/error"; import {HomeServerError} from "../error.js"; import {HomeServerApi} from "./HomeServerApi.js"; -import {ExponentialRetryDelay} from "./ExponentialRetryDelay.js"; +import {ExponentialRetryDelay} from "./ExponentialRetryDelay"; class Request { constructor(methodName, args) { diff --git a/src/platform/types/Platform.ts b/src/platform/types/Platform.ts index 1cc972a8..b8b715ed 100644 --- a/src/platform/types/Platform.ts +++ b/src/platform/types/Platform.ts @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// todo: this file should be called something else? + import type {RequestResult} from "../web/dom/request/fetch.js"; import type {IEncodedBody} from "../../matrix/net/common";