@queenanya/baileys 6.7.0 → 6.8.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.
Files changed (129) hide show
  1. package/WASignalGroup/readme.md +6 -0
  2. package/lib/Defaults/baileys-version.json +3 -3
  3. package/lib/Defaults/index.d.ts +284 -284
  4. package/lib/Defaults/index.js +120 -120
  5. package/lib/Defaults/phonenumber-mcc.json +223 -223
  6. package/lib/Signal/libsignal.d.ts +3 -3
  7. package/lib/Signal/libsignal.js +152 -152
  8. package/lib/Socket/Client/abstract-socket-client.d.ts +17 -17
  9. package/lib/Socket/Client/abstract-socket-client.js +13 -13
  10. package/lib/Socket/Client/index.d.ts +3 -3
  11. package/lib/Socket/Client/index.js +19 -19
  12. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -13
  13. package/lib/Socket/Client/mobile-socket-client.js +65 -65
  14. package/lib/Socket/Client/web-socket-client.d.ts +12 -12
  15. package/lib/Socket/Client/web-socket-client.js +62 -62
  16. package/lib/Socket/business.d.ts +135 -135
  17. package/lib/Socket/business.js +259 -259
  18. package/lib/Socket/chats.d.ts +79 -79
  19. package/lib/Socket/chats.js +854 -854
  20. package/lib/Socket/groups.d.ts +113 -113
  21. package/lib/Socket/groups.js +302 -302
  22. package/lib/Socket/index.d.ts +137 -137
  23. package/lib/Socket/index.js +10 -10
  24. package/lib/Socket/messages-recv.d.ts +124 -124
  25. package/lib/Socket/messages-recv.js +747 -747
  26. package/lib/Socket/messages-send.d.ts +119 -119
  27. package/lib/Socket/messages-send.js +663 -663
  28. package/lib/Socket/registration.d.ts +232 -232
  29. package/lib/Socket/registration.js +166 -166
  30. package/lib/Socket/socket.d.ts +42 -42
  31. package/lib/Socket/socket.js +588 -588
  32. package/lib/Store/index.d.ts +3 -3
  33. package/lib/Store/index.js +10 -10
  34. package/lib/Store/make-cache-manager-store.d.ts +13 -13
  35. package/lib/Store/make-cache-manager-store.js +83 -83
  36. package/lib/Store/make-in-memory-store.d.ts +117 -117
  37. package/lib/Store/make-in-memory-store.js +437 -437
  38. package/lib/Store/make-ordered-dictionary.d.ts +13 -13
  39. package/lib/Store/make-ordered-dictionary.js +81 -81
  40. package/lib/Store/object-repository.d.ts +10 -10
  41. package/lib/Store/object-repository.js +27 -27
  42. package/lib/Types/Auth.d.ts +108 -108
  43. package/lib/Types/Auth.js +2 -2
  44. package/lib/Types/Call.d.ts +13 -13
  45. package/lib/Types/Call.js +2 -2
  46. package/lib/Types/Chat.d.ts +102 -102
  47. package/lib/Types/Chat.js +4 -4
  48. package/lib/Types/Contact.d.ts +19 -19
  49. package/lib/Types/Contact.js +2 -2
  50. package/lib/Types/Events.d.ts +157 -157
  51. package/lib/Types/Events.js +2 -2
  52. package/lib/Types/GroupMetadata.d.ts +52 -52
  53. package/lib/Types/GroupMetadata.js +2 -2
  54. package/lib/Types/Label.d.ts +35 -35
  55. package/lib/Types/Label.js +27 -27
  56. package/lib/Types/LabelAssociation.d.ts +29 -29
  57. package/lib/Types/LabelAssociation.js +9 -9
  58. package/lib/Types/Message.d.ts +261 -261
  59. package/lib/Types/Message.js +9 -9
  60. package/lib/Types/Product.d.ts +78 -78
  61. package/lib/Types/Product.js +2 -2
  62. package/lib/Types/Signal.d.ts +57 -57
  63. package/lib/Types/Signal.js +2 -2
  64. package/lib/Types/Socket.d.ts +111 -111
  65. package/lib/Types/Socket.js +2 -2
  66. package/lib/Types/State.d.ts +27 -27
  67. package/lib/Types/State.js +2 -2
  68. package/lib/Types/index.d.ts +56 -56
  69. package/lib/Types/index.js +41 -41
  70. package/lib/Utils/auth-utils.d.ts +18 -18
  71. package/lib/Utils/auth-utils.js +204 -204
  72. package/lib/Utils/baileys-event-stream.d.ts +16 -16
  73. package/lib/Utils/baileys-event-stream.js +63 -63
  74. package/lib/Utils/business.d.ts +22 -22
  75. package/lib/Utils/business.js +234 -234
  76. package/lib/Utils/chat-utils.d.ts +71 -71
  77. package/lib/Utils/chat-utils.js +724 -724
  78. package/lib/Utils/crypto.d.ts +41 -41
  79. package/lib/Utils/crypto.js +151 -151
  80. package/lib/Utils/decode-wa-message.d.ts +19 -19
  81. package/lib/Utils/decode-wa-message.js +174 -174
  82. package/lib/Utils/event-buffer.d.ts +35 -35
  83. package/lib/Utils/event-buffer.js +514 -514
  84. package/lib/Utils/generics.d.ts +94 -94
  85. package/lib/Utils/generics.js +367 -367
  86. package/lib/Utils/history.d.ts +15 -15
  87. package/lib/Utils/history.js +91 -91
  88. package/lib/Utils/index.d.ts +17 -17
  89. package/lib/Utils/index.js +33 -33
  90. package/lib/Utils/link-preview.d.ts +21 -21
  91. package/lib/Utils/link-preview.js +93 -93
  92. package/lib/Utils/logger.d.ts +4 -4
  93. package/lib/Utils/logger.js +7 -7
  94. package/lib/Utils/lt-hash.d.ts +12 -12
  95. package/lib/Utils/lt-hash.js +51 -51
  96. package/lib/Utils/make-mutex.d.ts +7 -7
  97. package/lib/Utils/make-mutex.js +43 -43
  98. package/lib/Utils/messages-media.d.ts +107 -107
  99. package/lib/Utils/messages-media.js +680 -680
  100. package/lib/Utils/messages.d.ts +76 -76
  101. package/lib/Utils/messages.js +768 -768
  102. package/lib/Utils/noise-handler.d.ts +20 -20
  103. package/lib/Utils/noise-handler.js +142 -142
  104. package/lib/Utils/process-message.d.ts +41 -41
  105. package/lib/Utils/process-message.js +320 -320
  106. package/lib/Utils/signal.d.ts +32 -32
  107. package/lib/Utils/signal.js +151 -151
  108. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -12
  109. package/lib/Utils/use-multi-file-auth-state.js +80 -80
  110. package/lib/Utils/validate-connection.d.ts +11 -11
  111. package/lib/Utils/validate-connection.js +191 -222
  112. package/lib/WABinary/constants.d.ts +27 -27
  113. package/lib/WABinary/constants.js +40 -40
  114. package/lib/WABinary/decode.d.ts +7 -7
  115. package/lib/WABinary/decode.js +252 -252
  116. package/lib/WABinary/encode.d.ts +3 -3
  117. package/lib/WABinary/encode.js +228 -228
  118. package/lib/WABinary/generic-utils.d.ts +15 -15
  119. package/lib/WABinary/generic-utils.js +110 -110
  120. package/lib/WABinary/index.d.ts +5 -5
  121. package/lib/WABinary/index.js +21 -21
  122. package/lib/WABinary/jid-utils.d.ts +29 -29
  123. package/lib/WABinary/jid-utils.js +59 -59
  124. package/lib/WABinary/types.d.ts +18 -18
  125. package/lib/WABinary/types.js +2 -2
  126. package/lib/index.d.ts +10 -10
  127. package/lib/index.js +29 -29
  128. package/package.json +1 -1
  129. package/CHANGELOG.md +0 -4
@@ -1,222 +1,191 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeSignedDeviceIdentity = exports.configureSuccessfulPairing = exports.generateRegistrationNode = exports.generateLoginNode = exports.generateMobileNode = 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
- const getUserAgent = (config) => {
13
- var _a, _b;
14
- const osVersion = config.mobile ? '15.3.1' : '0.1';
15
- const version = config.mobile ? [2, 22, 24] : config.version;
16
- const device = config.mobile ? 'iPhone_7' : 'Desktop';
17
- const manufacturer = config.mobile ? 'Apple' : '';
18
- const platform = config.mobile ? WAProto_1.proto.ClientPayload.UserAgent.Platform.IOS : WAProto_1.proto.ClientPayload.UserAgent.Platform.MACOS;
19
- const phoneId = config.mobile ? { phoneId: config.auth.creds.phoneId } : {};
20
- return {
21
- appVersion: {
22
- primary: version[0],
23
- secondary: version[1],
24
- tertiary: version[2],
25
- },
26
- platform,
27
- releaseChannel: WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
28
- mcc: ((_a = config.auth.creds.registration) === null || _a === void 0 ? void 0 : _a.phoneNumberMobileCountryCode) || '000',
29
- mnc: ((_b = config.auth.creds.registration) === null || _b === void 0 ? void 0 : _b.phoneNumberMobileNetworkCode) || '000',
30
- osVersion: osVersion,
31
- manufacturer,
32
- device,
33
- osBuildNumber: osVersion,
34
- localeLanguageIso6391: 'en',
35
- localeCountryIso31661Alpha2: 'US',
36
- ...phoneId
37
- };
38
- };
39
- const getClientPayload = (config) => {
40
- const payload = {
41
- connectType: WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
42
- connectReason: WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,
43
- userAgent: getUserAgent(config),
44
- };
45
- return payload;
46
- };
47
- const generateMobileNode = (config) => {
48
- if (!config.auth.creds) {
49
- throw new boom_1.Boom('No registration data found', { data: config });
50
- }
51
- const payload = {
52
- ...getClientPayload(config),
53
- sessionId: Math.floor(Math.random() * 999999999 + 1),
54
- shortConnect: true,
55
- connectAttemptCount: 0,
56
- device: 0,
57
- dnsSource: {
58
- appCached: false,
59
- dnsMethod: WAProto_1.proto.ClientPayload.DNSSource.DNSResolutionMethod.SYSTEM,
60
- },
61
- passive: false,
62
- pushName: 'test',
63
- username: Number(`${config.auth.creds.registration.phoneNumberCountryCode}${config.auth.creds.registration.phoneNumberNationalNumber}`),
64
- };
65
- return WAProto_1.proto.ClientPayload.fromObject(payload);
66
- };
67
- exports.generateMobileNode = generateMobileNode;
68
- const generateLoginNode = (userJid, config) => {
69
- const { user, device } = (0, WABinary_1.jidDecode)(userJid);
70
- const payload = {
71
- ...getClientPayload(config),
72
- passive: true,
73
- username: +user,
74
- device: device,
75
- };
76
- return WAProto_1.proto.ClientPayload.fromObject(payload);
77
- };
78
- exports.generateLoginNode = generateLoginNode;
79
- const getPlatformType = (platform) => {
80
- platform = platform.toLowerCase();
81
- switch (platform) {
82
- case 'Chrome':
83
- return WAProto_1.proto.DeviceProps.PlatformType.CHROME;
84
- case 'Firefox':
85
- return WAProto_1.proto.DeviceProps.PlatformType.FIREFOX;
86
- case 'Internet Explorer':
87
- return WAProto_1.proto.DeviceProps.PlatformType.IE;
88
- case 'Edge':
89
- return WAProto_1.proto.DeviceProps.PlatformType.EDGE;
90
- case 'Opera':
91
- return WAProto_1.proto.DeviceProps.PlatformType.OPERA;
92
- case 'Safari':
93
- return WAProto_1.proto.DeviceProps.PlatformType.SAFARI;
94
- case 'Desktop':
95
- return WAProto_1.proto.DeviceProps.PlatformType.DESKTOP;
96
- case 'chrome':
97
- return WAProto_1.proto.DeviceProps.PlatformType.CHROME;
98
- case 'firefox':
99
- return WAProto_1.proto.DeviceProps.PlatformType.FIREFOX;
100
- case 'internet explorer':
101
- return WAProto_1.proto.DeviceProps.PlatformType.IE;
102
- case 'edge':
103
- return WAProto_1.proto.DeviceProps.PlatformType.EDGE;
104
- case 'opera':
105
- return WAProto_1.proto.DeviceProps.PlatformType.OPERA;
106
- case 'safari':
107
- return WAProto_1.proto.DeviceProps.PlatformType.SAFARI;
108
- case 'desktop':
109
- return WAProto_1.proto.DeviceProps.PlatformType.DESKTOP;
110
- default:
111
- return WAProto_1.proto.DeviceProps.PlatformType.DESKTOP;
112
- }
113
- };
114
- const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
115
- // the app version needs to be md5 hashed
116
- // and passed in
117
- const appVersionBuf = (0, crypto_1.createHash)('md5')
118
- .update(config.version.join('.')) // join as string
119
- .digest();
120
- const companion = {
121
- os: config.browser[0],
122
- platformType: getPlatformType(config.browser[1]),
123
- requireFullSync: config.syncFullHistory,
124
- };
125
- const companionProto = WAProto_1.proto.DeviceProps.encode(companion).finish();
126
- const registerPayload = {
127
- ...getClientPayload(config),
128
- passive: false,
129
- devicePairingData: {
130
- buildHash: appVersionBuf,
131
- deviceProps: companionProto,
132
- eRegid: (0, generics_1.encodeBigEndian)(registrationId),
133
- eKeytype: Defaults_1.KEY_BUNDLE_TYPE,
134
- eIdent: signedIdentityKey.public,
135
- eSkeyId: (0, generics_1.encodeBigEndian)(signedPreKey.keyId, 3),
136
- eSkeyVal: signedPreKey.keyPair.public,
137
- eSkeySig: signedPreKey.signature,
138
- },
139
- };
140
- return WAProto_1.proto.ClientPayload.fromObject(registerPayload);
141
- };
142
- exports.generateRegistrationNode = generateRegistrationNode;
143
- const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
144
- const msgId = stanza.attrs.id;
145
- const pairSuccessNode = (0, WABinary_1.getBinaryNodeChild)(stanza, 'pair-success');
146
- const deviceIdentityNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device-identity');
147
- const platformNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'platform');
148
- const deviceNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device');
149
- const businessNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'biz');
150
- if (!deviceIdentityNode || !deviceNode) {
151
- throw new boom_1.Boom('Missing device-identity or device in pair success node', { data: stanza });
152
- }
153
- const bizName = businessNode === null || businessNode === void 0 ? void 0 : businessNode.attrs.name;
154
- const jid = deviceNode.attrs.jid;
155
- const { details, hmac } = WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
156
- // check HMAC matches
157
- const advSign = (0, crypto_2.hmacSign)(details, Buffer.from(advSecretKey, 'base64'));
158
- if (Buffer.compare(hmac, advSign) !== 0) {
159
- throw new boom_1.Boom('Invalid account signature');
160
- }
161
- const account = WAProto_1.proto.ADVSignedDeviceIdentity.decode(details);
162
- const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
163
- // verify the device signature matches
164
- const accountMsg = Buffer.concat([Buffer.from([6, 0]), deviceDetails, signedIdentityKey.public]);
165
- if (!crypto_2.Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
166
- throw new boom_1.Boom('Failed to verify account signature');
167
- }
168
- // sign the details with our identity key
169
- const deviceMsg = Buffer.concat([Buffer.from([6, 1]), deviceDetails, signedIdentityKey.public, accountSignatureKey]);
170
- account.deviceSignature = crypto_2.Curve.sign(signedIdentityKey.private, deviceMsg);
171
- const identity = (0, signal_1.createSignalIdentity)(jid, accountSignatureKey);
172
- const accountEnc = (0, exports.encodeSignedDeviceIdentity)(account, false);
173
- const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(account.details);
174
- const reply = {
175
- tag: 'iq',
176
- attrs: {
177
- to: WABinary_1.S_WHATSAPP_NET,
178
- type: 'result',
179
- id: msgId,
180
- },
181
- content: [
182
- {
183
- tag: 'pair-device-sign',
184
- attrs: {},
185
- content: [
186
- {
187
- tag: 'device-identity',
188
- attrs: { 'key-index': deviceIdentity.keyIndex.toString() },
189
- content: accountEnc
190
- }
191
- ]
192
- }
193
- ]
194
- };
195
- const authUpdate = {
196
- account,
197
- me: { id: jid, name: bizName },
198
- signalIdentities: [
199
- ...(signalIdentities || []),
200
- identity
201
- ],
202
- platform: platformNode === null || platformNode === void 0 ? void 0 : platformNode.attrs.name
203
- };
204
- return {
205
- creds: authUpdate,
206
- reply
207
- };
208
- };
209
- exports.configureSuccessfulPairing = configureSuccessfulPairing;
210
- const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
211
- var _a;
212
- account = { ...account };
213
- // set to null if we are not to include the signature key
214
- // or if we are including the signature key but it is empty
215
- if (!includeSignatureKey || !((_a = account.accountSignatureKey) === null || _a === void 0 ? void 0 : _a.length)) {
216
- account.accountSignatureKey = null;
217
- }
218
- return WAProto_1.proto.ADVSignedDeviceIdentity
219
- .encode(account)
220
- .finish();
221
- };
222
- exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeSignedDeviceIdentity = exports.configureSuccessfulPairing = exports.generateRegistrationNode = exports.generateLoginNode = exports.generateMobileNode = 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
+ const getUserAgent = (config) => {
13
+ var _a, _b;
14
+ const osVersion = config.mobile ? '15.3.1' : '0.1';
15
+ const version = config.mobile ? [2, 22, 24] : config.version;
16
+ const device = config.mobile ? 'iPhone_7' : 'Desktop';
17
+ const manufacturer = config.mobile ? 'Apple' : '';
18
+ const platform = config.mobile ? WAProto_1.proto.ClientPayload.UserAgent.Platform.IOS : WAProto_1.proto.ClientPayload.UserAgent.Platform.MACOS;
19
+ const phoneId = config.mobile ? { phoneId: config.auth.creds.phoneId } : {};
20
+ return {
21
+ appVersion: {
22
+ primary: version[0],
23
+ secondary: version[1],
24
+ tertiary: version[2],
25
+ },
26
+ platform,
27
+ releaseChannel: WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,
28
+ mcc: ((_a = config.auth.creds.registration) === null || _a === void 0 ? void 0 : _a.phoneNumberMobileCountryCode) || '000',
29
+ mnc: ((_b = config.auth.creds.registration) === null || _b === void 0 ? void 0 : _b.phoneNumberMobileNetworkCode) || '000',
30
+ osVersion: osVersion,
31
+ manufacturer,
32
+ device,
33
+ osBuildNumber: osVersion,
34
+ localeLanguageIso6391: 'en',
35
+ localeCountryIso31661Alpha2: 'US',
36
+ ...phoneId
37
+ };
38
+ };
39
+ const getClientPayload = (config) => {
40
+ const payload = {
41
+ connectType: WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
42
+ connectReason: WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,
43
+ userAgent: getUserAgent(config),
44
+ };
45
+ return payload;
46
+ };
47
+ const generateMobileNode = (config) => {
48
+ if (!config.auth.creds) {
49
+ throw new boom_1.Boom('No registration data found', { data: config });
50
+ }
51
+ const payload = {
52
+ ...getClientPayload(config),
53
+ sessionId: Math.floor(Math.random() * 999999999 + 1),
54
+ shortConnect: true,
55
+ connectAttemptCount: 0,
56
+ device: 0,
57
+ dnsSource: {
58
+ appCached: false,
59
+ dnsMethod: WAProto_1.proto.ClientPayload.DNSSource.DNSResolutionMethod.SYSTEM,
60
+ },
61
+ passive: false,
62
+ pushName: 'test',
63
+ username: Number(`${config.auth.creds.registration.phoneNumberCountryCode}${config.auth.creds.registration.phoneNumberNationalNumber}`),
64
+ };
65
+ return WAProto_1.proto.ClientPayload.fromObject(payload);
66
+ };
67
+ exports.generateMobileNode = generateMobileNode;
68
+ const generateLoginNode = (userJid, config) => {
69
+ const { user, device } = (0, WABinary_1.jidDecode)(userJid);
70
+ const payload = {
71
+ ...getClientPayload(config),
72
+ passive: true,
73
+ username: +user,
74
+ device: device,
75
+ };
76
+ return WAProto_1.proto.ClientPayload.fromObject(payload);
77
+ };
78
+ exports.generateLoginNode = generateLoginNode;
79
+ const getPlatformType = (platform) => {
80
+ const platformType = platform.toUpperCase();
81
+ return WAProto_1.proto.DeviceProps.PlatformType[platformType] || WAProto_1.proto.DeviceProps.PlatformType.DESKTOP;
82
+ };
83
+ const generateRegistrationNode = ({ registrationId, signedPreKey, signedIdentityKey }, config) => {
84
+ // the app version needs to be md5 hashed
85
+ // and passed in
86
+ const appVersionBuf = (0, crypto_1.createHash)('md5')
87
+ .update(config.version.join('.')) // join as string
88
+ .digest();
89
+ const companion = {
90
+ os: config.browser[0],
91
+ platformType: getPlatformType(config.browser[1]),
92
+ requireFullSync: config.syncFullHistory,
93
+ };
94
+ const companionProto = WAProto_1.proto.DeviceProps.encode(companion).finish();
95
+ const registerPayload = {
96
+ ...getClientPayload(config),
97
+ passive: false,
98
+ devicePairingData: {
99
+ buildHash: appVersionBuf,
100
+ deviceProps: companionProto,
101
+ eRegid: (0, generics_1.encodeBigEndian)(registrationId),
102
+ eKeytype: Defaults_1.KEY_BUNDLE_TYPE,
103
+ eIdent: signedIdentityKey.public,
104
+ eSkeyId: (0, generics_1.encodeBigEndian)(signedPreKey.keyId, 3),
105
+ eSkeyVal: signedPreKey.keyPair.public,
106
+ eSkeySig: signedPreKey.signature,
107
+ },
108
+ };
109
+ return WAProto_1.proto.ClientPayload.fromObject(registerPayload);
110
+ };
111
+ exports.generateRegistrationNode = generateRegistrationNode;
112
+ const configureSuccessfulPairing = (stanza, { advSecretKey, signedIdentityKey, signalIdentities }) => {
113
+ const msgId = stanza.attrs.id;
114
+ const pairSuccessNode = (0, WABinary_1.getBinaryNodeChild)(stanza, 'pair-success');
115
+ const deviceIdentityNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device-identity');
116
+ const platformNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'platform');
117
+ const deviceNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'device');
118
+ const businessNode = (0, WABinary_1.getBinaryNodeChild)(pairSuccessNode, 'biz');
119
+ if (!deviceIdentityNode || !deviceNode) {
120
+ throw new boom_1.Boom('Missing device-identity or device in pair success node', { data: stanza });
121
+ }
122
+ const bizName = businessNode === null || businessNode === void 0 ? void 0 : businessNode.attrs.name;
123
+ const jid = deviceNode.attrs.jid;
124
+ const { details, hmac } = WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(deviceIdentityNode.content);
125
+ // check HMAC matches
126
+ const advSign = (0, crypto_2.hmacSign)(details, Buffer.from(advSecretKey, 'base64'));
127
+ if (Buffer.compare(hmac, advSign) !== 0) {
128
+ throw new boom_1.Boom('Invalid account signature');
129
+ }
130
+ const account = WAProto_1.proto.ADVSignedDeviceIdentity.decode(details);
131
+ const { accountSignatureKey, accountSignature, details: deviceDetails } = account;
132
+ // verify the device signature matches
133
+ const accountMsg = Buffer.concat([Buffer.from([6, 0]), deviceDetails, signedIdentityKey.public]);
134
+ if (!crypto_2.Curve.verify(accountSignatureKey, accountMsg, accountSignature)) {
135
+ throw new boom_1.Boom('Failed to verify account signature');
136
+ }
137
+ // sign the details with our identity key
138
+ const deviceMsg = Buffer.concat([Buffer.from([6, 1]), deviceDetails, signedIdentityKey.public, accountSignatureKey]);
139
+ account.deviceSignature = crypto_2.Curve.sign(signedIdentityKey.private, deviceMsg);
140
+ const identity = (0, signal_1.createSignalIdentity)(jid, accountSignatureKey);
141
+ const accountEnc = (0, exports.encodeSignedDeviceIdentity)(account, false);
142
+ const deviceIdentity = WAProto_1.proto.ADVDeviceIdentity.decode(account.details);
143
+ const reply = {
144
+ tag: 'iq',
145
+ attrs: {
146
+ to: WABinary_1.S_WHATSAPP_NET,
147
+ type: 'result',
148
+ id: msgId,
149
+ },
150
+ content: [
151
+ {
152
+ tag: 'pair-device-sign',
153
+ attrs: {},
154
+ content: [
155
+ {
156
+ tag: 'device-identity',
157
+ attrs: { 'key-index': deviceIdentity.keyIndex.toString() },
158
+ content: accountEnc
159
+ }
160
+ ]
161
+ }
162
+ ]
163
+ };
164
+ const authUpdate = {
165
+ account,
166
+ me: { id: jid, name: bizName },
167
+ signalIdentities: [
168
+ ...(signalIdentities || []),
169
+ identity
170
+ ],
171
+ platform: platformNode === null || platformNode === void 0 ? void 0 : platformNode.attrs.name
172
+ };
173
+ return {
174
+ creds: authUpdate,
175
+ reply
176
+ };
177
+ };
178
+ exports.configureSuccessfulPairing = configureSuccessfulPairing;
179
+ const encodeSignedDeviceIdentity = (account, includeSignatureKey) => {
180
+ var _a;
181
+ account = { ...account };
182
+ // set to null if we are not to include the signature key
183
+ // or if we are including the signature key but it is empty
184
+ if (!includeSignatureKey || !((_a = account.accountSignatureKey) === null || _a === void 0 ? void 0 : _a.length)) {
185
+ account.accountSignatureKey = null;
186
+ }
187
+ return WAProto_1.proto.ADVSignedDeviceIdentity
188
+ .encode(account)
189
+ .finish();
190
+ };
191
+ exports.encodeSignedDeviceIdentity = encodeSignedDeviceIdentity;
@@ -1,27 +1,27 @@
1
- export declare const TAGS: {
2
- LIST_EMPTY: number;
3
- DICTIONARY_0: number;
4
- DICTIONARY_1: number;
5
- DICTIONARY_2: number;
6
- DICTIONARY_3: number;
7
- AD_JID: number;
8
- LIST_8: number;
9
- LIST_16: number;
10
- JID_PAIR: number;
11
- HEX_8: number;
12
- BINARY_8: number;
13
- BINARY_20: number;
14
- BINARY_32: number;
15
- NIBBLE_8: number;
16
- PACKED_MAX: number;
17
- SINGLE_BYTE_MAX: number;
18
- STREAM_END: number;
19
- };
20
- export declare const DOUBLE_BYTE_TOKENS: string[][];
21
- export declare const SINGLE_BYTE_TOKENS: (string | null)[];
22
- export declare const TOKEN_MAP: {
23
- [token: string]: {
24
- dict?: number;
25
- index: number;
26
- };
27
- };
1
+ export declare const TAGS: {
2
+ LIST_EMPTY: number;
3
+ DICTIONARY_0: number;
4
+ DICTIONARY_1: number;
5
+ DICTIONARY_2: number;
6
+ DICTIONARY_3: number;
7
+ AD_JID: number;
8
+ LIST_8: number;
9
+ LIST_16: number;
10
+ JID_PAIR: number;
11
+ HEX_8: number;
12
+ BINARY_8: number;
13
+ BINARY_20: number;
14
+ BINARY_32: number;
15
+ NIBBLE_8: number;
16
+ PACKED_MAX: number;
17
+ SINGLE_BYTE_MAX: number;
18
+ STREAM_END: number;
19
+ };
20
+ export declare const DOUBLE_BYTE_TOKENS: string[][];
21
+ export declare const SINGLE_BYTE_TOKENS: (string | null)[];
22
+ export declare const TOKEN_MAP: {
23
+ [token: string]: {
24
+ dict?: number;
25
+ index: number;
26
+ };
27
+ };