@dappaoffc/baileys-mod 6.0.23 → 8.0.0

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.

Potentially problematic release.


This version of @dappaoffc/baileys-mod might be problematic. Click here for more details.

Files changed (212) hide show
  1. package/LICENSE +21 -0
  2. package/WAProto/WAProto.proto +5311 -0
  3. package/WAProto/index.js +65801 -141371
  4. package/lib/Defaults/index.js +117 -141
  5. package/lib/KeyDB/BinarySearch.js +20 -0
  6. package/lib/KeyDB/KeyedDB.js +167 -0
  7. package/lib/KeyDB/index.js +4 -0
  8. package/lib/Signal/Group/ciphertext-message.js +12 -14
  9. package/lib/Signal/Group/group-session-builder.js +10 -42
  10. package/lib/Signal/Group/group_cipher.js +75 -87
  11. package/lib/Signal/Group/index.js +13 -57
  12. package/lib/Signal/Group/keyhelper.js +17 -52
  13. package/lib/Signal/Group/sender-chain-key.js +27 -33
  14. package/lib/Signal/Group/sender-key-distribution-message.js +62 -63
  15. package/lib/Signal/Group/sender-key-message.js +65 -66
  16. package/lib/Signal/Group/sender-key-name.js +45 -44
  17. package/lib/Signal/Group/sender-key-record.js +39 -49
  18. package/lib/Signal/Group/sender-key-state.js +80 -93
  19. package/lib/Signal/Group/sender-message-key.js +27 -28
  20. package/lib/Signal/libsignal.js +313 -163
  21. package/lib/Signal/lid-mapping.js +155 -0
  22. package/lib/Socket/Client/index.js +4 -19
  23. package/lib/Socket/Client/types.js +13 -0
  24. package/lib/Socket/Client/websocket.js +52 -0
  25. package/lib/Socket/Client/websocket.js.bak +53 -0
  26. package/lib/Socket/business.js +359 -242
  27. package/lib/Socket/chats.js +846 -935
  28. package/lib/Socket/communities.js +413 -0
  29. package/lib/Socket/groups.js +304 -309
  30. package/lib/Socket/index.js +15 -10
  31. package/lib/Socket/messages-recv.js +1107 -1054
  32. package/lib/Socket/messages-send.js +639 -448
  33. package/lib/Socket/mex.js +45 -0
  34. package/lib/Socket/newsletter.js +197 -310
  35. package/lib/Socket/socket.js +791 -651
  36. package/lib/Store/index.js +6 -10
  37. package/lib/Store/make-cache-manager-store.js +73 -81
  38. package/lib/Store/make-in-memory-store.js +286 -423
  39. package/lib/Store/make-ordered-dictionary.js +77 -79
  40. package/lib/Store/object-repository.js +24 -26
  41. package/lib/Types/Auth.js +3 -2
  42. package/lib/Types/Bussines.js +3 -0
  43. package/lib/Types/Call.js +3 -2
  44. package/lib/Types/Chat.js +9 -4
  45. package/lib/Types/Contact.js +3 -2
  46. package/lib/Types/Events.js +3 -2
  47. package/lib/Types/GroupMetadata.js +3 -2
  48. package/lib/Types/Label.js +24 -26
  49. package/lib/Types/LabelAssociation.js +6 -8
  50. package/lib/Types/Message.js +12 -9
  51. package/lib/Types/Newsletter.js +33 -38
  52. package/lib/Types/Newsletter.js.bak +33 -0
  53. package/lib/Types/Product.js +3 -2
  54. package/lib/Types/Signal.js +3 -2
  55. package/lib/Types/Socket.js +4 -2
  56. package/lib/Types/State.js +11 -2
  57. package/lib/Types/USync.js +3 -2
  58. package/lib/Types/index.js +27 -41
  59. package/lib/Utils/auth-utils.js +211 -198
  60. package/lib/Utils/baileys-event-stream.js +42 -61
  61. package/lib/Utils/browser-utils.js +25 -0
  62. package/lib/Utils/business.js +213 -214
  63. package/lib/Utils/chat-utils.js +710 -687
  64. package/lib/Utils/crypto.js +112 -133
  65. package/lib/Utils/decode-wa-message.js +252 -183
  66. package/lib/Utils/decode-wa-message.js.bak +267 -0
  67. package/lib/Utils/event-buffer.js +510 -496
  68. package/lib/Utils/generics.js +319 -392
  69. package/lib/Utils/history.js +83 -92
  70. package/lib/Utils/index.js +21 -33
  71. package/lib/Utils/link-preview.js +71 -83
  72. package/lib/Utils/logger.js +5 -7
  73. package/lib/Utils/lt-hash.js +40 -46
  74. package/lib/Utils/make-mutex.js +34 -41
  75. package/lib/Utils/message-retry-manager.js +113 -0
  76. package/lib/Utils/messages-media.js +550 -768
  77. package/lib/Utils/messages.js +354 -263
  78. package/lib/Utils/noise-handler.js +138 -149
  79. package/lib/Utils/pre-key-manager.js +85 -0
  80. package/lib/Utils/process-message.js +323 -303
  81. package/lib/Utils/signal.js +149 -141
  82. package/lib/Utils/use-multi-file-auth-state.js +95 -103
  83. package/lib/Utils/validate-connection.js +183 -214
  84. package/lib/WABinary/constants.js +1298 -35
  85. package/lib/WABinary/decode.js +237 -249
  86. package/lib/WABinary/encode.js +213 -260
  87. package/lib/WABinary/generic-utils.js +56 -65
  88. package/lib/WABinary/index.js +7 -21
  89. package/lib/WABinary/jid-utils.js +89 -58
  90. package/lib/WABinary/types.js +3 -2
  91. package/lib/WAM/BinaryInfo.js +10 -12
  92. package/lib/WAM/constants.js +22851 -15348
  93. package/lib/WAM/encode.js +135 -136
  94. package/lib/WAM/index.js +5 -19
  95. package/lib/WAUSync/Protocols/USyncContactProtocol.js +28 -30
  96. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +49 -53
  97. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -28
  98. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +36 -39
  99. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +50 -50
  100. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +26 -20
  101. package/lib/WAUSync/Protocols/index.js +6 -20
  102. package/lib/WAUSync/USyncQuery.js +86 -85
  103. package/lib/WAUSync/USyncUser.js +23 -25
  104. package/lib/WAUSync/index.js +5 -19
  105. package/lib/index.js +15 -38
  106. package/package.json +101 -106
  107. package/engine-requirements.js +0 -10
  108. package/lib/Defaults/baileys-version.json +0 -3
  109. package/lib/Defaults/index.d.ts +0 -53
  110. package/lib/Defaults/phonenumber-mcc.json +0 -223
  111. package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
  112. package/lib/Signal/Group/group-session-builder.d.ts +0 -14
  113. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  114. package/lib/Signal/Group/index.d.ts +0 -11
  115. package/lib/Signal/Group/keyhelper.d.ts +0 -10
  116. package/lib/Signal/Group/queue-job.d.ts +0 -1
  117. package/lib/Signal/Group/queue-job.js +0 -57
  118. package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
  119. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
  120. package/lib/Signal/Group/sender-key-message.d.ts +0 -18
  121. package/lib/Signal/Group/sender-key-name.d.ts +0 -17
  122. package/lib/Signal/Group/sender-key-record.d.ts +0 -30
  123. package/lib/Signal/Group/sender-key-state.d.ts +0 -38
  124. package/lib/Signal/Group/sender-message-key.d.ts +0 -11
  125. package/lib/Signal/libsignal.d.ts +0 -3
  126. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  127. package/lib/Socket/Client/abstract-socket-client.js +0 -13
  128. package/lib/Socket/Client/index.d.ts +0 -3
  129. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  130. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  131. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  132. package/lib/Socket/Client/web-socket-client.js +0 -62
  133. package/lib/Socket/business.d.ts +0 -171
  134. package/lib/Socket/chats.d.ts +0 -267
  135. package/lib/Socket/dugong.d.ts +0 -254
  136. package/lib/Socket/dugong.js +0 -484
  137. package/lib/Socket/groups.d.ts +0 -115
  138. package/lib/Socket/index.d.ts +0 -173
  139. package/lib/Socket/messages-recv.d.ts +0 -161
  140. package/lib/Socket/messages-send.d.ts +0 -149
  141. package/lib/Socket/newsletter.d.ts +0 -134
  142. package/lib/Socket/registration.d.ts +0 -267
  143. package/lib/Socket/registration.js +0 -166
  144. package/lib/Socket/socket.d.ts +0 -43
  145. package/lib/Socket/usync.d.ts +0 -36
  146. package/lib/Socket/usync.js +0 -70
  147. package/lib/Store/index.d.ts +0 -3
  148. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  149. package/lib/Store/make-in-memory-store.d.ts +0 -118
  150. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  151. package/lib/Store/object-repository.d.ts +0 -10
  152. package/lib/Types/Auth.d.ts +0 -110
  153. package/lib/Types/Call.d.ts +0 -13
  154. package/lib/Types/Chat.d.ts +0 -102
  155. package/lib/Types/Contact.d.ts +0 -19
  156. package/lib/Types/Events.d.ts +0 -157
  157. package/lib/Types/GroupMetadata.d.ts +0 -55
  158. package/lib/Types/Label.d.ts +0 -35
  159. package/lib/Types/LabelAssociation.d.ts +0 -29
  160. package/lib/Types/Message.d.ts +0 -273
  161. package/lib/Types/Newsletter.d.ts +0 -103
  162. package/lib/Types/Product.d.ts +0 -78
  163. package/lib/Types/Signal.d.ts +0 -57
  164. package/lib/Types/Socket.d.ts +0 -111
  165. package/lib/Types/State.d.ts +0 -27
  166. package/lib/Types/USync.d.ts +0 -25
  167. package/lib/Types/index.d.ts +0 -57
  168. package/lib/Utils/auth-utils.d.ts +0 -18
  169. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  170. package/lib/Utils/business.d.ts +0 -22
  171. package/lib/Utils/chat-utils.d.ts +0 -71
  172. package/lib/Utils/crypto.d.ts +0 -41
  173. package/lib/Utils/decode-wa-message.d.ts +0 -19
  174. package/lib/Utils/event-buffer.d.ts +0 -35
  175. package/lib/Utils/generics.d.ts +0 -92
  176. package/lib/Utils/generics.js.bak +0 -433
  177. package/lib/Utils/history.d.ts +0 -15
  178. package/lib/Utils/index.d.ts +0 -17
  179. package/lib/Utils/link-preview.d.ts +0 -21
  180. package/lib/Utils/logger.d.ts +0 -4
  181. package/lib/Utils/lt-hash.d.ts +0 -12
  182. package/lib/Utils/make-mutex.d.ts +0 -7
  183. package/lib/Utils/messages-media.d.ts +0 -116
  184. package/lib/Utils/messages.d.ts +0 -77
  185. package/lib/Utils/noise-handler.d.ts +0 -21
  186. package/lib/Utils/process-message.d.ts +0 -41
  187. package/lib/Utils/signal.d.ts +0 -32
  188. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  189. package/lib/Utils/validate-connection.d.ts +0 -11
  190. package/lib/Utils/validate-connection.js.bak +0 -237
  191. package/lib/WABinary/constants.d.ts +0 -30
  192. package/lib/WABinary/decode.d.ts +0 -7
  193. package/lib/WABinary/encode.d.ts +0 -3
  194. package/lib/WABinary/generic-utils.d.ts +0 -17
  195. package/lib/WABinary/index.d.ts +0 -5
  196. package/lib/WABinary/jid-utils.d.ts +0 -31
  197. package/lib/WABinary/types.d.ts +0 -18
  198. package/lib/WAM/BinaryInfo.d.ts +0 -17
  199. package/lib/WAM/constants.d.ts +0 -38
  200. package/lib/WAM/encode.d.ts +0 -3
  201. package/lib/WAM/index.d.ts +0 -3
  202. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  203. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  204. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  205. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  206. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
  207. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
  208. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  209. package/lib/WAUSync/USyncQuery.d.ts +0 -28
  210. package/lib/WAUSync/USyncUser.d.ts +0 -12
  211. package/lib/WAUSync/index.d.ts +0 -3
  212. package/lib/index.d.ts +0 -12
@@ -1,231 +1,200 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeSignedDeviceIdentity = exports.configureSuccessfulPairing = exports.generateRegistrationNode = exports.generateLoginNode = void 0;
4
- const boom_1 = require("@hapi/boom");
5
- const crypto_1 = require("crypto");
6
- const WAProto_1 = require("../../WAProto");
7
- const Defaults_1 = require("../Defaults");
8
- const WABinary_1 = require("../WABinary");
9
- const crypto_2 = require("./crypto");
10
- const generics_1 = require("./generics");
11
- const signal_1 = require("./signal");
12
-
1
+ //=======================================================//
2
+ import { KEY_BUNDLE_TYPE, WA_ADV_ACCOUNT_SIG_PREFIX, WA_ADV_DEVICE_SIG_PREFIX, WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX } from "../Defaults/index.js";
3
+ import { getBinaryNodeChild, jidDecode, S_WHATSAPP_NET } from "../WABinary/index.js";
4
+ import { createSignalIdentity } from "./signal.js";
5
+ import { encodeBigEndian } from "./generics.js";
6
+ import { proto } from "../../WAProto/index.js";
7
+ import { Curve, hmacSign } from "./crypto.js";
8
+ import { createHash } from "crypto";
9
+ import { Boom } from "@hapi/boom";
10
+ //=======================================================//
13
11
  const getUserAgent = (config) => {
14
- return {
15
- appVersion: {
16
- primary: config.version[0],
17
- secondary: config.version[1],
18
- tertiary: config.version[2],
19
- },
20
- platform: WAProto_1.proto.ClientPayload.UserAgent.Platform.WEB,
21
- releaseChannel: WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
22
- osVersion: '0.1',
23
- device: 'Desktop',
24
- osBuildNumber: '0.1',
25
- localeLanguageIso6391: 'en',
26
- mnc: '000',
27
- mcc: '000',
28
- localeCountryIso31661Alpha2: config.countryCode || 'US'
29
- };
12
+ return {
13
+ "appVersion": {
14
+ "primary": config.version[0],
15
+ "secondary": config.version[1],
16
+ "tertiary": config.version[2]
17
+ },
18
+ "platform": proto.ClientPayload.UserAgent.Platform.WEB,
19
+ "releaseChannel": proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
20
+ "osVersion": "0.1",
21
+ "device": "Desktop",
22
+ "osBuildNumber": "0.1",
23
+ "localeLanguageIso6391": "en",
24
+ "mnc": "000",
25
+ "mcc": "000",
26
+ "localeCountryIso31661Alpha2": config.countryCode
27
+ };
30
28
  };
31
-
32
-
33
-
29
+ //=======================================================//
34
30
  const PLATFORM_MAP = {
35
- 'Mac OS': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,
36
- 'Windows': WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32
31
+ "Mac OS": proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,
32
+ "Windows": proto.ClientPayload.WebInfo.WebSubPlatform.WIN32
37
33
  };
38
-
34
+ //=======================================================//
39
35
  const getWebInfo = (config) => {
40
- let webSubPlatform = WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;
41
- if (config.syncFullHistory && PLATFORM_MAP[config.browser[0]] && config.browser[1] === 'Desktop') {
42
- webSubPlatform = PLATFORM_MAP[config.browser[0]];
43
- }
44
- return { webSubPlatform };
36
+ let webSubPlatform = proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;
37
+ if (config.syncFullHistory &&
38
+ PLATFORM_MAP[config.browser[0]] &&
39
+ config.browser[1] === "Desktop") {
40
+ webSubPlatform = PLATFORM_MAP[config.browser[0]];
41
+ }
42
+ return { webSubPlatform };
45
43
  };
46
-
44
+ //=======================================================//
47
45
  const getClientPayload = (config) => {
48
- const payload = {
49
- connectType: WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
50
- connectReason: WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,
51
- userAgent: getUserAgent(config),
52
- };
53
- payload.webInfo = getWebInfo(config);
54
- return payload;
46
+ const payload = {
47
+ connectType: proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
48
+ connectReason: proto.ClientPayload.ConnectReason.USER_ACTIVATED,
49
+ userAgent: getUserAgent(config)
50
+ };
51
+ payload.webInfo = getWebInfo(config);
52
+ return payload;
55
53
  };
56
-
57
- const generateLoginNode = (userJid, config) => {
58
- const { user, device } = (0, WABinary_1.jidDecode)(userJid);
59
- const payload = {
60
- ...getClientPayload(config),
61
- passive: true,
62
- pull: true,
63
- username: +user,
64
- device: device,
65
- lidDbMigrated: false
66
- };
67
- return WAProto_1.proto.ClientPayload.fromObject(payload);
54
+ //=======================================================//
55
+ export const generateLoginNode = (userJid, config) => {
56
+ const { user, device } = jidDecode(userJid);
57
+ const payload = {
58
+ ...getClientPayload(config),
59
+ "passive": true,
60
+ "pull": true,
61
+ "username": +user,
62
+ "device": device,
63
+ "lidDbMigrated": false
64
+ };
65
+ return proto.ClientPayload.fromObject(payload);
68
66
  };
69
- exports.generateLoginNode = generateLoginNode;
70
-
67
+ //=======================================================//
71
68
  const getPlatformType = (platform) => {
72
- const platformType = platform.toUpperCase();
73
- return WAProto_1.proto.DeviceProps.PlatformType[platformType] || WAProto_1.proto.DeviceProps.PlatformType.CHROME;
74
- };
75
-
76
- const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
77
- const appVersionBuf = (0, crypto_1.createHash)('md5')
78
- .update(config.version.join('.'))
79
- .digest();
80
-
81
- const companion = {
82
- os: config.browser[0],
83
- platformType: getPlatformType(config.browser[1]),
84
- requireFullSync: config.syncFullHistory,
85
- historySyncConfig: {
86
- storageQuotaMb: 10240,
87
- inlineInitialPayloadInE2EeMsg: true,
88
- recentSyncDaysLimit: undefined,
89
- supportCallLogHistory: false,
90
- supportBotUserAgentChatHistory: true,
91
- supportCagReactionsAndPolls: true,
92
- supportBizHostedMsg: true,
93
- supportRecentSyncChunkMessageCountTuning: true,
94
- supportHostedGroupMsg: true,
95
- supportFbidBotChatHistory: true,
96
- supportAddOnHistorySyncMigration: undefined,
97
- supportMessageAssociation: true,
98
- supportGroupHistory: false,
99
- onDemandReady: undefined,
100
- supportGuestChat: undefined
101
- },
102
- version: {
103
- primary: 10,
104
- secondary: 15,
105
- tertiary: 7
106
- }
107
- };
108
-
109
- const companionProto = WAProto_1.proto.DeviceProps.encode(companion).finish();
110
-
111
- const registerPayload = {
112
- ...getClientPayload(config),
113
- passive: false,
114
- pull: false,
115
- devicePairingData: {
116
- buildHash: appVersionBuf,
117
- deviceProps: companionProto,
118
- eRegid: (0, generics_1.encodeBigEndian)(registrationId),
119
- eKeytype: Defaults_1.KEY_BUNDLE_TYPE,
120
- eIdent: signedIdentityKey.public,
121
- eSkeyId: (0, generics_1.encodeBigEndian)(signedPreKey.keyId, 3),
122
- eSkeyVal: signedPreKey.keyPair.public,
123
- eSkeySig: signedPreKey.signature,
124
- },
125
- };
126
- return WAProto_1.proto.ClientPayload.fromObject(registerPayload);
69
+ const platformType = platform.toUpperCase();
70
+ return (proto.DeviceProps.PlatformType[platformType] ||
71
+ proto.DeviceProps.PlatformType.CHROME);
127
72
  };
128
- exports.generateRegistrationNode = generateRegistrationNode;
129
-
130
- const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
131
- const msgId = stanza.attrs.id;
132
- const pairSuccessNode = (0, WABinary_1.getBinaryNodeChild)(stanza, 'pair-success');
133
- const deviceIdentityNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device-identity');
134
- const platformNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'platform');
135
- const deviceNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device');
136
- const businessNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'biz');
137
-
138
- if (!deviceIdentityNode || !deviceNode) {
139
- throw new boom_1.Boom('Missing device-identity or device in pair success node', { data: stanza });
140
- }
141
-
142
- const bizName = businessNode?.attrs.name;
143
- const jid = deviceNode.attrs.jid;
144
- const lid = deviceNode.attrs.lid;
145
-
146
- const { details, hmac, accountType } = WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
147
-
148
- let hmacPrefix = Buffer.from([]);
149
- if (accountType !== undefined && accountType === WAProto_1.proto.ADVEncryptionType.HOSTED) {
150
- hmacPrefix = Buffer.from([0x06, 0x05]);
73
+ //=======================================================//
74
+ export const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
75
+ const appVersionBuf = createHash("md5")
76
+ .update(config.version.join("."))
77
+ .digest();
78
+ const companion = {
79
+ "os": config.browser[0],
80
+ "platformType": getPlatformType(config.browser[1]),
81
+ "requireFullSync": config.syncFullHistory,
82
+ "historySyncConfig": {
83
+ "storageQuotaMb": 569150,
84
+ "inlineInitialPayloadInE2EeMsg": true,
85
+ "supportCallLogHistory": false,
86
+ "supportBotUserAgentChatHistory": true,
87
+ "supportCagReactionsAndPolls": true,
88
+ "supportBizHostedMsg": true,
89
+ "supportRecentSyncChunkMessageCountTuning": true,
90
+ "supportHostedGroupMsg": true,
91
+ "supportFbidBotChatHistory": true,
92
+ "supportMessageAssociation": true
93
+ },
94
+ "version": {
95
+ "primary": 10,
96
+ "secondary": 15,
97
+ "tertiary": 7
151
98
  }
152
-
153
- const advSign = (0, crypto_2.hmacSign)(Buffer.concat([hmacPrefix, details]), Buffer.from(advSecretKey, 'base64'));
154
- if (Buffer.compare(hmac, advSign) !== 0) {
155
- throw new boom_1.Boom('Invalid account signature');
99
+ };
100
+ const companionProto = proto.DeviceProps.encode(companion).finish();
101
+ const registerPayload = {
102
+ ...getClientPayload(config),
103
+ passive: false,
104
+ pull: false,
105
+ devicePairingData: {
106
+ buildHash: appVersionBuf,
107
+ deviceProps: companionProto,
108
+ eRegid: encodeBigEndian(registrationId),
109
+ eKeytype: KEY_BUNDLE_TYPE,
110
+ eIdent: signedIdentityKey.public,
111
+ eSkeyId: encodeBigEndian(signedPreKey.keyId, 3),
112
+ eSkeyVal: signedPreKey.keyPair.public,
113
+ eSkeySig: signedPreKey.signature
156
114
  }
157
-
158
- const account = WAProto_1.proto.ADVSignedDeviceIdentity.decode(details);
159
- const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
160
-
161
- const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(deviceDetails);
162
-
163
- const accountSignaturePrefix = deviceIdentity.deviceType === WAProto_1.proto.ADVEncryptionType.HOSTED
164
- ? Buffer.from([0x06, 0x05])
165
- : Buffer.from([0x06, 0x00]);
166
- const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]);
167
-
168
- if (!crypto_2.Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
169
- throw new boom_1.Boom('Failed to verify account signature');
170
- }
171
-
172
- const deviceMsg = Buffer.concat([
173
- Buffer.from([0x06, 0x01]),
174
- deviceDetails,
175
- signedIdentityKey.public,
176
- accountSignatureKey
177
- ]);
178
- account.deviceSignature = crypto_2.Curve.sign(signedIdentityKey.private, deviceMsg);
179
-
180
- const identity = (0, signal_1.createSignalIdentity)(jid, accountSignatureKey);
181
- const accountEnc = (0, exports.encodeSignedDeviceIdentity)(account, false);
182
-
183
- const reply = {
184
- tag: 'iq',
185
- attrs: {
186
- to: WABinary_1.S_WHATSAPP_NET,
187
- type: 'result',
188
- id: msgId,
189
- },
115
+ };
116
+ return proto.ClientPayload.fromObject(registerPayload);
117
+ };
118
+ //=======================================================//
119
+ export const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
120
+ const msgId = stanza.attrs.id;
121
+ const pairSuccessNode = getBinaryNodeChild(stanza, "pair-success");
122
+ const deviceIdentityNode = getBinaryNodeChild(pairSuccessNode, "device-identity");
123
+ const platformNode = getBinaryNodeChild(pairSuccessNode, "platform");
124
+ const deviceNode = getBinaryNodeChild(pairSuccessNode, "device");
125
+ const businessNode = getBinaryNodeChild(pairSuccessNode, "biz");
126
+ if (!deviceIdentityNode || !deviceNode) {
127
+ throw new Boom("Missing device-identity or device in pair success node", { data: stanza });
128
+ }
129
+ const bizName = businessNode?.attrs.name;
130
+ const jid = deviceNode.attrs.jid;
131
+ const lid = deviceNode.attrs.lid;
132
+ const { details, hmac, accountType } = proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
133
+ let hmacPrefix = Buffer.from([]);
134
+ if (accountType !== undefined && accountType === proto.ADVEncryptionType.HOSTED) {
135
+ hmacPrefix = WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX;
136
+ }
137
+ const advSign = hmacSign(Buffer.concat([hmacPrefix, details]), Buffer.from(advSecretKey, "base64"));
138
+ if (Buffer.compare(hmac, advSign) !== 0) {
139
+ throw new Boom("Invalid account signature");
140
+ }
141
+ const account = proto.ADVSignedDeviceIdentity.decode(details);
142
+ const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
143
+ const deviceIdentity = proto.ADVDeviceIdentity.decode(deviceDetails);
144
+ const accountSignaturePrefix = deviceIdentity.deviceType === proto.ADVEncryptionType.HOSTED
145
+ ? WA_ADV_HOSTED_ACCOUNT_SIG_PREFIX
146
+ : WA_ADV_ACCOUNT_SIG_PREFIX;
147
+ const accountMsg = Buffer.concat([accountSignaturePrefix, deviceDetails, signedIdentityKey.public]);
148
+ if (!Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
149
+ throw new Boom("Failed to verify account signature");
150
+ }
151
+ const deviceMsg = Buffer.concat([
152
+ WA_ADV_DEVICE_SIG_PREFIX,
153
+ deviceDetails,
154
+ signedIdentityKey.public,
155
+ accountSignatureKey
156
+ ]);
157
+ account.deviceSignature = Curve.sign(signedIdentityKey.private, deviceMsg);
158
+ const identity = createSignalIdentity(lid, accountSignatureKey);
159
+ const accountEnc = encodeSignedDeviceIdentity(account, false);
160
+ const reply = {
161
+ tag: "iq",
162
+ attrs: {
163
+ to: S_WHATSAPP_NET,
164
+ type: "result",
165
+ id: msgId
166
+ },
167
+ content: [
168
+ {
169
+ tag: "pair-device-sign",
170
+ attrs: {},
190
171
  content: [
191
- {
192
- tag: 'pair-device-sign',
193
- attrs: {},
194
- content: [
195
- {
196
- tag: 'device-identity',
197
- attrs: { 'key-index': deviceIdentity.keyIndex.toString() },
198
- content: accountEnc
199
- }
200
- ]
201
- }
172
+ {
173
+ tag: "device-identity",
174
+ attrs: { "key-index": deviceIdentity.keyIndex.toString() },
175
+ content: accountEnc
176
+ }
202
177
  ]
203
- };
204
-
205
- const authUpdate = {
206
- account,
207
- me: { id: jid, name: bizName, lid },
208
- signalIdentities: [
209
- ...(signalIdentities || []),
210
- identity
211
- ],
212
- platform: platformNode?.attrs.name
213
- };
214
-
215
- return {
216
- creds: authUpdate,
217
- reply
218
- };
178
+ }
179
+ ]
180
+ };
181
+ const authUpdate = {
182
+ account,
183
+ me: { id: jid, name: bizName, lid },
184
+ signalIdentities: [...(signalIdentities || []), identity],
185
+ platform: platformNode?.attrs.name
186
+ };
187
+ return {
188
+ creds: authUpdate,
189
+ reply
190
+ };
219
191
  };
220
- exports.configureSuccessfulPairing = configureSuccessfulPairing;
221
-
222
- const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
223
- account = { ...account };
224
- if (!includeSignatureKey || !account.accountSignatureKey?.length) {
225
- account.accountSignatureKey = null;
226
- }
227
- return WAProto_1.proto.ADVSignedDeviceIdentity
228
- .encode(account)
229
- .finish();
192
+ //=======================================================//
193
+ export const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
194
+ account = { ...account };
195
+ if (!includeSignatureKey || !account.accountSignatureKey?.length) {
196
+ account.accountSignatureKey = null;
197
+ }
198
+ return proto.ADVSignedDeviceIdentity.encode(account).finish();
230
199
  };
231
- exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
200
+ //=======================================================//