buzzk 1.11.3 โ†’ 2.0.0

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
@@ -17,97 +17,59 @@
17
17
 
18
18
  ## ๐Ÿ“– ์—…๋ฐ์ดํŠธ ๋‚ด์—ญ
19
19
 
20
- - ์ฑ„ํŒ… ์ฑ„๋„ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ์™„๋ฒฝ ํ•ด๊ฒฐ
20
+ ### ๐ŸŽ‰ 2.0 ์—…๋ฐ์ดํŠธ
21
+ - ๊ณต์‹ API๋ฅผ ์ผ๋ถ€ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์–ด์š”!
21
22
 
22
- >
23
-
24
- - video ํ•จ์ˆ˜ ์ถ”๊ฐ€
25
-
26
- >
27
-
28
- - ์ฑ„ํŒ… ์ฑ„๋„ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
29
-
30
- >
31
-
32
- - ์ฑ„ํŒ… ์ฑ„๋„์ด ์—†์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
33
-
34
- >
35
-
36
- - onDonation ํ•จ์ˆ˜ ์ถ”๊ฐ€
37
-
38
- - ๋ณธ์ธ ์ธ์ฆ ์ฑ„ํŒ… ์ง€์› ์ถ”๊ฐ€
39
-
40
- >
41
-
42
- - ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ์— hasMod ํ•ญ๋ชฉ ์ถ”๊ฐ€
43
-
44
- >
45
-
46
- - JSON์„ Parse ํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
47
-
48
- >
23
+ > [!CAUTION]
24
+ > ์ด ๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ๋Š” ๊ณต์‹ API์™€ ๋น„๊ณต์‹ API๋ฅผ ํ˜ผ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
25
+ > ๊ณต์‹ API๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ๊ณต์‹ API๋ฅผ ์ด์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
49
26
 
50
- - User-Agent ์ถ”๊ฐ€ (API ํ˜ธ์ถœ์— ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ)
27
+ > [!WARNING]
28
+ > * ๋น„๊ณต์‹ API ์ „์šฉ ๋ชจ๋“ˆ์€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
29
+ > * ๋น„๊ณต์‹ API๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด
30
+ > `npm install buzzk@1.11.3`
51
31
 
52
- ## โœ’๏ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ (v.1.2.x -> v.1.3.0)
32
+ ## โœ’๏ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ (v.1.x -> v.2.0.0)
53
33
 
54
34
  <details>
55
35
  <summary>ํŽผ์ณ๋ณด๊ธฐ</summary>
56
36
 
57
- buzzk.channel
37
+ buzzk.auth
58
38
 
59
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.getChannel |
39
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | ์ถ”๊ฐ€ |
60
40
  |--|--|
61
- | | buzzk.channel.search |
41
+ | | buzzk.auth |
62
42
 
63
43
  ---
64
44
 
65
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.followChannel |
66
- |--|--|
67
- | | buzzk.channel.follow |
68
-
69
- ---
45
+ buzzk.oauth
70
46
 
71
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.channel.unFollowChannel |
47
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | ์ถ”๊ฐ€ |
72
48
  |--|--|
73
- | | buzzk.channel.unFollow |
49
+ | | buzzk.oauth.get |
74
50
 
75
51
  ---
76
52
 
77
- buzzk.live
78
-
79
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.live.getLiveDetail |
53
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | ์ถ”๊ฐ€ |
80
54
  |--|--|
81
- | | buzzk.live.getDetail |
55
+ | | buzzk.oauth.refresh |
82
56
 
83
57
  ---
84
58
 
85
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | buzzk.live.getLiveStatus |
59
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | ์ถ”๊ฐ€ |
86
60
  |--|--|
87
- | | buzzk.live.getStatus |
61
+ | | buzzk.channel.resolve |
88
62
 
89
63
  ---
90
64
 
91
- buzzk.live.getDetail (getLiveDetail)
92
-
93
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelName |
94
- |--|--|
95
- | | (return).channel.name |
96
-
97
- ---
65
+ buzzk.channel.get
98
66
 
99
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_change-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelImageUrl |
67
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.description |
100
68
  |--|--|
101
- | | (return).channel.imageURL |
102
69
 
103
70
  ---
104
71
 
105
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.channelId |
106
- |--|--|
107
-
108
- ---
109
-
110
- | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.verifiedMark |
72
+ | <img src="https://github.com/Emin-G/Img/blob/main/tags/tag_delete-min.png?raw=true" alt="BUZZK" width="70"> | (return).channel.isLive |
111
73
  |--|--|
112
74
 
113
75
  </details>
@@ -120,6 +82,7 @@
120
82
  ## ๐Ÿ”ฅ ๋น ๋ฅธ. ์‹œ์ž‘.
121
83
 
122
84
  const buzzk = require("buzzk");
85
+ buzzk.auth("ClientID ๊ฐ’", "ClientSecret ๊ฐ’");
123
86
  buzzk.login("NID_AUT ์ฟ ํ‚ค ๊ฐ’", "NID_SES ์ฟ ํ‚ค ๊ฐ’");
124
87
 
125
88
  const buzzkChat = buzzk.chat;
@@ -161,6 +124,22 @@
161
124
 
162
125
  ## ๐ŸŽ€ ์‚ฌ์šฉ๋ฒ•
163
126
 
127
+ ### auth
128
+
129
+ โœ… Official API
130
+
131
+ buzzk.auth("ClientID ๊ฐ’", "ClientSecret ๊ฐ’");
132
+
133
+ https://developers.chzzk.naver.com/application
134
+ ๋„ค์ด๋ฒ„ ์น˜์ง€์ง ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ์—์„œ ๋“ฑ๋ก ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
135
+ โœ… Official API ํ‘œ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
136
+
137
+ dotenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
138
+
139
+ buzzk.auth(process.env.CLIENT_ID, process.env.CLIENT_SECRET);
140
+
141
+ ---
142
+
164
143
  ### login
165
144
 
166
145
  buzzk.login("NID_AUT ์ฟ ํ‚ค ๊ฐ’", "NID_SES ์ฟ ํ‚ค ๊ฐ’");
@@ -171,6 +150,56 @@ dotenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
171
150
 
172
151
  ---
173
152
 
153
+ ### oauth
154
+
155
+ โœ… Official API
156
+
157
+ let oauth = await buzzk.oauth.get("Code ๊ฐ’");
158
+ console.log(oauth);
159
+
160
+ <details>
161
+ <summary>return</summary>
162
+
163
+ - Return
164
+ - access
165
+ - refresh
166
+ - expireIn
167
+
168
+ </details>
169
+
170
+ โœ… Official API
171
+
172
+ let oauth = await buzzk.oauth.refresh("refreshToken ๊ฐ’");
173
+ console.log(oauth);
174
+
175
+ <details>
176
+ <summary>return</summary>
177
+
178
+ - Return
179
+ - access
180
+ - refresh
181
+ - expireIn
182
+
183
+ </details>
184
+
185
+ โœ… Official API
186
+
187
+ let oauth = await buzzk.oauth.resolve("accessToken ๊ฐ’");
188
+ console.log(oauth);
189
+
190
+ <details>
191
+ <summary>return</summary>
192
+
193
+ - Return
194
+ - channelID
195
+ - name
196
+ - follower
197
+ - imageURL
198
+
199
+ </details>
200
+
201
+ ---
202
+
174
203
  ### channel
175
204
 
176
205
  let chSearch = await buzzk.channel.search("๋…น๋‘๋กœ๋กœ");
@@ -194,6 +223,8 @@ dotenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
194
223
 
195
224
  </details>
196
225
 
226
+ โœ… Official API
227
+
197
228
  let channel = await buzzk.channel.get("channelID ๊ฐ’");
198
229
  console.log(channel);
199
230
 
@@ -203,10 +234,8 @@ dotenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
203
234
  - Return
204
235
  - channelID
205
236
  - name
206
- - description
207
237
  - follower
208
238
  - imageURL
209
- - isLive
210
239
 
211
240
  </details>
212
241
 
package/lib/channel.js CHANGED
@@ -1,13 +1,11 @@
1
- const { reqChzzk, exChzzk } = require("./tool.js");
1
+ const { CLIENT, reqChzzk, exChzzk } = require("./tool.js");
2
2
 
3
3
  class chzzkChannel {
4
- constructor(channelID, name, description, follower, imageURL, isLive) {
4
+ constructor(channelID, name, follower, imageURL) {
5
5
  this.channelID = channelID;
6
6
  this.name = name;
7
- this.description = description;
8
7
  this.follower = follower;
9
8
  this.imageURL = imageURL;
10
- this.isLive = isLive;
11
9
  }
12
10
  }
13
11
 
@@ -19,10 +17,8 @@ class chzzkChannel {
19
17
  * @typedef {Object} chzzkChannel
20
18
  * @property {string} channelID
21
19
  * @property {string} name
22
- * @property {string} description
23
20
  * @property {string} follower
24
21
  * @property {string} imageURL
25
- * @property {boolean} isLive
26
22
  */
27
23
 
28
24
  /**
@@ -42,7 +38,7 @@ async function search (keyword) {
42
38
 
43
39
  for (let o in chSearch) {
44
40
  let tempChannel = chSearch[o].channel;
45
- chRes[Object.keys(chRes).length] = new chzzkChannel(tempChannel.channelId, tempChannel.channelName, tempChannel.channelDescription, tempChannel.followerCount, tempChannel.channelImageUrl, tempChannel.openLive);
41
+ chRes[Object.keys(chRes).length] = new chzzkChannel(tempChannel.channelId, tempChannel.channelName, tempChannel.followerCount, tempChannel.channelImageUrl);
46
42
  }
47
43
 
48
44
  return resolve(chRes);
@@ -58,11 +54,12 @@ async function search (keyword) {
58
54
  async function get (channelID) {
59
55
  return new Promise(async (resolve, reject) => {
60
56
 
61
- let chGet = await reqChzzk("service/v1/channels/" + channelID);
57
+ let chGet = await CLIENT.get("open/v1/channels?channelIds=" + channelID);
62
58
  if (chGet.code != 200) return resolve(null);
63
- chGet = chGet.content;
64
59
 
65
- let chRes = new chzzkChannel(chGet.channelId, chGet.channelName, chGet.channelDescription, chGet.followerCount, chGet.channelImageUrl, chGet.openLive);
60
+ chGet = chGet.content.data[0];
61
+
62
+ let chRes = new chzzkChannel(chGet.channelId, chGet.channelName, chGet.followerCount, chGet.channelImageUrl);
66
63
 
67
64
  return resolve(chRes);
68
65
 
package/lib/index.js CHANGED
@@ -4,7 +4,9 @@ module.exports = {
4
4
  channel: require("./channel.js"),
5
5
  chat: require("./chat.js").chzzkChat,
6
6
  live: require("./live.js"),
7
+ oauth: require("./oauth.js"),
7
8
  video: require("./video.js"),
8
9
 
10
+ auth: require("./val.js").auth,
9
11
  login: require("./val.js").login
10
12
  }
package/lib/oauth.js ADDED
@@ -0,0 +1,78 @@
1
+ const { USER, CLIENT } = require("./tool.js");
2
+ const { AUTH, state } = require("./val.js");
3
+
4
+ const channel = require("./channel.js");
5
+
6
+ class chzzkToken {
7
+ constructor(access, refresh, expireIn) {
8
+ this.access = access;
9
+ this.refresh = refresh;
10
+ this.expireIn = expireIn;
11
+ }
12
+ }
13
+
14
+ async function get (code) {
15
+ return new Promise(async (resolve, reject) => {
16
+ let options = {
17
+ grantType: "authorization_code",
18
+ clientId: AUTH.id,
19
+ clientSecret: AUTH.secret,
20
+ code: code,
21
+ state: state
22
+ }
23
+
24
+ options = JSON.stringify(options);
25
+
26
+ let oauthGet = await CLIENT.post("auth/v1/token", options);
27
+ if (oauthGet.code != 200) return resolve(null);
28
+
29
+ oauthGet = oauthGet.content;
30
+
31
+ let oauthRes = new chzzkToken(oauthGet.accessToken, oauthGet.refreshToken, oauthGet.expiresIn);
32
+
33
+ return resolve(oauthRes);
34
+ });
35
+ }
36
+
37
+ async function refresh (refreshToken) {
38
+ return new Promise(async (resolve, reject) => {
39
+ let options = {
40
+ grantType: "refresh_token",
41
+ clientId: AUTH.id,
42
+ clientSecret: AUTH.secret,
43
+ refreshToken: refreshToken,
44
+ }
45
+
46
+ options = JSON.stringify(options);
47
+
48
+ let oauthGet = await CLIENT.post("auth/v1/token", options);
49
+ if (oauthGet.code != 200) return resolve(null);
50
+
51
+ oauthGet = oauthGet.content;
52
+
53
+ let oauthRes = new chzzkToken(oauthGet.accessToken, oauthGet.refreshToken, oauthGet.expiresIn);
54
+
55
+ return resolve(oauthRes);
56
+ });
57
+ }
58
+
59
+ async function resolve (accessToken) {
60
+ return new Promise(async (resolve, reject) => {
61
+
62
+ let oauthGet = await USER.get(accessToken, "open/v1/users/me");
63
+ if (oauthGet.code != 200) return resolve(null);
64
+
65
+ oauthGet = oauthGet.content;
66
+
67
+ let oauthChannel = await channel.get(oauthGet.channelId);
68
+
69
+ return resolve(oauthChannel);
70
+
71
+ });
72
+ }
73
+
74
+ module.exports = {
75
+ get: get,
76
+ refresh: refresh,
77
+ resolve: resolve
78
+ }
package/lib/tool.js CHANGED
@@ -1,6 +1,122 @@
1
- const { chzzkBaseURL, gameBaseURL, naverBaseURL, NID } = require("./val.js");
1
+ const { chzzkAPIURL, chzzkBaseURL, gameBaseURL, naverBaseURL, NID, AUTH } = require("./val.js");
2
2
  const vm = require("./vm.js");
3
3
 
4
+ function clientGet (path) {
5
+ return new Promise(async (resolve, reject) => {
6
+
7
+ fetch(chzzkAPIURL + path, {
8
+ method: "GET",
9
+ headers: {
10
+ "Client-Id": AUTH.id,
11
+ "Client-Secret": AUTH.secret,
12
+ "Content-Type": "application/json",
13
+ "User-Agent": "BuzzkLib/" + vm.getVersion() + " (Node)"
14
+ }
15
+ })
16
+
17
+ .then(async (response) => {
18
+ let json;
19
+ try {
20
+ json = await response.json();
21
+ }
22
+
23
+ catch(error) {
24
+ return resolve({"code": 500});
25
+ }
26
+
27
+ return resolve(json);
28
+ });
29
+
30
+ });
31
+ }
32
+
33
+ function clientPost (path, body) {
34
+ return new Promise(async (resolve, reject) => {
35
+
36
+ fetch(chzzkAPIURL + path, {
37
+ method: "POST",
38
+ headers: {
39
+ "Client-Id": AUTH.id,
40
+ "Client-Secret": AUTH.secret,
41
+ "Content-Type": "application/json",
42
+ "User-Agent": "BuzzkLib/" + vm.getVersion() + " (Node)"
43
+ },
44
+ body: body
45
+ })
46
+
47
+ .then(async (response) => {
48
+ let json;
49
+ try {
50
+ json = await response.json();
51
+ }
52
+
53
+ catch(error) {
54
+ return resolve({"code": 500});
55
+ }
56
+
57
+ return resolve(json);
58
+ });
59
+
60
+ });
61
+ }
62
+
63
+ function userGet (token, path) {
64
+ return new Promise(async (resolve, reject) => {
65
+
66
+ fetch(chzzkAPIURL + path, {
67
+ method: "GET",
68
+ headers: {
69
+ "Authorization": "Bearer " + token,
70
+ "Content-Type": "application/json",
71
+ "User-Agent": "BuzzkLib/" + vm.getVersion() + " (Node)"
72
+ }
73
+ })
74
+
75
+ .then(async (response) => {
76
+ let json;
77
+ try {
78
+ json = await response.json();
79
+ }
80
+
81
+ catch(error) {
82
+ return resolve({"code": 500});
83
+ }
84
+
85
+ return resolve(json);
86
+ });
87
+
88
+ });
89
+ }
90
+
91
+ function userPost (token, path, body) {
92
+ return new Promise(async (resolve, reject) => {
93
+
94
+ fetch(chzzkAPIURL + path, {
95
+ method: "POST",
96
+ headers: {
97
+ "Authorization": "Bearer " + token,
98
+ "Content-Type": "application/json",
99
+ "User-Agent": "BuzzkLib/" + vm.getVersion() + " (Node)"
100
+ },
101
+ body: body
102
+ })
103
+
104
+ .then(async (response) => {
105
+ let json;
106
+ try {
107
+ json = await response.json();
108
+ }
109
+
110
+ catch(error) {
111
+ return resolve({"code": 500});
112
+ }
113
+
114
+ return resolve(json);
115
+ });
116
+
117
+ });
118
+ }
119
+
4
120
  function reqChzzk (path) {
5
121
  return new Promise(async (resolve, reject) => {
6
122
 
@@ -104,6 +220,14 @@ function reqNaver (path) {
104
220
  }
105
221
 
106
222
  module.exports = {
223
+ CLIENT: {
224
+ get: clientGet,
225
+ post: clientPost
226
+ },
227
+ USER: {
228
+ get: userGet,
229
+ post: userPost
230
+ },
107
231
  reqChzzk: reqChzzk,
108
232
  exChzzk: exChzzk,
109
233
  reqGame: reqGame,
package/lib/val.js CHANGED
@@ -1,12 +1,20 @@
1
+ const chzzkAPIURL = "https://openapi.chzzk.naver.com/";
1
2
  const chzzkBaseURL = "https://api.chzzk.naver.com/";
2
3
  const gameBaseURL = "https://comm-api.game.naver.com/";
3
4
  const naverBaseURL = "https://apis.naver.com/";
4
5
 
6
+ const state = "zxclDasdfA25";
7
+
5
8
  let NID = {
6
9
  AUT: null,
7
10
  SES: null
8
11
  }
9
12
 
13
+ let AUTH = {
14
+ id: null,
15
+ secret: null
16
+ }
17
+
10
18
  /**
11
19
  * @param {string} NID_AUT
12
20
  * @param {string} NID_SES
@@ -16,10 +24,23 @@ function login (NID_AUT, NID_SES) {
16
24
  NID.SES = NID_SES;
17
25
  }
18
26
 
27
+ /**
28
+ * @param {string} ClientID
29
+ * @param {string} ClientSecret
30
+ */
31
+ function auth (ClientID, ClientSecret) {
32
+ AUTH.id = ClientID;
33
+ AUTH.secret = ClientSecret;
34
+ }
35
+
19
36
  module.exports = {
37
+ chzzkAPIURL: chzzkAPIURL,
20
38
  chzzkBaseURL: chzzkBaseURL,
21
39
  gameBaseURL: gameBaseURL,
22
40
  naverBaseURL: naverBaseURL,
41
+ state: state,
23
42
  NID: NID,
24
- login: login
43
+ AUTH: AUTH,
44
+ login: login,
45
+ auth: auth
25
46
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "buzzk",
3
3
  "displayName": "BUZZK",
4
- "version": "1.11.3",
4
+ "version": "2.0.0",
5
5
  "description": "๋ฟŒ์ง€์ง (BUZZK) - ์น˜์ง€์ง(CHZZK) ์ฑ—๋ด‡์„ ๋”์šฑ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋น„๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.",
6
6
  "main": "lib/index.js",
7
7
  "type": "commonjs",
@@ -31,6 +31,7 @@
31
31
  "๋ฟŒ์ง€์ง"
32
32
  ],
33
33
  "dependencies": {
34
- "ws": "^8.16.0"
34
+ "socket.io-client": "^4.8.1",
35
+ "ws": "^8.18.0"
35
36
  }
36
37
  }