UNPKG

@solufy/evolution-sdk

Version:

Unofficial SDK for the Evolution Whatsapp API v2

181 lines (170 loc) 5.58 kB
// src/modules/groups/index.ts import { z as z5 } from "zod"; // src/api/routes.ts var Routes = { Message: { SendText: "message/sendText", SendMedia: "message/sendMedia", SendVoice: "message/sendWhatsAppAudio", SendSticker: "message/sendSticker", SendLocation: "message/sendLocation", SendContact: "message/sendContact", SendPoll: "message/sendPoll" }, Chats: { Check: "chat/whatsappNumbers", FindAll: "chat/findChats", SendPresence: "chat/sendPresence" }, Groups: { FindAll: "group/fetchAllGroups", FindByJid: "group/findGroupInfos", FindByInviteCode: "group/inviteInfo" } }; // src/schemas/common.ts import { isValidPhoneNumber, parsePhoneNumber } from "libphonenumber-js"; import { z } from "zod"; var PhoneNumberSchema = z.custom((value) => isValidPhoneNumber(value), "Invalid phone number").transform((phoneNumber) => parsePhoneNumber(phoneNumber).number); var JidSchema = z.string().endsWith( "@s.whatsapp.net", "Invalid remote JID, should end with @s.whatsapp.net" ); var GroupJidSchema = z.string().endsWith( "@g.us", "Invalid group JID, should end with @g.us" ); var GroupInviteCodeSchema = z.string().length(22).regex( /^[a-zA-Z0-9]{22}$/, "Invalid group invite code" ); var ApiNumberSchema = z.union([ PhoneNumberSchema, JidSchema, GroupJidSchema ]); var mediaSchema = z.union([z.string().url(), z.string().base64()]); // src/modules/groups/schemas/find-all.ts import { z as z3 } from "zod"; // src/modules/groups/schemas/common.ts import { z as z2 } from "zod"; // src/types/tags.ts var Jid = (jid) => jid; var GroupJid = (jid) => jid; // src/utils/phone-numer-from-jid.ts import { parsePhoneNumber as parsePhoneNumber2 } from "libphonenumber-js"; function phoneNumberFromJid(jid) { return parsePhoneNumber2(`+${jid.split("@")[0]}`).number; } // src/modules/groups/schemas/common.ts var GroupResponseSchema = z2.object({ id: z2.string(), subject: z2.string(), subjectOwner: z2.string(), subjectTime: z2.coerce.date(), pictureUrl: z2.string().url().nullish(), size: z2.number(), creation: z2.coerce.date(), owner: z2.string(), restrict: z2.boolean(), announce: z2.boolean() }); var ParticipantResponseSchema = z2.object({ id: z2.string(), admin: z2.enum(["admin", "superadmin"]).nullish() }); var GroupWithParticipantsResponseSchema = GroupResponseSchema.extend({ participants: z2.array(ParticipantResponseSchema) }); var GroupResponseSchemaTransform = (group) => ({ jid: GroupJid(group.id), name: group.subject, pictureUrl: group.pictureUrl || void 0, size: group.size, subject: { owner: Jid(group.subjectOwner), time: group.subjectTime }, owner: { jid: Jid(group.owner), phoneNumber: phoneNumberFromJid(group.owner) }, createdAt: group.creation, restrict: group.restrict, announce: group.announce }); var ParticipantResponseSchemaTransform = (participant) => ({ id: participant.id, role: participant.admin || "member" }); var GroupWithParticipantsResponseSchemaTransform = (group) => ({ ...GroupResponseSchemaTransform(group), participants: group.participants.map(ParticipantResponseSchemaTransform) }); // src/modules/groups/schemas/find-all.ts var FindAllGroupsResponseSchema = z3.array(GroupResponseSchema).transform( (groups) => groups.map((group) => GroupResponseSchemaTransform(group)) ); var FindAllGroupsWithParticipantsResponseSchema = z3.array(GroupWithParticipantsResponseSchema).transform( (groups) => groups.map((group) => GroupWithParticipantsResponseSchemaTransform(group)) ); // src/modules/groups/schemas/find-by-invite-code.ts import { z as z4 } from "zod"; var FindGroupByInviteCodeResponseSchema = GroupWithParticipantsResponseSchema.extend({ isCommunity: z4.boolean(), isCommunityAnnounce: z4.boolean(), joinApprovalMode: z4.boolean(), memberAddMode: z4.boolean() }).omit({ pictureUrl: true }).transform((group) => ({ ...GroupWithParticipantsResponseSchemaTransform({ ...group, pictureUrl: null }), isCommunity: group.isCommunity, isCommunityAnnounce: group.isCommunityAnnounce, joinApprovalMode: group.joinApprovalMode, memberAddMode: group.memberAddMode })); // src/modules/groups/schemas/find-by-jid.ts var FindGroupByJidResponseSchema = GroupWithParticipantsResponseSchema.transform( GroupWithParticipantsResponseSchemaTransform ); // src/modules/groups/index.ts var GroupsModule = class { constructor(api) { this.api = api; } async findAll(getParticipants = false) { const response = await this.api.get(Routes.Groups.FindAll, { params: { getParticipants: z5.boolean().parse(getParticipants) } }); if (getParticipants) { return FindAllGroupsWithParticipantsResponseSchema.parse(response); } return FindAllGroupsResponseSchema.parse(response); } /** * Gets a group by invite code * @param inviteCode - The group invite code (not the URL) */ async findByInviteCode(inviteCode) { const response = await this.api.get(Routes.Groups.FindByInviteCode, { params: { inviteCode: GroupInviteCodeSchema.parse(inviteCode) } }); return FindGroupByInviteCodeResponseSchema.parse(response); } /** * Gets a group by JID * @param groupJid - The group JID terminated with \@g.us */ async findByJid(groupJid) { const response = await this.api.get(Routes.Groups.FindByJid, { params: { groupJid: GroupJidSchema.parse(groupJid) } }); return FindGroupByJidResponseSchema.parse(response); } }; export { GroupsModule }; //# sourceMappingURL=index.mjs.map