@aseppxyzz12/baileys 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +2579 -0
  3. package/WAProto/AICommon/AICommon.js +19396 -0
  4. package/WAProto/AICommon/AICommon.proto +820 -0
  5. package/WAProto/Adv/Adv.js +1137 -0
  6. package/WAProto/Adv/Adv.proto +42 -0
  7. package/WAProto/BotMetadata/BotMetadata.js +8975 -0
  8. package/WAProto/BotMetadata/BotMetadata.proto +484 -0
  9. package/WAProto/Cert/Cert.js +893 -0
  10. package/WAProto/Cert/Cert.proto +30 -0
  11. package/WAProto/ChatLockSettings/ChatLockSettings.js +673 -0
  12. package/WAProto/ChatLockSettings/ChatLockSettings.proto +9 -0
  13. package/WAProto/CompanionReg/CompanionReg.js +2457 -0
  14. package/WAProto/CompanionReg/CompanionReg.proto +103 -0
  15. package/WAProto/DeviceCapabilities/DeviceCapabilities.js +846 -0
  16. package/WAProto/DeviceCapabilities/DeviceCapabilities.proto +38 -0
  17. package/WAProto/E2E/E2E.js +78728 -0
  18. package/WAProto/E2E/E2E.proto +1970 -0
  19. package/WAProto/Ephemeral/Ephemeral.js +143 -0
  20. package/WAProto/Ephemeral/Ephemeral.proto +7 -0
  21. package/WAProto/HistorySync/HistorySync.js +95931 -0
  22. package/WAProto/HistorySync/HistorySync.proto +229 -0
  23. package/WAProto/LidMigrationSyncPayload/LidMigrationSyncPayload.js +414 -0
  24. package/WAProto/LidMigrationSyncPayload/LidMigrationSyncPayload.proto +13 -0
  25. package/WAProto/MdStorageChatRowOpaqueData/MdStorageChatRowOpaqueData.js +980 -0
  26. package/WAProto/MdStorageChatRowOpaqueData/MdStorageChatRowOpaqueData.proto +38 -0
  27. package/WAProto/MdStorageMsgRowOpaqueData/MdStorageMsgRowOpaqueData.js +81185 -0
  28. package/WAProto/MdStorageMsgRowOpaqueData/MdStorageMsgRowOpaqueData.proto +88 -0
  29. package/WAProto/MmsRetry/MmsRetry.js +310 -0
  30. package/WAProto/MmsRetry/MmsRetry.proto +19 -0
  31. package/WAProto/Protocol/Protocol.js +399 -0
  32. package/WAProto/Protocol/Protocol.proto +22 -0
  33. package/WAProto/Reporting/Reporting.js +535 -0
  34. package/WAProto/Reporting/Reporting.proto +22 -0
  35. package/WAProto/ServerSync/ServerSync.js +1830 -0
  36. package/WAProto/ServerSync/ServerSync.proto +70 -0
  37. package/WAProto/SignalLocalStorageProtocol/SignalLocalStorageProtocol.js +3267 -0
  38. package/WAProto/SignalLocalStorageProtocol/SignalLocalStorageProtocol.proto +95 -0
  39. package/WAProto/SignalWhisperTextProtocol/SignalWhisperTextProtocol.js +1140 -0
  40. package/WAProto/SignalWhisperTextProtocol/SignalWhisperTextProtocol.proto +44 -0
  41. package/WAProto/StatusAttributions/StatusAttributions.js +1604 -0
  42. package/WAProto/StatusAttributions/StatusAttributions.proto +89 -0
  43. package/WAProto/SyncAction/SyncAction.js +17424 -0
  44. package/WAProto/SyncAction/SyncAction.proto +663 -0
  45. package/WAProto/UserPassword/UserPassword.js +544 -0
  46. package/WAProto/UserPassword/UserPassword.proto +28 -0
  47. package/WAProto/VnameCert/VnameCert.js +1466 -0
  48. package/WAProto/VnameCert/VnameCert.proto +65 -0
  49. package/WAProto/Wa6/Wa6.js +4601 -0
  50. package/WAProto/Wa6/Wa6.proto +241 -0
  51. package/WAProto/Web/Web.js +90819 -0
  52. package/WAProto/Web/Web.proto +605 -0
  53. package/WAProto/index.js +30 -0
  54. package/engine-requirements.js +9 -0
  55. package/lib/Defaults/baileys-version.json +3 -0
  56. package/lib/Defaults/connection.js +39 -0
  57. package/lib/Defaults/constants.js +50 -0
  58. package/lib/Defaults/history.js +13 -0
  59. package/lib/Defaults/index.js +36 -0
  60. package/lib/Defaults/media.js +43 -0
  61. package/lib/Defaults/phonenumber-mcc.json +223 -0
  62. package/lib/Defaults/prefix.js +12 -0
  63. package/lib/Function/Download/tiktok.js +19 -0
  64. package/lib/Function/Tools/bypass.js +19 -0
  65. package/lib/Function/index.js +13 -0
  66. package/lib/Signal/Group/ciphertext-message.js +14 -0
  67. package/lib/Signal/Group/group-session-builder.js +46 -0
  68. package/lib/Signal/Group/group_cipher.js +104 -0
  69. package/lib/Signal/Group/index.js +42 -0
  70. package/lib/Signal/Group/keyhelper.js +21 -0
  71. package/lib/Signal/Group/queue-job.js +57 -0
  72. package/lib/Signal/Group/sender-chain-key.js +34 -0
  73. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  74. package/lib/Signal/Group/sender-key-message.js +78 -0
  75. package/lib/Signal/Group/sender-key-name.js +49 -0
  76. package/lib/Signal/Group/sender-key-record.js +45 -0
  77. package/lib/Signal/Group/sender-key-state.js +100 -0
  78. package/lib/Signal/Group/sender-message-key.js +28 -0
  79. package/lib/Signal/libsignal.js +364 -0
  80. package/lib/Signal/lid-mapping.js +164 -0
  81. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  82. package/lib/Socket/Client/index.js +31 -0
  83. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  84. package/lib/Socket/Client/types.js +12 -0
  85. package/lib/Socket/Client/web-socket-client.js +62 -0
  86. package/lib/Socket/Client/websocket.js +67 -0
  87. package/lib/Socket/business.js +291 -0
  88. package/lib/Socket/chats.js +874 -0
  89. package/lib/Socket/community.js +454 -0
  90. package/lib/Socket/dugong.js +658 -0
  91. package/lib/Socket/groups.js +357 -0
  92. package/lib/Socket/index.js +13 -0
  93. package/lib/Socket/messages-recv.js +1509 -0
  94. package/lib/Socket/messages-send.js +1505 -0
  95. package/lib/Socket/mex.js +54 -0
  96. package/lib/Socket/newsletter.js +171 -0
  97. package/lib/Socket/registration.js +167 -0
  98. package/lib/Socket/rich-content.js +279 -0
  99. package/lib/Socket/socket.js +905 -0
  100. package/lib/Socket/username.js +157 -0
  101. package/lib/Socket/usync.js +70 -0
  102. package/lib/Store/index.js +37 -0
  103. package/lib/Store/keyed-db.js +114 -0
  104. package/lib/Store/make-cache-manager-store.js +77 -0
  105. package/lib/Store/make-in-memory-store.js +423 -0
  106. package/lib/Store/make-ordered-dictionary.js +78 -0
  107. package/lib/Store/object-repository.js +26 -0
  108. package/lib/Types/Auth.js +2 -0
  109. package/lib/Types/Bussines.js +2 -0
  110. package/lib/Types/Call.js +2 -0
  111. package/lib/Types/Chat.js +10 -0
  112. package/lib/Types/Contact.js +2 -0
  113. package/lib/Types/Events.js +2 -0
  114. package/lib/Types/GroupMetadata.js +2 -0
  115. package/lib/Types/Label.js +25 -0
  116. package/lib/Types/LabelAssociation.js +4 -0
  117. package/lib/Types/Message.js +11 -0
  118. package/lib/Types/Mex.js +40 -0
  119. package/lib/Types/MexUpdates.js +15 -0
  120. package/lib/Types/Newsletter.js +32 -0
  121. package/lib/Types/Product.js +2 -0
  122. package/lib/Types/Signal.js +2 -0
  123. package/lib/Types/Socket.js +2 -0
  124. package/lib/Types/State.js +9 -0
  125. package/lib/Types/USync.js +2 -0
  126. package/lib/Types/index.js +60 -0
  127. package/lib/Utils/auth-utils.js +256 -0
  128. package/lib/Utils/baileys-event-stream.js +63 -0
  129. package/lib/Utils/bot-toolkit.js +455 -0
  130. package/lib/Utils/browser-utils.js +29 -0
  131. package/lib/Utils/business.js +233 -0
  132. package/lib/Utils/chat-utils.js +904 -0
  133. package/lib/Utils/companion-reg-client-utils.js +41 -0
  134. package/lib/Utils/crypto.js +144 -0
  135. package/lib/Utils/decode-wa-message.js +305 -0
  136. package/lib/Utils/event-buffer.js +555 -0
  137. package/lib/Utils/generics.js +411 -0
  138. package/lib/Utils/history.js +100 -0
  139. package/lib/Utils/identity-change-handler.js +53 -0
  140. package/lib/Utils/index.js +57 -0
  141. package/lib/Utils/link-preview.js +76 -0
  142. package/lib/Utils/logger.js +4 -0
  143. package/lib/Utils/lt-hash.js +45 -0
  144. package/lib/Utils/make-mutex.js +33 -0
  145. package/lib/Utils/message-composer.js +289 -0
  146. package/lib/Utils/message-retry-manager.js +134 -0
  147. package/lib/Utils/messages-media.js +806 -0
  148. package/lib/Utils/messages.js +1908 -0
  149. package/lib/Utils/noise-handler.js +157 -0
  150. package/lib/Utils/offline-node-processor.js +42 -0
  151. package/lib/Utils/pre-key-manager.js +86 -0
  152. package/lib/Utils/process-message.js +814 -0
  153. package/lib/Utils/reporting-utils.js +264 -0
  154. package/lib/Utils/signal.js +183 -0
  155. package/lib/Utils/stanza-ack.js +36 -0
  156. package/lib/Utils/sync-action-utils.js +52 -0
  157. package/lib/Utils/tc-token-utils.js +167 -0
  158. package/lib/Utils/use-multi-file-auth-state.js +104 -0
  159. package/lib/Utils/validate-connection.js +229 -0
  160. package/lib/Utils/vialeys-event-stream.js +41 -0
  161. package/lib/WABinary/constants.js +1308 -0
  162. package/lib/WABinary/decode.js +233 -0
  163. package/lib/WABinary/encode.js +212 -0
  164. package/lib/WABinary/generic-utils.js +124 -0
  165. package/lib/WABinary/index.js +36 -0
  166. package/lib/WABinary/jid-utils.js +101 -0
  167. package/lib/WABinary/types.js +2 -0
  168. package/lib/WAM/BinaryInfo.js +12 -0
  169. package/lib/WAM/constants.js +20491 -0
  170. package/lib/WAM/encode.js +148 -0
  171. package/lib/WAM/index.js +34 -0
  172. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +62 -0
  173. package/lib/WAUSync/Protocols/USyncContactProtocol.js +38 -0
  174. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +50 -0
  175. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +25 -0
  176. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +24 -0
  177. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +32 -0
  178. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +24 -0
  179. package/lib/WAUSync/Protocols/index.js +38 -0
  180. package/lib/WAUSync/USyncQuery.js +97 -0
  181. package/lib/WAUSync/USyncUser.js +33 -0
  182. package/lib/WAUSync/index.js +34 -0
  183. package/lib/index.js +113 -0
  184. package/lib/messages-send.js +1496 -0
  185. package/package.json +100 -0
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WebSocketClient = void 0;
7
+ const ws_1 = __importDefault(require("ws"));
8
+ const Defaults_1 = require("../../Defaults");
9
+ const abstract_socket_client_1 = require("./abstract-socket-client");
10
+ class WebSocketClient extends abstract_socket_client_1.AbstractSocketClient {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.socket = null;
14
+ }
15
+ get isOpen() {
16
+ var _a;
17
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.OPEN;
18
+ }
19
+ get isClosed() {
20
+ var _a;
21
+ return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CLOSED;
22
+ }
23
+ get isClosing() {
24
+ var _a;
25
+ return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CLOSING;
26
+ }
27
+ get isConnecting() {
28
+ var _a;
29
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CONNECTING;
30
+ }
31
+ async connect() {
32
+ var _a, _b;
33
+ if (this.socket) {
34
+ return;
35
+ }
36
+ this.socket = new ws_1.default(this.url, {
37
+ origin: Defaults_1.DEFAULT_ORIGIN,
38
+ headers: (_a = this.config.options) === null || _a === void 0 ? void 0 : _a.headers,
39
+ handshakeTimeout: this.config.connectTimeoutMs,
40
+ timeout: this.config.connectTimeoutMs,
41
+ agent: this.config.agent,
42
+ });
43
+ this.socket.setMaxListeners(0);
44
+ const events = ['close', 'error', 'upgrade', 'message', 'open', 'ping', 'pong', 'unexpected-response'];
45
+ for (const event of events) {
46
+ (_b = this.socket) === null || _b === void 0 ? void 0 : _b.on(event, (...args) => this.emit(event, ...args));
47
+ }
48
+ }
49
+ async close() {
50
+ if (!this.socket) {
51
+ return;
52
+ }
53
+ this.socket.close();
54
+ this.socket = null;
55
+ }
56
+ send(str, cb) {
57
+ var _a;
58
+ (_a = this.socket) === null || _a === void 0 ? void 0 : _a.send(str, cb);
59
+ return Boolean(this.socket);
60
+ }
61
+ }
62
+ exports.WebSocketClient = WebSocketClient;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const {
4
+ OPEN: OPEN,
5
+ CLOSED: CLOSED,
6
+ CLOSING: CLOSING,
7
+ CONNECTING: CONNECTING,
8
+ WebSocket: WebSocket,
9
+ } = require("ws");
10
+ const { DEFAULT_ORIGIN: DEFAULT_ORIGIN } = require("../../Defaults/constants");
11
+ const { AbstractSocketClient: AbstractSocketClient } = require("./types");
12
+ class WebSocketClient extends AbstractSocketClient {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.socket = null;
16
+ }
17
+ get isOpen() {
18
+ return this.socket?.readyState === OPEN;
19
+ }
20
+ get isClosed() {
21
+ return this.socket?.readyState === CLOSED;
22
+ }
23
+ get isClosing() {
24
+ this.socket?.readyState === CLOSING;
25
+ }
26
+ get isConnecting() {
27
+ this.socket?.readyState === CONNECTING;
28
+ }
29
+ connect() {
30
+ if (this.socket) {
31
+ return;
32
+ }
33
+ this.socket = new WebSocket(this.url, {
34
+ origin: DEFAULT_ORIGIN,
35
+ headers: this.config.options?.headers,
36
+ handshakeTimeout: this.config.connectTimeoutMs,
37
+ timeout: this.config.connectTimeoutMs,
38
+ agent: this.config.agent,
39
+ });
40
+ this.socket.setMaxListeners(0);
41
+ const events = [
42
+ "close",
43
+ "error",
44
+ "upgrade",
45
+ "message",
46
+ "open",
47
+ "ping",
48
+ "pong",
49
+ "unexpected-response",
50
+ ];
51
+ for (const event of events) {
52
+ this.socket?.on(event, (...args) => this.emit(event, ...args));
53
+ }
54
+ }
55
+ close() {
56
+ if (!this.socket) {
57
+ return;
58
+ }
59
+ this.socket.close();
60
+ this.socket = null;
61
+ }
62
+ send(str, cb) {
63
+ this.socket?.send(str, cb);
64
+ return Boolean(this.socket);
65
+ }
66
+ }
67
+ module.exports = { WebSocketClient: WebSocketClient };
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const {
4
+ toProductNode: toProductNode,
5
+ parseCatalogNode: parseCatalogNode,
6
+ parseCollectionsNode: parseCollectionsNode,
7
+ parseOrderDetailsNode: parseOrderDetailsNode,
8
+ getRawMediaUploadData: getRawMediaUploadData,
9
+ uploadingNecessaryImagesOfProduct: uploadingNecessaryImagesOfProduct,
10
+ } = require("../Utils");
11
+ const {
12
+ S_WHATSAPP_NET: S_WHATSAPP_NET,
13
+ jidNormalizedUser: jidNormalizedUser,
14
+ getBinaryNodeChild: getBinaryNodeChild,
15
+ } = require("../WABinary");
16
+ const { makeMessagesRecvSocket: makeMessagesRecvSocket } = require("./messages-recv");
17
+ const makeBusinessSocket = (config) => {
18
+ const conn = makeMessagesRecvSocket(config);
19
+ const { authState: authState, query: query, waUploadToServer: waUploadToServer } = conn;
20
+ const updateBussinesProfile = async (args) => {
21
+ const node = [];
22
+ const simpleFields = ["address", "email", "description"];
23
+ node.push(
24
+ ...simpleFields
25
+ .filter((key) => args[key])
26
+ .map((key) => ({ tag: key, attrs: {}, content: args[key] }))
27
+ );
28
+ if (args.websites) {
29
+ node.push(
30
+ ...args.websites.map((website) => ({
31
+ tag: "website",
32
+ attrs: {},
33
+ content: website,
34
+ }))
35
+ );
36
+ }
37
+ if (args.hours) {
38
+ node.push({
39
+ tag: "business_hours",
40
+ attrs: { timezone: args.hours.timezone },
41
+ content: args.hours.days.map((config) => {
42
+ const base = {
43
+ tag: "business_hours_config",
44
+ attrs: { day_of_week: config.day, mode: config.mode },
45
+ };
46
+ if (config.mode === "specific_hours") {
47
+ return {
48
+ ...base,
49
+ attrs: {
50
+ ...base.attrs,
51
+ open_time: config.openTimeInMinutes,
52
+ close_time: config.closeTimeInMinutes,
53
+ },
54
+ };
55
+ }
56
+ return base;
57
+ }),
58
+ });
59
+ }
60
+ const result = await query({
61
+ tag: "iq",
62
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz" },
63
+ content: [
64
+ {
65
+ tag: "business_profile",
66
+ attrs: { v: "3", mutation_type: "delta" },
67
+ content: node,
68
+ },
69
+ ],
70
+ });
71
+ return result;
72
+ };
73
+ const updateCoverPhoto = async (photo) => {
74
+ const { fileSha256: fileSha256, filePath: filePath } = await getRawMediaUploadData(
75
+ photo,
76
+ "biz-cover-photo"
77
+ );
78
+ const fileSha256B64 = fileSha256.toString("base64");
79
+ const {
80
+ meta_hmac: meta_hmac,
81
+ fbid: fbid,
82
+ ts: ts,
83
+ } = await waUploadToServer(filePath, {
84
+ fileEncSha256B64: fileSha256B64,
85
+ mediaType: "biz-cover-photo",
86
+ });
87
+ await query({
88
+ tag: "iq",
89
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz" },
90
+ content: [
91
+ {
92
+ tag: "business_profile",
93
+ attrs: { v: "3", mutation_type: "delta" },
94
+ content: [
95
+ {
96
+ tag: "cover_photo",
97
+ attrs: {
98
+ id: String(fbid),
99
+ op: "update",
100
+ token: meta_hmac,
101
+ ts: String(ts),
102
+ },
103
+ },
104
+ ],
105
+ },
106
+ ],
107
+ });
108
+ return fbid;
109
+ };
110
+ const removeCoverPhoto = async (id) =>
111
+ await query({
112
+ tag: "iq",
113
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz" },
114
+ content: [
115
+ {
116
+ tag: "business_profile",
117
+ attrs: { v: "3", mutation_type: "delta" },
118
+ content: [{ tag: "cover_photo", attrs: { op: "delete", id: id } }],
119
+ },
120
+ ],
121
+ });
122
+ const getCatalog = async ({ jid: jid, limit: limit, cursor: cursor }) => {
123
+ jid = jid || authState.creds.me?.id;
124
+ jid = jidNormalizedUser(jid);
125
+ const queryParamNodes = [
126
+ {
127
+ tag: "limit",
128
+ attrs: {},
129
+ content: Buffer.from((limit || 10).toString()),
130
+ },
131
+ { tag: "width", attrs: {}, content: Buffer.from("100") },
132
+ { tag: "height", attrs: {}, content: Buffer.from("100") },
133
+ ];
134
+ if (cursor) {
135
+ queryParamNodes.push({ tag: "after", attrs: {}, content: cursor });
136
+ }
137
+ const result = await query({
138
+ tag: "iq",
139
+ attrs: { to: S_WHATSAPP_NET, type: "get", xmlns: "w:biz:catalog" },
140
+ content: [
141
+ {
142
+ tag: "product_catalog",
143
+ attrs: { jid: jid, allow_shop_source: "true" },
144
+ content: queryParamNodes,
145
+ },
146
+ ],
147
+ });
148
+ return parseCatalogNode(result);
149
+ };
150
+ const getCollections = async (jid, limit = 51) => {
151
+ jid = jid || authState.creds.me?.id;
152
+ jid = jidNormalizedUser(jid);
153
+ const result = await query({
154
+ tag: "iq",
155
+ attrs: {
156
+ to: S_WHATSAPP_NET,
157
+ type: "get",
158
+ xmlns: "w:biz:catalog",
159
+ smax_id: "35",
160
+ },
161
+ content: [
162
+ {
163
+ tag: "collections",
164
+ attrs: { biz_jid: jid },
165
+ content: [
166
+ {
167
+ tag: "collection_limit",
168
+ attrs: {},
169
+ content: Buffer.from(limit.toString()),
170
+ },
171
+ {
172
+ tag: "item_limit",
173
+ attrs: {},
174
+ content: Buffer.from(limit.toString()),
175
+ },
176
+ { tag: "width", attrs: {}, content: Buffer.from("100") },
177
+ { tag: "height", attrs: {}, content: Buffer.from("100") },
178
+ ],
179
+ },
180
+ ],
181
+ });
182
+ return parseCollectionsNode(result);
183
+ };
184
+ const getOrderDetails = async (orderId, tokenBase64) => {
185
+ const result = await query({
186
+ tag: "iq",
187
+ attrs: {
188
+ to: S_WHATSAPP_NET,
189
+ type: "get",
190
+ xmlns: "fb:thrift_iq",
191
+ smax_id: "5",
192
+ },
193
+ content: [
194
+ {
195
+ tag: "order",
196
+ attrs: { op: "get", id: orderId },
197
+ content: [
198
+ {
199
+ tag: "image_dimensions",
200
+ attrs: {},
201
+ content: [
202
+ { tag: "width", attrs: {}, content: Buffer.from("100") },
203
+ { tag: "height", attrs: {}, content: Buffer.from("100") },
204
+ ],
205
+ },
206
+ { tag: "token", attrs: {}, content: Buffer.from(tokenBase64) },
207
+ ],
208
+ },
209
+ ],
210
+ });
211
+ return parseOrderDetailsNode(result);
212
+ };
213
+ const productUpdate = async (productId, update) => {
214
+ update = await uploadingNecessaryImagesOfProduct(update, waUploadToServer);
215
+ const editNode = toProductNode(productId, update);
216
+ const result = await query({
217
+ tag: "iq",
218
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz:catalog" },
219
+ content: [
220
+ {
221
+ tag: "product_catalog_edit",
222
+ attrs: { v: "1" },
223
+ content: [
224
+ editNode,
225
+ { tag: "width", attrs: {}, content: "100" },
226
+ { tag: "height", attrs: {}, content: "100" },
227
+ ],
228
+ },
229
+ ],
230
+ });
231
+ const productCatalogEditNode = getBinaryNodeChild(result, "product_catalog_edit");
232
+ const productNode = getBinaryNodeChild(productCatalogEditNode, "product");
233
+ return parseProductNode(productNode);
234
+ };
235
+ const productCreate = async (create) => {
236
+ create.isHidden = !!create.isHidden;
237
+ create = await uploadingNecessaryImagesOfProduct(create, waUploadToServer);
238
+ const createNode = toProductNode(undefined, create);
239
+ const result = await query({
240
+ tag: "iq",
241
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz:catalog" },
242
+ content: [
243
+ {
244
+ tag: "product_catalog_add",
245
+ attrs: { v: "1" },
246
+ content: [
247
+ createNode,
248
+ { tag: "width", attrs: {}, content: "100" },
249
+ { tag: "height", attrs: {}, content: "100" },
250
+ ],
251
+ },
252
+ ],
253
+ });
254
+ const productCatalogAddNode = getBinaryNodeChild(result, "product_catalog_add");
255
+ const productNode = getBinaryNodeChild(productCatalogAddNode, "product");
256
+ return parseProductNode(productNode);
257
+ };
258
+ const productDelete = async (productIds) => {
259
+ const result = await query({
260
+ tag: "iq",
261
+ attrs: { to: S_WHATSAPP_NET, type: "set", xmlns: "w:biz:catalog" },
262
+ content: [
263
+ {
264
+ tag: "product_catalog_delete",
265
+ attrs: { v: "1" },
266
+ content: productIds.map((id) => ({
267
+ tag: "product",
268
+ attrs: {},
269
+ content: [{ tag: "id", attrs: {}, content: Buffer.from(id) }],
270
+ })),
271
+ },
272
+ ],
273
+ });
274
+ const productCatalogDelNode = getBinaryNodeChild(result, "product_catalog_delete");
275
+ return { deleted: +(productCatalogDelNode?.attrs?.deleted_count || 0) };
276
+ };
277
+ return {
278
+ ...conn,
279
+ logger: config.logger,
280
+ getOrderDetails: getOrderDetails,
281
+ getCatalog: getCatalog,
282
+ getCollections: getCollections,
283
+ productCreate: productCreate,
284
+ productDelete: productDelete,
285
+ productUpdate: productUpdate,
286
+ updateBussinesProfile: updateBussinesProfile,
287
+ updateCoverPhoto: updateCoverPhoto,
288
+ removeCoverPhoto: removeCoverPhoto,
289
+ };
290
+ };
291
+ module.exports = { makeBusinessSocket: makeBusinessSocket };