@solufy/evolution-sdk
Version:
Unofficial SDK for the Evolution Whatsapp API v2
199 lines (188 loc) • 6.36 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/modules/chats/index.ts
var chats_exports = {};
__export(chats_exports, {
ChatsModule: () => ChatsModule
});
module.exports = __toCommonJS(chats_exports);
// 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/modules/chats/schemas/check.ts
var import_libphonenumber_js2 = require("libphonenumber-js");
var import_zod2 = require("zod");
// src/schemas/common.ts
var import_libphonenumber_js = require("libphonenumber-js");
var import_zod = require("zod");
var PhoneNumberSchema = import_zod.z.custom((value) => (0, import_libphonenumber_js.isValidPhoneNumber)(value), "Invalid phone number").transform((phoneNumber) => (0, import_libphonenumber_js.parsePhoneNumber)(phoneNumber).number);
var JidSchema = import_zod.z.string().endsWith(
"@s.whatsapp.net",
"Invalid remote JID, should end with @s.whatsapp.net"
);
var GroupJidSchema = import_zod.z.string().endsWith(
"@g.us",
"Invalid group JID, should end with @g.us"
);
var GroupInviteCodeSchema = import_zod.z.string().length(22).regex(
/^[a-zA-Z0-9]{22}$/,
"Invalid group invite code"
);
var ApiNumberSchema = import_zod.z.union([
PhoneNumberSchema,
JidSchema,
GroupJidSchema
]);
var mediaSchema = import_zod.z.union([import_zod.z.string().url(), import_zod.z.string().base64()]);
// src/types/tags.ts
var Jid = (jid) => jid;
var GroupJid = (jid) => jid;
var ChatId = (id) => id;
// src/modules/chats/schemas/check.ts
var CheckOptionsSchema = import_zod2.z.array(PhoneNumberSchema);
var CheckBodySchema = CheckOptionsSchema.transform((data) => ({
numbers: Array.isArray(data) ? data : [data]
}));
var CheckResponseSchema = import_zod2.z.array(
import_zod2.z.object({
exists: import_zod2.z.boolean(),
jid: import_zod2.z.string(),
number: import_zod2.z.string()
})
).transform(
(numbers) => numbers.map((number) => ({
exists: number.exists,
jid: Jid(number.jid),
number: (0, import_libphonenumber_js2.parsePhoneNumber)(number.number).number
}))
);
// src/modules/chats/schemas/find-all.ts
var import_zod3 = require("zod");
// src/utils/phone-numer-from-jid.ts
var import_libphonenumber_js3 = require("libphonenumber-js");
function phoneNumberFromJid(jid) {
return (0, import_libphonenumber_js3.parsePhoneNumber)(`+${jid.split("@")[0]}`).number;
}
// src/modules/chats/schemas/find-all.ts
var FindAllChatsResponseSchema = import_zod3.z.array(
import_zod3.z.object({
id: import_zod3.z.string(),
remoteJid: import_zod3.z.string(),
name: import_zod3.z.string().nullish(),
labels: import_zod3.z.array(import_zod3.z.string()).nullish(),
createdAt: import_zod3.z.coerce.date(),
updatedAt: import_zod3.z.coerce.date(),
pushName: import_zod3.z.string().nullish(),
profilePicUrl: import_zod3.z.string().url().nullish()
})
).transform(
(chats) => chats.map((chat) => ({
id: ChatId(chat.id),
jid: chat.remoteJid.endsWith("@g.us") ? GroupJid(chat.remoteJid) : Jid(chat.remoteJid),
phoneNumber: phoneNumberFromJid(chat.remoteJid),
name: chat.name || void 0,
labels: chat.labels || void 0,
createdAt: chat.createdAt,
updatedAt: chat.updatedAt,
pushName: chat.pushName || void 0,
pictureUrl: chat.profilePicUrl || void 0
}))
);
// src/modules/chats/schemas/presence.ts
var import_zod4 = require("zod");
var PresenceOptionsSchema = import_zod4.z.object({
/**
* Chat number or JID to receve the presence
*/
number: ApiNumberSchema,
/**
* Duration of the presence in millisseconds
*/
duration: import_zod4.z.number(),
/**
* Presence state
* - `composing`: typing a message
* - `recording`: recording an audio
*/
presence: import_zod4.z.enum(["composing", "recording"]),
/**
* Whether to wait until the presence is finished (duration)
*/
waitUntilFinish: import_zod4.z.boolean().optional()
});
var PresenceBodySchema = PresenceOptionsSchema.transform(
({ waitUntilFinish, duration, ...data }) => ({ ...data, delay: duration })
);
// src/modules/chats/index.ts
var ChatsModule = class {
constructor(api) {
this.api = api;
}
/**
* Checks if a number has WhatsApp
* @param numbers - Number(s) (with country code) to check
*/
async check(...numbers) {
const body = CheckBodySchema.parse(numbers.flat());
const response = await this.api.post(Routes.Chats.Check, { body });
return CheckResponseSchema.parse(response);
}
/**
* Gets all chats
*/
async findAll() {
const response = await this.api.post(Routes.Chats.FindAll);
return FindAllChatsResponseSchema.parse(response);
}
/**
* Sends a presence to a certain chat
* @param options - Presence options
*/
async sendPresence(options) {
const body = PresenceBodySchema.parse(options);
if (options.waitUntilFinish) {
await this.api.post(Routes.Chats.SendPresence, { body });
} else {
this.api.post(Routes.Chats.SendPresence, { body });
}
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ChatsModule
});
//# sourceMappingURL=index.js.map