From defd997bb2802eadcd77b357cda0910353d9df7a Mon Sep 17 00:00:00 2001 From: dephea Date: Thu, 28 Mar 2024 11:29:12 +0300 Subject: [PATCH 1/5] new StatusAPI class + status methods --- src/RestAPI.js | 2 + src/utils/StatusAPI.js | 148 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 src/utils/StatusAPI.js diff --git a/src/RestAPI.js b/src/RestAPI.js index 766bc19..5206da9 100644 --- a/src/RestAPI.js +++ b/src/RestAPI.js @@ -7,6 +7,7 @@ import SettingsAPI from './utils/SettingsAPI.js'; import GroupAPI from './utils/GroupAPI.js'; import WebhookServiceAPI from './utils/WebhookServiceAPI.js'; import * as fs from 'fs' +import StatusAPI from './utils/StatusAPI.js'; class RestAPI { @@ -42,6 +43,7 @@ class RestAPI { this.settings = new SettingsAPI(this); this.group = new GroupAPI(this); this.webhookService = new WebhookServiceAPI(this); + this.status = new StatusAPI(this); } } diff --git a/src/utils/StatusAPI.js b/src/utils/StatusAPI.js new file mode 100644 index 0000000..5713390 --- /dev/null +++ b/src/utils/StatusAPI.js @@ -0,0 +1,148 @@ +'use strict' +import axios from 'axios'; +import CommonUtils from './CommonUtils.js' + +class StatusAPI{ + + constructor(restAPI) { + this._restAPI = restAPI; + } + + async sendTextStatus(message, backgroundColor = null, font = null, participants = null){ + if (participants!==null){ + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } + } + CommonUtils.validateString('message', message); + + const method = 'sendTextStatus'; + + const postData = { + 'message': message, + } + + if (backgroundColor!==null){ + postData['backgroundColor'] = backgroundColor + } + if (font!=null){ + postData['font'] = font + } + if (participants!==null){ + postData['participants'] = participants + } + + const response = await axios.post(CommonUtils.generateMethodURL(this._restAPI.params, method), postData); + return response.data + } + + async sendVoiceStatus(urlFile, fileName, backgroundColor = null, participants = null){ + if (participants!==null){ + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } + } + CommonUtils.validateString('urlFile', urlFile); + CommonUtils.validateString('fileName', fileName); + + const method = "sendVoiceStatus"; + + const postData = { + 'urlFile': urlFile, + 'fileName': fileName, + } + + if (backgroundColor!==null){ + postData['backgroundColor'] = backgroundColor + } + if (participants!==null){ + postData['participants'] = participants + } + + const response = await axios.post(CommonUtils.generateMethodURL(this._restAPI.params, method), postData); + return response.data + } + + async sendMediaStatus(urlFile, fileName, caption = null, participants = null){ + if (participants!==null){ + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } + } + if (caption!==null){ + CommonUtils.validateString('caption', caption); + } + CommonUtils.validateString('urlFile', urlFile); + CommonUtils.validateString('fileName', fileName); + + const method = 'sendMediaStatus'; + + const postData = { + 'urlFile': urlFile, + 'fileName': fileName, + } + + if(caption!=null){ + postData['caption'] = caption + } + if(participants!=null){ + postData['participants'] = participants + } + + const response = await axios.post(CommonUtils.generateMethodURL(this._restAPI.params, method), postData); + return response.data + } + + async getOutgoingStatuses(minutes=null){ + CommonUtils.validateInteger('minutes', minutes) + + const method = 'getOutgoingStatuses' + const url = "" + if(minutes!==null){ + url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) + }else{ + url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) + } + const response = await axios.get(url); + return response.data; + } + + async getIncomingStatuses(minutes=null){ + CommonUtils.validateInteger('minutes', minutes) + + const method = 'getIncomingStatuses' + const url = "" + if(minutes!==null){ + url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) + }else{ + url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) + } + const response = await axios.get(url); + return response.data; + } + + async getStatusStatistic(idMessage){ + CommonUtils.validateString('idMessage', idMessage) + + const method = 'getStatusStatistic' + const response = await axios.get(CommonUtils.generateMethodURL(this._restAPI.params, method) + '?idMessage=' + idMessage); + return response.data; + } + + async deleteStatus(idMessage){ + CommonUtils.validateString('idMessage', idMessage) + + const method = 'deleteStatus' + const postData = { + 'idMessage': idMessage + } + + const response = await axios.post(CommonUtils.generateMethodURL(this._restAPI.params, method), postData); + return response.data + } +} + +export default StatusAPI; \ No newline at end of file From d12cbb403420d526d2a0fa4b04a707fa240ce218 Mon Sep 17 00:00:00 2001 From: dephea Date: Thu, 28 Mar 2024 11:47:38 +0300 Subject: [PATCH 2/5] "minutes" param fix --- src/utils/StatusAPI.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/utils/StatusAPI.js b/src/utils/StatusAPI.js index 5713390..8e0ae36 100644 --- a/src/utils/StatusAPI.js +++ b/src/utils/StatusAPI.js @@ -97,29 +97,31 @@ class StatusAPI{ } async getOutgoingStatuses(minutes=null){ - CommonUtils.validateInteger('minutes', minutes) - const method = 'getOutgoingStatuses' - const url = "" + let url = "" + if(minutes!==null){ + CommonUtils.validateInteger('minutes', minutes) url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) }else{ url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) } + const response = await axios.get(url); return response.data; } async getIncomingStatuses(minutes=null){ - CommonUtils.validateInteger('minutes', minutes) - const method = 'getIncomingStatuses' - const url = "" + let url = "" + if(minutes!==null){ + CommonUtils.validateInteger('minutes', minutes) url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) }else{ url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) } + const response = await axios.get(url); return response.data; } From a2c9e7e92d440d61adb85b988ff3fabef92326c0 Mon Sep 17 00:00:00 2001 From: dephea Date: Thu, 28 Mar 2024 12:08:23 +0300 Subject: [PATCH 3/5] methods docs --- src/utils/StatusAPI.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/utils/StatusAPI.js b/src/utils/StatusAPI.js index 8e0ae36..09b5ab9 100644 --- a/src/utils/StatusAPI.js +++ b/src/utils/StatusAPI.js @@ -8,6 +8,12 @@ class StatusAPI{ this._restAPI = restAPI; } + /** + * @param {String} message + * @param {String} backgroundColor Optional + * @param {String} font Optional + * @param {Array} participants Optional + */ async sendTextStatus(message, backgroundColor = null, font = null, participants = null){ if (participants!==null){ CommonUtils.validateArray('participants', participants) @@ -37,6 +43,12 @@ class StatusAPI{ return response.data } + /** + * @param {String} urlFile + * @param {String} fileName + * @param {String} backgroundColor Optional + * @param {Array} participants Optional + */ async sendVoiceStatus(urlFile, fileName, backgroundColor = null, participants = null){ if (participants!==null){ CommonUtils.validateArray('participants', participants) @@ -65,6 +77,12 @@ class StatusAPI{ return response.data } + /** + * @param {String} urlFile + * @param {String} fileName + * @param {String} caption Optional + * @param {Array} participants Optional + */ async sendMediaStatus(urlFile, fileName, caption = null, participants = null){ if (participants!==null){ CommonUtils.validateArray('participants', participants) @@ -96,6 +114,9 @@ class StatusAPI{ return response.data } + /** + * @param {number} minutes Optional + */ async getOutgoingStatuses(minutes=null){ const method = 'getOutgoingStatuses' let url = "" @@ -111,6 +132,9 @@ class StatusAPI{ return response.data; } + /** + * @param {number} minutes Optional + */ async getIncomingStatuses(minutes=null){ const method = 'getIncomingStatuses' let url = "" @@ -126,6 +150,9 @@ class StatusAPI{ return response.data; } + /** + * @param {String} idMessage + */ async getStatusStatistic(idMessage){ CommonUtils.validateString('idMessage', idMessage) @@ -134,6 +161,9 @@ class StatusAPI{ return response.data; } + /** + * @param {String} idMessage + */ async deleteStatus(idMessage){ CommonUtils.validateString('idMessage', idMessage) From d821aca82b9307e58b77ddde3e13cfdb88219466 Mon Sep 17 00:00:00 2001 From: dephea Date: Wed, 5 Jun 2024 09:21:45 +0300 Subject: [PATCH 4/5] Added spaces, added validation of all parameters, fixed number type --- src/utils/StatusAPI.js | 79 ++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/src/utils/StatusAPI.js b/src/utils/StatusAPI.js index 09b5ab9..d9ef76c 100644 --- a/src/utils/StatusAPI.js +++ b/src/utils/StatusAPI.js @@ -14,13 +14,7 @@ class StatusAPI{ * @param {String} font Optional * @param {Array} participants Optional */ - async sendTextStatus(message, backgroundColor = null, font = null, participants = null){ - if (participants!==null){ - CommonUtils.validateArray('participants', participants) - for (const number in participants){ - CommonUtils.validateChatIdPhoneNumber(number); - } - } + async sendTextStatus(message, backgroundColor = null, font = null, participants = null) { CommonUtils.validateString('message', message); const method = 'sendTextStatus'; @@ -29,13 +23,19 @@ class StatusAPI{ 'message': message, } - if (backgroundColor!==null){ + if (backgroundColor !== null) { + CommonUtils.validateString('backgroundColor', backgroundColor) postData['backgroundColor'] = backgroundColor } - if (font!=null){ + if (font != null) { + CommonUtils.validateString('font', font) postData['font'] = font } - if (participants!==null){ + if (participants !== null) { + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } postData['participants'] = participants } @@ -49,13 +49,7 @@ class StatusAPI{ * @param {String} backgroundColor Optional * @param {Array} participants Optional */ - async sendVoiceStatus(urlFile, fileName, backgroundColor = null, participants = null){ - if (participants!==null){ - CommonUtils.validateArray('participants', participants) - for (const number in participants){ - CommonUtils.validateChatIdPhoneNumber(number); - } - } + async sendVoiceStatus(urlFile, fileName, backgroundColor = null, participants = null) { CommonUtils.validateString('urlFile', urlFile); CommonUtils.validateString('fileName', fileName); @@ -66,10 +60,15 @@ class StatusAPI{ 'fileName': fileName, } - if (backgroundColor!==null){ + if (backgroundColor !== null) { + CommonUtils.validateString('backgroundColor', backgroundColor) postData['backgroundColor'] = backgroundColor } - if (participants!==null){ + if (participants !== null) { + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } postData['participants'] = participants } @@ -83,16 +82,7 @@ class StatusAPI{ * @param {String} caption Optional * @param {Array} participants Optional */ - async sendMediaStatus(urlFile, fileName, caption = null, participants = null){ - if (participants!==null){ - CommonUtils.validateArray('participants', participants) - for (const number in participants){ - CommonUtils.validateChatIdPhoneNumber(number); - } - } - if (caption!==null){ - CommonUtils.validateString('caption', caption); - } + async sendMediaStatus(urlFile, fileName, caption = null, participants = null) { CommonUtils.validateString('urlFile', urlFile); CommonUtils.validateString('fileName', fileName); @@ -103,10 +93,15 @@ class StatusAPI{ 'fileName': fileName, } - if(caption!=null){ + if (caption != null) { + CommonUtils.validateString('caption', caption); postData['caption'] = caption } - if(participants!=null){ + if (participants != null) { + CommonUtils.validateArray('participants', participants) + for (const number in participants){ + CommonUtils.validateChatIdPhoneNumber(number); + } postData['participants'] = participants } @@ -115,16 +110,16 @@ class StatusAPI{ } /** - * @param {number} minutes Optional + * @param {Number} minutes Optional */ - async getOutgoingStatuses(minutes=null){ + async getOutgoingStatuses(minutes = null) { const method = 'getOutgoingStatuses' let url = "" - if(minutes!==null){ + if (minutes !== null) { CommonUtils.validateInteger('minutes', minutes) url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) - }else{ + } else { url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) } @@ -133,16 +128,16 @@ class StatusAPI{ } /** - * @param {number} minutes Optional + * @param {Number} minutes Optional */ - async getIncomingStatuses(minutes=null){ + async getIncomingStatuses(minutes = null) { const method = 'getIncomingStatuses' let url = "" - if(minutes!==null){ + if (minutes !== null) { CommonUtils.validateInteger('minutes', minutes) url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) - }else{ + } else { url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) } @@ -153,7 +148,7 @@ class StatusAPI{ /** * @param {String} idMessage */ - async getStatusStatistic(idMessage){ + async getStatusStatistic(idMessage) { CommonUtils.validateString('idMessage', idMessage) const method = 'getStatusStatistic' @@ -164,7 +159,7 @@ class StatusAPI{ /** * @param {String} idMessage */ - async deleteStatus(idMessage){ + async deleteStatus(idMessage) { CommonUtils.validateString('idMessage', idMessage) const method = 'deleteStatus' @@ -177,4 +172,4 @@ class StatusAPI{ } } -export default StatusAPI; \ No newline at end of file +export default StatusAPI; From 2763d3c8260b0ae68abfdc0565e984e207201137 Mon Sep 17 00:00:00 2001 From: dephea Date: Thu, 6 Jun 2024 08:56:33 +0300 Subject: [PATCH 5/5] Added new function generateMethodURLWithQuery() --- src/utils/CommonUtils.js | 8 ++++++++ src/utils/StatusAPI.js | 10 ++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/utils/CommonUtils.js b/src/utils/CommonUtils.js index 99660e1..f73797f 100644 --- a/src/utils/CommonUtils.js +++ b/src/utils/CommonUtils.js @@ -31,6 +31,14 @@ class CommonUtils { } } + static generateMethodURLWithQuery(params, method, queryParams) { + if (method === "sendFileByUpload" || method === "uploadFile") { + return `${params.media}/waInstance${params.idInstance}/${method}/${params.apiTokenInstance}${queryParams}` + } else { + return `${params.host}/waInstance${params.idInstance}/${method}/${params.apiTokenInstance}${queryParams}` + } + } + static validateChatIdPhoneNumber(chatId, phoneNumber) { if (!chatId) { CommonUtils.validateInteger('phoneNumber', phoneNumber) diff --git a/src/utils/StatusAPI.js b/src/utils/StatusAPI.js index d9ef76c..2e4663a 100644 --- a/src/utils/StatusAPI.js +++ b/src/utils/StatusAPI.js @@ -118,7 +118,7 @@ class StatusAPI{ if (minutes !== null) { CommonUtils.validateInteger('minutes', minutes) - url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) + url = CommonUtils.generateMethodURLWithQuery(this._restAPI.params, method, `?minutes=${minutes}`) } else { url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) } @@ -136,9 +136,9 @@ class StatusAPI{ if (minutes !== null) { CommonUtils.validateInteger('minutes', minutes) - url = (CommonUtils.generateMethodURL(this._restAPI.params, method) + '?minutes=' + minutes) + url = CommonUtils.generateMethodURLWithQuery(this._restAPI.params, method, `?minutes=${minutes}`) } else { - url = (CommonUtils.generateMethodURL(this._restAPI.params, method)) + url = CommonUtils.generateMethodURL(this._restAPI.params, method) } const response = await axios.get(url); @@ -152,7 +152,7 @@ class StatusAPI{ CommonUtils.validateString('idMessage', idMessage) const method = 'getStatusStatistic' - const response = await axios.get(CommonUtils.generateMethodURL(this._restAPI.params, method) + '?idMessage=' + idMessage); + const response = await axios.get(CommonUtils.generateMethodURLWithQuery(this._restAPI.params, method, `?idMessage=${idMessage}`)); return response.data; } @@ -170,6 +170,8 @@ class StatusAPI{ const response = await axios.post(CommonUtils.generateMethodURL(this._restAPI.params, method), postData); return response.data } + + } export default StatusAPI;