diff --git a/keeperapi/package-lock.json b/keeperapi/package-lock.json index 08a00bb..d1dde31 100644 --- a/keeperapi/package-lock.json +++ b/keeperapi/package-lock.json @@ -1,12 +1,12 @@ { "name": "@keeper-security/keeperapi", - "version": "17.0.1", + "version": "17.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@keeper-security/keeperapi", - "version": "17.0.1", + "version": "17.0.2", "license": "ISC", "dependencies": { "@noble/post-quantum": "^0.5.2", diff --git a/keeperapi/package.json b/keeperapi/package.json index 9156a7c..5243902 100644 --- a/keeperapi/package.json +++ b/keeperapi/package.json @@ -1,7 +1,7 @@ { "name": "@keeper-security/keeperapi", "description": "Keeper API Javascript SDK", - "version": "17.0.1", + "version": "17.0.2", "browser": "dist/index.es.js", "main": "dist/index.cjs.js", "types": "dist/node/index.d.ts", diff --git a/keeperapi/src/socket.ts b/keeperapi/src/socket.ts index af95159..456e20f 100644 --- a/keeperapi/src/socket.ts +++ b/keeperapi/src/socket.ts @@ -58,7 +58,7 @@ export class SocketListener { private isConnected: boolean private reconnectTimeout?: ReturnType - private currentBackoffSeconds: number + private currentBackoffSeconds: number = 0 private isClosedByClient: boolean constructor(url: string, messageSessionUid?: Uint8Array, getConnectionRequest?: (messageSessionUid:Uint8Array) => Promise) { @@ -70,7 +70,7 @@ export class SocketListener { this.messageListeners = [] this.singleMessageListeners = [] this.onOpenListeners = [] - this.currentBackoffSeconds = SocketListener.getBaseReconnectionInterval() + this.currentBackoffSeconds = this.getBaseReconnectionInterval() this.isClosedByClient = false this.isConnected = false if (getConnectionRequest) this.getConnectionRequest = getConnectionRequest @@ -93,7 +93,7 @@ export class SocketListener { if (this.reconnectTimeout) { clearTimeout(this.reconnectTimeout) } - this.currentBackoffSeconds = SocketListener.getBaseReconnectionInterval() + this.currentBackoffSeconds = this.getBaseReconnectionInterval() this.handleOnOpen() }) @@ -109,6 +109,7 @@ export class SocketListener { reason = JSON.parse(event['reason']) } catch { console.log('Connection closed - no close reason.') + this.handleClose({code: 0, reason: {close_reason: 'No close reason provided'}}) this.reconnect() return } @@ -170,7 +171,7 @@ export class SocketListener { onClose(callback: () => void): void { if (!this.socket) throw new Error('Socket not available') - this.socket.onClose(callback) + this.closeListeners.push(callback) } onError(callback: () => void): void { @@ -203,6 +204,7 @@ export class SocketListener { for (let { resolve } of this.singleCloseListeners) { resolve(messageData) } + this.closeListeners.length = 0 this.singleCloseListeners.length = 0 } @@ -221,8 +223,12 @@ export class SocketListener { }) } - private static getBaseReconnectionInterval(): number { - return Math.random() * 5 + private getBaseReconnectionInterval(): number { + if (this.currentBackoffSeconds === 0) { + return Math.random() * 5 + } else { + return this.currentBackoffSeconds + } } private reconnect() {