stayge-ws-client-sdk 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,10 +37,21 @@ stayge-ws-client-sdk/
37
37
 
38
38
  ```
39
39
 
40
- ## 빌드 & 배포
40
+ ## 빌드
41
41
 
42
42
  ```
43
43
  npm run build
44
+
45
+ ```
46
+
47
+ ## 배포
48
+
49
+ ```
50
+ npm version patch
51
+ # 또는
52
+ npm version minor
53
+ npm version major
54
+
44
55
  npm publish --access public
45
56
 
46
57
  ```
@@ -0,0 +1,3 @@
1
+ npm run build || exit -1
2
+ npm version patch || exit -1
3
+ npm publish --access public || exit -1
package/dist/index.d.mts CHANGED
@@ -14,6 +14,7 @@ interface WebSocketClient {
14
14
  subscribe(topic: string): void;
15
15
  unsubscribe(topic: string): void;
16
16
  onConnect(callback: () => void): void;
17
+ onDisconnect(callback: () => void): void;
17
18
  onMessage(callback: (message: MessageFromServer) => void): void;
18
19
  }
19
20
 
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ interface WebSocketClient {
14
14
  subscribe(topic: string): void;
15
15
  unsubscribe(topic: string): void;
16
16
  onConnect(callback: () => void): void;
17
+ onDisconnect(callback: () => void): void;
17
18
  onMessage(callback: (message: MessageFromServer) => void): void;
18
19
  }
19
20
 
@@ -32,20 +32,24 @@ var WebSocketClientImpl = class {
32
32
  this.accessToken = accessToken;
33
33
  this.ws = null;
34
34
  this.onConnectCallback = null;
35
+ this.onDisconnectCallback = null;
35
36
  this.onMessageCallback = null;
36
37
  this.reconnectAttempts = 0;
38
+ this.isConnected = false;
37
39
  }
38
40
  connect() {
39
41
  this.ws = new WebSocket(this.url);
40
42
  this.ws.onopen = () => {
43
+ console.log("WebSocketClient:onopen");
44
+ this.isConnected = true;
41
45
  this.reconnectAttempts = 0;
42
46
  if (this.onConnectCallback) {
43
47
  this.onConnectCallback();
44
48
  }
45
49
  };
46
50
  this.ws.onerror = (error) => {
47
- console.error("WebSocket error:", error);
48
- this.reconnect();
51
+ console.error("WebSocketClient:onerror", error);
52
+ this.disconnect();
49
53
  };
50
54
  this.ws.onmessage = (event) => {
51
55
  if (this.onMessageCallback) {
@@ -53,20 +57,26 @@ var WebSocketClientImpl = class {
53
57
  const message = JSON.parse(event.data);
54
58
  this.onMessageCallback(message);
55
59
  } catch (error) {
56
- console.error("Error parsing message:", error);
60
+ console.error("WebSocketClient:onmessage", error);
57
61
  }
58
62
  }
59
63
  };
60
64
  this.ws.onclose = () => {
61
- console.error("WebSocket closed");
65
+ console.error("WebSocketClient:onclose");
66
+ if (this.onDisconnectCallback) {
67
+ this.onDisconnectCallback();
68
+ }
62
69
  this.reconnect();
63
70
  };
64
71
  }
65
72
  disconnect() {
73
+ console.log("WebSocketClient:disconnect");
66
74
  this.ws?.close();
67
75
  this.ws = null;
76
+ this.isConnected = false;
68
77
  }
69
78
  subscribe(topic) {
79
+ console.log("WebSocketClient:subscribe");
70
80
  const message = {
71
81
  clientId: this.clientId,
72
82
  type: "subscribe",
@@ -75,20 +85,29 @@ var WebSocketClientImpl = class {
75
85
  this.ws?.send(JSON.stringify(message));
76
86
  }
77
87
  unsubscribe(topic) {
88
+ console.log("WebSocketClient:unsubscribe");
78
89
  const message = {
79
90
  clientId: this.clientId,
80
91
  type: "unsubscribe",
81
92
  topic
82
93
  };
94
+ this.ws?.send(JSON.stringify(message));
83
95
  }
84
96
  onConnect(callback) {
85
97
  this.onConnectCallback = callback;
86
98
  }
99
+ onDisconnect(callback) {
100
+ this.onDisconnectCallback = callback;
101
+ }
87
102
  onMessage(callback) {
88
103
  this.onMessageCallback = callback;
89
104
  }
90
105
  reconnect() {
91
- console.log("Reconnecting...");
106
+ console.log("WebSocketClient:reconnect");
107
+ if (this.isConnected && this.onDisconnectCallback) {
108
+ this.onDisconnectCallback();
109
+ }
110
+ this.isConnected = false;
92
111
  const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
93
112
  this.reconnectAttempts++;
94
113
  setTimeout(() => {
@@ -6,20 +6,24 @@ var WebSocketClientImpl = class {
6
6
  this.accessToken = accessToken;
7
7
  this.ws = null;
8
8
  this.onConnectCallback = null;
9
+ this.onDisconnectCallback = null;
9
10
  this.onMessageCallback = null;
10
11
  this.reconnectAttempts = 0;
12
+ this.isConnected = false;
11
13
  }
12
14
  connect() {
13
15
  this.ws = new WebSocket(this.url);
14
16
  this.ws.onopen = () => {
17
+ console.log("WebSocketClient:onopen");
18
+ this.isConnected = true;
15
19
  this.reconnectAttempts = 0;
16
20
  if (this.onConnectCallback) {
17
21
  this.onConnectCallback();
18
22
  }
19
23
  };
20
24
  this.ws.onerror = (error) => {
21
- console.error("WebSocket error:", error);
22
- this.reconnect();
25
+ console.error("WebSocketClient:onerror", error);
26
+ this.disconnect();
23
27
  };
24
28
  this.ws.onmessage = (event) => {
25
29
  if (this.onMessageCallback) {
@@ -27,20 +31,26 @@ var WebSocketClientImpl = class {
27
31
  const message = JSON.parse(event.data);
28
32
  this.onMessageCallback(message);
29
33
  } catch (error) {
30
- console.error("Error parsing message:", error);
34
+ console.error("WebSocketClient:onmessage", error);
31
35
  }
32
36
  }
33
37
  };
34
38
  this.ws.onclose = () => {
35
- console.error("WebSocket closed");
39
+ console.error("WebSocketClient:onclose");
40
+ if (this.onDisconnectCallback) {
41
+ this.onDisconnectCallback();
42
+ }
36
43
  this.reconnect();
37
44
  };
38
45
  }
39
46
  disconnect() {
47
+ console.log("WebSocketClient:disconnect");
40
48
  this.ws?.close();
41
49
  this.ws = null;
50
+ this.isConnected = false;
42
51
  }
43
52
  subscribe(topic) {
53
+ console.log("WebSocketClient:subscribe");
44
54
  const message = {
45
55
  clientId: this.clientId,
46
56
  type: "subscribe",
@@ -49,20 +59,29 @@ var WebSocketClientImpl = class {
49
59
  this.ws?.send(JSON.stringify(message));
50
60
  }
51
61
  unsubscribe(topic) {
62
+ console.log("WebSocketClient:unsubscribe");
52
63
  const message = {
53
64
  clientId: this.clientId,
54
65
  type: "unsubscribe",
55
66
  topic
56
67
  };
68
+ this.ws?.send(JSON.stringify(message));
57
69
  }
58
70
  onConnect(callback) {
59
71
  this.onConnectCallback = callback;
60
72
  }
73
+ onDisconnect(callback) {
74
+ this.onDisconnectCallback = callback;
75
+ }
61
76
  onMessage(callback) {
62
77
  this.onMessageCallback = callback;
63
78
  }
64
79
  reconnect() {
65
- console.log("Reconnecting...");
80
+ console.log("WebSocketClient:reconnect");
81
+ if (this.isConnected && this.onDisconnectCallback) {
82
+ this.onDisconnectCallback();
83
+ }
84
+ this.isConnected = false;
66
85
  const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
67
86
  this.reconnectAttempts++;
68
87
  setTimeout(() => {
@@ -32,20 +32,24 @@ var WebSocketClientImpl = class {
32
32
  this.accessToken = accessToken;
33
33
  this.ws = null;
34
34
  this.onConnectCallback = null;
35
+ this.onDisconnectCallback = null;
35
36
  this.onMessageCallback = null;
36
37
  this.reconnectAttempts = 0;
38
+ this.isConnected = false;
37
39
  }
38
40
  connect() {
39
41
  this.ws = new WebSocket(this.url);
40
42
  this.ws.onopen = () => {
43
+ console.log("WebSocketClient:onopen");
44
+ this.isConnected = true;
41
45
  this.reconnectAttempts = 0;
42
46
  if (this.onConnectCallback) {
43
47
  this.onConnectCallback();
44
48
  }
45
49
  };
46
50
  this.ws.onerror = (error) => {
47
- console.error("WebSocket error:", error);
48
- this.reconnect();
51
+ console.error("WebSocketClient:onerror", error);
52
+ this.disconnect();
49
53
  };
50
54
  this.ws.onmessage = (event) => {
51
55
  if (this.onMessageCallback) {
@@ -53,20 +57,26 @@ var WebSocketClientImpl = class {
53
57
  const message = JSON.parse(event.data);
54
58
  this.onMessageCallback(message);
55
59
  } catch (error) {
56
- console.error("Error parsing message:", error);
60
+ console.error("WebSocketClient:onmessage", error);
57
61
  }
58
62
  }
59
63
  };
60
64
  this.ws.onclose = () => {
61
- console.error("WebSocket closed");
65
+ console.error("WebSocketClient:onclose");
66
+ if (this.onDisconnectCallback) {
67
+ this.onDisconnectCallback();
68
+ }
62
69
  this.reconnect();
63
70
  };
64
71
  }
65
72
  disconnect() {
73
+ console.log("WebSocketClient:disconnect");
66
74
  this.ws?.close();
67
75
  this.ws = null;
76
+ this.isConnected = false;
68
77
  }
69
78
  subscribe(topic) {
79
+ console.log("WebSocketClient:subscribe");
70
80
  const message = {
71
81
  clientId: this.clientId,
72
82
  type: "subscribe",
@@ -75,20 +85,29 @@ var WebSocketClientImpl = class {
75
85
  this.ws?.send(JSON.stringify(message));
76
86
  }
77
87
  unsubscribe(topic) {
88
+ console.log("WebSocketClient:unsubscribe");
78
89
  const message = {
79
90
  clientId: this.clientId,
80
91
  type: "unsubscribe",
81
92
  topic
82
93
  };
94
+ this.ws?.send(JSON.stringify(message));
83
95
  }
84
96
  onConnect(callback) {
85
97
  this.onConnectCallback = callback;
86
98
  }
99
+ onDisconnect(callback) {
100
+ this.onDisconnectCallback = callback;
101
+ }
87
102
  onMessage(callback) {
88
103
  this.onMessageCallback = callback;
89
104
  }
90
105
  reconnect() {
91
- console.log("Reconnecting...");
106
+ console.log("WebSocketClient:reconnect");
107
+ if (this.isConnected && this.onDisconnectCallback) {
108
+ this.onDisconnectCallback();
109
+ }
110
+ this.isConnected = false;
92
111
  const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
93
112
  this.reconnectAttempts++;
94
113
  setTimeout(() => {
@@ -6,20 +6,24 @@ var WebSocketClientImpl = class {
6
6
  this.accessToken = accessToken;
7
7
  this.ws = null;
8
8
  this.onConnectCallback = null;
9
+ this.onDisconnectCallback = null;
9
10
  this.onMessageCallback = null;
10
11
  this.reconnectAttempts = 0;
12
+ this.isConnected = false;
11
13
  }
12
14
  connect() {
13
15
  this.ws = new WebSocket(this.url);
14
16
  this.ws.onopen = () => {
17
+ console.log("WebSocketClient:onopen");
18
+ this.isConnected = true;
15
19
  this.reconnectAttempts = 0;
16
20
  if (this.onConnectCallback) {
17
21
  this.onConnectCallback();
18
22
  }
19
23
  };
20
24
  this.ws.onerror = (error) => {
21
- console.error("WebSocket error:", error);
22
- this.reconnect();
25
+ console.error("WebSocketClient:onerror", error);
26
+ this.disconnect();
23
27
  };
24
28
  this.ws.onmessage = (event) => {
25
29
  if (this.onMessageCallback) {
@@ -27,20 +31,26 @@ var WebSocketClientImpl = class {
27
31
  const message = JSON.parse(event.data);
28
32
  this.onMessageCallback(message);
29
33
  } catch (error) {
30
- console.error("Error parsing message:", error);
34
+ console.error("WebSocketClient:onmessage", error);
31
35
  }
32
36
  }
33
37
  };
34
38
  this.ws.onclose = () => {
35
- console.error("WebSocket closed");
39
+ console.error("WebSocketClient:onclose");
40
+ if (this.onDisconnectCallback) {
41
+ this.onDisconnectCallback();
42
+ }
36
43
  this.reconnect();
37
44
  };
38
45
  }
39
46
  disconnect() {
47
+ console.log("WebSocketClient:disconnect");
40
48
  this.ws?.close();
41
49
  this.ws = null;
50
+ this.isConnected = false;
42
51
  }
43
52
  subscribe(topic) {
53
+ console.log("WebSocketClient:subscribe");
44
54
  const message = {
45
55
  clientId: this.clientId,
46
56
  type: "subscribe",
@@ -49,20 +59,29 @@ var WebSocketClientImpl = class {
49
59
  this.ws?.send(JSON.stringify(message));
50
60
  }
51
61
  unsubscribe(topic) {
62
+ console.log("WebSocketClient:unsubscribe");
52
63
  const message = {
53
64
  clientId: this.clientId,
54
65
  type: "unsubscribe",
55
66
  topic
56
67
  };
68
+ this.ws?.send(JSON.stringify(message));
57
69
  }
58
70
  onConnect(callback) {
59
71
  this.onConnectCallback = callback;
60
72
  }
73
+ onDisconnect(callback) {
74
+ this.onDisconnectCallback = callback;
75
+ }
61
76
  onMessage(callback) {
62
77
  this.onMessageCallback = callback;
63
78
  }
64
79
  reconnect() {
65
- console.log("Reconnecting...");
80
+ console.log("WebSocketClient:reconnect");
81
+ if (this.isConnected && this.onDisconnectCallback) {
82
+ this.onDisconnectCallback();
83
+ }
84
+ this.isConnected = false;
66
85
  const delay = Math.min(1e3 * Math.pow(2, this.reconnectAttempts), 1e4);
67
86
  this.reconnectAttempts++;
68
87
  setTimeout(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stayge-ws-client-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Stayge WebSocket Client SDK",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -30,4 +30,4 @@
30
30
  "tsup": "^7.2.0",
31
31
  "typescript": "^5.3.0"
32
32
  }
33
- }
33
+ }
@@ -16,5 +16,6 @@ export interface WebSocketClient {
16
16
  subscribe(topic: string): void;
17
17
  unsubscribe(topic: string): void;
18
18
  onConnect(callback: () => void): void;
19
+ onDisconnect(callback: () => void): void;
19
20
  onMessage(callback: (message: MessageFromServer) => void): void;
20
21
  }
@@ -7,9 +7,12 @@ import {
7
7
  export class WebSocketClientImpl implements WebSocketClient {
8
8
  private ws: WebSocket | null = null;
9
9
  private onConnectCallback: (() => void) | null = null;
10
+ private onDisconnectCallback: (() => void) | null = null;
10
11
  private onMessageCallback: ((message: MessageFromServer) => void) | null =
11
12
  null;
12
13
  private reconnectAttempts = 0;
14
+ private isConnected = false;
15
+
13
16
  constructor(
14
17
  private url: string,
15
18
  private clientId: string,
@@ -20,15 +23,18 @@ export class WebSocketClientImpl implements WebSocketClient {
20
23
  this.ws = new WebSocket(this.url);
21
24
 
22
25
  this.ws.onopen = () => {
26
+ console.log("WebSocketClient:onopen");
27
+ this.isConnected = true;
23
28
  this.reconnectAttempts = 0;
29
+
24
30
  if (this.onConnectCallback) {
25
31
  this.onConnectCallback();
26
32
  }
27
33
  };
28
34
 
29
35
  this.ws.onerror = (error) => {
30
- console.error("WebSocket error:", error);
31
- this.reconnect();
36
+ console.error("WebSocketClient:onerror", error);
37
+ this.disconnect();
32
38
  };
33
39
 
34
40
  this.ws.onmessage = (event) => {
@@ -37,23 +43,30 @@ export class WebSocketClientImpl implements WebSocketClient {
37
43
  const message = JSON.parse(event.data) as MessageFromServer;
38
44
  this.onMessageCallback(message);
39
45
  } catch (error) {
40
- console.error("Error parsing message:", error);
46
+ console.error("WebSocketClient:onmessage", error);
41
47
  }
42
48
  }
43
49
  };
44
50
 
45
51
  this.ws.onclose = () => {
46
- console.error("WebSocket closed");
52
+ console.error("WebSocketClient:onclose");
53
+ if (this.onDisconnectCallback) {
54
+ this.onDisconnectCallback();
55
+ }
56
+
47
57
  this.reconnect();
48
58
  };
49
59
  }
50
60
 
51
61
  disconnect() {
62
+ console.log("WebSocketClient:disconnect");
52
63
  this.ws?.close();
53
64
  this.ws = null;
65
+ this.isConnected = false;
54
66
  }
55
67
 
56
68
  subscribe(topic: string) {
69
+ console.log("WebSocketClient:subscribe");
57
70
  const message: MessageToServer = {
58
71
  clientId: this.clientId,
59
72
  type: "subscribe",
@@ -63,23 +76,34 @@ export class WebSocketClientImpl implements WebSocketClient {
63
76
  }
64
77
 
65
78
  unsubscribe(topic: string) {
79
+ console.log("WebSocketClient:unsubscribe");
66
80
  const message: MessageToServer = {
67
81
  clientId: this.clientId,
68
82
  type: "unsubscribe",
69
83
  topic,
70
84
  };
85
+ this.ws?.send(JSON.stringify(message));
71
86
  }
72
87
 
73
88
  onConnect(callback: () => void) {
74
89
  this.onConnectCallback = callback;
75
90
  }
76
91
 
92
+ onDisconnect(callback: () => void) {
93
+ this.onDisconnectCallback = callback;
94
+ }
95
+
77
96
  onMessage(callback: (message: MessageFromServer) => void) {
78
97
  this.onMessageCallback = callback;
79
98
  }
80
99
 
81
100
  private reconnect() {
82
- console.log("Reconnecting...");
101
+ console.log("WebSocketClient:reconnect");
102
+ if (this.isConnected && this.onDisconnectCallback) {
103
+ this.onDisconnectCallback();
104
+ }
105
+
106
+ this.isConnected = false;
83
107
 
84
108
  // exponential backoff
85
109
  const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 10000);