gifted-baileys 1.5.6 → 1.5.7

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/README.md +9 -0
  2. package/WAProto/WAProto.proto +969 -88
  3. package/WAProto/index.d.ts +13199 -1260
  4. package/WAProto/index.js +124901 -74525
  5. package/lib/Defaults/baileys-version.json +3 -0
  6. package/lib/Defaults/index.d.ts +284 -0
  7. package/{src → lib}/Defaults/index.js +7 -14
  8. package/lib/Signal/libsignal.d.ts +3 -0
  9. package/lib/Signal/libsignal.js +161 -0
  10. package/lib/Socket/Client/abstract-socket-client.d.ts +15 -0
  11. package/lib/Socket/Client/index.d.ts +2 -0
  12. package/{src → lib}/Socket/Client/index.js +2 -3
  13. package/lib/Socket/Client/mobile-socket-client.d.ts +12 -0
  14. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  15. package/lib/Socket/Client/types.d.ts +17 -0
  16. package/lib/Socket/Client/types.js +13 -0
  17. package/lib/Socket/Client/websocket.d.ts +12 -0
  18. package/lib/Socket/Client/websocket.js +62 -0
  19. package/lib/Socket/business.d.ts +170 -0
  20. package/{src → lib}/Socket/business.js +28 -33
  21. package/lib/Socket/chats.d.ts +81 -0
  22. package/{src → lib}/Socket/chats.js +174 -176
  23. package/lib/Socket/groups.d.ts +115 -0
  24. package/{src → lib}/Socket/groups.js +80 -68
  25. package/lib/Socket/index.d.ts +172 -0
  26. package/{src → lib}/Socket/index.js +4 -1
  27. package/lib/Socket/messages-recv.d.ts +158 -0
  28. package/{src → lib}/Socket/messages-recv.js +378 -211
  29. package/lib/Socket/messages-send.d.ts +155 -0
  30. package/{src → lib}/Socket/messages-send.js +452 -177
  31. package/lib/Socket/newsletter.d.ts +132 -0
  32. package/{src → lib}/Socket/newsletter.js +107 -98
  33. package/lib/Socket/registration.d.ts +264 -0
  34. package/{src → lib}/Socket/registration.js +56 -48
  35. package/lib/Socket/socket.d.ts +44 -0
  36. package/{src → lib}/Socket/socket.js +77 -77
  37. package/lib/Socket/usync.d.ts +37 -0
  38. package/lib/Socket/usync.js +70 -0
  39. package/lib/Store/index.d.ts +3 -0
  40. package/lib/Store/make-cache-manager-store.d.ts +14 -0
  41. package/{src → lib}/Store/make-cache-manager-store.js +25 -34
  42. package/lib/Store/make-in-memory-store.d.ts +118 -0
  43. package/{src → lib}/Store/make-in-memory-store.js +36 -32
  44. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  45. package/lib/Store/object-repository.d.ts +10 -0
  46. package/{src → lib}/Store/object-repository.js +1 -1
  47. package/lib/Types/Auth.d.ts +109 -0
  48. package/lib/Types/Call.d.ts +13 -0
  49. package/lib/Types/Chat.d.ts +107 -0
  50. package/{src/Types/Contact.ts → lib/Types/Contact.d.ts} +8 -9
  51. package/lib/Types/Events.d.ts +172 -0
  52. package/lib/Types/GroupMetadata.d.ts +56 -0
  53. package/lib/Types/Label.d.ts +46 -0
  54. package/{src/Types/LabelAssociation.ts → lib/Types/LabelAssociation.d.ts} +16 -22
  55. package/lib/Types/Message.d.ts +433 -0
  56. package/lib/Types/Newsletter.d.ts +92 -0
  57. package/lib/Types/Product.d.ts +78 -0
  58. package/lib/Types/Signal.d.ts +57 -0
  59. package/{src/Types/Socket.ts → lib/Types/Socket.d.ts} +61 -68
  60. package/lib/Types/State.d.ts +27 -0
  61. package/lib/Types/USync.d.ts +25 -0
  62. package/lib/Types/index.d.ts +66 -0
  63. package/lib/Utils/auth-utils.d.ts +18 -0
  64. package/{src → lib}/Utils/auth-utils.js +73 -90
  65. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  66. package/lib/Utils/baileys-event-stream.js +63 -0
  67. package/lib/Utils/business.d.ts +22 -0
  68. package/{src → lib}/Utils/business.js +15 -43
  69. package/lib/Utils/chat-utils.d.ts +70 -0
  70. package/{src → lib}/Utils/chat-utils.js +87 -94
  71. package/lib/Utils/crypto.d.ts +40 -0
  72. package/{src → lib}/Utils/crypto.js +4 -2
  73. package/lib/Utils/decode-wa-message.d.ts +36 -0
  74. package/lib/Utils/decode-wa-message.js +226 -0
  75. package/lib/Utils/event-buffer.d.ts +35 -0
  76. package/{src → lib}/Utils/event-buffer.js +4 -13
  77. package/lib/Utils/generics.d.ts +88 -0
  78. package/{src → lib}/Utils/generics.js +67 -86
  79. package/lib/Utils/history.d.ts +19 -0
  80. package/{src → lib}/Utils/history.js +13 -39
  81. package/lib/Utils/index.d.ts +17 -0
  82. package/lib/Utils/link-preview.d.ts +21 -0
  83. package/{src → lib}/Utils/link-preview.js +17 -54
  84. package/lib/Utils/logger.d.ts +2 -0
  85. package/lib/Utils/lt-hash.d.ts +12 -0
  86. package/lib/Utils/make-mutex.d.ts +7 -0
  87. package/{src → lib}/Utils/make-mutex.js +4 -13
  88. package/lib/Utils/messages-media.d.ts +113 -0
  89. package/{src → lib}/Utils/messages-media.js +193 -255
  90. package/lib/Utils/messages.d.ts +77 -0
  91. package/{src → lib}/Utils/messages.js +588 -118
  92. package/lib/Utils/noise-handler.d.ts +20 -0
  93. package/lib/Utils/process-message.d.ts +41 -0
  94. package/{src → lib}/Utils/process-message.js +27 -30
  95. package/lib/Utils/signal.d.ts +33 -0
  96. package/{src → lib}/Utils/signal.js +25 -42
  97. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  98. package/{src → lib}/Utils/use-multi-file-auth-state.js +27 -28
  99. package/lib/Utils/validate-connection.d.ts +11 -0
  100. package/{src → lib}/Utils/validate-connection.js +40 -9
  101. package/lib/WABinary/constants.d.ts +27 -0
  102. package/lib/WABinary/decode.d.ts +6 -0
  103. package/lib/WABinary/encode.d.ts +2 -0
  104. package/{src → lib}/WABinary/encode.js +16 -10
  105. package/lib/WABinary/generic-utils.d.ts +14 -0
  106. package/lib/WABinary/index.d.ts +5 -0
  107. package/lib/WABinary/jid-utils.d.ts +31 -0
  108. package/lib/WABinary/types.d.ts +18 -0
  109. package/lib/WABinary/types.js +2 -0
  110. package/lib/WAM/BinaryInfo.d.ts +8 -0
  111. package/lib/WAM/constants.d.ts +38 -0
  112. package/lib/WAM/encode.d.ts +2 -0
  113. package/lib/WAM/index.d.ts +3 -0
  114. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  115. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  116. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  117. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
  118. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  119. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  120. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  121. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  122. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  123. package/lib/WAUSync/Protocols/index.js +20 -0
  124. package/lib/WAUSync/USyncQuery.d.ts +26 -0
  125. package/lib/WAUSync/USyncQuery.js +79 -0
  126. package/lib/WAUSync/USyncUser.d.ts +10 -0
  127. package/lib/WAUSync/USyncUser.js +22 -0
  128. package/lib/WAUSync/index.d.ts +3 -0
  129. package/lib/WAUSync/index.js +19 -0
  130. package/{src → lib}/index.js +1 -0
  131. package/package.json +26 -8
  132. package/LICENSE +0 -21
  133. package/src/Defaults/baileys-version.json +0 -3
  134. package/src/Defaults/index.ts +0 -131
  135. package/src/README.md +0 -1
  136. package/src/Signal/libsignal.js +0 -180
  137. package/src/Signal/libsignal.ts +0 -141
  138. package/src/Socket/Client/abstract-socket-client.ts +0 -19
  139. package/src/Socket/Client/index.ts +0 -3
  140. package/src/Socket/Client/mobile-socket-client.js +0 -78
  141. package/src/Socket/Client/mobile-socket-client.ts +0 -66
  142. package/src/Socket/Client/web-socket-client.js +0 -75
  143. package/src/Socket/Client/web-socket-client.ts +0 -57
  144. package/src/Socket/business.ts +0 -281
  145. package/src/Socket/chats.ts +0 -1030
  146. package/src/Socket/groups.ts +0 -356
  147. package/src/Socket/index.ts +0 -13
  148. package/src/Socket/messages-recv.ts +0 -985
  149. package/src/Socket/messages-send.ts +0 -871
  150. package/src/Socket/newsletter.ts +0 -282
  151. package/src/Socket/registration.ts +0 -250
  152. package/src/Socket/socket.ts +0 -777
  153. package/src/Store/index.ts +0 -3
  154. package/src/Store/make-cache-manager-store.ts +0 -100
  155. package/src/Store/make-in-memory-store.ts +0 -475
  156. package/src/Store/make-ordered-dictionary.ts +0 -86
  157. package/src/Store/object-repository.ts +0 -32
  158. package/src/Tests/test.app-state-sync.js +0 -204
  159. package/src/Tests/test.app-state-sync.ts +0 -207
  160. package/src/Tests/test.event-buffer.js +0 -270
  161. package/src/Tests/test.event-buffer.ts +0 -319
  162. package/src/Tests/test.key-store.js +0 -76
  163. package/src/Tests/test.key-store.ts +0 -92
  164. package/src/Tests/test.libsignal.js +0 -141
  165. package/src/Tests/test.libsignal.ts +0 -186
  166. package/src/Tests/test.media-download.js +0 -93
  167. package/src/Tests/test.media-download.ts +0 -76
  168. package/src/Tests/test.messages.js +0 -33
  169. package/src/Tests/test.messages.ts +0 -37
  170. package/src/Tests/utils.js +0 -34
  171. package/src/Tests/utils.ts +0 -36
  172. package/src/Types/Auth.ts +0 -113
  173. package/src/Types/Call.ts +0 -15
  174. package/src/Types/Chat.ts +0 -106
  175. package/src/Types/Events.ts +0 -93
  176. package/src/Types/GroupMetadata.ts +0 -53
  177. package/src/Types/Label.ts +0 -36
  178. package/src/Types/Message.ts +0 -288
  179. package/src/Types/Newsletter.ts +0 -98
  180. package/src/Types/Product.ts +0 -85
  181. package/src/Types/Signal.ts +0 -68
  182. package/src/Types/State.ts +0 -29
  183. package/src/Types/index.ts +0 -59
  184. package/src/Utils/auth-utils.ts +0 -222
  185. package/src/Utils/baileys-event-stream.js +0 -92
  186. package/src/Utils/baileys-event-stream.ts +0 -66
  187. package/src/Utils/business.ts +0 -275
  188. package/src/Utils/chat-utils.ts +0 -860
  189. package/src/Utils/crypto.ts +0 -131
  190. package/src/Utils/decode-wa-message.js +0 -211
  191. package/src/Utils/decode-wa-message.ts +0 -228
  192. package/src/Utils/event-buffer.ts +0 -613
  193. package/src/Utils/generics.ts +0 -434
  194. package/src/Utils/history.ts +0 -112
  195. package/src/Utils/index.ts +0 -17
  196. package/src/Utils/link-preview.ts +0 -122
  197. package/src/Utils/logger.ts +0 -3
  198. package/src/Utils/lt-hash.ts +0 -61
  199. package/src/Utils/make-mutex.ts +0 -44
  200. package/src/Utils/messages-media.ts +0 -847
  201. package/src/Utils/messages.ts +0 -956
  202. package/src/Utils/noise-handler.ts +0 -197
  203. package/src/Utils/process-message.ts +0 -414
  204. package/src/Utils/signal.ts +0 -177
  205. package/src/Utils/use-multi-file-auth-state.ts +0 -90
  206. package/src/Utils/validate-connection.ts +0 -238
  207. package/src/WABinary/constants.ts +0 -42
  208. package/src/WABinary/decode.ts +0 -265
  209. package/src/WABinary/encode.ts +0 -236
  210. package/src/WABinary/generic-utils.ts +0 -121
  211. package/src/WABinary/index.ts +0 -5
  212. package/src/WABinary/jid-utils.ts +0 -68
  213. package/src/WABinary/types.ts +0 -17
  214. package/src/WAM/BinaryInfo.ts +0 -12
  215. package/src/WAM/constants.ts +0 -15382
  216. package/src/WAM/encode.ts +0 -174
  217. package/src/WAM/index.ts +0 -3
  218. package/src/gifted +0 -1
  219. package/src/index.ts +0 -13
  220. /package/{src → lib}/Defaults/phonenumber-mcc.json +0 -0
  221. /package/{src → lib}/Socket/Client/abstract-socket-client.js +0 -0
  222. /package/{src → lib}/Store/index.js +0 -0
  223. /package/{src → lib}/Store/make-ordered-dictionary.js +0 -0
  224. /package/{src → lib}/Types/Auth.js +0 -0
  225. /package/{src → lib}/Types/Call.js +0 -0
  226. /package/{src → lib}/Types/Chat.js +0 -0
  227. /package/{src → lib}/Types/Contact.js +0 -0
  228. /package/{src → lib}/Types/Events.js +0 -0
  229. /package/{src → lib}/Types/GroupMetadata.js +0 -0
  230. /package/{src → lib}/Types/Label.js +0 -0
  231. /package/{src → lib}/Types/LabelAssociation.js +0 -0
  232. /package/{src → lib}/Types/Message.js +0 -0
  233. /package/{src → lib}/Types/Newsletter.js +0 -0
  234. /package/{src → lib}/Types/Product.js +0 -0
  235. /package/{src → lib}/Types/Signal.js +0 -0
  236. /package/{src → lib}/Types/Socket.js +0 -0
  237. /package/{src → lib}/Types/State.js +0 -0
  238. /package/{src/WABinary/types.js → lib/Types/USync.js} +0 -0
  239. /package/{src → lib}/Types/index.js +0 -0
  240. /package/{src → lib}/Utils/index.js +0 -0
  241. /package/{src → lib}/Utils/logger.js +0 -0
  242. /package/{src → lib}/Utils/lt-hash.js +0 -0
  243. /package/{src → lib}/Utils/noise-handler.js +0 -0
  244. /package/{src → lib}/WABinary/constants.js +0 -0
  245. /package/{src → lib}/WABinary/decode.js +0 -0
  246. /package/{src → lib}/WABinary/generic-utils.js +0 -0
  247. /package/{src → lib}/WABinary/index.js +0 -0
  248. /package/{src → lib}/WABinary/jid-utils.js +0 -0
  249. /package/{src → lib}/WAM/BinaryInfo.js +0 -0
  250. /package/{src → lib}/WAM/constants.js +0 -0
  251. /package/{src → lib}/WAM/encode.js +0 -0
  252. /package/{src → lib}/WAM/index.js +0 -0
@@ -1,282 +0,0 @@
1
- import { NewsletterFetchedUpdate, NewsletterMetadata, NewsletterReaction, NewsletterReactionMode, NewsletterViewRole, QueryIds, SocketConfig, WAMediaUpload, XWAPaths } from '../Types'
2
- import { decryptMessageNode, generateMessageID, generateProfilePicture } from '../Utils'
3
- import { BinaryNode, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren, S_WHATSAPP_NET } from '../WABinary'
4
- import { makeGroupsSocket } from './groups'
5
-
6
- export const makeNewsletterSocket = (config: SocketConfig) => {
7
- const sock = makeGroupsSocket(config)
8
- const { authState, signalRepository, query, generateMessageTag } = sock
9
-
10
- const encoder = new TextEncoder()
11
-
12
- const newsletterQuery = async(jid: string, type: 'get' | 'set', content: BinaryNode[]) => (
13
- query({
14
- tag: 'iq',
15
- attrs: {
16
- id: generateMessageTag(),
17
- type,
18
- xmlns: 'newsletter',
19
- to: jid,
20
- },
21
- content
22
- })
23
- )
24
-
25
- const newsletterWMexQuery = async(jid: string | undefined, queryId: QueryIds, content?: object) => (
26
- query({
27
- tag: 'iq',
28
- attrs: {
29
- id: generateMessageTag(),
30
- type: 'get',
31
- xmlns: 'w:mex',
32
- to: S_WHATSAPP_NET,
33
- },
34
- content: [
35
- {
36
- tag: 'query',
37
- attrs: { 'query_id': queryId },
38
- content: encoder.encode(
39
- JSON.stringify({
40
- variables: {
41
- 'newsletter_id': jid,
42
- ...content
43
- }
44
- })
45
- )
46
- }
47
- ]
48
- })
49
- )
50
-
51
- const parseFetchedUpdates = async(node: BinaryNode, type: 'messages' | 'updates') => {
52
- let child
53
-
54
- if(type === 'messages') {
55
- child = getBinaryNodeChild(node, 'messages')
56
- } else {
57
- const parent = getBinaryNodeChild(node, 'message_updates')
58
- child = getBinaryNodeChild(parent, 'messages')
59
- }
60
-
61
- return await Promise.all(getAllBinaryNodeChildren(child).map(async messageNode => {
62
- messageNode.attrs.from = child?.attrs.jid as string
63
-
64
- const views = parseInt(getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0')
65
- const reactionNode = getBinaryNodeChild(messageNode, 'reactions')
66
- const reactions = getBinaryNodeChildren(reactionNode, 'reaction')
67
- .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code } as NewsletterReaction))
68
-
69
- const data: NewsletterFetchedUpdate = {
70
- 'server_id': messageNode.attrs.server_id,
71
- views,
72
- reactions
73
- }
74
-
75
- if(type === 'messages') {
76
- const { fullMessage: message, decrypt } = await decryptMessageNode(
77
- messageNode,
78
- authState.creds.me!.id,
79
- authState.creds.me!.lid || '',
80
- signalRepository,
81
- config.logger
82
- )
83
-
84
- await decrypt()
85
-
86
- data.message = message
87
- }
88
-
89
- return data
90
- }))
91
- }
92
-
93
- return {
94
- ...sock,
95
- subscribeNewsletterUpdates: async(jid: string) => {
96
- const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }])
97
-
98
- return getBinaryNodeChild(result, 'live_updates')?.attrs as {duration: string}
99
- },
100
-
101
- newsletterReactionMode: async(jid: string, mode: NewsletterReactionMode) => {
102
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
103
- updates: { settings: { 'reaction_codes': { value: mode } } }
104
- })
105
- },
106
-
107
- newsletterUpdateDescription: async(jid: string, description?: string) => {
108
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
109
- updates: { description: description || '', settings: null }
110
- })
111
- },
112
-
113
- newsletterUpdateName: async(jid: string, name: string) => {
114
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
115
- updates: { name, settings: null }
116
- })
117
- },
118
-
119
- newsletterUpdatePicture: async(jid: string, content: WAMediaUpload) => {
120
- const { img } = await generateProfilePicture(content)
121
-
122
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
123
- updates: { picture: img.toString('base64'), settings: null }
124
- })
125
- },
126
-
127
- newsletterRemovePicture: async(jid: string) => {
128
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
129
- updates: { picture: '', settings: null }
130
- })
131
- },
132
-
133
- newsletterUnfollow: async(jid: string) => {
134
- await newsletterWMexQuery(jid, QueryIds.UNFOLLOW)
135
- },
136
-
137
- newsletterFollow: async(jid: string) => {
138
- await newsletterWMexQuery(jid, QueryIds.FOLLOW)
139
- },
140
-
141
- newsletterUnmute: async(jid: string) => {
142
- await newsletterWMexQuery(jid, QueryIds.UNMUTE)
143
- },
144
-
145
- newsletterMute: async(jid: string) => {
146
- await newsletterWMexQuery(jid, QueryIds.MUTE)
147
- },
148
-
149
- newsletterAction: async(jid: string, type: 'follow' | 'unfollow' | 'mute' | 'unmute') => {
150
- await newsletterWMexQuery(jid, type.toUpperCase() as QueryIds)
151
- },
152
-
153
- newsletterCreate: async(name: string, description: string, reaction_codes: string) => {
154
- //TODO: Implement TOS system wide for Meta AI, communities, and here etc.
155
- /**tos query */
156
- await query({
157
- tag: 'iq',
158
- attrs: {
159
- to: S_WHATSAPP_NET,
160
- xmlns: 'tos',
161
- id: generateMessageTag(),
162
- type: 'set'
163
- },
164
- content: [
165
- {
166
- tag: 'notice',
167
- attrs: {
168
- id: '20601218',
169
- stage: '5'
170
- },
171
- content: []
172
- }
173
- ]
174
- })
175
- const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
176
- input: { name, description, settings: { 'reaction_codes': { value: reaction_codes.toUpperCase() } } }
177
- })
178
-
179
- return extractNewsletterMetadata(result, true)
180
- },
181
-
182
- newsletterMetadata: async(type: 'invite' | 'jid', key: string, role?: NewsletterViewRole) => {
183
- const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
184
- input: {
185
- key,
186
- type: type.toUpperCase(),
187
- 'view_role': role || 'GUEST'
188
- },
189
- 'fetch_viewer_metadata': true,
190
- 'fetch_full_image': true,
191
- 'fetch_creation_time': true
192
- })
193
-
194
- return extractNewsletterMetadata(result)
195
- },
196
-
197
- newsletterAdminCount: async(jid: string) => {
198
- const result = await newsletterWMexQuery(jid, QueryIds.ADMIN_COUNT)
199
-
200
- const buff = getBinaryNodeChild(result, 'result')?.content?.toString()
201
-
202
- return JSON.parse(buff!).data[XWAPaths.ADMIN_COUNT].admin_count as number
203
- },
204
-
205
- /**user is Lid, not Jid */
206
- newsletterChangeOwner: async(jid: string, user: string) => {
207
- await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
208
- 'user_id': user
209
- })
210
- },
211
-
212
- /**user is Lid, not Jid */
213
- newsletterDemote: async(jid: string, user: string) => {
214
- await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
215
- 'user_id': user
216
- })
217
- },
218
-
219
- newsletterDelete: async(jid: string) => {
220
- await newsletterWMexQuery(jid, QueryIds.DELETE)
221
- },
222
-
223
- /**if code wasn't passed, the reaction will be removed (if is reacted) */
224
- newsletterReactMessage: async(jid: string, serverId: string, code?: string) => {
225
- await query({
226
- tag: 'message',
227
- attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', 'server_id': serverId, id: generateMessageID() },
228
- content: [{
229
- tag: 'reaction',
230
- attrs: code ? { code } : {}
231
- }]
232
- })
233
- },
234
-
235
- newsletterFetchMessages: async(type: 'invite' | 'jid', key: string, count: number, after?: number) => {
236
- const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
237
- {
238
- tag: 'messages',
239
- attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: after?.toString() || '100' }
240
- }
241
- ])
242
-
243
- return await parseFetchedUpdates(result, 'messages')
244
- },
245
-
246
- newsletterFetchUpdates: async(jid: string, count: number, after?: number, since?: number) => {
247
- const result = await newsletterQuery(jid, 'get', [
248
- {
249
- tag: 'message_updates',
250
- attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
251
- }
252
- ])
253
-
254
- return await parseFetchedUpdates(result, 'updates')
255
- }
256
- }
257
- }
258
-
259
- export const extractNewsletterMetadata = (node: BinaryNode, isCreate?: boolean) => {
260
- const result = getBinaryNodeChild(node, 'result')?.content?.toString()
261
- const metadataPath = JSON.parse(result!).data[isCreate ? XWAPaths.CREATE : XWAPaths.NEWSLETTER]
262
-
263
- const metadata: NewsletterMetadata = {
264
- id: metadataPath.id,
265
- state: metadataPath.state.type,
266
- 'creation_time': +metadataPath.thread_metadata.creation_time,
267
- name: metadataPath.thread_metadata.name.text,
268
- nameTime: +metadataPath.thread_metadata.name.update_time,
269
- description: metadataPath.thread_metadata.description.text,
270
- descriptionTime: +metadataPath.thread_metadata.description.update_time,
271
- invite: metadataPath.thread_metadata.invite,
272
- handle: metadataPath.thread_metadata.handle,
273
- picture: metadataPath.thread_metadata.picture?.direct_path || null,
274
- preview: metadataPath.thread_metadata.preview?.direct_path || null,
275
- 'reaction_codes': metadataPath.thread_metadata?.settings?.reaction_codes?.value,
276
- subscribers: +metadataPath.thread_metadata.subscribers_count,
277
- verification: metadataPath.thread_metadata.verification,
278
- 'viewer_metadata': metadataPath.viewer_metadata
279
- }
280
-
281
- return metadata
282
- }
@@ -1,250 +0,0 @@
1
- /* eslint-disable camelcase */
2
- import axios, { AxiosRequestConfig } from 'axios'
3
- import { MOBILE_REGISTRATION_ENDPOINT, MOBILE_TOKEN, MOBILE_USERAGENT, REGISTRATION_PUBLIC_KEY } from '../Defaults'
4
- import { KeyPair, SignedKeyPair, SocketConfig } from '../Types'
5
- import { aesEncryptGCM, Curve, md5 } from '../Utils/crypto'
6
- import { jidEncode } from '../WABinary'
7
- import { makeBusinessSocket } from './business'
8
-
9
- function urlencode(str: string) {
10
- return str.replace(/-/g, '%2d').replace(/_/g, '%5f').replace(/~/g, '%7e')
11
- }
12
-
13
- const validRegistrationOptions = (config: RegistrationOptions) => config?.phoneNumberCountryCode &&
14
- config.phoneNumberNationalNumber &&
15
- config.phoneNumberMobileCountryCode
16
-
17
- export const makeRegistrationSocket = (config: SocketConfig) => {
18
- const sock = makeBusinessSocket(config)
19
-
20
- const register = async(code: string) => {
21
- if(!validRegistrationOptions(config.auth.creds.registration)) {
22
- throw new Error('please specify the registration options')
23
- }
24
-
25
- const result = await mobileRegister({ ...sock.authState.creds, ...sock.authState.creds.registration as RegistrationOptions, code }, config.options)
26
-
27
- sock.authState.creds.me = {
28
- id: jidEncode(result.login!, 's.whatsapp.net'),
29
- name: '~'
30
- }
31
-
32
- sock.authState.creds.registered = true
33
- sock.ev.emit('creds.update', sock.authState.creds)
34
-
35
- return result
36
- }
37
-
38
- const requestRegistrationCode = async(registrationOptions?: RegistrationOptions) => {
39
- registrationOptions = registrationOptions || config.auth.creds.registration
40
- if(!validRegistrationOptions(registrationOptions)) {
41
- throw new Error('Invalid registration options')
42
- }
43
-
44
- sock.authState.creds.registration = registrationOptions
45
-
46
- sock.ev.emit('creds.update', sock.authState.creds)
47
-
48
- return mobileRegisterCode({ ...config.auth.creds, ...registrationOptions }, config.options)
49
- }
50
-
51
- return {
52
- ...sock,
53
- register,
54
- requestRegistrationCode,
55
- }
56
- }
57
-
58
- // Backup_token: Base64.getEncoder().encodeToString(Arrays.copyOfRange(Base64.getDecoder().decode(UUID.randomUUID().toString().replace('-','')),0,15))
59
-
60
- export interface RegistrationData {
61
- registrationId: number
62
- signedPreKey: SignedKeyPair
63
- noiseKey: KeyPair
64
- signedIdentityKey: KeyPair
65
- identityId: Buffer
66
- phoneId: string
67
- deviceId: string
68
- backupToken: Buffer
69
- }
70
-
71
- export interface RegistrationOptions {
72
- /** your phone number */
73
- phoneNumber?: string
74
- /** the country code of your phone number */
75
- phoneNumberCountryCode: string
76
- /** your phone number without country code */
77
- phoneNumberNationalNumber: string
78
- /** the country code of your mobile network
79
- * @see {@link https://de.wikipedia.org/wiki/Mobile_Country_Code}
80
- */
81
- phoneNumberMobileCountryCode: string
82
- /** the network code of your mobile network
83
- * @see {@link https://de.wikipedia.org/wiki/Mobile_Network_Code}
84
- */
85
- phoneNumberMobileNetworkCode: string
86
- /**
87
- * How to send the one time code
88
- */
89
- method?: 'sms' | 'voice' | 'captcha'
90
- /**
91
- * The captcha code if it was requested
92
- */
93
- captcha?: string
94
- }
95
-
96
- export type RegistrationParams = RegistrationData & RegistrationOptions
97
-
98
- function convertBufferToUrlHex(buffer: Buffer) {
99
- var id = ''
100
-
101
- buffer.forEach((x) => {
102
- // encode random identity_id buffer as percentage url encoding
103
- id += `%${x.toString(16).padStart(2, '0').toLowerCase()}`
104
- })
105
-
106
- return id
107
- }
108
-
109
- export function registrationParams(params: RegistrationParams) {
110
- const e_regid = Buffer.alloc(4)
111
- e_regid.writeInt32BE(params.registrationId)
112
-
113
- const e_skey_id = Buffer.alloc(3)
114
- e_skey_id.writeInt16BE(params.signedPreKey.keyId)
115
-
116
- params.phoneNumberCountryCode = params.phoneNumberCountryCode.replace('+', '').trim()
117
- params.phoneNumberNationalNumber = params.phoneNumberNationalNumber.replace(/[/-\s)(]/g, '').trim()
118
-
119
- return {
120
- cc: params.phoneNumberCountryCode,
121
- in: params.phoneNumberNationalNumber,
122
- Rc: '0',
123
- lg: 'en',
124
- lc: 'GB',
125
- mistyped: '6',
126
- authkey: Buffer.from(params.noiseKey.public).toString('base64url'),
127
- e_regid: e_regid.toString('base64url'),
128
- e_keytype: 'BQ',
129
- e_ident: Buffer.from(params.signedIdentityKey.public).toString('base64url'),
130
- // e_skey_id: e_skey_id.toString('base64url'),
131
- e_skey_id: 'AAAA',
132
- e_skey_val: Buffer.from(params.signedPreKey.keyPair.public).toString('base64url'),
133
- e_skey_sig: Buffer.from(params.signedPreKey.signature).toString('base64url'),
134
- fdid: params.phoneId,
135
- network_ratio_type: '1',
136
- expid: params.deviceId,
137
- simnum: '1',
138
- hasinrc: '1',
139
- pid: Math.floor(Math.random() * 1000).toString(),
140
- id: convertBufferToUrlHex(params.identityId),
141
- backup_token: convertBufferToUrlHex(params.backupToken),
142
- token: md5(Buffer.concat([MOBILE_TOKEN, Buffer.from(params.phoneNumberNationalNumber)])).toString('hex'),
143
- fraud_checkpoint_code: params.captcha,
144
- }
145
- }
146
-
147
- /**
148
- * Requests a registration code for the given phone number.
149
- */
150
- export function mobileRegisterCode(params: RegistrationParams, fetchOptions?: AxiosRequestConfig) {
151
- return mobileRegisterFetch('/code', {
152
- params: {
153
- ...registrationParams(params),
154
- mcc: `${params.phoneNumberMobileCountryCode}`.padStart(3, '0'),
155
- mnc: `${params.phoneNumberMobileNetworkCode || '001'}`.padStart(3, '0'),
156
- sim_mcc: '000',
157
- sim_mnc: '000',
158
- method: params?.method || 'sms',
159
- reason: '',
160
- hasav: '1'
161
- },
162
- ...fetchOptions,
163
- })
164
- }
165
-
166
- export function mobileRegisterExists(params: RegistrationParams, fetchOptions?: AxiosRequestConfig) {
167
- return mobileRegisterFetch('/exist', {
168
- params: registrationParams(params),
169
- ...fetchOptions
170
- })
171
- }
172
-
173
- /**
174
- * Registers the phone number on whatsapp with the received OTP code.
175
- */
176
- export async function mobileRegister(params: RegistrationParams & { code: string }, fetchOptions?: AxiosRequestConfig) {
177
- //const result = await mobileRegisterFetch(`/reg_onboard_abprop?cc=${params.phoneNumberCountryCode}&in=${params.phoneNumberNationalNumber}&rc=0`)
178
-
179
- return mobileRegisterFetch('/register', {
180
- params: { ...registrationParams(params), code: params.code.replace('-', '') },
181
- ...fetchOptions,
182
- })
183
- }
184
-
185
- /**
186
- * Encrypts the given string as AEAD aes-256-gcm with the public whatsapp key and a random keypair.
187
- */
188
- export function mobileRegisterEncrypt(data: string) {
189
- const keypair = Curve.generateKeyPair()
190
- const key = Curve.sharedKey(keypair.private, REGISTRATION_PUBLIC_KEY)
191
-
192
- const buffer = aesEncryptGCM(Buffer.from(data), new Uint8Array(key), Buffer.alloc(12), Buffer.alloc(0))
193
-
194
- return Buffer.concat([Buffer.from(keypair.public), buffer]).toString('base64url')
195
- }
196
-
197
- export async function mobileRegisterFetch(path: string, opts: AxiosRequestConfig = {}) {
198
- let url = `${MOBILE_REGISTRATION_ENDPOINT}${path}`
199
-
200
- if(opts.params) {
201
- const parameter = [] as string[]
202
-
203
- for(const param in opts.params) {
204
- if(opts.params[param] !== null && opts.params[param] !== undefined) {
205
- parameter.push(param + '=' + urlencode(opts.params[param]))
206
- }
207
- }
208
-
209
- url += `?${parameter.join('&')}`
210
- delete opts.params
211
- }
212
-
213
- if(!opts.headers) {
214
- opts.headers = {}
215
- }
216
-
217
- opts.headers['User-Agent'] = MOBILE_USERAGENT
218
-
219
- const response = await axios(url, opts)
220
-
221
- var json = response.data
222
-
223
- if(response.status > 300 || json.reason) {
224
- throw json
225
- }
226
-
227
- if(json.status && !['ok', 'sent'].includes(json.status)) {
228
- throw json
229
- }
230
-
231
- return json as ExistsResponse
232
- }
233
-
234
-
235
- export interface ExistsResponse {
236
- status: 'fail' | 'sent'
237
- voice_length?: number
238
- voice_wait?: number
239
- sms_length?: number
240
- sms_wait?: number
241
- reason?: 'incorrect' | 'missing_param' | 'code_checkpoint'
242
- login?: string
243
- flash_type?: number
244
- ab_hash?: string
245
- ab_key?: string
246
- exp_cfg?: string
247
- lid?: string
248
- image_blob?: string
249
- audio_blob?: string
250
- }