export class PromiseWrapper { private rejectPromise?: (arg?: E) => void private resolvePromise?: (arg: T) => void readonly promise: Promise // Note: Timeout handling is done by ClientManager.sendRequestWithTransport() // to ensure consistent behavior across all transports (HTTP and WebSocket) constructor() { this.promise = new Promise((resolve, reject) => { this.rejectPromise = (arg?: E) => { reject(arg) } this.resolvePromise = (arg: T) => { resolve(arg) } }) } reject = (rejectReturnValue?: E): any => { if (this.rejectPromise) { this.rejectPromise(rejectReturnValue) } } resolve = (resolveReturnValue: T): void => { if (this.resolvePromise) { this.resolvePromise(resolveReturnValue) } } }