Skip to main content

Class: SocketClient

connect.SocketClient

[ALPHA - API will 100% change in the near future. Don't say I didn't warn you.]

An easy to use socket implementation that allows users to connect into remote instances of the EASY API.

How to use it:

  1. Make sure you're running an instance of the EASY API and make sure to start it with the --socket flag

        > docker run -e PORT=8080 -p 8080:8080 openwa/wa-automate:latest --socket
  2. Use this in your code:

        import { SocketClient } from "@open-wa/wa-automate";

    SocketClient.connect("http://localhost:8080").then(async client => {
    //now you can use the client similar to how you would use the http express middleware.

    //There are two main commands from this client

    // 1. client.listen - use this for your listeners

    await client.listen("onMessage", message => {
    ...
    })

    // 2. client.asj - ask the main host client to get things done

    await client.ask("sendText", {
    "to" : "44771234567@c.us",
    "content": "hellow socket"
    })

    // or you can send the arguments in order as an array (or tuple, as the cool kids would say)
    await client.ask("sendText", [
    "44771234567@c.us",
    "hellow socket"
    ])

    })

Constructors

constructor

new SocketClient(url, apiKey?, ev?)

Parameters

NameType
urlstring
apiKey?string
ev?boolean

Properties

apiKey

apiKey: string


ev

ev: EventEmitter2

A local version of the ev EventEmitter2


listeners

listeners: Object

Type declaration

NameType
onAck{ [id: string]: (data: any) => any; }
onAddedToGroup{ [id: string]: (data: any) => any; }
onAnyMessage{ [id: string]: (data: any) => any; }
onBattery{ [id: string]: (data: any) => any; }
onButton{ [id: string]: (data: any) => any; }
onChatDeleted{ [id: string]: (data: any) => any; }
onChatOpened{ [id: string]: (data: any) => any; }
onChatState{ [id: string]: (data: any) => any; }
onContactAdded{ [id: string]: (data: any) => any; }
onGlobalParticipantsChanged{ [id: string]: (data: any) => any; }
onIncomingCall{ [id: string]: (data: any) => any; }
onLogout{ [id: string]: (data: any) => any; }
onMessage{ [id: string]: (data: any) => any; }
onMessageDeleted{ [id: string]: (data: any) => any; }
onOrder{ [id: string]: (data: any) => any; }
onPlugged{ [id: string]: (data: any) => any; }
onRemovedFromGroup{ [id: string]: (data: any) => any; }
onStateChanged{ [id: string]: (data: any) => any; }
onStory{ [id: string]: (data: any) => any; }

socket

socket: Socket<DefaultEventsMap, DefaultEventsMap>


url

url: string

Methods

ask

ask<M, P>(method, args?): Promise<unknown>

Type parameters

NameType
Mextends keyof Client
Pextends [] | [c: Message | ChatId | Chat, filter: CollectorFilter<[Message]>, options: CollectorOptions] | [c: Message | ChatId | Chat, filter: CollectorFilter<[Message]>, options?: AwaitMessagesOptions] | [chatId: ChatId, payload: Object] | [listener: SimpleListener] | [message?: string] | [url: string, optionsOverride?: any] | [fn: Function] | [fn: Function, queueOptions?: Options<default, DefaultAddOptions>] | [fn: Function, queueOptions?: Options<default, DefaultAddOptions>] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [fn: Function] | [groupId: `${number}-${number}@g.us`, fn: Function, legacy?: boolean] | [chatId: ChatId, fn: Function] | [available: boolean] | [newStatus: string] | [label: string] | [label: string, chatId: ChatId] | [label: string, chatId: ChatId] | [label: string] | [chatId: ChatId, vcard: string, contactName: string, contactNumber?: string] | [newName: string] | [chatState: ChatState, chatId: ChatId] | [chatId: ChatId] | [to: ChatId, content: string] | [to: ChatId, content: string, hideTags?: boolean] | [to: ChatId, amount: number, currency: string, message?: string] | [to: ChatId, body: string, buttons: Button[], title: string, footer?: string] | [to: ChatId, base64: string] | [to: ChatId, sections: Section[], title: string, description: string, actionText: string] | [to: ChatId, content: string, replyMessageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [groupId: `${number}-${number}@g.us`, content: string, hideTags?: boolean] | [thumb: string, url: string, title: string, description: string, text: string, chatId: ChatId] | [to: ChatId, lat: string, lng: string, loc: string] | [userA?: string] | [message: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}` | Message] | [to: ChatId, file: string, filename: string, caption: string, quotedMsgId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, waitForId?: boolean, ptt?: boolean, withoutPreview?: boolean, hideTags?: boolean] | [to: ChatId, url: string, text?: string, thumbnail?: string] | [to: ChatId, url: string, text?: string, thumbnail?: string] | [to: ChatId, content: string, quotedMsgId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, sendSeen?: boolean] | [contactId: `${number}@c.us`] | [to: ChatId, file: string, filename: string, caption: string, quotedMsgId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, waitForId?: boolean, ptt?: boolean, withoutPreview?: boolean, hideTags?: boolean] | [groupChatId: `${number}-${number}@g.us`] | [to: ChatId, file: string, quotedMsgId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [to: ChatId, file: string, quotedMsgId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [to: ChatId, file: string, filename: string, caption: string, quotedMsgId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, requestConfig?: AxiosRequestConfig<any>] | [to: ChatId, giphyMediaUrl: string, caption: string] | [to: ChatId, url: string, filename: string, caption: string, quotedMsgId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, requestConfig?: AxiosRequestConfig<any>, waitForId?: boolean, ptt?: boolean, withoutPreview?: boolean, hideTags?: boolean] | [id: `${number}@c.us`] | [to: ChatId, image: string, caption: string, bizNumber: `${number}@c.us`, productId: string] | [to: ChatId, image: string, productData: CustomProduct] | [to: ChatId, contactId: `${number}@c.us` | `${number}@c.us`[]] | [to: ChatId, contactIds: `${number}@c.us`[]] | [to: ChatId, on: boolean] | [id: ChatId, archive: boolean] | [id: ChatId, pin: boolean] | [chatId: ChatId, muteDuration: ChatMuteDuration] | [chatId: ChatId] | [chatId: ChatId] | [to: ChatId, messages: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}` | (`false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`)[], skipMyMessages: boolean] | [to: ChatId, messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [withNewMessageOnly?: boolean] | [withNewMessageOnly?: boolean] | [withNewMessagesOnly?: boolean] | [groupId: `${number}-${number}@g.us`] | [groupId: `${number}-${number}@g.us`] | [link: string, returnChatObj?: boolean] | [id: `${number}@c.us`] | [id: ChatId] | [id: `${number}@c.us`] | [groupId: `${number}-${number}@g.us`] | [msgId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [groupId: `${number}-${number}@g.us`] | [contactId: `${number}@c.us`] | [contactId: `${number}@c.us`] | [messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [id: string] | [name: string, price: number, currency: string, images: string[], description: string, url?: string, internalId?: string, isHidden?: boolean] | [productId: string, name?: string, price?: number, currency?: string, images?: string[], description?: string, url?: string, internalId?: string, isHidden?: boolean] | [chatId: ChatId, productId: string] | [productId: string] | [chatId?: ChatId] | [messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [contactId: `${number}@c.us`] | [contactId: `${number}@c.us`] | [chatId: ChatId] | [chatId: ChatId] | [chatId: ChatId] | [chatId: ChatId] | [chatId: ChatId] | [contactId: `${number}@c.us`] | [contactId: `${number}@c.us`] | [contactId: `${number}@c.us`] | [chatId: ChatId] | [chatId: ChatId] | [chatId: ChatId] | [link: string] | [chatId: ChatId] | [chatId: ChatId, messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}` | (`false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`)[], onlyLocal?: boolean] | [contactId: `${number}@c.us`] | [includeMe: boolean, includeNotifications: boolean, use_unread_count: boolean] | [chatId: ChatId, includeMe: boolean, includeNotifications: boolean] | [chatId: ChatId, includeMe: boolean, includeNotifications: boolean] | [groupName: string, contacts: `${number}@c.us` | `${number}@c.us`[]] | [groupId: `${number}-${number}@g.us`, participantId: `${number}@c.us`] | [groupId: `${number}-${number}@g.us`, image: string] | [groupId: `${number}-${number}@g.us`, url: string, requestConfig?: AxiosRequestConfig<any>] | [groupId: `${number}-${number}@g.us`, participantId: `${number}@c.us` | `${number}@c.us`[]] | [groupId: `${number}-${number}@g.us`, participantId: `${number}@c.us` | `${number}@c.us`[]] | [groupId: `${number}-${number}@g.us`, participantId: `${number}@c.us` | `${number}@c.us`[]] | [groupId: `${number}-${number}@g.us`, onlyAdmins: boolean] | [groupId: `${number}-${number}@g.us`, onlyAdmins: boolean] | [groupId: `${number}-${number}@g.us`, description: string] | [groupId: `${number}-${number}@g.us`, title: string] | [groupId: `${number}-${number}@g.us`] | [hex: string] | [activate: boolean] | [messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [to: ChatId, url: string, requestConfig?: AxiosRequestConfig<any>, stickerMetadata?: StickerMetadata] | [to: ChatId, url: string, messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, requestConfig?: AxiosRequestConfig<any>, stickerMetadata?: StickerMetadata] | [to: ChatId, image: string | Buffer, messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, stickerMetadata?: StickerMetadata] | [namespace: namespace, id: string, property: string] | [to: ChatId, image: string | Buffer, stickerMetadata?: StickerMetadata] | [to: ChatId, file: string | Buffer, processOptions?: Mp4StickerConversionProcessOptions, stickerMetadata?: StickerMetadata, messageId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [to: ChatId, emojiId: string, messageId?: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`] | [to: ChatId, webpBase64: string, animated?: boolean] | [to: ChatId, messageId: `false_${number}-${number}@g.us_${string}` | `false_${number}@c.us_${string}` | `true_${number}-${number}@g.us_${string}` | `true_${number}@c.us_${string}`, webpBase64: string, animated?: boolean] | [chatId: ChatId, ephemeral: boolean] | [to: ChatId, giphyMediaUrl: string | URL] | [text: string, textRgba: string, backgroundRgba: string, font: number] | [data: string, caption: string] | [data: string, caption: string] | [statusesToDelete: string | string[]] | [id: string] | [ts?: number] | [startingFrom?: number] | [message: Message] | [url: string] | [data: string] | [useSessionIdInPath?: boolean] | [webhookId: string] | [webhookId: string, events: "all" | SimpleListener[]] | [url: string, events: "all" | SimpleListener[], requestConfig?: AxiosRequestConfig<any>, concurrency?: number]

Parameters

NameType
methodM
args?any[] | P | { [k: string]: unknown; }

Returns

Promise<unknown>


awaitMessages

awaitMessages(c, filter, options?): Promise<Collection<string, Message>>

Parameters

NameType
cMessage | ChatId | Chat
filterCollectorFilter<[Message]>
options?AwaitMessagesOptions

Returns

Promise<Collection<string, Message>>


createMessageCollector

createMessageCollector(c, filter, options): Promise<MessageCollector>

Parameters

NameType
cMessage | ChatId | Chat
filterCollectorFilter<[Message]>
optionsCollectorOptions

Returns

Promise<MessageCollector>


listen

listen(listener, callback): Promise<string>

Set a callback on a simple listener

Parameters

NameTypeDescription
listenerSimpleListenerThe listener name (e.g onMessage, onAnyMessage, etc.)
callback(data: unknown) => voidThe callback you need to run on the selected listener

Returns

Promise<string>

The id of the callback


stopListener

stopListener(listener, callbackId): boolean

Discard a callback

Parameters

NameTypeDescription
listenerSimpleListenerThe listener name (e.g onMessage, onAnyMessage, etc.)
callbackIdstringThe ID from listen

Returns

boolean

boolean - true if the callback was found and discarded, false if the callback is not found


connect

Static connect(url, apiKey?, ev?): Promise<SocketClient & Client>

The main way to create the socket based client.

Parameters

NameTypeDescription
urlstringURL of the socket server (i.e the EASY API instance address)
apiKey?stringoptional api key if set
ev?boolean-

Returns

Promise<SocketClient & Client>

SocketClient