@badzz88/baileys 8.5.4 → 8.5.5

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 (107) hide show
  1. package/README.md +1 -1
  2. package/WAProto/WAProto.proto +75 -1256
  3. package/WAProto/index.d.ts +19729 -36122
  4. package/WAProto/index.js +132193 -178538
  5. package/engine-requirements.js +15 -7
  6. package/lib/Defaults/index.js +14 -22
  7. package/lib/Signal/Group/group_cipher.js +5 -5
  8. package/lib/Signal/Group/keyhelper.js +4 -4
  9. package/lib/Signal/Group/sender-chain-key.js +2 -2
  10. package/lib/Signal/Group/sender-key-distribution-message.js +1 -1
  11. package/lib/Signal/Group/sender-key-message.js +3 -3
  12. package/lib/Signal/Group/sender-key-record.js +1 -1
  13. package/lib/Signal/Group/sender-message-key.js +5 -5
  14. package/lib/Signal/libsignal.js +28 -39
  15. package/lib/Signal/lid-mapping.js +8 -28
  16. package/lib/Socket/aigroups.js +5 -5
  17. package/lib/Socket/business.js +11 -3
  18. package/lib/Socket/chats.js +319 -668
  19. package/lib/Socket/communities.js +89 -85
  20. package/lib/Socket/graphql.js +228 -435
  21. package/lib/Socket/groups.js +211 -132
  22. package/lib/Socket/index.js +7 -9
  23. package/lib/Socket/interactive-handler.js +60 -117
  24. package/lib/Socket/interop.js +175 -56
  25. package/lib/Socket/luxu.js +387 -0
  26. package/lib/Socket/managed-account.js +48 -79
  27. package/lib/Socket/messages-recv.js +340 -898
  28. package/lib/Socket/messages-send.js +160 -462
  29. package/lib/Socket/mex.js +53 -40
  30. package/lib/Socket/newsletter.js +295 -291
  31. package/lib/Socket/privacy.js +265 -77
  32. package/lib/Socket/registration.js +157 -164
  33. package/lib/Socket/socket.js +199 -181
  34. package/lib/Socket/text-router.js +83 -0
  35. package/lib/Socket/username.js +227 -144
  36. package/lib/Store/keyed-db.js +108 -0
  37. package/lib/Store/make-cache-manager-store.js +2 -2
  38. package/lib/Store/make-in-memory-store.js +141 -25
  39. package/lib/Types/Auth.js +3 -3
  40. package/lib/Types/Label.js +1 -1
  41. package/lib/Types/LabelAssociation.js +1 -1
  42. package/lib/Types/Mex.js +112 -0
  43. package/lib/Types/Newsletter.js +65 -96
  44. package/lib/Types/State.js +4 -4
  45. package/lib/Types/index.js +1 -1
  46. package/lib/Utils/auth-utils.js +57 -52
  47. package/lib/Utils/browser-utils.js +1 -1
  48. package/lib/Utils/business.js +6 -2
  49. package/lib/Utils/chat-utils.js +38 -102
  50. package/lib/Utils/command-loader.d.ts +31 -0
  51. package/lib/Utils/command-loader.js +100 -0
  52. package/lib/Utils/companion-reg-client-utils.js +42 -0
  53. package/lib/Utils/crypto.js +84 -54
  54. package/lib/Utils/curve25519-js.js +275 -0
  55. package/lib/Utils/decode-wa-message.js +83 -316
  56. package/lib/Utils/event-buffer.js +61 -37
  57. package/lib/Utils/generics.js +103 -157
  58. package/lib/Utils/group-history.js +12 -3
  59. package/lib/Utils/history.js +15 -15
  60. package/lib/Utils/index.js +5 -1
  61. package/lib/Utils/link-preview.js +8 -3
  62. package/lib/Utils/lt-hash.js +35 -2
  63. package/lib/Utils/make-mutex.js +1 -1
  64. package/lib/Utils/message-retry-manager.js +92 -27
  65. package/lib/Utils/messages-media.js +130 -159
  66. package/lib/Utils/messages.js +566 -144
  67. package/lib/Utils/meta-ai-msmsg.js +202 -62
  68. package/lib/Utils/native-bridge.js +82 -0
  69. package/lib/Utils/noise-handler.js +21 -19
  70. package/lib/Utils/offline-node-processor.js +8 -3
  71. package/lib/Utils/pre-key-manager.js +23 -13
  72. package/lib/Utils/process-message.js +106 -197
  73. package/lib/Utils/reporting-utils.js +2 -2
  74. package/lib/Utils/session-pool.d.ts +16 -0
  75. package/lib/Utils/session-pool.js +94 -0
  76. package/lib/Utils/signal.js +63 -28
  77. package/lib/Utils/stanza-ack.js +12 -39
  78. package/lib/Utils/sticker.d.ts +17 -0
  79. package/lib/Utils/sticker.js +145 -0
  80. package/lib/Utils/sync-action-utils.js +7 -4
  81. package/lib/Utils/tc-token-utils.js +25 -20
  82. package/lib/Utils/use-multi-file-auth-state.js +14 -30
  83. package/lib/Utils/validate-connection.js +19 -59
  84. package/lib/Utils/view-once-cache.d.ts +9 -0
  85. package/lib/Utils/view-once-cache.js +79 -0
  86. package/lib/WABinary/decode.js +16 -50
  87. package/lib/WABinary/encode.js +224 -54
  88. package/lib/WABinary/generic-utils.js +97 -7
  89. package/lib/WABinary/jid-utils.js +14 -27
  90. package/lib/WAM/encode.js +7 -7
  91. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +1 -58
  92. package/lib/WAUSync/Protocols/USyncContactProtocol.js +1 -7
  93. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +5 -13
  94. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +4 -1
  95. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +7 -20
  96. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +1 -1
  97. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +2 -2
  98. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +2 -7
  99. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +1 -1
  100. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +1 -2
  101. package/lib/WAUSync/Protocols/index.js +0 -1
  102. package/lib/WAUSync/USyncQuery.js +6 -77
  103. package/lib/WAUSync/USyncUser.js +8 -16
  104. package/lib/WAUSync/index.js +0 -1
  105. package/lib/antiban.js +854 -608
  106. package/lib/index.js +1 -1
  107. package/package.json +20 -16
@@ -0,0 +1,387 @@
1
+ import { proto } from '../../WAProto/index.js'
2
+ import * as Utils from '../Utils/index.js'
3
+ import crypto from 'crypto'
4
+
5
+ export default class imup {
6
+ constructor(utils, waUploadToServer, relayMessageFn) {
7
+ this.utils = utils
8
+ this.relayMessage = relayMessageFn
9
+ this.waUploadToServer = waUploadToServer
10
+ }
11
+
12
+ detectType(content) {
13
+ if (content.requestPaymentMessage) return 'PAYMENT'
14
+ if (content.productMessage) return 'PRODUCT'
15
+ if (content.albumMessage) return 'ALBUM'
16
+ if (content.eventMessage) return 'EVENT'
17
+ if (content.pollResultMessage) return 'POLL_RESULT'
18
+ if (content.orderMessage) return 'ORDER'
19
+ if (content.groupStatus) return 'GROUP_STATUS'
20
+ if (content.groupLabel) return 'GROUP_LABEL'
21
+ return null
22
+ }
23
+
24
+ async handlePayment(content, quoted) {
25
+ const data = content.requestPaymentMessage
26
+ let notes = {}
27
+
28
+ if (data.sticker?.stickerMessage) {
29
+ notes = {
30
+ stickerMessage: {
31
+ ...data.sticker.stickerMessage,
32
+ contextInfo: {
33
+ stanzaId: quoted?.key?.id,
34
+ participant: quoted?.key?.participant || content.sender,
35
+ quotedMessage: quoted?.message
36
+ }
37
+ }
38
+ }
39
+ } else if (data.note) {
40
+ notes = {
41
+ extendedTextMessage: {
42
+ text: data.note,
43
+ contextInfo: {
44
+ stanzaId: quoted?.key?.id,
45
+ participant: quoted?.key?.participant || content.sender,
46
+ quotedMessage: quoted?.message
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ return {
53
+ requestPaymentMessage: proto.Message.RequestPaymentMessage.fromObject({
54
+ expiryTimestamp: data.expiry || 0,
55
+ amount1000: data.amount || 0,
56
+ currencyCodeIso4217: data.currency || "IDR",
57
+ requestFrom: data.from || "0@s.whatsapp.net",
58
+ noteMessage: notes,
59
+ background: data.background?? {
60
+ id: "DEFAULT",
61
+ placeholderArgb: 0xFFF0F0F0
62
+ }
63
+ })
64
+ }
65
+ }
66
+
67
+ async handleProduct(content, jid, quoted) {
68
+ const {
69
+ title,
70
+ description,
71
+ thumbnail,
72
+ productId,
73
+ retailerId,
74
+ url,
75
+ body = "",
76
+ footer = "",
77
+ buttons = [],
78
+ priceAmount1000 = null,
79
+ currencyCode = "IDR"
80
+ } = content.productMessage
81
+
82
+ let productImage
83
+
84
+ if (Buffer.isBuffer(thumbnail)) {
85
+ const { imageMessage } = await this.utils.generateWAMessageContent(
86
+ { image: thumbnail },
87
+ { upload: this.waUploadToServer }
88
+ )
89
+ productImage = imageMessage
90
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
91
+ const { imageMessage } = await this.utils.generateWAMessageContent(
92
+ { image: { url: thumbnail.url } },
93
+ { upload: this.waUploadToServer }
94
+ )
95
+ productImage = imageMessage
96
+ }
97
+
98
+ return {
99
+ viewOnceMessage: {
100
+ message: {
101
+ interactiveMessage: {
102
+ body: { text: body },
103
+ footer: { text: footer },
104
+ header: {
105
+ title,
106
+ hasMediaAttachment: true,
107
+ productMessage: {
108
+ product: {
109
+ productImage,
110
+ productId,
111
+ title,
112
+ description,
113
+ currencyCode,
114
+ priceAmount1000,
115
+ retailerId,
116
+ url,
117
+ productImageCount: 1
118
+ },
119
+ businessOwnerJid: "0@s.whatsapp.net"
120
+ }
121
+ },
122
+ nativeFlowMessage: { buttons }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ async handleAlbum(content, jid, quoted) {
130
+ const array = content.albumMessage
131
+ const album = await this.utils.generateWAMessageFromContent(jid, {
132
+ messageContextInfo: {
133
+ messageSecret: crypto.randomBytes(32),
134
+ },
135
+ albumMessage: {
136
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
137
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
138
+ },
139
+ }, {
140
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
141
+ quoted,
142
+ upload: this.waUploadToServer
143
+ })
144
+
145
+ await this.relayMessage(jid, album.message, {
146
+ messageId: album.key.id,
147
+ })
148
+
149
+ for (let content of array) {
150
+ const img = await this.utils.generateWAMessage(jid, content, {
151
+ upload: this.waUploadToServer,
152
+ })
153
+
154
+ img.message.messageContextInfo = {
155
+ messageSecret: crypto.randomBytes(32),
156
+ messageAssociation: {
157
+ associationType: 1,
158
+ parentMessageKey: album.key,
159
+ },
160
+ participant: "0@s.whatsapp.net",
161
+ remoteJid: "status@broadcast",
162
+ forwardingScore: 99999,
163
+ isForwarded: true,
164
+ mentionedJid: [jid],
165
+ starred: true,
166
+ labels: ["Y", "Important"],
167
+ isHighlighted: true,
168
+ businessMessageForwardInfo: {
169
+ businessOwnerJid: jid,
170
+ },
171
+ dataSharingContext: {
172
+ showMmDisclosure: true,
173
+ },
174
+ }
175
+
176
+ img.message.forwardedNewsletterMessageInfo = {
177
+ newsletterJid: "0@newsletter",
178
+ serverMessageId: 1,
179
+ newsletterName: `WhatsApp`,
180
+ contentType: 1,
181
+ timestamp: new Date().toISOString(),
182
+ senderName: "7-Yuukey",
183
+ contentType: "UPDATE_CARD",
184
+ priority: "high",
185
+ status: "sent",
186
+ }
187
+
188
+ img.message.disappearingMode = {
189
+ initiator: 3,
190
+ trigger: 4,
191
+ initiatorDeviceJid: jid,
192
+ initiatedByExternalService: true,
193
+ initiatedByUserDevice: true,
194
+ initiatedBySystem: true,
195
+ initiatedByServer: true,
196
+ initiatedByAdmin: true,
197
+ initiatedByUser: true,
198
+ initiatedByApp: true,
199
+ initiatedByBot: true,
200
+ initiatedByMe: true,
201
+ }
202
+
203
+ await this.relayMessage(jid, img.message, {
204
+ messageId: img.key.id,
205
+ quoted: {
206
+ key: {
207
+ remoteJid: album.key.remoteJid,
208
+ id: album.key.id,
209
+ fromMe: true,
210
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
211
+ },
212
+ message: album.message,
213
+ },
214
+ })
215
+ }
216
+ return album
217
+ }
218
+
219
+ async handleEvent(content, jid, quoted) {
220
+ const eventData = content.eventMessage
221
+
222
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
223
+ viewOnceMessage: {
224
+ message: {
225
+ messageContextInfo: {
226
+ deviceListMetadata: {},
227
+ deviceListMetadataVersion: 2,
228
+ messageSecret: crypto.randomBytes(32),
229
+ supportPayload: JSON.stringify({
230
+ version: 2,
231
+ is_ai_message: true,
232
+ should_show_system_message: true,
233
+ ticket_id: crypto.randomBytes(16).toString('hex')
234
+ })
235
+ },
236
+ eventMessage: {
237
+ contextInfo: {
238
+ mentionedJid: [jid],
239
+ participant: jid,
240
+ remoteJid: "status@broadcast",
241
+ forwardedNewsletterMessageInfo: {
242
+ newsletterName: "D | 7eppeli-Exloration",
243
+ newsletterJid: "120363421563597486@newsletter",
244
+ serverMessageId: 1
245
+ }
246
+ },
247
+ isCanceled: eventData.isCanceled || false,
248
+ name: eventData.name,
249
+ description: eventData.description,
250
+ location: eventData.location || {
251
+ degreesLatitude: 0,
252
+ degreesLongitude: 0,
253
+ name: "Location"
254
+ },
255
+ joinLink: eventData.joinLink || '',
256
+ startTime: typeof eventData.startTime === 'string'? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
257
+ endTime: typeof eventData.endTime === 'string'? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
258
+ extraGuestsAllowed: eventData.extraGuestsAllowed!== false
259
+ }
260
+ }
261
+ }
262
+ }, { quoted })
263
+
264
+ await this.relayMessage(jid, msg.message, {
265
+ messageId: msg.key.id
266
+ })
267
+ return msg
268
+ }
269
+
270
+ async handlePollResult(content, jid, quoted) {
271
+ const pollData = content.pollResultMessage
272
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
273
+ pollResultSnapshotMessage: {
274
+ name: pollData.name,
275
+ pollVotes: pollData.pollVotes.map(vote => ({
276
+ optionName: vote.optionName,
277
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
278
+ ? vote.optionVoteCount.toString()
279
+ : vote.optionVoteCount
280
+ })),
281
+ contextInfo: {
282
+ isForwarded: true,
283
+ forwardingScore: 1,
284
+ forwardedNewsletterMessageInfo: {
285
+ newsletterName: pollData.newsletter.newsletterName || "120363399602691477@newsletter",
286
+ newsletterJid: pollData.newsletter.newsletterJid || "Newsletter",
287
+ serverMessageId: 1000,
288
+ contentType: "UPDATE"
289
+ }
290
+ }
291
+ }
292
+ }, {
293
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
294
+ quoted
295
+ })
296
+
297
+ await this.relayMessage(jid, msg.message, {
298
+ messageId: msg.key.id
299
+ })
300
+
301
+ return msg
302
+ }
303
+
304
+ async handleOrderMessage(content, jid, quoted) {
305
+ const orderData = content.orderMessage
306
+
307
+ const Haha = await this.utils.generateWAMessageFromContent(jid, {
308
+ orderMessage: {
309
+ orderId: "7EPPELI25022008",
310
+ thumbnail: orderData.thumbnail || null,
311
+ itemCount: orderData.itemCount || 0,
312
+ status: "ACCEPTED",
313
+ surface: "CATALOG",
314
+ message: orderData.message,
315
+ orderTitle: orderData.orderTitle,
316
+ sellerJid: "0@whatsapp.net",
317
+ token: "7EPPELI_EXAMPLE_TOKEN",
318
+ totalAmount1000: orderData.totalAmount1000 || 0,
319
+ totalCurrencyCode: orderData.totalCurrencyCode || "IDR",
320
+ messageVersion: 2
321
+ }
322
+ }, { quoted: quoted })
323
+
324
+ await this.relayMessage(jid, Haha.message, {})
325
+ return Haha
326
+ }
327
+
328
+ async handleGroupStory(content, jid, quoted) {
329
+ const storyData = content.groupStatus
330
+ let messageContent
331
+
332
+ if (storyData.message) {
333
+ messageContent = storyData
334
+ } else {
335
+ if (typeof this.utils?.generateWAMessageContent === "function") {
336
+ messageContent = await this.utils.generateWAMessageContent(storyData, {
337
+ upload: this.waUploadToServer
338
+ })
339
+ } else {
340
+ messageContent = await Utils.generateWAMessageContent(storyData, {
341
+ upload: this.waUploadToServer
342
+ })
343
+ }
344
+ }
345
+
346
+ let msg = {
347
+ message: {
348
+ groupStatusMessageV2: {
349
+ message: messageContent.message || messageContent
350
+ }
351
+ }
352
+ }
353
+
354
+ return await this.relayMessage(jid, msg.message, {
355
+ messageId: this.utils.generateMessageID()
356
+ })
357
+ }
358
+
359
+ async handleGbLabel(content, jid) {
360
+ const x = content.groupLabel
361
+ if (!jid.endsWith('@g.us')) {
362
+ throw new Error('group required!')
363
+ }
364
+
365
+ const msg = this.utils.generateWAMessageFromContent(jid, {
366
+ protocolMessage: {
367
+ type: "GROUP_MEMBER_LABEL_CHANGE",
368
+ memberLabel: {
369
+ label: x.labelText.slice(0, 30)
370
+ }
371
+ }
372
+ }, {})
373
+
374
+ await this.relayMessage(jid, msg.message, {
375
+ additionalNodes: [
376
+ {
377
+ tag: 'meta',
378
+ attrs: {
379
+ tag_reason: 'user_update',
380
+ appdata: 'member_tag'
381
+ },
382
+ content: undefined
383
+ }
384
+ ]
385
+ })
386
+ }
387
+ }
@@ -5,36 +5,36 @@ exports.makeManagedAccountSocket = void 0
5
5
  const { executeWMexQuery } = require('./mex')
6
6
 
7
7
  const MANAGED_ACCOUNT_MEX_IDS = {
8
-
9
- QUERY: '27232244463035262',
10
- INITIATE_LINKING: '26671873552498548',
11
- VALIDATE_LINKING: '35449808311284430',
12
- ACCEPT_LINKING: '26708926155457677',
13
- COMPLETE_LINKING: '26866501363013203',
14
- REVOKE_LINKING: '27435058196100677',
15
- SYNC_ACTIVITIES: '26594352680227840',
16
- UPDATE_PIN: '27653949584193082',
17
- GET_SPONSOR_AGE_VERIFICATION: '26433623289634522',
18
-
19
- PAYMENTS_PASSKEY_HAS_CREDENTIAL: '26328228500182426',
20
- PAYMENTS_PASSKEY_ENROLL_CHALLENGE: '25233109079721001',
21
- PAYMENTS_PASSKEY_ENROLL_VERIFY: '26563835863283058',
22
- PAYMENTS_PASSKEY_REGISTER_FINISH: '26658791263822236',
23
- PAYMENTS_PASSKEY_AUTH_CHALLENGE: '26425370627105628',
24
- PAYMENTS_PASSKEY_TOGGLE_ON: '25841989828834577',
25
- PAYMENTS_PASSKEY_TOGGLE_OFF: '26267673096201391',
26
- PAYMENTS_PASSKEY_TOGGLE_CHALLENGE: '26133062322993192',
27
- PAYMENTS_PASSKEY_TOGGLE_CLEANUP: '26492078607084840',
28
- PAYMENTS_PASSKEY_CLEANUP: '26538338805859092',
29
- PAYMENTS_IS_RECOVERABLE: '27351347491148282',
30
-
31
- UPI_SEND_OTP: '25829794080022469',
32
- UPI_VERIFY_OTP: '34104109149204669',
33
-
34
- IPLS_HANDSHAKE_INIT: '25523747957257182',
35
- IPLS_CLIENT_HELLO: '25376330595367716',
36
- IPLSD_CLIENT_HELLO_V2: '26561780580105679',
37
- IPLSD_CLIENT_INIT_V2: '26547193874915344'
8
+ // Managed accounts (parental/family)
9
+ QUERY: '27232244463035264', // ManagedAccountQuery
10
+ INITIATE_LINKING: '26671873552498548', // ManagedAccountInitiateLinkingQuery
11
+ VALIDATE_LINKING: '35449808311284430', // ManagedAccountValidateLinkingQuery
12
+ ACCEPT_LINKING: '26708926155457676', // ManagedAccountAcceptLinkingMutation
13
+ COMPLETE_LINKING: '26866501363013204', // ManagedAccountCompleteLinkingMutation
14
+ REVOKE_LINKING: '27435058196100676', // ManagedAccountRevokeLinkingMutation
15
+ SYNC_ACTIVITIES: '26594352680227840', // ManagedAccountSyncActivities
16
+ UPDATE_PIN: '27653949584193080', // ManagedAccountUpdatePinMutation
17
+ GET_SPONSOR_AGE_VERIFICATION: '26433623289634520', // ManagedAccountGetSponsorAgeVerificationInfoQuery
18
+ // Payments passkey
19
+ PAYMENTS_PASSKEY_HAS_CREDENTIAL: '26328228500182424', // PaymentsPasskeyHasCredential
20
+ PAYMENTS_PASSKEY_ENROLL_CHALLENGE: '25233109079721000', // PaymentsPasskeyEnrollChallengeMutation
21
+ PAYMENTS_PASSKEY_ENROLL_VERIFY: '26563835863283056', // PaymentsPasskeyEnrollVerifyMutation
22
+ PAYMENTS_PASSKEY_REGISTER_FINISH: '26658791263822236', // PaymentsPasskeyRegisterFinishMutation
23
+ PAYMENTS_PASSKEY_AUTH_CHALLENGE: '26425370627105628', // PaymentsPasskeyAuthChallengeMutation
24
+ PAYMENTS_PASSKEY_TOGGLE_ON: '25841989828834576', // PaymentsPasskeyToggleOnMutation
25
+ PAYMENTS_PASSKEY_TOGGLE_OFF: '26267673096201390', // PaymentsPasskeyToggleOffMutation
26
+ PAYMENTS_PASSKEY_TOGGLE_CHALLENGE: '26133062322993190', // PaymentsPasskeyToggleChallengeMutation
27
+ PAYMENTS_PASSKEY_TOGGLE_CLEANUP: '26492078607084840', // PaymentsPasskeyToggleCleanupMutation
28
+ PAYMENTS_PASSKEY_CLEANUP: '26538338805859092', // PaymentsPasskeyCleanupMutation
29
+ PAYMENTS_IS_RECOVERABLE: '26524118810513490', // PaymentsIsAccountRecoverable
30
+ // UPI onboarding (India payments)
31
+ UPI_SEND_OTP: '25829794080022468', // UpiOnboardingSendOtpMutation
32
+ UPI_VERIFY_OTP: '34104109149204668', // UpiOnboardingVerifyOtpQuery
33
+ // IPLS (Identity-Preserving Linked Spaces)
34
+ IPLS_HANDSHAKE_INIT: '25523747957257184', // IplsClientHandshakeInitRequest
35
+ IPLS_CLIENT_HELLO: '25376330595367716', // IplsClientHelloPayload
36
+ IPLSD_CLIENT_HELLO_V2: '26561780580105680', // IplsdClientHelloV2
37
+ IPLSD_CLIENT_INIT_V2: '26547193874915344' // IplsdClientInitV2
38
38
  }
39
39
 
40
40
  const makeManagedAccountSocket = sock => {
@@ -43,16 +43,13 @@ const makeManagedAccountSocket = sock => {
43
43
  const mexQuery = (variables, queryId, dataPath) =>
44
44
  executeWMexQuery(variables, queryId, dataPath, query, generateMessageTag)
45
45
 
46
-
46
+ // ── Managed Accounts ─────────────────────────────────────────────────────
47
47
 
48
- const managedAccountQuery = jid => mexQuery({ jid }, MANAGED_ACCOUNT_MEX_IDS.QUERY, 'xwa2_managed_account')
48
+ const managedAccountQuery = jid =>
49
+ mexQuery({ jid }, MANAGED_ACCOUNT_MEX_IDS.QUERY, 'xwa2_managed_account')
49
50
 
50
51
  const managedAccountInitiateLinking = phoneNumber =>
51
- mexQuery(
52
- { phone_number: phoneNumber },
53
- MANAGED_ACCOUNT_MEX_IDS.INITIATE_LINKING,
54
- 'xwa2_managed_account_initiate_linking'
55
- )
52
+ mexQuery({ phone_number: phoneNumber }, MANAGED_ACCOUNT_MEX_IDS.INITIATE_LINKING, 'xwa2_managed_account_initiate_linking')
56
53
 
57
54
  const managedAccountValidateLinking = (linkingToken, sponsorJid) =>
58
55
  mexQuery(
@@ -62,25 +59,13 @@ const makeManagedAccountSocket = sock => {
62
59
  )
63
60
 
64
61
  const managedAccountAcceptLinking = linkingToken =>
65
- mexQuery(
66
- { linking_token: linkingToken },
67
- MANAGED_ACCOUNT_MEX_IDS.ACCEPT_LINKING,
68
- 'xwa2_managed_account_accept_linking'
69
- )
62
+ mexQuery({ linking_token: linkingToken }, MANAGED_ACCOUNT_MEX_IDS.ACCEPT_LINKING, 'xwa2_managed_account_accept_linking')
70
63
 
71
64
  const managedAccountCompleteLinking = linkingToken =>
72
- mexQuery(
73
- { linking_token: linkingToken },
74
- MANAGED_ACCOUNT_MEX_IDS.COMPLETE_LINKING,
75
- 'xwa2_managed_account_complete_linking'
76
- )
65
+ mexQuery({ linking_token: linkingToken }, MANAGED_ACCOUNT_MEX_IDS.COMPLETE_LINKING, 'xwa2_managed_account_complete_linking')
77
66
 
78
67
  const managedAccountRevokeLinking = sponsoredJid =>
79
- mexQuery(
80
- { sponsored_jid: sponsoredJid },
81
- MANAGED_ACCOUNT_MEX_IDS.REVOKE_LINKING,
82
- 'xwa2_managed_account_revoke_linking'
83
- )
68
+ mexQuery({ sponsored_jid: sponsoredJid }, MANAGED_ACCOUNT_MEX_IDS.REVOKE_LINKING, 'xwa2_managed_account_revoke_linking')
84
69
 
85
70
  const managedAccountSyncActivities = (jid, lastSyncTime = null) => {
86
71
  const variables = { jid }
@@ -89,20 +74,12 @@ const makeManagedAccountSocket = sock => {
89
74
  }
90
75
 
91
76
  const managedAccountUpdatePin = (oldPin, newPin) =>
92
- mexQuery(
93
- { input: { old_pin: oldPin, new_pin: newPin } },
94
- MANAGED_ACCOUNT_MEX_IDS.UPDATE_PIN,
95
- 'xwa2_managed_account_update_pin'
96
- )
77
+ mexQuery({ input: { old_pin: oldPin, new_pin: newPin } }, MANAGED_ACCOUNT_MEX_IDS.UPDATE_PIN, 'xwa2_managed_account_update_pin')
97
78
 
98
79
  const managedAccountGetSponsorAgeVerification = sponsorJid =>
99
- mexQuery(
100
- { sponsor_jid: sponsorJid },
101
- MANAGED_ACCOUNT_MEX_IDS.GET_SPONSOR_AGE_VERIFICATION,
102
- 'xwa2_managed_account_sponsor_age_verification'
103
- )
80
+ mexQuery({ sponsor_jid: sponsorJid }, MANAGED_ACCOUNT_MEX_IDS.GET_SPONSOR_AGE_VERIFICATION, 'xwa2_managed_account_sponsor_age_verification')
104
81
 
105
-
82
+ // ── Payments Passkey ─────────────────────────────────────────────────────
106
83
 
107
84
  const paymentsPasskeyHasCredential = () =>
108
85
  mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_HAS_CREDENTIAL, 'xwa2_payments_passkey_has_credential')
@@ -125,11 +102,7 @@ const makeManagedAccountSocket = sock => {
125
102
  )
126
103
 
127
104
  const paymentsPasskeyAuthChallenge = credentialId =>
128
- mexQuery(
129
- { credential_id: credentialId },
130
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_AUTH_CHALLENGE,
131
- 'xwa2_payments_passkey_auth_challenge'
132
- )
105
+ mexQuery({ credential_id: credentialId }, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_AUTH_CHALLENGE, 'xwa2_payments_passkey_auth_challenge')
133
106
 
134
107
  const paymentsPasskeyToggleOn = () =>
135
108
  mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_ON, 'xwa2_payments_passkey_toggle_on')
@@ -138,11 +111,7 @@ const makeManagedAccountSocket = sock => {
138
111
  mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_OFF, 'xwa2_payments_passkey_toggle_off')
139
112
 
140
113
  const paymentsPasskeyToggleChallenge = credentialId =>
141
- mexQuery(
142
- { credential_id: credentialId },
143
- MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_CHALLENGE,
144
- 'xwa2_payments_passkey_toggle_challenge'
145
- )
114
+ mexQuery({ credential_id: credentialId }, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_CHALLENGE, 'xwa2_payments_passkey_toggle_challenge')
146
115
 
147
116
  const paymentsPasskeyToggleCleanup = () =>
148
117
  mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_PASSKEY_TOGGLE_CLEANUP, 'xwa2_payments_passkey_toggle_cleanup')
@@ -153,7 +122,7 @@ const makeManagedAccountSocket = sock => {
153
122
  const paymentsIsAccountRecoverable = () =>
154
123
  mexQuery({}, MANAGED_ACCOUNT_MEX_IDS.PAYMENTS_IS_RECOVERABLE, 'xwa2_payments_is_account_recoverable')
155
124
 
156
-
125
+ // ── UPI onboarding ───────────────────────────────────────────────────────
157
126
 
158
127
  const upiSendOtp = phoneNumber =>
159
128
  mexQuery({ phone_number: phoneNumber }, MANAGED_ACCOUNT_MEX_IDS.UPI_SEND_OTP, 'xwa2_upi_send_otp')
@@ -161,7 +130,7 @@ const makeManagedAccountSocket = sock => {
161
130
  const upiVerifyOtp = (phoneNumber, otp) =>
162
131
  mexQuery({ phone_number: phoneNumber, otp }, MANAGED_ACCOUNT_MEX_IDS.UPI_VERIFY_OTP, 'xwa2_upi_verify_otp')
163
132
 
164
-
133
+ // ── IPLS (Identity-Preserving Linked Spaces) ─────────────────────────────
165
134
 
166
135
  const iplsHandshakeInit = payload =>
167
136
  mexQuery({ payload }, MANAGED_ACCOUNT_MEX_IDS.IPLS_HANDSHAKE_INIT, 'xwa2_ipls_handshake_init')
@@ -177,7 +146,7 @@ const makeManagedAccountSocket = sock => {
177
146
 
178
147
  return {
179
148
  ...sock,
180
-
149
+ // Managed accounts
181
150
  managedAccountQuery,
182
151
  managedAccountInitiateLinking,
183
152
  managedAccountValidateLinking,
@@ -187,7 +156,7 @@ const makeManagedAccountSocket = sock => {
187
156
  managedAccountSyncActivities,
188
157
  managedAccountUpdatePin,
189
158
  managedAccountGetSponsorAgeVerification,
190
-
159
+ // Payments passkey
191
160
  paymentsPasskeyHasCredential,
192
161
  paymentsPasskeyEnrollChallenge,
193
162
  paymentsPasskeyEnrollVerify,
@@ -199,10 +168,10 @@ const makeManagedAccountSocket = sock => {
199
168
  paymentsPasskeyToggleCleanup,
200
169
  paymentsPasskeyCleanup,
201
170
  paymentsIsAccountRecoverable,
202
-
171
+ // UPI
203
172
  upiSendOtp,
204
173
  upiVerifyOtp,
205
-
174
+ // IPLS
206
175
  iplsHandshakeInit,
207
176
  iplsClientHello,
208
177
  iplsdClientHelloV2,