UNPKG

@solufy/evolution-sdk

Version:

Unofficial SDK for the Evolution Whatsapp API v2

1 lines 10.7 kB
{"version":3,"sources":["../../../src/api/routes.ts","../../../src/modules/chats/schemas/check.ts","../../../src/schemas/common.ts","../../../src/types/tags.ts","../../../src/modules/chats/schemas/find-all.ts","../../../src/utils/phone-numer-from-jid.ts","../../../src/modules/chats/schemas/presence.ts","../../../src/modules/chats/index.ts"],"sourcesContent":["export const Routes = {\n\tMessage: {\n\t\tSendText: \"message/sendText\",\n\t\tSendMedia: \"message/sendMedia\",\n\t\tSendVoice: \"message/sendWhatsAppAudio\",\n\t\tSendSticker: \"message/sendSticker\",\n\t\tSendLocation: \"message/sendLocation\",\n\t\tSendContact: \"message/sendContact\",\n\t\tSendPoll: \"message/sendPoll\",\n\t},\n\tChats: {\n\t\tCheck: \"chat/whatsappNumbers\",\n\t\tFindAll: \"chat/findChats\",\n\t\tSendPresence: \"chat/sendPresence\",\n\t},\n\tGroups: {\n\t\tFindAll: \"group/fetchAllGroups\",\n\t\tFindByJid: \"group/findGroupInfos\",\n\t\tFindByInviteCode: \"group/inviteInfo\",\n\t},\n};\n","import { parsePhoneNumber } from \"libphonenumber-js\";\nimport { z } from \"zod\";\n\nimport { PhoneNumberSchema } from \"@/schemas/common\";\nimport { Jid } from \"@/types/tags\";\n\nexport const CheckOptionsSchema = z.array(PhoneNumberSchema);\n\nexport const CheckBodySchema = CheckOptionsSchema.transform((data) => ({\n\tnumbers: Array.isArray(data) ? data : [data],\n}));\n\nexport const CheckResponseSchema = z\n\t.array(\n\t\tz.object({\n\t\t\texists: z.boolean(),\n\t\t\tjid: z.string(),\n\t\t\tnumber: z.string(),\n\t\t}),\n\t)\n\t.transform((numbers) =>\n\t\tnumbers.map((number) => ({\n\t\t\texists: number.exists,\n\t\t\tjid: Jid(number.jid),\n\t\t\tnumber: parsePhoneNumber(number.number).number,\n\t\t})),\n\t);\n\nexport type CheckOptions = z.infer<typeof CheckOptionsSchema>;\nexport type CheckResponse = z.infer<typeof CheckResponseSchema>;\n\nexport {\n\tCheckBodySchema as BodySchema,\n\tCheckOptionsSchema as OptionsSchema,\n\tCheckResponseSchema as ResponseSchema,\n};\n","import { isValidPhoneNumber, parsePhoneNumber } from \"libphonenumber-js\";\nimport { z } from \"zod\";\n\nimport type { GroupInviteCode, GroupJid, Jid } from \"@/types/tags\";\n\nexport const PhoneNumberSchema = z\n\t.custom<string>((value) => isValidPhoneNumber(value), \"Invalid phone number\")\n\t.transform<string>((phoneNumber) => parsePhoneNumber(phoneNumber).number);\n\nexport const JidSchema = z\n\t.string()\n\t.endsWith(\n\t\t\"@s.whatsapp.net\",\n\t\t\"Invalid remote JID, should end with @s.whatsapp.net\",\n\t) as z.ZodType<Jid>;\n\nexport const GroupJidSchema = z\n\t.string()\n\t.endsWith(\n\t\t\"@g.us\",\n\t\t\"Invalid group JID, should end with @g.us\",\n\t) as z.ZodType<GroupJid>;\n\nexport const GroupInviteCodeSchema = z\n\t.string()\n\t.length(22)\n\t.regex(\n\t\t/^[a-zA-Z0-9]{22}$/,\n\t\t\"Invalid group invite code\",\n\t) as unknown as z.ZodType<GroupInviteCode>;\n\nexport const ApiNumberSchema = z.union([\n\tPhoneNumberSchema,\n\tJidSchema,\n\tGroupJidSchema,\n]);\n\nexport const mediaSchema = z.union([z.string().url(), z.string().base64()]);\n","export type Jid = `${string}@s.whatsapp.net`;\nexport const Jid = (jid: string) => jid as Jid;\n\nexport type GroupJid = `${string}@g.us`;\nexport const GroupJid = (jid: string) => jid as GroupJid;\n\nexport type GroupInviteCode = string & { __tag: \"GroupInviteCode\" };\nexport const GroupInviteCode = (code: string) => code as GroupInviteCode;\n\nexport type MessageId = string & { __tag: \"MessageId\" };\nexport const MessageId = (id: string) => id as MessageId;\n\nexport type ChatId = string & { __tag: \"ChatId\" };\nexport const ChatId = (id: string) => id as ChatId;\n","import { z } from \"zod\";\n\nimport { ChatId, GroupJid, Jid } from \"@/types/tags\";\nimport { phoneNumberFromJid } from \"@/utils/phone-numer-from-jid\";\n\nexport const FindAllChatsResponseSchema = z\n\t.array(\n\t\tz.object({\n\t\t\tid: z.string(),\n\t\t\tremoteJid: z.string(),\n\t\t\tname: z.string().nullish(),\n\t\t\tlabels: z.array(z.string()).nullish(),\n\t\t\tcreatedAt: z.coerce.date(),\n\t\t\tupdatedAt: z.coerce.date(),\n\t\t\tpushName: z.string().nullish(),\n\t\t\tprofilePicUrl: z.string().url().nullish(),\n\t\t}),\n\t)\n\t.transform((chats) =>\n\t\tchats.map((chat) => ({\n\t\t\tid: ChatId(chat.id),\n\t\t\tjid: chat.remoteJid.endsWith(\"@g.us\")\n\t\t\t\t? GroupJid(chat.remoteJid)\n\t\t\t\t: Jid(chat.remoteJid),\n\t\t\tphoneNumber: phoneNumberFromJid(chat.remoteJid),\n\t\t\tname: chat.name || undefined,\n\t\t\tlabels: chat.labels || undefined,\n\t\t\tcreatedAt: chat.createdAt,\n\t\t\tupdatedAt: chat.updatedAt,\n\t\t\tpushName: chat.pushName || undefined,\n\t\t\tpictureUrl: chat.profilePicUrl || undefined,\n\t\t})),\n\t);\n\nexport type FindAllChatsResponse = z.infer<typeof FindAllChatsResponseSchema>;\n\nexport { FindAllChatsResponseSchema as ResponseSchema };\n","import { parsePhoneNumber } from \"libphonenumber-js\";\n\n/**\n * Get phone number from JID\n * @param jid - JID (remote JID)\n */\nexport function phoneNumberFromJid(jid: string) {\n\treturn parsePhoneNumber(`+${jid.split(\"@\")[0]}`).number;\n}\n","import { z } from \"zod\";\n\nimport { ApiNumberSchema } from \"@/schemas/common\";\n\nexport const PresenceOptionsSchema = z.object({\n\t/**\n\t * Chat number or JID to receve the presence\n\t */\n\tnumber: ApiNumberSchema,\n\t/**\n\t * Duration of the presence in millisseconds\n\t */\n\tduration: z.number(),\n\t/**\n\t * Presence state\n\t * - `composing`: typing a message\n\t * - `recording`: recording an audio\n\t */\n\tpresence: z.enum([\"composing\", \"recording\"]),\n\t/**\n\t * Whether to wait until the presence is finished (duration)\n\t */\n\twaitUntilFinish: z.boolean().optional(),\n});\n\nexport const PresenceBodySchema = PresenceOptionsSchema.transform(\n\t({ waitUntilFinish, duration, ...data }) => ({ ...data, delay: duration }),\n);\n\nexport type PresenceOptions = z.infer<typeof PresenceOptionsSchema>;\n\nexport {\n\tPresenceBodySchema as BodySchema,\n\tPresenceOptionsSchema as OptionsSchema,\n};\n","import { Routes } from \"@/api/routes\";\nimport type { ApiService } from \"@/api/service\";\n\nimport * as Check from \"./schemas/check\";\nimport * as FindAll from \"./schemas/find-all\";\nimport * as Presence from \"./schemas/presence\";\n\nexport class ChatsModule {\n\tconstructor(private readonly api: ApiService) {}\n\n\t/**\n\t * Checks if a number has WhatsApp\n\t * @param numbers - Number(s) (with country code) to check\n\t */\n\tasync check(\n\t\t...numbers: Check.CheckOptions | Check.CheckOptions[]\n\t): Promise<Check.CheckResponse> {\n\t\tconst body = Check.CheckBodySchema.parse(numbers.flat());\n\t\tconst response = await this.api.post(Routes.Chats.Check, { body });\n\n\t\treturn Check.CheckResponseSchema.parse(response);\n\t}\n\n\t/**\n\t * Gets all chats\n\t */\n\tasync findAll(): Promise<FindAll.FindAllChatsResponse> {\n\t\tconst response = await this.api.post(Routes.Chats.FindAll);\n\n\t\treturn FindAll.ResponseSchema.parse(response);\n\t}\n\n\t/**\n\t * Sends a presence to a certain chat\n\t * @param options - Presence options\n\t */\n\tasync sendPresence(options: Presence.PresenceOptions) {\n\t\tconst body = Presence.BodySchema.parse(options);\n\n\t\tif (options.waitUntilFinish) {\n\t\t\tawait this.api.post(Routes.Chats.SendPresence, { body });\n\t\t} else {\n\t\t\tthis.api.post(Routes.Chats.SendPresence, { body });\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["parsePhoneNumber","z","z","parsePhoneNumber","z","parsePhoneNumber","z","z","z"]}