Compare commits

..

No commits in common. "main" and "v0.6.1" have entirely different histories.
main ... v0.6.1

5 changed files with 13 additions and 21 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@debros/network-ts-sdk", "name": "@debros/network-ts-sdk",
"version": "0.6.2", "version": "0.6.1",
"description": "TypeScript SDK for DeBros Network Gateway - Database, PubSub, Cache, Storage, and more", "description": "TypeScript SDK for DeBros Network Gateway - Database, PubSub, Cache, Storage, and more",
"type": "module", "type": "module",
"main": "./dist/index.js", "main": "./dist/index.js",

View File

@ -41,12 +41,12 @@ export interface IWebSocketClient {
/** /**
* Register close handler * Register close handler
*/ */
onClose(handler: (code: number, reason: string) => void): void; onClose(handler: () => void): void;
/** /**
* Unregister close handler * Unregister close handler
*/ */
offClose(handler: (code: number, reason: string) => void): void; offClose(handler: () => void): void;
/** /**
* Check if WebSocket is connected * Check if WebSocket is connected

View File

@ -16,7 +16,7 @@ export interface WSClientConfig {
export type WSMessageHandler = (data: string) => void; export type WSMessageHandler = (data: string) => void;
export type WSErrorHandler = (error: Error) => void; export type WSErrorHandler = (error: Error) => void;
export type WSCloseHandler = (code: number, reason: string) => void; export type WSCloseHandler = () => void;
export type WSOpenHandler = () => void; export type WSOpenHandler = () => void;
/** /**
@ -102,12 +102,7 @@ export class WSClient {
this.ws.addEventListener("error", (event: Event) => { this.ws.addEventListener("error", (event: Event) => {
console.error("[WSClient] WebSocket error:", event); console.error("[WSClient] WebSocket error:", event);
clearTimeout(timeout); clearTimeout(timeout);
// Extract useful details from the event — raw Event objects don't serialize const error = new SDKError("WebSocket error", 500, "WS_ERROR", event);
const details: Record<string, any> = { type: event.type };
if ("message" in event) {
details.message = (event as ErrorEvent).message;
}
const error = new SDKError("WebSocket error", 0, "WS_ERROR", details);
// Call the network error callback if configured // Call the network error callback if configured
if (this.onNetworkError) { if (this.onNetworkError) {
@ -123,13 +118,10 @@ export class WSClient {
reject(error); reject(error);
}); });
this.ws.addEventListener("close", (event: Event) => { this.ws.addEventListener("close", () => {
clearTimeout(timeout); clearTimeout(timeout);
const closeEvent = event as CloseEvent; console.log("[WSClient] Connection closed");
const code = closeEvent.code ?? 1006; this.closeHandlers.forEach((handler) => handler());
const reason = closeEvent.reason ?? "";
console.log(`[WSClient] Connection closed (code: ${code}, reason: ${reason || "none"})`);
this.closeHandlers.forEach((handler) => handler(code, reason));
}); });
} catch (error) { } catch (error) {
reject(error); reject(error);
@ -214,7 +206,7 @@ export class WSClient {
*/ */
send(data: string): void { send(data: string): void {
if (this.ws?.readyState !== WebSocket.OPEN) { if (this.ws?.readyState !== WebSocket.OPEN) {
throw new SDKError("WebSocket is not connected", 0, "WS_NOT_CONNECTED"); throw new SDKError("WebSocket is not connected", 500, "WS_NOT_CONNECTED");
} }
this.ws.send(data); this.ws.send(data);
} }

View File

@ -176,7 +176,7 @@ export class Subscription {
private isClosed = false; private isClosed = false;
private wsMessageHandler: ((data: string) => void) | null = null; private wsMessageHandler: ((data: string) => void) | null = null;
private wsErrorHandler: ((error: Error) => void) | null = null; private wsErrorHandler: ((error: Error) => void) | null = null;
private wsCloseHandler: ((code: number, reason: string) => void) | null = null; private wsCloseHandler: (() => void) | null = null;
private getPresenceFn: () => Promise<PresenceResponse>; private getPresenceFn: () => Promise<PresenceResponse>;
constructor( constructor(
@ -271,8 +271,8 @@ export class Subscription {
this.wsClient.onError(this.wsErrorHandler); this.wsClient.onError(this.wsErrorHandler);
// Register close handler // Register close handler
this.wsCloseHandler = (code: number, reason: string) => { this.wsCloseHandler = () => {
this.closeHandlers.forEach((handler) => handler(code, reason)); this.closeHandlers.forEach((handler) => handler());
}; };
this.wsClient.onClose(this.wsCloseHandler); this.wsClient.onClose(this.wsCloseHandler);
} }

View File

@ -42,5 +42,5 @@ export interface SubscribeOptions {
export type MessageHandler = (message: PubSubMessage) => void; export type MessageHandler = (message: PubSubMessage) => void;
export type ErrorHandler = (error: Error) => void; export type ErrorHandler = (error: Error) => void;
export type CloseHandler = (code: number, reason: string) => void; export type CloseHandler = () => void;