Import JC Web IM
This commit is contained in:
@@ -0,0 +1,273 @@
|
||||
import { appConfig } from '@/config';
|
||||
import { HttpImClient } from './httpImClient';
|
||||
import axios from 'axios';
|
||||
import {
|
||||
appServerGet,
|
||||
appServerPost,
|
||||
clearStoredAppAuth,
|
||||
getStoredAppAuth,
|
||||
persistAppAuth
|
||||
} from './appServerClient';
|
||||
|
||||
function inferAccountType(account) {
|
||||
return String(account || '').includes('@') ? 2 : 1;
|
||||
}
|
||||
|
||||
function unwrapData(response) {
|
||||
return response.data?.data ?? response.data?.result ?? null;
|
||||
}
|
||||
|
||||
function unwrapMessage(response, fallback) {
|
||||
return response.data?.message || response.data?.msg || fallback;
|
||||
}
|
||||
|
||||
export class DocumentedHttpImClient extends HttpImClient {
|
||||
unsupported(feature) {
|
||||
throw new Error(`当前对接文档未提供“${feature}”接口,已禁用旧本地代理链路`);
|
||||
}
|
||||
|
||||
async loginWithPassword(account, password, type = inferAccountType(account)) {
|
||||
const response = await appServerPost(`${appConfig.appServer}/auth/login_pwd`, {
|
||||
type,
|
||||
number: account,
|
||||
password,
|
||||
platform: appConfig.platform,
|
||||
clientId: this.getClientId()
|
||||
}, {
|
||||
skipAuth: true
|
||||
});
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '登录失败'));
|
||||
}
|
||||
|
||||
persistAppAuth(unwrapData(response));
|
||||
return unwrapData(response);
|
||||
}
|
||||
|
||||
async requestAuthCode(email) {
|
||||
const response = await appServerPost(`${appConfig.appServer}/auth/sendEmailCode`, {
|
||||
email
|
||||
}, {
|
||||
skipAuth: true
|
||||
});
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '验证码发送失败'));
|
||||
}
|
||||
|
||||
return unwrapData(response);
|
||||
}
|
||||
|
||||
async loginWithCode(account, code) {
|
||||
void account;
|
||||
void code;
|
||||
throw new Error('接口文档未提供验证码登录接口,请使用密码登录');
|
||||
}
|
||||
|
||||
async register({ type, number, code = '', password, invitationCode = '' }) {
|
||||
const response = await appServerPost(`${appConfig.appServer}/auth/register`, {
|
||||
type,
|
||||
number,
|
||||
code,
|
||||
password,
|
||||
clientId: this.getClientId(),
|
||||
platform: appConfig.platform,
|
||||
invitationCode
|
||||
}, {
|
||||
skipAuth: true
|
||||
});
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '注册失败'));
|
||||
}
|
||||
|
||||
persistAppAuth(unwrapData(response));
|
||||
return unwrapData(response);
|
||||
}
|
||||
|
||||
async createPcSession(userId = '') {
|
||||
const response = await axios.post(`${appConfig.qrAppServer}/pc_session`, {
|
||||
flag: 1,
|
||||
device_name: 'Web IM',
|
||||
userId,
|
||||
clientId: this.getClientId(),
|
||||
platform: appConfig.platform
|
||||
}, { withCredentials: false });
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '二维码登录会话创建失败'));
|
||||
}
|
||||
|
||||
return unwrapData(response) || {};
|
||||
}
|
||||
|
||||
async loginWithPcSession(token) {
|
||||
const url = `${appConfig.qrAppServer}/session_login/${encodeURIComponent(token)}`;
|
||||
let response;
|
||||
try {
|
||||
response = await axios.post(url, null, { withCredentials: false });
|
||||
} catch (postError) {
|
||||
response = await axios.get(url, { withCredentials: false });
|
||||
}
|
||||
|
||||
this.persistAppToken(url, response);
|
||||
|
||||
const payload = response.data || {};
|
||||
const result = payload.result ?? payload.data ?? null;
|
||||
|
||||
if (Number(payload.code) === 0 && result) {
|
||||
persistAppAuth(result);
|
||||
}
|
||||
|
||||
if ([0, 8, 9, 10, 13, 18, 20042].includes(Number(payload.code))) {
|
||||
return {
|
||||
...payload,
|
||||
data: result
|
||||
};
|
||||
}
|
||||
|
||||
throw new Error(payload.message || '扫码登录失败');
|
||||
}
|
||||
|
||||
async changePassword({ oldPassword, newPassword }) {
|
||||
const response = await appServerPost(appConfig.changePasswordApi, {
|
||||
oldPassword,
|
||||
newPassword
|
||||
});
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '密码修改失败'));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async resetPasswordWithCode({ mobile, resetCode, newPassword }) {
|
||||
void mobile;
|
||||
void resetCode;
|
||||
void newPassword;
|
||||
throw new Error('接口文档未提供重置密码接口,请联系服务端确认流程');
|
||||
}
|
||||
|
||||
async logout() {
|
||||
const auth = getStoredAppAuth();
|
||||
if (!auth?.refreshToken) {
|
||||
clearStoredAppAuth();
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await appServerPost(appConfig.logoutApi, {
|
||||
refreshToken: auth.refreshToken
|
||||
});
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(unwrapMessage(response, '退出登录失败'));
|
||||
}
|
||||
} finally {
|
||||
clearStoredAppAuth();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async fetchRemoteConversations() {
|
||||
return [];
|
||||
}
|
||||
|
||||
async fetchRemoteMessages() {
|
||||
return [];
|
||||
}
|
||||
|
||||
async getServerContactList() {
|
||||
return [];
|
||||
}
|
||||
|
||||
async getProfile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
async sendTextMessage() {
|
||||
this.unsupported('发送消息');
|
||||
}
|
||||
|
||||
async sendAttachmentMessage() {
|
||||
this.unsupported('发送附件消息');
|
||||
}
|
||||
|
||||
async addContact() {
|
||||
this.unsupported('添加联系人');
|
||||
}
|
||||
|
||||
async updateContactAlias() {
|
||||
this.unsupported('联系人备注');
|
||||
}
|
||||
|
||||
async createGroup() {
|
||||
this.unsupported('创建群组');
|
||||
}
|
||||
|
||||
async joinGroup() {
|
||||
this.unsupported('加入群组');
|
||||
}
|
||||
|
||||
async broadcastMessage() {
|
||||
this.unsupported('群发消息');
|
||||
}
|
||||
|
||||
async getGroupDetail() {
|
||||
this.unsupported('群详情');
|
||||
}
|
||||
|
||||
async getGroupMembers() {
|
||||
this.unsupported('群成员');
|
||||
}
|
||||
|
||||
async updateGroupAlias() {
|
||||
this.unsupported('群备注');
|
||||
}
|
||||
|
||||
async leaveGroup() {
|
||||
this.unsupported('退出群组');
|
||||
}
|
||||
|
||||
async dismissGroup() {
|
||||
this.unsupported('解散群组');
|
||||
}
|
||||
|
||||
async transferGroup() {
|
||||
this.unsupported('转让群组');
|
||||
}
|
||||
|
||||
async setGroupAdmins() {
|
||||
this.unsupported('设置群管理员');
|
||||
}
|
||||
|
||||
async updateGroupProfile() {
|
||||
this.unsupported('更新群资料');
|
||||
}
|
||||
|
||||
async kickGroupMembers() {
|
||||
this.unsupported('移除群成员');
|
||||
}
|
||||
|
||||
async updateGroupMuteSetting() {
|
||||
this.unsupported('群禁言设置');
|
||||
}
|
||||
|
||||
async updateProfile() {
|
||||
this.unsupported('更新个人资料');
|
||||
}
|
||||
|
||||
async recallMessage() {
|
||||
this.unsupported('撤回消息');
|
||||
}
|
||||
|
||||
async editMessage() {
|
||||
this.unsupported('编辑消息');
|
||||
}
|
||||
|
||||
async getMessageDetail() {
|
||||
this.unsupported('消息详情');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user