n8n-nodes-zalo-nnt
Version:
Unofficial Zalo integration for n8n - Send messages, manage groups, user operations with QR login. No API key required, works via browser simulation.
648 lines • 29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveMemberIdentifiers = resolveMemberIdentifiers;
exports.processCreateGroup = processCreateGroup;
exports.processGetGroupInfo = processGetGroupInfo;
exports.processAddGroupDeputy = processAddGroupDeputy;
exports.processAddUserToGroup = processAddUserToGroup;
exports.processChangeGroupAvatar = processChangeGroupAvatar;
exports.processChangeGroupName = processChangeGroupName;
exports.processGetAllGroups = processGetAllGroups;
exports.processCreateNote = processCreateNote;
exports.processRemoveUserFromGroup = processRemoveUserFromGroup;
exports.processReplaceGroupMembers = processReplaceGroupMembers;
exports.processGetGroupChatHistory = processGetGroupChatHistory;
exports.processJoinGroupLink = processJoinGroupLink;
exports.processLeaveGroup = processLeaveGroup;
exports.processInviteUsers = processInviteUsers;
exports.processGetBlockedMembers = processGetBlockedMembers;
exports.processBlockMember = processBlockMember;
exports.processUnblockMember = processUnblockMember;
exports.processGetPendingRequests = processGetPendingRequests;
exports.processReviewPendingRequest = processReviewPendingRequest;
exports.processGetGroupLinkInfo = processGetGroupLinkInfo;
exports.processGetGroupLinkDetail = processGetGroupLinkDetail;
exports.processEnableGroupLink = processEnableGroupLink;
exports.processDisableGroupLink = processDisableGroupLink;
exports.processUpgradeGroupToCommunity = processUpgradeGroupToCommunity;
exports.processChangeGroupOwner = processChangeGroupOwner;
exports.processRemoveGroupDeputy = processRemoveGroupDeputy;
exports.processGetGroupMembersInfo = processGetGroupMembersInfo;
exports.processGetGroupInviteBoxInfo = processGetGroupInviteBoxInfo;
exports.processGetGroupInviteBoxList = processGetGroupInviteBoxList;
exports.processJoinGroupInviteBox = processJoinGroupInviteBox;
exports.processDeleteGroupInviteBox = processDeleteGroupInviteBox;
exports.processDisperseGroup = processDisperseGroup;
exports.processEditNote = processEditNote;
exports.processGetListBoard = processGetListBoard;
exports.processGetFriendBoardList = processGetFriendBoardList;
exports.processUpdateGroupSettings = processUpdateGroupSettings;
const zaloMessage_1 = require("../../utils/zaloMessage");
const validator_1 = require("./validator");
function normalizePhoneNumber(value) {
const compact = value.replace(/[\s.-]/g, '').replace(/^\+/, '');
return compact.startsWith('0') ? `84${compact.slice(1)}` : compact;
}
function classifyMemberIdentifier(value) {
const compact = value.replace(/[\s.-]/g, '');
if (/^(?:0\d{9}|\+?84\d{9})$/.test(compact)) {
return 'phone';
}
if (/^\d{11,}$/.test(compact)) {
return 'uid';
}
throw new Error(`Định danh thành viên không hợp lệ: ${value}`);
}
async function resolveMemberIdentifiers(api, identifiers) {
(0, validator_1.validateUserIds)(identifiers);
const values = (0, validator_1.parseUserIds)(identifiers);
const resolved = [];
for (const input of values) {
const type = classifyMemberIdentifier(input);
if (type === 'uid') {
resolved.push({ input, type, uid: input.replace(/[\s.-]/g, '') });
continue;
}
const phone = normalizePhoneNumber(input);
const user = await api.findUser(phone);
if (!(user === null || user === void 0 ? void 0 : user.uid)) {
throw new Error(`Không tìm thấy UID Zalo cho số điện thoại: ${input}`);
}
resolved.push({ input, type, uid: user.uid });
}
return resolved;
}
function withResolvedMembers(response, resolvedMembers) {
if (response && typeof response === 'object' && !Array.isArray(response)) {
return { ...response, resolvedMembers };
}
return { response: response, resolvedMembers };
}
async function executeWithAdminPermissionCheck(operation, operationName) {
var _a;
try {
return await operation();
}
catch (error) {
const errorMessage = ((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
const isPermissionError = errorMessage.includes('tham số không hợp lệ') ||
errorMessage.includes('invalid param') ||
errorMessage.includes('không có quyền') ||
errorMessage.includes('permission denied');
if (isPermissionError) {
throw new Error(`Không có quyền thực hiện thao tác "${operationName}". ` +
`Bạn cần là Phó Nhóm hoặc Trưởng Nhóm mới có thể thực hiện thao tác này. ` +
`Lỗi gốc: ${error.message}`);
}
throw error;
}
}
async function processCreateGroup(api, params) {
(0, validator_1.validateGroupName)(params.groupName);
(0, validator_1.validateUserIds)(params.userIds);
const resolvedMembers = await resolveMemberIdentifiers(api, params.userIds);
const response = await api.createGroup({
name: params.groupName,
members: resolvedMembers.map((member) => member.uid),
});
return withResolvedMembers(response, resolvedMembers);
}
function extractUserIdsFromMemVerList(memVerList) {
if (!memVerList || !Array.isArray(memVerList))
return [];
return memVerList.map((item) => item.split('_')[0]).filter(Boolean);
}
async function getUserInfoSafe(api, userId) {
try {
const userInfo = await api.getUserInfo(userId);
if (userInfo && userInfo.changed_profiles && userInfo.changed_profiles[userId]) {
const profile = userInfo.changed_profiles[userId];
return {
id: userId,
displayName: profile.displayName || profile.zaloName || '',
avatar: profile.avatar || '',
zaloName: profile.zaloName || '',
gender: profile.gender,
phoneNumber: profile.phoneNumber || '',
isFriend: profile.isFriend === 1,
isBlocked: profile.isBlocked === 1,
status: profile.status || '',
};
}
return {
id: userId,
displayName: '',
avatar: '',
};
}
catch (error) {
console.error(`Failed to get info for user ${userId}:`, error);
return null;
}
}
async function processGetGroupInfo(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await api.getGroupInfo(params.groupId);
const groupInfo = response.gridInfoMap[params.groupId];
if (!params.includeMembers) {
return {
response,
groupInfo,
};
}
const memberIds = extractUserIdsFromMemVerList((groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.memVerList) || []);
const limit = params.memberLimit || 100;
const limitedMemberIds = memberIds.slice(0, limit);
const membersWithDetails = [];
const failedMembers = [];
const batchSize = 5;
for (let i = 0; i < limitedMemberIds.length; i += batchSize) {
const batch = limitedMemberIds.slice(i, i + batchSize);
const batchResults = await Promise.all(batch.map((userId) => getUserInfoSafe(api, userId)));
for (let j = 0; j < batchResults.length; j++) {
const result = batchResults[j];
if (result) {
membersWithDetails.push(result);
}
else {
failedMembers.push(batch[j]);
}
}
if (i + batchSize < limitedMemberIds.length) {
await new Promise((resolve) => setTimeout(resolve, 100));
}
}
const creatorId = groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.creatorId;
const adminIds = (groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.adminIds) || [];
const enrichedMembers = membersWithDetails.map((member) => ({
...member,
role: member.id === creatorId ? 'owner' : adminIds.includes(member.id) ? 'admin' : 'member',
}));
return {
response,
groupInfo,
members: enrichedMembers,
memberStats: {
totalInGroup: (groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.totalMember) || memberIds.length,
requested: limitedMemberIds.length,
retrieved: membersWithDetails.length,
failed: failedMembers.length,
failedIds: failedMembers,
},
};
}
async function processAddGroupDeputy(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateUserId)(params.userId);
const response = await executeWithAdminPermissionCheck(async () => api.addGroupDeputy(params.groupId, params.userId), 'Thêm phó nhóm');
return {
status: 'Thành công',
response,
};
}
async function processAddUserToGroup(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateUserIds)(params.userIds);
const resolvedMembers = await resolveMemberIdentifiers(api, params.userIds);
const response = await api.addUserToGroup(resolvedMembers.map((member) => member.uid), params.groupId);
return withResolvedMembers(response, resolvedMembers);
}
async function processChangeGroupAvatar(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateImageUrl)(params.imageUrl);
const response = await executeWithAdminPermissionCheck(async () => api.changeGroupAvatar(params.groupId, params.imageUrl), 'Đổi avatar nhóm');
return {
status: 'Thành công',
response,
};
}
async function processChangeGroupName(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateGroupName)(params.newName);
const response = await executeWithAdminPermissionCheck(async () => api.changeGroupName(params.groupId, params.newName), 'Đổi tên nhóm');
return response;
}
async function processGetAllGroups(api, params) {
(0, validator_1.validateLimit)(params.limit);
const response = await api.getAllGroups();
const responseAny = response;
const groupIds = responseAny.gridVerMap ? Object.keys(responseAny.gridVerMap) : [];
const totalGroups = groupIds.length;
const limitedGroupIds = groupIds.slice(0, params.limit);
const groupsWithDetails = [];
for (const groupId of limitedGroupIds) {
try {
const groupInfoResponse = await api.getGroupInfo(groupId);
const groupInfo = groupInfoResponse.gridInfoMap[groupId];
if (groupInfo) {
groupsWithDetails.push({
groupId: groupInfo.groupId,
name: groupInfo.name,
desc: groupInfo.desc,
type: groupInfo.type,
totalMember: groupInfo.totalMember,
maxMember: groupInfo.maxMember,
creatorId: groupInfo.creatorId,
createdTime: groupInfo.createdTime,
visibility: groupInfo.visibility,
globalId: groupInfo.globalId,
avt: groupInfo.avt,
fullAvt: groupInfo.fullAvt,
version: groupInfo.version,
_fullInfo: groupInfo,
});
}
}
catch (error) {
console.error(`Failed to get info for group ${groupId}:`, error);
}
}
return {
groups: groupsWithDetails,
totalGroups,
limitedToCount: params.limit,
actualReturnedCount: groupsWithDetails.length,
};
}
async function processCreateNote(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateNoteContent)(params.content);
const options = {
title: params.content,
pinAct: params.pinAct,
};
const response = await api.createNote(options, params.groupId);
return {
status: 'Thành công',
response,
};
}
async function processRemoveUserFromGroup(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateUserIds)(params.userIds);
const resolvedMembers = await resolveMemberIdentifiers(api, params.userIds);
const response = await executeWithAdminPermissionCheck(async () => api.removeUserFromGroup(resolvedMembers.map((member) => member.uid), params.groupId), 'Xóa thành viên');
return withResolvedMembers(response, resolvedMembers);
}
async function processReplaceGroupMembers(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const removedMembers = await resolveMemberIdentifiers(api, params.oldMembers);
const addedMembers = await resolveMemberIdentifiers(api, params.newMembers);
const removeResponse = await executeWithAdminPermissionCheck(async () => api.removeUserFromGroup(removedMembers.map((member) => member.uid), params.groupId), 'Thay thành viên - xóa thành viên cũ');
if (removeResponse.errorMembers.length > 0) {
throw new Error(`Không thể thay thành viên vì xóa thành viên cũ thất bại: ${removeResponse.errorMembers.join(', ')}`);
}
const addResponse = await api.addUserToGroup(addedMembers.map((member) => member.uid), params.groupId);
return {
removeResponse,
addResponse,
removedMembers,
addedMembers,
};
}
async function processGetGroupChatHistory(api, params) {
var _a, _b, _c, _d;
(0, validator_1.validateGroupId)(params.groupId);
const count = (_a = params.limit) !== null && _a !== void 0 ? _a : 50;
(0, validator_1.validateLimit)(count);
(0, validator_1.validateTimestamp)(params.timestamp);
const response = await api.getGroupChatHistory(params.groupId, count);
let messages = normalizeGroupMessages(response === null || response === void 0 ? void 0 : response.groupMsgs, params.groupId);
if (params.timestamp !== undefined) {
const fromMs = params.timestamp * 1000;
messages = messages.filter((msg) => msg.timestamp >= fromMs);
}
return {
response,
messages,
totalMessages: messages.length,
fetchedCount: Array.isArray(response === null || response === void 0 ? void 0 : response.groupMsgs) ? response.groupMsgs.length : 0,
hasMore: Number((_b = response === null || response === void 0 ? void 0 : response.more) !== null && _b !== void 0 ? _b : 0) > 0,
lastActionId: (_c = response === null || response === void 0 ? void 0 : response.lastActionId) !== null && _c !== void 0 ? _c : null,
lastActionIdOther: (_d = response === null || response === void 0 ? void 0 : response.lastActionIdOther) !== null && _d !== void 0 ? _d : null,
};
}
function normalizeGroupMessages(groupMsgs, groupId) {
if (!Array.isArray(groupMsgs)) {
return [];
}
const normalized = groupMsgs.map((msg) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
const data = (_b = (_a = msg === null || msg === void 0 ? void 0 : msg.data) !== null && _a !== void 0 ? _a : msg) !== null && _b !== void 0 ? _b : {};
const timestamp = Number((_d = (_c = data.ts) !== null && _c !== void 0 ? _c : data.timestamp) !== null && _d !== void 0 ? _d : 0);
return {
msgId: String((_e = data.msgId) !== null && _e !== void 0 ? _e : ''),
cliMsgId: String((_f = data.cliMsgId) !== null && _f !== void 0 ? _f : ''),
threadId: String((_h = (_g = msg === null || msg === void 0 ? void 0 : msg.threadId) !== null && _g !== void 0 ? _g : data.idTo) !== null && _h !== void 0 ? _h : groupId),
senderId: String((_j = data.uidFrom) !== null && _j !== void 0 ? _j : ''),
senderName: String((_k = data.dName) !== null && _k !== void 0 ? _k : ''),
content: (_l = data.content) !== null && _l !== void 0 ? _l : '',
msgType: String((_m = data.msgType) !== null && _m !== void 0 ? _m : 'unknown'),
contentType: (0, zaloMessage_1.detectContentType)(data.msgType, data.content),
mediaUrls: (0, zaloMessage_1.extractMediaUrls)(data.content),
timestamp: Number.isNaN(timestamp) ? 0 : timestamp,
isSelf: Boolean(msg === null || msg === void 0 ? void 0 : msg.isSelf),
mentions: (_o = data.mentions) !== null && _o !== void 0 ? _o : null,
quote: (_p = data.quote) !== null && _p !== void 0 ? _p : null,
ttl: Number((_q = data.ttl) !== null && _q !== void 0 ? _q : 0),
};
});
return normalized.sort((a, b) => (0, zaloMessage_1.compareBySortKey)((0, zaloMessage_1.messageSortKey)(a.msgId, a.timestamp), (0, zaloMessage_1.messageSortKey)(b.msgId, b.timestamp), -1));
}
async function processJoinGroupLink(api, params) {
(0, validator_1.validateGroupLink)(params.groupLink);
const response = await api.joinGroupLink(params.groupLink);
return {
status: 'Thành công',
response,
message: 'Đã tham gia nhóm thành công',
};
}
async function processLeaveGroup(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await api.leaveGroup(params.groupId, params.silent);
return {
status: 'Thành công',
response,
message: params.silent ? 'Đã rời nhóm lặng lẽ' : 'Đã rời nhóm',
};
}
async function processInviteUsers(api, params) {
(0, validator_1.validateUserId)(params.userId);
(0, validator_1.validateGroupIds)(params.groupIds);
const groupList = (0, validator_1.parseGroupIds)(params.groupIds);
const response = await api.inviteUserToGroups(params.userId, groupList);
return {
response,
invitedToGroups: groupList.length,
groupIds: groupList,
};
}
async function processGetBlockedMembers(api, params) {
var _a, _b, _c;
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validatePage)(params.page);
(0, validator_1.validateCount)(params.count);
const payload = {
page: (_a = params.page) !== null && _a !== void 0 ? _a : 1,
count: (_b = params.count) !== null && _b !== void 0 ? _b : 50,
};
const response = await executeWithAdminPermissionCheck(async () => api.getGroupBlockedMember(payload, params.groupId), 'Lấy danh sách bị chặn');
return {
response,
blockedMembers: response.blocked_members || [],
hasMore: response.has_more || 0,
totalReturned: ((_c = response.blocked_members) === null || _c === void 0 ? void 0 : _c.length) || 0,
};
}
async function processBlockMember(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateMemberIds)(params.memberIds);
const memberList = (0, validator_1.parseMemberIds)(params.memberIds);
const response = await executeWithAdminPermissionCheck(async () => api.addGroupBlockedMember(memberList, params.groupId), 'Chặn thành viên');
return {
status: 'Thành công',
response,
message: `Đã chặn ${memberList.length} thành viên`,
blockedMembers: memberList,
};
}
async function processUnblockMember(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateMemberIds)(params.memberIds);
const memberList = (0, validator_1.parseMemberIds)(params.memberIds);
const response = await executeWithAdminPermissionCheck(async () => api.removeGroupBlockedMember(memberList, params.groupId), 'Bỏ chặn thành viên');
return {
status: 'Thành công',
response,
message: `Đã bỏ chặn ${memberList.length} thành viên`,
unblockedMembers: memberList,
};
}
async function processGetPendingRequests(api, params) {
var _a;
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.getPendingGroupMembers(params.groupId), 'Lấy yêu cầu chờ duyệt');
return {
response,
pendingMembers: response.users || [],
totalPending: ((_a = response.users) === null || _a === void 0 ? void 0 : _a.length) || 0,
timestamp: response.time || 0,
};
}
async function processReviewPendingRequest(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateMemberIds)(params.memberIds);
const memberList = (0, validator_1.parseMemberIds)(params.memberIds);
const isApprove = params.action === 'approve';
const payload = {
members: memberList,
isApprove,
};
const response = await executeWithAdminPermissionCheck(async () => api.reviewPendingMemberRequest(payload, params.groupId), 'Duyệt yêu cầu');
return {
status: 'Thành công',
response,
message: isApprove
? `Đã phê duyệt ${memberList.length} yêu cầu`
: `Đã từ chối ${memberList.length} yêu cầu`,
reviewedMembers: memberList,
action: params.action,
};
}
async function processGetGroupLinkInfo(api, params) {
var _a;
(0, validator_1.validateGroupLink)(params.link);
const payload = {
link: params.link,
memberPage: (_a = params.memberPage) !== null && _a !== void 0 ? _a : 1,
};
const response = await api.getGroupLinkInfo(payload);
return {
response,
groupId: response.groupId,
name: response.name,
desc: response.desc,
totalMember: response.totalMember,
hasMoreMember: response.hasMoreMember,
avt: response.avt,
fullAvt: response.fullAvt,
currentMems: response.currentMems,
adminIds: response.adminIds,
};
}
async function processGetGroupLinkDetail(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.getGroupLinkDetail(params.groupId), 'Lấy thông tin link nhóm');
return {
response,
link: response.link || null,
expirationDate: response.expiration_date || null,
enabled: response.enabled === 1,
status: response.enabled === 1 ? 'Đã bật' : 'Đã tắt',
};
}
async function processEnableGroupLink(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.enableGroupLink(params.groupId), 'Bật link mời nhóm');
return {
status: 'Thành công',
response,
link: response.link,
expirationDate: response.expiration_date,
enabled: response.enabled === 1,
message: 'Đã bật link mời nhóm',
};
}
async function processDisableGroupLink(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.disableGroupLink(params.groupId), 'Tắt link mời nhóm');
return {
status: 'Thành công',
response,
enabled: false,
message: 'Đã tắt link mời nhóm',
};
}
async function processUpgradeGroupToCommunity(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.upgradeGroupToCommunity(params.groupId), 'Nâng cấp nhóm lên cộng đồng');
return {
status: 'Thành công',
response,
message: 'Đã nâng cấp nhóm lên cộng đồng',
};
}
async function processChangeGroupOwner(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateUserId)(params.memberId);
const response = await executeWithAdminPermissionCheck(async () => api.changeGroupOwner(params.memberId, params.groupId), 'Chuyển quyền trưởng nhóm');
return {
status: 'Thành công',
response,
newOwnerId: params.memberId,
message: 'Đã chuyển quyền trưởng nhóm',
};
}
async function processRemoveGroupDeputy(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateMemberIds)(params.memberIds);
const memberList = (0, validator_1.parseMemberIds)(params.memberIds);
const response = await executeWithAdminPermissionCheck(async () => api.removeGroupDeputy(memberList, params.groupId), 'Gỡ phó nhóm');
return {
status: 'Thành công',
response,
removedDeputies: memberList,
message: `Đã gỡ vai trò phó nhóm của ${memberList.length} thành viên`,
};
}
async function processGetGroupMembersInfo(api, params) {
(0, validator_1.validateMemberIds)(params.memberIds);
const memberList = (0, validator_1.parseMemberIds)(params.memberIds);
const response = await api.getGroupMembersInfo(memberList.length === 1 ? memberList[0] : memberList);
return {
response,
profiles: response.profiles || {},
totalRequested: memberList.length,
totalReturned: Object.keys(response.profiles || {}).length,
};
}
async function processGetGroupInviteBoxInfo(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await api.getGroupInviteBoxInfo({
groupId: params.groupId,
mpage: params.memberPage,
mcount: params.memberCount,
});
return {
response,
groupInfo: response.groupInfo,
inviterInfo: response.inviterInfo,
grCreatorInfo: response.grCreatorInfo,
expiredTs: response.expiredTs,
};
}
async function processGetGroupInviteBoxList(api, params) {
(0, validator_1.validatePage)(params.page);
(0, validator_1.validateCount)(params.invitesPerPage);
const response = await api.getGroupInviteBoxList({
page: params.page,
invPerPage: params.invitesPerPage,
mpage: params.memberPage,
mcount: params.memberCount,
});
return {
response,
invitations: response.invitations || [],
total: response.total || 0,
hasMore: response.hasMore || false,
};
}
async function processJoinGroupInviteBox(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await api.joinGroupInviteBox(params.groupId);
return {
status: 'Thành công',
response,
message: 'Đã tham gia nhóm từ lời mời',
};
}
async function processDeleteGroupInviteBox(api, params) {
(0, validator_1.validateGroupIds)(params.groupIds);
const groupList = (0, validator_1.parseGroupIds)(params.groupIds);
const response = await api.deleteGroupInviteBox(groupList.length === 1 ? groupList[0] : groupList, params.blockFutureInvite);
return {
response,
deletedInvitationIds: response.delInvitaionIds || [],
errors: response.errMap || {},
};
}
async function processDisperseGroup(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await executeWithAdminPermissionCheck(async () => api.disperseGroup(params.groupId), 'Giải tán nhóm');
return {
status: 'Thành công',
response,
message: 'Đã giải tán nhóm',
};
}
async function processEditNote(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
(0, validator_1.validateNoteContent)(params.title);
const response = await executeWithAdminPermissionCheck(async () => api.editNote({ title: params.title, topicId: params.topicId, pinAct: params.pinAct }, params.groupId), 'Sửa ghi chú');
return {
status: 'Thành công',
response,
};
}
async function processGetListBoard(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const response = await api.getListBoard({ page: params.page, count: params.count }, params.groupId);
return {
response,
items: response.items,
count: response.count,
};
}
async function processGetFriendBoardList(api, params) {
if (!params.conversationId || params.conversationId.trim() === '') {
throw new Error('Conversation ID is required and must be a non-empty string');
}
const response = await api.getFriendBoardList(params.conversationId);
return {
response,
data: response.data,
version: response.version,
};
}
async function processUpdateGroupSettings(api, params) {
(0, validator_1.validateGroupId)(params.groupId);
const { groupId, ...options } = params;
const response = await executeWithAdminPermissionCheck(async () => api.updateGroupSettings(options, groupId), 'Cập nhật cài đặt nhóm');
return {
status: 'Thành công',
response,
message: 'Đã cập nhật cài đặt nhóm',
};
}
//# sourceMappingURL=groupProcessor.js.map