npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wayfu/simple-wapi

v0.1.6

Published

Simple WhatsApp Web API (WAPI)

Downloads

232

Readme

logo logo

A simple WhatsApp Web API (WAPI) that allow you to collect Chat, Contact, and Send Message(s)

Install

NPM

npm i --save @wayfu/simple-wapi

In your app.js import and initialized the module like normal.

import WAPI from "@wayfu/simple-wapi";

Vanilla

If you wish to skip the modular build and NOT use npm you can use the vanilla build like so:

CDN

<script src="https://unpkg.com/@wayfu/simple-wapi@latest/dist/index.min.js"></script>

How to use it:

/** Initiate WAPI and store it into a variable */
/** Local Variable */
let WwJS = WAPI.init(window);

/** or Global variable */
window.WwJS = WAPI.init(window);

You need 1 parameter for initiating WAPI. The parameter should be a window instance of the page. You can use this script to inject the WhatsApp Web on the browser too.

API

#WAPI

Available properties in WAPI class

WA_VERSION: string; // Current WhatsApp Web Version
WAPI_VERSION: string; // Current Simple-WAPI lib Version
/** HTML classes that web are using */
WebClasses:{
    [k:string]:{ [k:string]: string }
};
ME: WAPI.Contact; // Current contact info

Available function in WAPI class

/** initiate WAPI */
let WwJS = WAPI.init(window); // Static function to initiating WAPI

/** Checking Phone */
let checked = await WwJS.checkPhone('85726xxx');

/** Finding Chat */
/** There are 2 ways to finding Chat object */
let chat = await WwJS.findChat('85726xxx'); // This will return our Chat object.
let chat = await WwJS.Chat.find('85726xxx'); // This will return WhatsApp Chat object instead.

/** Finding Contact */
/** There are 2 ways to finding Contact object */
let contact = await WwJS.findContact('85726xxx'); // This will return our Contact object.
let contact = await WwJS.Contact.find('85726xxx'); // This will return WhatsApp Contact object instead.

/** Finding Group */
/** There are 2 ways to finding Group object */
let group = await WwJS.findGroup('120363xxx');  // This will return our Group object.
let group = await WwJS.GroupMetadata.find('120363xxx'); // This will return WhatsApp Group object instead.

/** Getting current active chat */
let activeChat = WwJS.getActiveChat(); // This will return our Chat object or null if no chat were active.

/** Getting all Groups Object */
let allGroups = WwJS.getAllGroups(); // This will return Array of our Group object.

/** Opening and closing chat */
await WwJS.openChat('85726xxx'); // for opening chatroom by id
await WwJS.closeChat('85726xxx'); // for closing chatroom by id

/** Opening Chat and send text message to chat */
await WwJS.inputAndSendTextMsg('85726xxx', 'text message'); // This will open the chatroom and send the message

// Sending Message without opening chat window
/** Seindng message */
await WwJS.sendMessage('85726xxx', 'test message'); // Sending a text message to id
await WwJS.sendMessage('85726xxx', 'caption', {media: file}) // Sending a message media to id
await WwJS.sendMessage('85726xxx', '', {media: file, caption: 'caption'}) // Sending a message media to id using caption property

/** Delaying */
await WwJS.sleep(2000); // Delaying for 2 seconds.

#Chat

Available properties in our Chat class

id: ChatId, // ID that represents the chat
isGroup: boolean, // Indicates if the Chat is a Group Chat
active: boolean, // Indicates current active status
hasDraftMessage: boolean, // Indicates current draft message status
name: string, // Title of the chat
timestamp: number, // Unix timestamp for when the last activity occurred
contact: Contact, // Contact model

Available function in our Chat class

let WwJS = WAPI.init(window);
/** There are 2 ways for getting our Chat class object */
/** Using WAPI.findChat() function */
let chat = await WwJS.findChat('85726xxx');
/** or call `.getModel()` function on WhatsApp Chat object */
let chat = await WwJS.Chat.find('85726xxx')?.getModel();

/**
 * Clearing chat draft message
 * Only work when chat not active or opened
 * this will return `Chat` instance
*/
chat.clearDraft();

/** Opening and closing current chat object */
await chat.open(); // opening chatroom
await chat.close(); // closing chatroom

/** Sending a text message */
await chat.sendText('test message');

/** Sending a message media */
await chat.sendMedia(imgFile, 'caption');

GroupChat

Group chat is child of Chat class with extra properties and function. Available properties in our GroupChat class

/** Group owner */
groupMetadata: GroupMetadata; // GroupMetadata detail

// Getter function
get owner(): Contact | null; // Get owner Contact (if any)
get participants(): GroupParticipant[]; // Group participants

#Contact

Available properties in our Contact class

number: string, // Contact's phone number
isBusiness: boolean, // Indicates if the contact is a business contact
id: ContactId, // ID that represents the contact
isEnterprise: boolean, // Indicates if the contact is an enterprise contact
isGroup: boolean, // Indicates if the contact is a group contact
isUser: boolean, // Indicates if the contact is a user contact
isBlocked: boolean, // Indicates if you have blocked this contact
name: string | undefined, // The contact's name, as saved by the current user
pushname: string, // The name that the contact has configured to be shown publically
shortName: string | undefined, // A shortened version of name

/** Deprecated properties */
isMe: boolean, // Indicates if the contact is the current user's contact
isMyContact: boolean // Indicates if the number is saved in the current phone's contacts
isWAContact: boolean, // Indicates if the number is registered on WhatsApp

Available function in our Contact class

let WwJS = WAPI.init(window);
/** There are 2 ways for getting our Contact class object */
/** Using WAPI.findContact() function */
let contact = await WwJS.findContact('85726xxx');
/** or call `.getModel()` function on WhatsApp Contact object */
let contact = await WwJS.Contact.find('85726xxx')?.getModel();

/** Returns the Chat that corresponds to this Contact. */
let chat = await contact.getChat();

/** 
 * Gets the Contact's common groups with you. Returns empty array if you don't have any common group.  */
let commonGroup = await contact.getCommonGroups();

#Group

Available properties in our Group class

announce: boolean; /** Indicates if the group is Announcement Group */
creation: number; /** Group creation timestampt */
desc: string; /** Group Description */
descId: string; /** Group Description Id */
descOwner: ContactId; /** Group Description Owner Contact Id */
descTime: number; /** Group Description Updated Timestampt */
displayedDesc: string; /** Group Displayed Description */
groupType: string; /** Group Type */
id: GroupId; /** Group Id */
name: string; /** Group subject name */
owner: ContactId; /** Group Owner ContactId */
parentGroupId: GroupId; /** Parent GroupId */
size: number; /** Group Participant Size */
subGroupsId: GroupId[]; /** All Sub Groups Id */

// Getter Functions
get participants(): GroupParticipant[]; /** Group participants */
get parentGroup(): Group | null; /** Get parent group as Group object */
get childGroups(): Group[]; /** Get all Child group as Array of Group object */

Available function in our Group class

let WwJS = WAPI.init(window);
/** There are 2 ways for getting our Group class object */
/** Using WAPI.findGroup() function */
let group = await WwJS.findGroup('120363xxx');
/** or call `.getModel()` function on WhatsApp GroupMetadata object */
let group = await WwJS.GroupMetadata.find('120363xxx')?.getModel();

/** Returns the Chat that corresponds to this Group. */
let chat = await group.getChat();
/** Returns the Contact that corresponds to this Group. */
let contact = await group.getContact();
/** Open and return the chat that corresponds to this group */
let chat = await group.openChat();

TypeScript

This library comes with TypeScript "typings". If you happen to find any bugs in those, create an issue.

License

Copyright © 2023 Wayfu under ISC License