From 468cee4203865331c3c9e2ef460ba35031ce3a73 Mon Sep 17 00:00:00 2001 From: THeflinKeeper Date: Tue, 30 Dec 2025 16:54:39 -0800 Subject: [PATCH 1/4] fixed socket issues. changed how onClose works to support browser extension calling onClose --- keeperapi/package.json | 2 +- keeperapi/src/socket.ts | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) 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() { From f7c1163b6c98b352bcd2e7df906df44c0c26de33 Mon Sep 17 00:00:00 2001 From: THeflinKeeper Date: Tue, 30 Dec 2025 16:55:48 -0800 Subject: [PATCH 2/4] update lock --- keeperapi/package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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", From ac605ea58b20d653ce69d74e688fd47a2714bbdb Mon Sep 17 00:00:00 2001 From: THeflinKeeper Date: Wed, 31 Dec 2025 09:23:46 -0800 Subject: [PATCH 3/4] do not remove the close listeners. the list of close listeners is reset on creating a new socket anyways --- keeperapi/src/socket.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keeperapi/src/socket.ts b/keeperapi/src/socket.ts index 456e20f..5c3737d 100644 --- a/keeperapi/src/socket.ts +++ b/keeperapi/src/socket.ts @@ -204,7 +204,7 @@ export class SocketListener { for (let { resolve } of this.singleCloseListeners) { resolve(messageData) } - this.closeListeners.length = 0 + this.singleCloseListeners.length = 0 } From dc2ec3f5b8caa135279cd4a6036255dc8fad0397 Mon Sep 17 00:00:00 2001 From: THeflinKeeper Date: Wed, 31 Dec 2025 09:24:20 -0800 Subject: [PATCH 4/4] up version --- keeperapi/package-lock.json | 4 ++-- keeperapi/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keeperapi/package-lock.json b/keeperapi/package-lock.json index d1dde31..7c39d17 100644 --- a/keeperapi/package-lock.json +++ b/keeperapi/package-lock.json @@ -1,12 +1,12 @@ { "name": "@keeper-security/keeperapi", - "version": "17.0.2", + "version": "17.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@keeper-security/keeperapi", - "version": "17.0.2", + "version": "17.0.3", "license": "ISC", "dependencies": { "@noble/post-quantum": "^0.5.2", diff --git a/keeperapi/package.json b/keeperapi/package.json index 5243902..0af8f52 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.2", + "version": "17.0.3", "browser": "dist/index.es.js", "main": "dist/index.cjs.js", "types": "dist/node/index.d.ts",