这个
sdk是用于stealthim的javascript版本sdk。这个 sdk 兼容web和nodejs环境。这个 sdk 解决了你所需要的所有问题,包括但不限于:
- 获取记录
- 存储消息
- 发送消息
- 下载文件
这个 SDK 使用 ES Module 格式。使用 Javascript 编写。
你可以从 npm 上安装这个 sdk。也可以在 cdn 上使用 UMD 方式引用。UMD 默认的导出名称为 StealthIMJSSDK。我们更推荐使用 ESM 引入。
在使用 SDK 的任何功能之前,您需要先进行初始化。
init(baseurl?: string, DBPathOnNode?: string, DBNameOnWeb?: string, Language?: string): Promise<void>
- 功能: 初始化 SDK。
- 参数:
baseurl(可选): API 的基础 URL,默认为"127.0.0.1:8089"。DBPathOnNode(可选): 在 Node.js 环境中数据库文件的路径,默认为".stim/stim-%.db"。支持使用~开头,%标识当前的服务器地址。DBNameOnWeb(可选): 在 Web 环境中数据库的名称,默认为"stim-%"。Language(可选): 语言设置,默认为"zh-cn"。支持"zh-cn"、"en-us"。
- 示例:
import stim from './index.mjs'; async function initializeSDK() { await stim.init("https://your-api-server.com:8089"); console.log("SDK 初始化完成。"); } initializeSDK();
注:在 node 下数据会写入指定的 sqlite 文件。web 下则是写入 indexedDB(实际使用 sql.js,保存间隔为 30s)。
SDK 提供了多个模块来管理不同的功能,包括用户、群组、消息和文件。
以下简称 StealthIMJSSDK 为 stim。
APIResponse<T = null>: 通用的 API 响应接口。success:boolean- 操作是否成功。error:boolean- 是否发生错误(例如网络错误或服务器内部错误)。msg:string- 响应消息,通常用于错误信息或成功提示。data:T- 响应数据。
UserInfo: 用户信息接口。username:string- 用户名。nickname:string- 用户昵称。[key: string]: any- 其他可能的字段。
GroupPublicInfo: 群组公开信息接口。name:string- 群组名称。create_at:number- 群组创建时间戳。
GroupMemberInfo: 群组成员信息接口。username:string- 成员用户名。nickname:string- 成员昵称。level:number- 成员在群组中的等级(0: Member, 1: Manager, 2: Owner)。[key: string]: any- 其他可能的字段。
MessageData: 消息数据接口。groupid:number- 群组 ID。msg:string- 消息内容。time:number- 消息时间戳。msgid:number- 消息 ID。hash:string- 消息文件哈希(如果适用)。type:number- 消息类型。[key: string]: any- 其他可能的字段。
通过 stim.user 对象访问用户相关功能。
loginWithSession(session?: string): Promise<APIResponse>- 使用会话登录。
login(username: string, password: string, remember?: boolean): Promise<APIResponse>- 使用用户名和密码登录。
remember默认为true。即记忆 Session。
- 使用用户名和密码登录。
getUserInfo(): Promise<APIResponse<UserInfo> & { session?: string }>- 获取当前用户信息。
register(username: string, password: string, nickname: string): Promise<APIResponse>- 注册新用户。
deleteUser(sure?: boolean): Promise<APIResponse>- 删除当前用户账户。
sure必须为true才能执行。
- 删除当前用户账户。
changeUserData(data: { nickname?: string; password?: string; phone_number?: string; email?: string }): Promise<APIResponse & { step?: string }>- 更改用户数据。
getUserNickname(username: string): Promise<string | undefined>- 获取指定用户的昵称。
getOtherUserInfo(username: string): Promise<APIResponse<UserInfo>>- 获取其他用户的公开信息。
getUserSession(): string- 获取当前用户会话字符串。如果未登录则抛出错误。
通过 stim.group 对象访问群组相关功能。
setGroupCallback(callback: (data: { groupid: number, type: number, data: any }) => void): void- 设置群组回调函数,用于接收群组相关事件。当群组列表更新时被触发。
refershGroups(): Promise<APIResponse<number[]>>- 刷新用户所属的群组列表。
getGroupInfo(groupid: number): Promise<APIResponse<GroupMemberInfo[]>>- 获取指定群组的详细信息(包括成员列表)。
getGroupPublicInfo(groupid: number): Promise<APIResponse<GroupPublicInfo>>- 获取指定群组的公开信息。
createGroup(name: string): Promise<APIResponse>- 创建新群组。
joinGroup(groupid: number, password?: string): Promise<APIResponse>- 加入指定群组。
inviteToGroup(groupid: number, username: string): Promise<APIResponse>- 邀请用户加入群组。
setUserLevel(groupid: number, username: string, level: number): Promise<APIResponse>- 设置群组成员的等级。
kickUser(groupid: number, username: string): Promise<APIResponse>- 将用户踢出群组。
changeGroupData(groupid: number, data: { name?: string; password?: string }): Promise<APIResponse>- 更改群组数据。
group.UserLevel常量: 用户在群组中的等级常量。Member: 0群友Manager: 1管理Owner: 2群主
通过 stim.message 对象访问消息相关功能。
setMsgCallback(callback: (data: { groupid: number, type: number, data: any }) => void): void- 设置消息回调函数,用于接收新消息时的更新。不推荐将返回结果直接用于更新界面。更推荐进行数据库查询。
searchMessage(groupid: number, keyword: string, page: number, limit: number): Promise<APIResponse<MessageData[]>>- 搜索消息。
sendMessage(groupid: number, content: string, contentType?: number): Promise<APIResponse>- 发送消息到指定群组。
contentType默认为Text。
- 发送消息到指定群组。
recallMessage(groupid: number, msgID: number): Promise<APIResponse>- 撤回指定群组中的消息。
pullMessage(groupid: number, callback: (data: { data: MessageData[]; groupid: number }) => boolean | void): Promise<APIResponse>- 拉取指定群组的消息。
message.msgType常量: 消息类型常量。Text: 0Image: 1LargeEmoji: 2Emoji: 3File: 4Card: 5InnerLink: 6Recall: 16
通过 stim.file 对象访问文件相关功能。
getFileInfo(fileHash: string): Promise<APIResponse<{ size: bigint }>>- 获取文件信息,包括文件大小。
uploadFile(file: File | string, groupid: number, callback: (progress: { stage: string; finished: number; total: number; stage_num: number; stage_total: number; progress: number }) => void): Promise<APIResponse<{ hash: string }>>- 上传并发送文件。
file可以是浏览器中的File对象或 Node.js 中的文件路径字符串。
- 上传并发送文件。
downloadFile(fileHash: string, callback: (progress: { stage: string; finished: number; total: number; stage_num: number; stage_total: number; progress: number }) => void, fileObj?: FileSystemFileHandle | string): Promise<APIResponse>- 下载文件。
fileObj在浏览器中为FileSystemFileHandle,在 Node.js 中为文件路径字符串。
- 下载文件。
- 功能: 启动后台同步机制,确保群组和用户昵称得到更新。在登录后调用此函数以保持数据同步。同步为随机选择。如果不起用同步则无法获取新增群的群名。
效率问题:
- 上传文件时使用的 blake3 模块为纯 js 实现,效率较低。目前其高性能替代均存在安装问题。
- 下载文件时在浏览器遇到了严重的性能问题。目前无法解决。