gifted-baileys 1.5.4 → 1.5.6

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 (252) hide show
  1. package/LICENSE +1 -1
  2. package/WAProto/WAProto.proto +88 -969
  3. package/WAProto/index.d.ts +1256 -13195
  4. package/WAProto/index.js +74730 -125106
  5. package/package.json +9 -27
  6. package/src/Defaults/baileys-version.json +3 -0
  7. package/{lib → src}/Defaults/index.js +14 -7
  8. package/src/Defaults/index.ts +131 -0
  9. package/src/README.md +1 -0
  10. package/src/Signal/libsignal.js +180 -0
  11. package/src/Signal/libsignal.ts +141 -0
  12. package/src/Socket/Client/abstract-socket-client.ts +19 -0
  13. package/{lib → src}/Socket/Client/index.js +3 -2
  14. package/src/Socket/Client/index.ts +3 -0
  15. package/src/Socket/Client/mobile-socket-client.js +78 -0
  16. package/src/Socket/Client/mobile-socket-client.ts +66 -0
  17. package/src/Socket/Client/web-socket-client.js +75 -0
  18. package/src/Socket/Client/web-socket-client.ts +57 -0
  19. package/{lib → src}/Socket/business.js +33 -28
  20. package/src/Socket/business.ts +281 -0
  21. package/{lib → src}/Socket/chats.js +176 -174
  22. package/src/Socket/chats.ts +1030 -0
  23. package/{lib → src}/Socket/groups.js +68 -80
  24. package/src/Socket/groups.ts +356 -0
  25. package/{lib → src}/Socket/index.js +1 -4
  26. package/src/Socket/index.ts +13 -0
  27. package/{lib → src}/Socket/messages-recv.js +211 -378
  28. package/src/Socket/messages-recv.ts +985 -0
  29. package/{lib → src}/Socket/messages-send.js +177 -452
  30. package/src/Socket/messages-send.ts +871 -0
  31. package/{lib → src}/Socket/newsletter.js +98 -107
  32. package/src/Socket/newsletter.ts +282 -0
  33. package/{lib → src}/Socket/registration.js +48 -56
  34. package/src/Socket/registration.ts +250 -0
  35. package/{lib → src}/Socket/socket.js +77 -77
  36. package/src/Socket/socket.ts +777 -0
  37. package/src/Store/index.ts +3 -0
  38. package/{lib → src}/Store/make-cache-manager-store.js +34 -25
  39. package/src/Store/make-cache-manager-store.ts +100 -0
  40. package/{lib → src}/Store/make-in-memory-store.js +32 -36
  41. package/src/Store/make-in-memory-store.ts +475 -0
  42. package/src/Store/make-ordered-dictionary.ts +86 -0
  43. package/{lib → src}/Store/object-repository.js +1 -1
  44. package/src/Store/object-repository.ts +32 -0
  45. package/src/Tests/test.app-state-sync.js +204 -0
  46. package/src/Tests/test.app-state-sync.ts +207 -0
  47. package/src/Tests/test.event-buffer.js +270 -0
  48. package/src/Tests/test.event-buffer.ts +319 -0
  49. package/src/Tests/test.key-store.js +76 -0
  50. package/src/Tests/test.key-store.ts +92 -0
  51. package/src/Tests/test.libsignal.js +141 -0
  52. package/src/Tests/test.libsignal.ts +186 -0
  53. package/src/Tests/test.media-download.js +93 -0
  54. package/src/Tests/test.media-download.ts +76 -0
  55. package/src/Tests/test.messages.js +33 -0
  56. package/src/Tests/test.messages.ts +37 -0
  57. package/src/Tests/utils.js +34 -0
  58. package/src/Tests/utils.ts +36 -0
  59. package/src/Types/Auth.ts +113 -0
  60. package/src/Types/Call.ts +15 -0
  61. package/src/Types/Chat.ts +106 -0
  62. package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
  63. package/src/Types/Events.ts +93 -0
  64. package/src/Types/GroupMetadata.ts +53 -0
  65. package/src/Types/Label.ts +36 -0
  66. package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
  67. package/src/Types/Message.ts +288 -0
  68. package/src/Types/Newsletter.ts +98 -0
  69. package/src/Types/Product.ts +85 -0
  70. package/src/Types/Signal.ts +68 -0
  71. package/{lib/Types/Socket.d.ts → src/Types/Socket.ts} +68 -61
  72. package/src/Types/State.ts +29 -0
  73. package/src/Types/index.ts +59 -0
  74. package/{lib → src}/Utils/auth-utils.js +90 -73
  75. package/src/Utils/auth-utils.ts +222 -0
  76. package/src/Utils/baileys-event-stream.js +92 -0
  77. package/src/Utils/baileys-event-stream.ts +66 -0
  78. package/{lib → src}/Utils/business.js +43 -15
  79. package/src/Utils/business.ts +275 -0
  80. package/{lib → src}/Utils/chat-utils.js +94 -87
  81. package/src/Utils/chat-utils.ts +860 -0
  82. package/{lib → src}/Utils/crypto.js +2 -4
  83. package/src/Utils/crypto.ts +131 -0
  84. package/src/Utils/decode-wa-message.js +211 -0
  85. package/src/Utils/decode-wa-message.ts +228 -0
  86. package/{lib → src}/Utils/event-buffer.js +13 -4
  87. package/src/Utils/event-buffer.ts +613 -0
  88. package/{lib → src}/Utils/generics.js +86 -67
  89. package/src/Utils/generics.ts +434 -0
  90. package/{lib → src}/Utils/history.js +39 -13
  91. package/src/Utils/history.ts +112 -0
  92. package/src/Utils/index.ts +17 -0
  93. package/{lib → src}/Utils/link-preview.js +54 -17
  94. package/src/Utils/link-preview.ts +122 -0
  95. package/src/Utils/logger.ts +3 -0
  96. package/src/Utils/lt-hash.ts +61 -0
  97. package/{lib → src}/Utils/make-mutex.js +13 -4
  98. package/src/Utils/make-mutex.ts +44 -0
  99. package/{lib → src}/Utils/messages-media.js +255 -193
  100. package/src/Utils/messages-media.ts +847 -0
  101. package/{lib → src}/Utils/messages.js +118 -588
  102. package/src/Utils/messages.ts +956 -0
  103. package/src/Utils/noise-handler.ts +197 -0
  104. package/{lib → src}/Utils/process-message.js +30 -27
  105. package/src/Utils/process-message.ts +414 -0
  106. package/{lib → src}/Utils/signal.js +42 -25
  107. package/src/Utils/signal.ts +177 -0
  108. package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -27
  109. package/src/Utils/use-multi-file-auth-state.ts +90 -0
  110. package/{lib → src}/Utils/validate-connection.js +9 -40
  111. package/src/Utils/validate-connection.ts +238 -0
  112. package/src/WABinary/constants.ts +42 -0
  113. package/src/WABinary/decode.ts +265 -0
  114. package/{lib → src}/WABinary/encode.js +10 -16
  115. package/src/WABinary/encode.ts +236 -0
  116. package/src/WABinary/generic-utils.ts +121 -0
  117. package/src/WABinary/index.ts +5 -0
  118. package/src/WABinary/jid-utils.ts +68 -0
  119. package/src/WABinary/types.ts +17 -0
  120. package/src/WAM/BinaryInfo.ts +12 -0
  121. package/src/WAM/constants.ts +15382 -0
  122. package/src/WAM/encode.ts +174 -0
  123. package/src/WAM/index.ts +3 -0
  124. package/{lib → src}/index.js +0 -1
  125. package/src/index.ts +13 -0
  126. package/README.md +0 -1645
  127. package/lib/Defaults/baileys-version.json +0 -3
  128. package/lib/Defaults/index.d.ts +0 -284
  129. package/lib/Signal/libsignal.d.ts +0 -3
  130. package/lib/Signal/libsignal.js +0 -161
  131. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -15
  132. package/lib/Socket/Client/index.d.ts +0 -2
  133. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -12
  134. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  135. package/lib/Socket/Client/types.d.ts +0 -17
  136. package/lib/Socket/Client/types.js +0 -13
  137. package/lib/Socket/Client/websocket.d.ts +0 -12
  138. package/lib/Socket/Client/websocket.js +0 -62
  139. package/lib/Socket/business.d.ts +0 -170
  140. package/lib/Socket/chats.d.ts +0 -81
  141. package/lib/Socket/groups.d.ts +0 -115
  142. package/lib/Socket/index.d.ts +0 -172
  143. package/lib/Socket/messages-recv.d.ts +0 -158
  144. package/lib/Socket/messages-send.d.ts +0 -155
  145. package/lib/Socket/newsletter.d.ts +0 -132
  146. package/lib/Socket/registration.d.ts +0 -264
  147. package/lib/Socket/socket.d.ts +0 -44
  148. package/lib/Socket/usync.d.ts +0 -37
  149. package/lib/Socket/usync.js +0 -70
  150. package/lib/Store/index.d.ts +0 -3
  151. package/lib/Store/make-cache-manager-store.d.ts +0 -14
  152. package/lib/Store/make-in-memory-store.d.ts +0 -118
  153. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  154. package/lib/Store/object-repository.d.ts +0 -10
  155. package/lib/Types/Auth.d.ts +0 -109
  156. package/lib/Types/Call.d.ts +0 -13
  157. package/lib/Types/Chat.d.ts +0 -107
  158. package/lib/Types/Events.d.ts +0 -172
  159. package/lib/Types/GroupMetadata.d.ts +0 -56
  160. package/lib/Types/Label.d.ts +0 -46
  161. package/lib/Types/Message.d.ts +0 -433
  162. package/lib/Types/Newsletter.d.ts +0 -92
  163. package/lib/Types/Product.d.ts +0 -78
  164. package/lib/Types/Signal.d.ts +0 -57
  165. package/lib/Types/State.d.ts +0 -27
  166. package/lib/Types/USync.d.ts +0 -25
  167. package/lib/Types/USync.js +0 -2
  168. package/lib/Types/index.d.ts +0 -66
  169. package/lib/Utils/auth-utils.d.ts +0 -18
  170. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  171. package/lib/Utils/baileys-event-stream.js +0 -63
  172. package/lib/Utils/business.d.ts +0 -22
  173. package/lib/Utils/chat-utils.d.ts +0 -70
  174. package/lib/Utils/crypto.d.ts +0 -40
  175. package/lib/Utils/decode-wa-message.d.ts +0 -36
  176. package/lib/Utils/decode-wa-message.js +0 -226
  177. package/lib/Utils/event-buffer.d.ts +0 -35
  178. package/lib/Utils/generics.d.ts +0 -88
  179. package/lib/Utils/history.d.ts +0 -19
  180. package/lib/Utils/index.d.ts +0 -17
  181. package/lib/Utils/link-preview.d.ts +0 -21
  182. package/lib/Utils/logger.d.ts +0 -2
  183. package/lib/Utils/lt-hash.d.ts +0 -12
  184. package/lib/Utils/make-mutex.d.ts +0 -7
  185. package/lib/Utils/messages-media.d.ts +0 -113
  186. package/lib/Utils/messages.d.ts +0 -77
  187. package/lib/Utils/noise-handler.d.ts +0 -20
  188. package/lib/Utils/process-message.d.ts +0 -41
  189. package/lib/Utils/signal.d.ts +0 -33
  190. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  191. package/lib/Utils/validate-connection.d.ts +0 -11
  192. package/lib/WABinary/constants.d.ts +0 -27
  193. package/lib/WABinary/decode.d.ts +0 -6
  194. package/lib/WABinary/encode.d.ts +0 -2
  195. package/lib/WABinary/generic-utils.d.ts +0 -14
  196. package/lib/WABinary/index.d.ts +0 -5
  197. package/lib/WABinary/jid-utils.d.ts +0 -31
  198. package/lib/WABinary/types.d.ts +0 -18
  199. package/lib/WAM/BinaryInfo.d.ts +0 -8
  200. package/lib/WAM/constants.d.ts +0 -38
  201. package/lib/WAM/encode.d.ts +0 -2
  202. package/lib/WAM/index.d.ts +0 -3
  203. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  204. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -32
  205. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  206. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -57
  207. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  208. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -30
  209. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  210. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -42
  211. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  212. package/lib/WAUSync/Protocols/index.js +0 -20
  213. package/lib/WAUSync/USyncQuery.d.ts +0 -26
  214. package/lib/WAUSync/USyncQuery.js +0 -79
  215. package/lib/WAUSync/USyncUser.d.ts +0 -10
  216. package/lib/WAUSync/USyncUser.js +0 -22
  217. package/lib/WAUSync/index.d.ts +0 -3
  218. package/lib/WAUSync/index.js +0 -19
  219. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
  220. /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
  221. /package/{lib → src}/Store/index.js +0 -0
  222. /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
  223. /package/{lib → src}/Types/Auth.js +0 -0
  224. /package/{lib → src}/Types/Call.js +0 -0
  225. /package/{lib → src}/Types/Chat.js +0 -0
  226. /package/{lib → src}/Types/Contact.js +0 -0
  227. /package/{lib → src}/Types/Events.js +0 -0
  228. /package/{lib → src}/Types/GroupMetadata.js +0 -0
  229. /package/{lib → src}/Types/Label.js +0 -0
  230. /package/{lib → src}/Types/LabelAssociation.js +0 -0
  231. /package/{lib → src}/Types/Message.js +0 -0
  232. /package/{lib → src}/Types/Newsletter.js +0 -0
  233. /package/{lib → src}/Types/Product.js +0 -0
  234. /package/{lib → src}/Types/Signal.js +0 -0
  235. /package/{lib → src}/Types/Socket.js +0 -0
  236. /package/{lib → src}/Types/State.js +0 -0
  237. /package/{lib → src}/Types/index.js +0 -0
  238. /package/{lib → src}/Utils/index.js +0 -0
  239. /package/{lib → src}/Utils/logger.js +0 -0
  240. /package/{lib → src}/Utils/lt-hash.js +0 -0
  241. /package/{lib → src}/Utils/noise-handler.js +0 -0
  242. /package/{lib → src}/WABinary/constants.js +0 -0
  243. /package/{lib → src}/WABinary/decode.js +0 -0
  244. /package/{lib → src}/WABinary/generic-utils.js +0 -0
  245. /package/{lib → src}/WABinary/index.js +0 -0
  246. /package/{lib → src}/WABinary/jid-utils.js +0 -0
  247. /package/{lib → src}/WABinary/types.js +0 -0
  248. /package/{lib → src}/WAM/BinaryInfo.js +0 -0
  249. /package/{lib → src}/WAM/constants.js +0 -0
  250. /package/{lib → src}/WAM/encode.js +0 -0
  251. /package/{lib → src}/WAM/index.js +0 -0
  252. /package/{lib → src}/gifted +0 -0
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.extractGroupMetadata = exports.makeGroupsSocket = void 0;
4
13
  const WAProto_1 = require("../../WAProto");
@@ -9,21 +18,23 @@ const chats_1 = require("./chats");
9
18
  const makeGroupsSocket = (config) => {
10
19
  const sock = (0, chats_1.makeChatsSocket)(config);
11
20
  const { authState, ev, query, upsertMessage } = sock;
12
- const groupQuery = async (jid, type, content) => (query({
13
- tag: 'iq',
14
- attrs: {
15
- type,
16
- xmlns: 'w:g2',
17
- to: jid,
18
- },
19
- content
20
- }));
21
- const groupMetadata = async (jid) => {
22
- const result = await groupQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]);
21
+ const groupQuery = (jid, type, content) => __awaiter(void 0, void 0, void 0, function* () {
22
+ return (query({
23
+ tag: 'iq',
24
+ attrs: {
25
+ type,
26
+ xmlns: 'w:g2',
27
+ to: jid,
28
+ },
29
+ content
30
+ }));
31
+ });
32
+ const groupMetadata = (jid) => __awaiter(void 0, void 0, void 0, function* () {
33
+ const result = yield groupQuery(jid, 'get', [{ tag: 'query', attrs: { request: 'interactive' } }]);
23
34
  return (0, exports.extractGroupMetadata)(result);
24
- };
25
- const groupFetchAllParticipating = async () => {
26
- const result = await query({
35
+ });
36
+ const groupFetchAllParticipating = () => __awaiter(void 0, void 0, void 0, function* () {
37
+ const result = yield query({
27
38
  tag: 'iq',
28
39
  attrs: {
29
40
  to: '@g.us',
@@ -56,22 +67,18 @@ const makeGroupsSocket = (config) => {
56
67
  }
57
68
  sock.ev.emit('groups.update', Object.values(data));
58
69
  return data;
59
- };
60
- sock.ws.on('CB:ib,,dirty', async (node) => {
70
+ });
71
+ sock.ws.on('CB:ib,,dirty', (node) => __awaiter(void 0, void 0, void 0, function* () {
61
72
  const { attrs } = (0, WABinary_1.getBinaryNodeChild)(node, 'dirty');
62
73
  if (attrs.type !== 'groups') {
63
74
  return;
64
75
  }
65
- await groupFetchAllParticipating();
66
- await sock.cleanDirtyBits('groups');
67
- });
68
- return {
69
- ...sock,
70
- groupQuery,
71
- groupMetadata,
72
- groupCreate: async (subject, participants) => {
76
+ yield groupFetchAllParticipating();
77
+ yield sock.cleanDirtyBits('groups');
78
+ }));
79
+ return Object.assign(Object.assign({}, sock), { groupMetadata, groupCreate: (subject, participants) => __awaiter(void 0, void 0, void 0, function* () {
73
80
  const key = (0, Utils_1.generateMessageID)();
74
- const result = await groupQuery('@g.us', 'set', [
81
+ const result = yield groupQuery('@g.us', 'set', [
75
82
  {
76
83
  tag: 'create',
77
84
  attrs: {
@@ -85,9 +92,8 @@ const makeGroupsSocket = (config) => {
85
92
  }
86
93
  ]);
87
94
  return (0, exports.extractGroupMetadata)(result);
88
- },
89
- groupLeave: async (id) => {
90
- await groupQuery('@g.us', 'set', [
95
+ }), groupLeave: (id) => __awaiter(void 0, void 0, void 0, function* () {
96
+ yield groupQuery('@g.us', 'set', [
91
97
  {
92
98
  tag: 'leave',
93
99
  attrs: {},
@@ -96,18 +102,16 @@ const makeGroupsSocket = (config) => {
96
102
  ]
97
103
  }
98
104
  ]);
99
- },
100
- groupUpdateSubject: async (jid, subject) => {
101
- await groupQuery(jid, 'set', [
105
+ }), groupUpdateSubject: (jid, subject) => __awaiter(void 0, void 0, void 0, function* () {
106
+ yield groupQuery(jid, 'set', [
102
107
  {
103
108
  tag: 'subject',
104
109
  attrs: {},
105
110
  content: Buffer.from(subject, 'utf-8')
106
111
  }
107
112
  ]);
108
- },
109
- groupRequestParticipantsList: async (jid) => {
110
- const result = await groupQuery(jid, 'get', [
113
+ }), groupRequestParticipantsList: (jid) => __awaiter(void 0, void 0, void 0, function* () {
114
+ const result = yield groupQuery(jid, 'get', [
111
115
  {
112
116
  tag: 'membership_approval_requests',
113
117
  attrs: {}
@@ -116,9 +120,8 @@ const makeGroupsSocket = (config) => {
116
120
  const node = (0, WABinary_1.getBinaryNodeChild)(result, 'membership_approval_requests');
117
121
  const participants = (0, WABinary_1.getBinaryNodeChildren)(node, 'membership_approval_request');
118
122
  return participants.map(v => v.attrs);
119
- },
120
- groupRequestParticipantsUpdate: async (jid, participants, action) => {
121
- const result = await groupQuery(jid, 'set', [{
123
+ }), groupRequestParticipantsUpdate: (jid, participants, action) => __awaiter(void 0, void 0, void 0, function* () {
124
+ const result = yield groupQuery(jid, 'set', [{
122
125
  tag: 'membership_requests_action',
123
126
  attrs: {},
124
127
  content: [
@@ -138,9 +141,8 @@ const makeGroupsSocket = (config) => {
138
141
  return participantsAffected.map(p => {
139
142
  return { status: p.attrs.error || '200', jid: p.attrs.jid };
140
143
  });
141
- },
142
- groupParticipantsUpdate: async (jid, participants, action) => {
143
- const result = await groupQuery(jid, 'set', [
144
+ }), groupParticipantsUpdate: (jid, participants, action) => __awaiter(void 0, void 0, void 0, function* () {
145
+ const result = yield groupQuery(jid, 'set', [
144
146
  {
145
147
  tag: action,
146
148
  attrs: {},
@@ -155,47 +157,40 @@ const makeGroupsSocket = (config) => {
155
157
  return participantsAffected.map(p => {
156
158
  return { status: p.attrs.error || '200', jid: p.attrs.jid, content: p };
157
159
  });
158
- },
159
- groupUpdateDescription: async (jid, description) => {
160
+ }), groupUpdateDescription: (jid, description) => __awaiter(void 0, void 0, void 0, function* () {
160
161
  var _a;
161
- const metadata = await groupMetadata(jid);
162
+ const metadata = yield groupMetadata(jid);
162
163
  const prev = (_a = metadata.descId) !== null && _a !== void 0 ? _a : null;
163
- await groupQuery(jid, 'set', [
164
+ yield groupQuery(jid, 'set', [
164
165
  {
165
166
  tag: 'description',
166
- attrs: {
167
- ...(description ? { id: (0, Utils_1.generateMessageID)() } : { delete: 'true' }),
168
- ...(prev ? { prev } : {})
169
- },
167
+ attrs: Object.assign(Object.assign({}, (description ? { id: (0, Utils_1.generateMessageID)() } : { delete: 'true' })), (prev ? { prev } : {})),
170
168
  content: description ? [
171
169
  { tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }
172
170
  ] : undefined
173
171
  }
174
172
  ]);
175
- },
176
- groupInviteCode: async (jid) => {
177
- const result = await groupQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]);
173
+ }), groupInviteCode: (jid) => __awaiter(void 0, void 0, void 0, function* () {
174
+ const result = yield groupQuery(jid, 'get', [{ tag: 'invite', attrs: {} }]);
178
175
  const inviteNode = (0, WABinary_1.getBinaryNodeChild)(result, 'invite');
179
176
  return inviteNode === null || inviteNode === void 0 ? void 0 : inviteNode.attrs.code;
180
- },
181
- groupRevokeInvite: async (jid) => {
182
- const result = await groupQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]);
177
+ }), groupRevokeInvite: (jid) => __awaiter(void 0, void 0, void 0, function* () {
178
+ const result = yield groupQuery(jid, 'set', [{ tag: 'invite', attrs: {} }]);
183
179
  const inviteNode = (0, WABinary_1.getBinaryNodeChild)(result, 'invite');
184
180
  return inviteNode === null || inviteNode === void 0 ? void 0 : inviteNode.attrs.code;
185
- },
186
- groupAcceptInvite: async (code) => {
187
- const results = await groupQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]);
181
+ }), groupAcceptInvite: (code) => __awaiter(void 0, void 0, void 0, function* () {
182
+ const results = yield groupQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }]);
188
183
  const result = (0, WABinary_1.getBinaryNodeChild)(results, 'group');
189
184
  return result === null || result === void 0 ? void 0 : result.attrs.jid;
190
- },
185
+ }),
191
186
  /**
192
187
  * accept a GroupInviteMessage
193
188
  * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
194
189
  * @param inviteMessage the message to accept
195
190
  */
196
- groupAcceptInviteV4: ev.createBufferedFunction(async (key, inviteMessage) => {
191
+ groupAcceptInviteV4: ev.createBufferedFunction((key, inviteMessage) => __awaiter(void 0, void 0, void 0, function* () {
197
192
  key = typeof key === 'string' ? { remoteJid: key } : key;
198
- const results = await groupQuery(inviteMessage.groupJid, 'set', [{
193
+ const results = yield groupQuery(inviteMessage.groupJid, 'set', [{
199
194
  tag: 'accept',
200
195
  attrs: {
201
196
  code: inviteMessage.inviteCode,
@@ -222,7 +217,7 @@ const makeGroupsSocket = (config) => {
222
217
  ]);
223
218
  }
224
219
  // generate the group add message
225
- await upsertMessage({
220
+ yield upsertMessage({
226
221
  key: {
227
222
  remoteJid: inviteMessage.groupJid,
228
223
  id: (0, Utils_1.generateMessageID)(),
@@ -237,28 +232,21 @@ const makeGroupsSocket = (config) => {
237
232
  messageTimestamp: (0, Utils_1.unixTimestampSeconds)()
238
233
  }, 'notify');
239
234
  return results.attrs.from;
240
- }),
241
- groupGetInviteInfo: async (code) => {
242
- const results = await groupQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }]);
235
+ })), groupGetInviteInfo: (code) => __awaiter(void 0, void 0, void 0, function* () {
236
+ const results = yield groupQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }]);
243
237
  return (0, exports.extractGroupMetadata)(results);
244
- },
245
- groupToggleEphemeral: async (jid, ephemeralExpiration) => {
238
+ }), groupToggleEphemeral: (jid, ephemeralExpiration) => __awaiter(void 0, void 0, void 0, function* () {
246
239
  const content = ephemeralExpiration ?
247
240
  { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } } :
248
241
  { tag: 'not_ephemeral', attrs: {} };
249
- await groupQuery(jid, 'set', [content]);
250
- },
251
- groupSettingUpdate: async (jid, setting) => {
252
- await groupQuery(jid, 'set', [{ tag: setting, attrs: {} }]);
253
- },
254
- groupMemberAddMode: async (jid, mode) => {
255
- await groupQuery(jid, 'set', [{ tag: 'member_add_mode', attrs: {}, content: mode }]);
256
- },
257
- groupJoinApprovalMode: async (jid, mode) => {
258
- await groupQuery(jid, 'set', [{ tag: 'membership_approval_mode', attrs: {}, content: [{ tag: 'group_join', attrs: { state: mode } }] }]);
259
- },
260
- groupFetchAllParticipating
261
- };
242
+ yield groupQuery(jid, 'set', [content]);
243
+ }), groupSettingUpdate: (jid, setting) => __awaiter(void 0, void 0, void 0, function* () {
244
+ yield groupQuery(jid, 'set', [{ tag: setting, attrs: {} }]);
245
+ }), groupMemberAddMode: (jid, mode) => __awaiter(void 0, void 0, void 0, function* () {
246
+ yield groupQuery(jid, 'set', [{ tag: 'member_add_mode', attrs: {}, content: mode }]);
247
+ }), groupJoinApprovalMode: (jid, mode) => __awaiter(void 0, void 0, void 0, function* () {
248
+ yield groupQuery(jid, 'set', [{ tag: 'membership_approval_mode', attrs: {}, content: [{ tag: 'group_join', attrs: { state: mode } }] }]);
249
+ }), groupFetchAllParticipating });
262
250
  };
263
251
  exports.makeGroupsSocket = makeGroupsSocket;
264
252
  const extractGroupMetadata = (result) => {
@@ -297,7 +285,7 @@ const extractGroupMetadata = (result) => {
297
285
  admin: (attrs.type || null),
298
286
  };
299
287
  }),
300
- ephemeralDuration: eph ? +eph : 0
288
+ ephemeralDuration: eph ? +eph : undefined
301
289
  };
302
290
  return metadata;
303
291
  };
@@ -0,0 +1,356 @@
1
+ import { proto } from '../../WAProto'
2
+ import { GroupMetadata, GroupParticipant, ParticipantAction, SocketConfig, WAMessageKey, WAMessageStubType } from '../Types'
3
+ import { generateMessageID, unixTimestampSeconds } from '../Utils'
4
+ import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString, jidEncode, jidNormalizedUser } from '../WABinary'
5
+ import { makeChatsSocket } from './chats'
6
+
7
+ export const makeGroupsSocket = (config: SocketConfig) => {
8
+ const sock = makeChatsSocket(config)
9
+ const { authState, ev, query, upsertMessage } = sock
10
+
11
+ const groupQuery = async(jid: string, type: 'get' | 'set', content: BinaryNode[]) => (
12
+ query({
13
+ tag: 'iq',
14
+ attrs: {
15
+ type,
16
+ xmlns: 'w:g2',
17
+ to: jid,
18
+ },
19
+ content
20
+ })
21
+ )
22
+
23
+ const groupMetadata = async(jid: string) => {
24
+ const result = await groupQuery(
25
+ jid,
26
+ 'get',
27
+ [ { tag: 'query', attrs: { request: 'interactive' } } ]
28
+ )
29
+ return extractGroupMetadata(result)
30
+ }
31
+
32
+
33
+ const groupFetchAllParticipating = async() => {
34
+ const result = await query({
35
+ tag: 'iq',
36
+ attrs: {
37
+ to: '@g.us',
38
+ xmlns: 'w:g2',
39
+ type: 'get',
40
+ },
41
+ content: [
42
+ {
43
+ tag: 'participating',
44
+ attrs: { },
45
+ content: [
46
+ { tag: 'participants', attrs: { } },
47
+ { tag: 'description', attrs: { } }
48
+ ]
49
+ }
50
+ ]
51
+ })
52
+ const data: { [_: string]: GroupMetadata } = { }
53
+ const groupsChild = getBinaryNodeChild(result, 'groups')
54
+ if(groupsChild) {
55
+ const groups = getBinaryNodeChildren(groupsChild, 'group')
56
+ for(const groupNode of groups) {
57
+ const meta = extractGroupMetadata({
58
+ tag: 'result',
59
+ attrs: { },
60
+ content: [groupNode]
61
+ })
62
+ data[meta.id] = meta
63
+ }
64
+ }
65
+
66
+ sock.ev.emit('groups.update', Object.values(data))
67
+
68
+ return data
69
+ }
70
+
71
+ sock.ws.on('CB:ib,,dirty', async(node: BinaryNode) => {
72
+ const { attrs } = getBinaryNodeChild(node, 'dirty')!
73
+ if(attrs.type !== 'groups') {
74
+ return
75
+ }
76
+
77
+ await groupFetchAllParticipating()
78
+ await sock.cleanDirtyBits('groups')
79
+ })
80
+
81
+ return {
82
+ ...sock,
83
+ groupMetadata,
84
+ groupCreate: async(subject: string, participants: string[]) => {
85
+ const key = generateMessageID()
86
+ const result = await groupQuery(
87
+ '@g.us',
88
+ 'set',
89
+ [
90
+ {
91
+ tag: 'create',
92
+ attrs: {
93
+ subject,
94
+ key
95
+ },
96
+ content: participants.map(jid => ({
97
+ tag: 'participant',
98
+ attrs: { jid }
99
+ }))
100
+ }
101
+ ]
102
+ )
103
+ return extractGroupMetadata(result)
104
+ },
105
+ groupLeave: async(id: string) => {
106
+ await groupQuery(
107
+ '@g.us',
108
+ 'set',
109
+ [
110
+ {
111
+ tag: 'leave',
112
+ attrs: { },
113
+ content: [
114
+ { tag: 'group', attrs: { id } }
115
+ ]
116
+ }
117
+ ]
118
+ )
119
+ },
120
+ groupUpdateSubject: async(jid: string, subject: string) => {
121
+ await groupQuery(
122
+ jid,
123
+ 'set',
124
+ [
125
+ {
126
+ tag: 'subject',
127
+ attrs: { },
128
+ content: Buffer.from(subject, 'utf-8')
129
+ }
130
+ ]
131
+ )
132
+ },
133
+ groupRequestParticipantsList: async(jid: string) => {
134
+ const result = await groupQuery(
135
+ jid,
136
+ 'get',
137
+ [
138
+ {
139
+ tag: 'membership_approval_requests',
140
+ attrs: {}
141
+ }
142
+ ]
143
+ )
144
+ const node = getBinaryNodeChild(result, 'membership_approval_requests')
145
+ const participants = getBinaryNodeChildren(node, 'membership_approval_request')
146
+ return participants.map(v => v.attrs)
147
+ },
148
+ groupRequestParticipantsUpdate: async(jid: string, participants: string[], action: 'approve' | 'reject') => {
149
+ const result = await groupQuery(
150
+ jid,
151
+ 'set',
152
+ [{
153
+ tag: 'membership_requests_action',
154
+ attrs: {},
155
+ content: [
156
+ {
157
+ tag: action,
158
+ attrs: { },
159
+ content: participants.map(jid => ({
160
+ tag: 'participant',
161
+ attrs: { jid }
162
+ }))
163
+ }
164
+ ]
165
+ }]
166
+ )
167
+ const node = getBinaryNodeChild(result, 'membership_requests_action')
168
+ const nodeAction = getBinaryNodeChild(node, action)
169
+ const participantsAffected = getBinaryNodeChildren(nodeAction, 'participant')
170
+ return participantsAffected.map(p => {
171
+ return { status: p.attrs.error || '200', jid: p.attrs.jid }
172
+ })
173
+ },
174
+ groupParticipantsUpdate: async(
175
+ jid: string,
176
+ participants: string[],
177
+ action: ParticipantAction
178
+ ) => {
179
+ const result = await groupQuery(
180
+ jid,
181
+ 'set',
182
+ [
183
+ {
184
+ tag: action,
185
+ attrs: { },
186
+ content: participants.map(jid => ({
187
+ tag: 'participant',
188
+ attrs: { jid }
189
+ }))
190
+ }
191
+ ]
192
+ )
193
+ const node = getBinaryNodeChild(result, action)
194
+ const participantsAffected = getBinaryNodeChildren(node!, 'participant')
195
+ return participantsAffected.map(p => {
196
+ return { status: p.attrs.error || '200', jid: p.attrs.jid, content: p }
197
+ })
198
+ },
199
+ groupUpdateDescription: async(jid: string, description?: string) => {
200
+ const metadata = await groupMetadata(jid)
201
+ const prev = metadata.descId ?? null
202
+
203
+ await groupQuery(
204
+ jid,
205
+ 'set',
206
+ [
207
+ {
208
+ tag: 'description',
209
+ attrs: {
210
+ ...(description ? { id: generateMessageID() } : { delete: 'true' }),
211
+ ...(prev ? { prev } : {})
212
+ },
213
+ content: description ? [
214
+ { tag: 'body', attrs: {}, content: Buffer.from(description, 'utf-8') }
215
+ ] : undefined
216
+ }
217
+ ]
218
+ )
219
+ },
220
+ groupInviteCode: async(jid: string) => {
221
+ const result = await groupQuery(jid, 'get', [{ tag: 'invite', attrs: {} }])
222
+ const inviteNode = getBinaryNodeChild(result, 'invite')
223
+ return inviteNode?.attrs.code
224
+ },
225
+ groupRevokeInvite: async(jid: string) => {
226
+ const result = await groupQuery(jid, 'set', [{ tag: 'invite', attrs: {} }])
227
+ const inviteNode = getBinaryNodeChild(result, 'invite')
228
+ return inviteNode?.attrs.code
229
+ },
230
+ groupAcceptInvite: async(code: string) => {
231
+ const results = await groupQuery('@g.us', 'set', [{ tag: 'invite', attrs: { code } }])
232
+ const result = getBinaryNodeChild(results, 'group')
233
+ return result?.attrs.jid
234
+ },
235
+ /**
236
+ * accept a GroupInviteMessage
237
+ * @param key the key of the invite message, or optionally only provide the jid of the person who sent the invite
238
+ * @param inviteMessage the message to accept
239
+ */
240
+ groupAcceptInviteV4: ev.createBufferedFunction(async(key: string | WAMessageKey, inviteMessage: proto.Message.IGroupInviteMessage) => {
241
+ key = typeof key === 'string' ? { remoteJid: key } : key
242
+ const results = await groupQuery(inviteMessage.groupJid!, 'set', [{
243
+ tag: 'accept',
244
+ attrs: {
245
+ code: inviteMessage.inviteCode!,
246
+ expiration: inviteMessage.inviteExpiration!.toString(),
247
+ admin: key.remoteJid!
248
+ }
249
+ }])
250
+
251
+ // if we have the full message key
252
+ // update the invite message to be expired
253
+ if(key.id) {
254
+ // create new invite message that is expired
255
+ inviteMessage = proto.Message.GroupInviteMessage.fromObject(inviteMessage)
256
+ inviteMessage.inviteExpiration = 0
257
+ inviteMessage.inviteCode = ''
258
+ ev.emit('messages.update', [
259
+ {
260
+ key,
261
+ update: {
262
+ message: {
263
+ groupInviteMessage: inviteMessage
264
+ }
265
+ }
266
+ }
267
+ ])
268
+ }
269
+
270
+ // generate the group add message
271
+ await upsertMessage(
272
+ {
273
+ key: {
274
+ remoteJid: inviteMessage.groupJid,
275
+ id: generateMessageID(),
276
+ fromMe: false,
277
+ participant: key.remoteJid,
278
+ },
279
+ messageStubType: WAMessageStubType.GROUP_PARTICIPANT_ADD,
280
+ messageStubParameters: [
281
+ authState.creds.me!.id
282
+ ],
283
+ participant: key.remoteJid,
284
+ messageTimestamp: unixTimestampSeconds()
285
+ },
286
+ 'notify'
287
+ )
288
+
289
+ return results.attrs.from
290
+ }),
291
+ groupGetInviteInfo: async(code: string) => {
292
+ const results = await groupQuery('@g.us', 'get', [{ tag: 'invite', attrs: { code } }])
293
+ return extractGroupMetadata(results)
294
+ },
295
+ groupToggleEphemeral: async(jid: string, ephemeralExpiration: number) => {
296
+ const content: BinaryNode = ephemeralExpiration ?
297
+ { tag: 'ephemeral', attrs: { expiration: ephemeralExpiration.toString() } } :
298
+ { tag: 'not_ephemeral', attrs: { } }
299
+ await groupQuery(jid, 'set', [content])
300
+ },
301
+ groupSettingUpdate: async(jid: string, setting: 'announcement' | 'not_announcement' | 'locked' | 'unlocked') => {
302
+ await groupQuery(jid, 'set', [ { tag: setting, attrs: { } } ])
303
+ },
304
+ groupMemberAddMode: async(jid: string, mode: 'admin_add' | 'all_member_add') => {
305
+ await groupQuery(jid, 'set', [ { tag: 'member_add_mode', attrs: { }, content: mode } ])
306
+ },
307
+ groupJoinApprovalMode: async(jid: string, mode: 'on' | 'off') => {
308
+ await groupQuery(jid, 'set', [ { tag: 'membership_approval_mode', attrs: { }, content: [ { tag: 'group_join', attrs: { state: mode } } ] } ])
309
+ },
310
+ groupFetchAllParticipating
311
+ }
312
+ }
313
+
314
+
315
+ export const extractGroupMetadata = (result: BinaryNode) => {
316
+ const group = getBinaryNodeChild(result, 'group')!
317
+ const descChild = getBinaryNodeChild(group, 'description')
318
+ let desc: string | undefined
319
+ let descId: string | undefined
320
+ if(descChild) {
321
+ desc = getBinaryNodeChildString(descChild, 'body')
322
+ descId = descChild.attrs.id
323
+ }
324
+
325
+ const groupId = group.attrs.id.includes('@') ? group.attrs.id : jidEncode(group.attrs.id, 'g.us')
326
+ const eph = getBinaryNodeChild(group, 'ephemeral')?.attrs.expiration
327
+ const memberAddMode = getBinaryNodeChildString(group, 'member_add_mode') === 'all_member_add'
328
+ const metadata: GroupMetadata = {
329
+ id: groupId,
330
+ subject: group.attrs.subject,
331
+ subjectOwner: group.attrs.s_o,
332
+ subjectTime: +group.attrs.s_t,
333
+ size: getBinaryNodeChildren(group, 'participant').length,
334
+ creation: +group.attrs.creation,
335
+ owner: group.attrs.creator ? jidNormalizedUser(group.attrs.creator) : undefined,
336
+ desc,
337
+ descId,
338
+ linkedParent: getBinaryNodeChild(group, 'linked_parent')?.attrs.jid || undefined,
339
+ restrict: !!getBinaryNodeChild(group, 'locked'),
340
+ announce: !!getBinaryNodeChild(group, 'announcement'),
341
+ isCommunity: !!getBinaryNodeChild(group, 'parent'),
342
+ isCommunityAnnounce: !!getBinaryNodeChild(group, 'default_sub_group'),
343
+ joinApprovalMode: !!getBinaryNodeChild(group, 'membership_approval_mode'),
344
+ memberAddMode,
345
+ participants: getBinaryNodeChildren(group, 'participant').map(
346
+ ({ attrs }) => {
347
+ return {
348
+ id: attrs.jid,
349
+ admin: (attrs.type || null) as GroupParticipant['admin'],
350
+ }
351
+ }
352
+ ),
353
+ ephemeralDuration: eph ? +eph : undefined
354
+ }
355
+ return metadata
356
+ }
@@ -3,8 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const Defaults_1 = require("../Defaults");
4
4
  const registration_1 = require("./registration");
5
5
  // export the last socket layer
6
- const makeWASocket = (config) => ((0, registration_1.makeRegistrationSocket)({
7
- ...Defaults_1.DEFAULT_CONNECTION_CONFIG,
8
- ...config
9
- }));
6
+ const makeWASocket = (config) => ((0, registration_1.makeRegistrationSocket)(Object.assign(Object.assign({}, Defaults_1.DEFAULT_CONNECTION_CONFIG), config)));
10
7
  exports.default = makeWASocket;
@@ -0,0 +1,13 @@
1
+ import { DEFAULT_CONNECTION_CONFIG } from '../Defaults'
2
+ import { UserFacingSocketConfig } from '../Types'
3
+ import { makeRegistrationSocket as _makeSocket } from './registration'
4
+
5
+ // export the last socket layer
6
+ const makeWASocket = (config: UserFacingSocketConfig) => (
7
+ _makeSocket({
8
+ ...DEFAULT_CONNECTION_CONFIG,
9
+ ...config
10
+ })
11
+ )
12
+
13
+ export default makeWASocket