gifted-baileys 1.5.5 → 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 (251) hide show
  1. package/README.md +6 -1642
  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/Signal/libsignal.js +0 -180
  136. package/src/Signal/libsignal.ts +0 -141
  137. package/src/Socket/Client/abstract-socket-client.ts +0 -19
  138. package/src/Socket/Client/index.ts +0 -3
  139. package/src/Socket/Client/mobile-socket-client.js +0 -78
  140. package/src/Socket/Client/mobile-socket-client.ts +0 -66
  141. package/src/Socket/Client/web-socket-client.js +0 -75
  142. package/src/Socket/Client/web-socket-client.ts +0 -57
  143. package/src/Socket/business.ts +0 -281
  144. package/src/Socket/chats.ts +0 -1030
  145. package/src/Socket/groups.ts +0 -356
  146. package/src/Socket/index.ts +0 -13
  147. package/src/Socket/messages-recv.ts +0 -985
  148. package/src/Socket/messages-send.ts +0 -871
  149. package/src/Socket/newsletter.ts +0 -282
  150. package/src/Socket/registration.ts +0 -250
  151. package/src/Socket/socket.ts +0 -777
  152. package/src/Store/index.ts +0 -3
  153. package/src/Store/make-cache-manager-store.ts +0 -100
  154. package/src/Store/make-in-memory-store.ts +0 -475
  155. package/src/Store/make-ordered-dictionary.ts +0 -86
  156. package/src/Store/object-repository.ts +0 -32
  157. package/src/Tests/test.app-state-sync.js +0 -204
  158. package/src/Tests/test.app-state-sync.ts +0 -207
  159. package/src/Tests/test.event-buffer.js +0 -270
  160. package/src/Tests/test.event-buffer.ts +0 -319
  161. package/src/Tests/test.key-store.js +0 -76
  162. package/src/Tests/test.key-store.ts +0 -92
  163. package/src/Tests/test.libsignal.js +0 -141
  164. package/src/Tests/test.libsignal.ts +0 -186
  165. package/src/Tests/test.media-download.js +0 -93
  166. package/src/Tests/test.media-download.ts +0 -76
  167. package/src/Tests/test.messages.js +0 -33
  168. package/src/Tests/test.messages.ts +0 -37
  169. package/src/Tests/utils.js +0 -34
  170. package/src/Tests/utils.ts +0 -36
  171. package/src/Types/Auth.ts +0 -113
  172. package/src/Types/Call.ts +0 -15
  173. package/src/Types/Chat.ts +0 -106
  174. package/src/Types/Events.ts +0 -93
  175. package/src/Types/GroupMetadata.ts +0 -53
  176. package/src/Types/Label.ts +0 -36
  177. package/src/Types/Message.ts +0 -288
  178. package/src/Types/Newsletter.ts +0 -98
  179. package/src/Types/Product.ts +0 -85
  180. package/src/Types/Signal.ts +0 -68
  181. package/src/Types/State.ts +0 -29
  182. package/src/Types/index.ts +0 -59
  183. package/src/Utils/auth-utils.ts +0 -222
  184. package/src/Utils/baileys-event-stream.js +0 -92
  185. package/src/Utils/baileys-event-stream.ts +0 -66
  186. package/src/Utils/business.ts +0 -275
  187. package/src/Utils/chat-utils.ts +0 -860
  188. package/src/Utils/crypto.ts +0 -131
  189. package/src/Utils/decode-wa-message.js +0 -211
  190. package/src/Utils/decode-wa-message.ts +0 -228
  191. package/src/Utils/event-buffer.ts +0 -613
  192. package/src/Utils/generics.ts +0 -434
  193. package/src/Utils/history.ts +0 -112
  194. package/src/Utils/index.ts +0 -17
  195. package/src/Utils/link-preview.ts +0 -122
  196. package/src/Utils/logger.ts +0 -3
  197. package/src/Utils/lt-hash.ts +0 -61
  198. package/src/Utils/make-mutex.ts +0 -44
  199. package/src/Utils/messages-media.ts +0 -847
  200. package/src/Utils/messages.ts +0 -956
  201. package/src/Utils/noise-handler.ts +0 -197
  202. package/src/Utils/process-message.ts +0 -414
  203. package/src/Utils/signal.ts +0 -177
  204. package/src/Utils/use-multi-file-auth-state.ts +0 -90
  205. package/src/Utils/validate-connection.ts +0 -238
  206. package/src/WABinary/constants.ts +0 -42
  207. package/src/WABinary/decode.ts +0 -265
  208. package/src/WABinary/encode.ts +0 -236
  209. package/src/WABinary/generic-utils.ts +0 -121
  210. package/src/WABinary/index.ts +0 -5
  211. package/src/WABinary/jid-utils.ts +0 -68
  212. package/src/WABinary/types.ts +0 -17
  213. package/src/WAM/BinaryInfo.ts +0 -12
  214. package/src/WAM/constants.ts +0 -15382
  215. package/src/WAM/encode.ts +0 -174
  216. package/src/WAM/index.ts +0 -3
  217. package/src/gifted +0 -1
  218. package/src/index.ts +0 -13
  219. /package/{src → lib}/Defaults/phonenumber-mcc.json +0 -0
  220. /package/{src → lib}/Socket/Client/abstract-socket-client.js +0 -0
  221. /package/{src → lib}/Store/index.js +0 -0
  222. /package/{src → lib}/Store/make-ordered-dictionary.js +0 -0
  223. /package/{src → lib}/Types/Auth.js +0 -0
  224. /package/{src → lib}/Types/Call.js +0 -0
  225. /package/{src → lib}/Types/Chat.js +0 -0
  226. /package/{src → lib}/Types/Contact.js +0 -0
  227. /package/{src → lib}/Types/Events.js +0 -0
  228. /package/{src → lib}/Types/GroupMetadata.js +0 -0
  229. /package/{src → lib}/Types/Label.js +0 -0
  230. /package/{src → lib}/Types/LabelAssociation.js +0 -0
  231. /package/{src → lib}/Types/Message.js +0 -0
  232. /package/{src → lib}/Types/Newsletter.js +0 -0
  233. /package/{src → lib}/Types/Product.js +0 -0
  234. /package/{src → lib}/Types/Signal.js +0 -0
  235. /package/{src → lib}/Types/Socket.js +0 -0
  236. /package/{src → lib}/Types/State.js +0 -0
  237. /package/{src/WABinary/types.js → lib/Types/USync.js} +0 -0
  238. /package/{src → lib}/Types/index.js +0 -0
  239. /package/{src → lib}/Utils/index.js +0 -0
  240. /package/{src → lib}/Utils/logger.js +0 -0
  241. /package/{src → lib}/Utils/lt-hash.js +0 -0
  242. /package/{src → lib}/Utils/noise-handler.js +0 -0
  243. /package/{src → lib}/WABinary/constants.js +0 -0
  244. /package/{src → lib}/WABinary/decode.js +0 -0
  245. /package/{src → lib}/WABinary/generic-utils.js +0 -0
  246. /package/{src → lib}/WABinary/index.js +0 -0
  247. /package/{src → lib}/WABinary/jid-utils.js +0 -0
  248. /package/{src → lib}/WAM/BinaryInfo.js +0 -0
  249. /package/{src → lib}/WAM/constants.js +0 -0
  250. /package/{src → lib}/WAM/encode.js +0 -0
  251. /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
- }