go-chat-sdk 1.0.2 → 1.0.3

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/dist/index.d.mts CHANGED
@@ -32,8 +32,8 @@ interface Message {
32
32
  created_at?: string;
33
33
  }
34
34
  interface SendMessageRequest {
35
- /** 客户端生成的唯一消息ID */
36
- client_msg_id: string;
35
+ /** 客户端生成的唯一消息ID(可选,不提供时自动生成) */
36
+ client_msg_id?: string;
37
37
  /** 房间ID */
38
38
  room_id: string;
39
39
  /** 消息类型 */
@@ -169,6 +169,31 @@ interface HistoryMessagesResponse {
169
169
  messages: Message[];
170
170
  hasMore: boolean;
171
171
  }
172
+ interface CreateRoomRequest {
173
+ user_id_1: string;
174
+ user_id_2: string;
175
+ }
176
+ interface CreateRoomResponse {
177
+ room_id: string;
178
+ }
179
+ interface CreateGroupRoomRequest {
180
+ /** 群名称(可选,空则自动生成) */
181
+ name?: string;
182
+ /** 成员用户ID列表(至少2人) */
183
+ member_ids: string[];
184
+ }
185
+ interface RoomInfo {
186
+ room_id: string;
187
+ chat_type: string;
188
+ name: string;
189
+ avatar_url: string;
190
+ }
191
+ interface ListRoomsRequest {
192
+ user_id: string;
193
+ }
194
+ interface ListRoomsResponse {
195
+ rooms: RoomInfo[];
196
+ }
172
197
  //#endregion
173
198
  //#region utils.d.ts
174
199
  /**
@@ -197,9 +222,6 @@ declare class EventEmitter {
197
222
  */
198
223
  removeAllListeners(event?: ChatEventType): void;
199
224
  }
200
- /**
201
- * 生成UUID v4
202
- */
203
225
  declare function generateUUID(): string;
204
226
  /**
205
227
  * 检查字符串是否为有效的UUID
@@ -265,6 +287,18 @@ declare class APIClient {
265
287
  * 注意:后端目前只提供了按 conversation 查询的接口
266
288
  */
267
289
  getHistoryMessages(params: HistoryQueryParams): Promise<HistoryMessagesResponse>;
290
+ /**
291
+ * 创建或获取单聊房间
292
+ */
293
+ createRoom(req: CreateRoomRequest): Promise<CreateRoomResponse>;
294
+ /**
295
+ * 创建群聊房间
296
+ */
297
+ createGroupRoom(req: CreateGroupRoomRequest): Promise<CreateRoomResponse>;
298
+ /**
299
+ * 获取用户房间列表
300
+ */
301
+ listRooms(req: ListRoomsRequest): Promise<ListRoomsResponse>;
268
302
  }
269
303
  /**
270
304
  * API 错误类
@@ -476,6 +510,14 @@ declare class ChatSDK {
476
510
  * 获取历史消息
477
511
  */
478
512
  getHistoryMessages(params: HistoryQueryParams): Promise<HistoryMessagesResponse>;
513
+ /**
514
+ * 创建或获取单聊房间
515
+ */
516
+ createRoom(req: CreateRoomRequest): Promise<CreateRoomResponse>;
517
+ /**
518
+ * 创建群聊房间
519
+ */
520
+ createGroupRoom(req: CreateGroupRoomRequest): Promise<CreateRoomResponse>;
479
521
  /**
480
522
  * 生成 UUID(用于 client_msg_id)
481
523
  */
@@ -490,4 +532,4 @@ declare class ChatSDK {
490
532
  private setupEventForwarding;
491
533
  }
492
534
  //#endregion
493
- export { APIClient, APIError, BatchGenerateRequest, BatchUserResponse, ChatEvent, ChatEventDataMap, ChatEventType, ChatSDK, ChatSDK as default, ChatSDKOptions, ChatType, ConnectData, ConnectionState, ConnectionStateChangeData, DisconnectData, ErrorData, EventEmitter, EventListener, FilePayload, HistoryMessagesResponse, HistoryQueryParams, ImagePayload, LoginRequest, Message, MessageReceivedData, MessageSentData, MessageType, RegisterRequest, SendMessageRequest, TextPayload, UserResponse, VideoPayload, WebSocketManager, createError, createStateChange, delay, generateUUID, isValidUUID };
535
+ export { APIClient, APIError, BatchGenerateRequest, BatchUserResponse, ChatEvent, ChatEventDataMap, ChatEventType, ChatSDK, ChatSDK as default, ChatSDKOptions, ChatType, ConnectData, ConnectionState, ConnectionStateChangeData, CreateGroupRoomRequest, CreateRoomRequest, CreateRoomResponse, DisconnectData, ErrorData, EventEmitter, EventListener, FilePayload, HistoryMessagesResponse, HistoryQueryParams, ImagePayload, ListRoomsRequest, ListRoomsResponse, LoginRequest, Message, MessageReceivedData, MessageSentData, MessageType, RegisterRequest, RoomInfo, SendMessageRequest, TextPayload, UserResponse, VideoPayload, WebSocketManager, createError, createStateChange, delay, generateUUID, isValidUUID };
package/dist/index.mjs CHANGED
@@ -142,6 +142,24 @@ var APIClient = class {
142
142
  hasMore: messages.length === (params.page_size || 20)
143
143
  };
144
144
  }
145
+ /**
146
+ * 创建或获取单聊房间
147
+ */
148
+ async createRoom(req) {
149
+ return this.request("POST", "/api/v1/rooms/single", req);
150
+ }
151
+ /**
152
+ * 创建群聊房间
153
+ */
154
+ async createGroupRoom(req) {
155
+ return this.request("POST", "/api/v1/rooms/group", req);
156
+ }
157
+ /**
158
+ * 获取用户房间列表
159
+ */
160
+ async listRooms(req) {
161
+ return this.request("POST", "/api/v1/rooms/list", req);
162
+ }
145
163
  };
146
164
  /**
147
165
  * API 错误类
@@ -222,13 +240,23 @@ var EventEmitter = class {
222
240
  }
223
241
  };
224
242
  /**
225
- * 生成UUID v4
243
+ * 生成UUID v7
226
244
  */
245
+ const HEX_TABLE = [];
246
+ for (let i = 0; i < 256; i++) HEX_TABLE.push((i + 256).toString(16).substring(1));
247
+ const buffer = new Uint8Array(16);
227
248
  function generateUUID() {
228
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
229
- const r = Math.random() * 16 | 0;
230
- return (c === "x" ? r : r & 3 | 8).toString(16);
231
- });
249
+ crypto.getRandomValues(buffer);
250
+ const timestamp = Date.now();
251
+ buffer[0] = Math.floor(timestamp / 1099511627776);
252
+ buffer[1] = Math.floor(timestamp / 4294967296) & 255;
253
+ buffer[2] = Math.floor(timestamp / 16777216) & 255;
254
+ buffer[3] = Math.floor(timestamp / 65536) & 255;
255
+ buffer[4] = Math.floor(timestamp / 256) & 255;
256
+ buffer[5] = timestamp & 255;
257
+ buffer[6] = buffer[6] & 15 | 112;
258
+ buffer[8] = buffer[8] & 63 | 128;
259
+ return HEX_TABLE[buffer[0]] + HEX_TABLE[buffer[1]] + HEX_TABLE[buffer[2]] + HEX_TABLE[buffer[3]] + "-" + HEX_TABLE[buffer[4]] + HEX_TABLE[buffer[5]] + "-" + HEX_TABLE[buffer[6]] + HEX_TABLE[buffer[7]] + "-" + HEX_TABLE[buffer[8]] + HEX_TABLE[buffer[9]] + "-" + HEX_TABLE[buffer[10]] + HEX_TABLE[buffer[11]] + HEX_TABLE[buffer[12]] + HEX_TABLE[buffer[13]] + HEX_TABLE[buffer[14]] + HEX_TABLE[buffer[15]];
232
260
  }
233
261
  /**
234
262
  * 检查字符串是否为有效的UUID
@@ -2057,6 +2085,18 @@ var require_event_target = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2057
2085
  ErrorEvent,
2058
2086
  Event,
2059
2087
  EventTarget: {
2088
+ /**
2089
+ * Register an event listener.
2090
+ *
2091
+ * @param {String} type A string representing the event type to listen for
2092
+ * @param {(Function|Object)} handler The listener to add
2093
+ * @param {Object} [options] An options object specifies characteristics about
2094
+ * the event listener
2095
+ * @param {Boolean} [options.once=false] A `Boolean` indicating that the
2096
+ * listener should be invoked at most once after being added. If `true`,
2097
+ * the listener would be automatically removed when invoked.
2098
+ * @public
2099
+ */
2060
2100
  addEventListener(type, handler, options = {}) {
2061
2101
  for (const listener of this.listeners(type)) if (!options[kForOnEventAttribute] && listener[kListener] === handler && !listener[kForOnEventAttribute]) return;
2062
2102
  let wrapper;
@@ -2093,6 +2133,13 @@ var require_event_target = /* @__PURE__ */ __commonJSMin(((exports, module) => {
2093
2133
  if (options.once) this.once(type, wrapper);
2094
2134
  else this.on(type, wrapper);
2095
2135
  },
2136
+ /**
2137
+ * Remove an event listener.
2138
+ *
2139
+ * @param {String} type A string representing the event type to remove
2140
+ * @param {(Function|Object)} handler The listener to remove
2141
+ * @public
2142
+ */
2096
2143
  removeEventListener(type, handler) {
2097
2144
  for (const listener of this.listeners(type)) if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {
2098
2145
  this.removeListener(type, listener);
@@ -3939,12 +3986,18 @@ var WebSocketManager = class {
3939
3986
  */
3940
3987
  handleMessage(data) {
3941
3988
  try {
3942
- const message = JSON.parse(data);
3943
- if (!message.msg_id || !message.sender_id) {
3944
- this.emitter.emit("error", createError("INVALID_MESSAGE", "Received invalid message format"));
3989
+ const messages = JSON.parse(data);
3990
+ if (!Array.isArray(messages)) {
3991
+ this.emitter.emit("error", createError("INVALID_MESSAGE", "Received non-array message format"));
3945
3992
  return;
3946
3993
  }
3947
- this.emitter.emit("message:received", { message });
3994
+ for (const message of messages) {
3995
+ if (!message.msg_id || !message.sender_id) {
3996
+ this.emitter.emit("error", createError("INVALID_MESSAGE", "Received invalid message format"));
3997
+ continue;
3998
+ }
3999
+ this.emitter.emit("message:received", { message });
4000
+ }
3948
4001
  } catch (error) {
3949
4002
  this.emitter.emit("error", createError("MESSAGE_PARSE_ERROR", data, error instanceof Error ? error : void 0));
3950
4003
  }
@@ -4216,6 +4269,18 @@ var ChatSDK = class {
4216
4269
  return this.api.getHistoryMessages(params);
4217
4270
  }
4218
4271
  /**
4272
+ * 创建或获取单聊房间
4273
+ */
4274
+ async createRoom(req) {
4275
+ return this.api.createRoom(req);
4276
+ }
4277
+ /**
4278
+ * 创建群聊房间
4279
+ */
4280
+ async createGroupRoom(req) {
4281
+ return this.api.createGroupRoom(req);
4282
+ }
4283
+ /**
4219
4284
  * 生成 UUID(用于 client_msg_id)
4220
4285
  */
4221
4286
  generateMessageId() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-chat-sdk",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Type-safe Chat SDK for Go-Chat IM service",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -25,7 +25,7 @@
25
25
  "devDependencies": {
26
26
  "@types/node": "^25.6.0",
27
27
  "@types/ws": "^8.18.1",
28
- "tsdown": "^0.21.9",
28
+ "tsdown": "^0.21.10",
29
29
  "typescript": "^6.0.3",
30
30
  "vitest": "^4.1.5",
31
31
  "ws": "^8.20.0"