@badzz88/baileys 8.4.7 → 8.4.9

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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1055 -337
  3. package/WAProto/WAProto.proto +347 -6
  4. package/WAProto/fix-import.js +38 -0
  5. package/WAProto/fix-imports.js +86 -85
  6. package/WAProto/index.d.ts +4913 -25
  7. package/WAProto/index.js +14074 -98
  8. package/package.json +50 -90
  9. package/src/Defaults/index.js +201 -0
  10. package/src/Defaults/phonenumber-mcc.json +223 -0
  11. package/src/Signal/Group/ciphertext-message.js +15 -0
  12. package/src/Signal/Group/group-session-builder.js +92 -0
  13. package/src/Signal/Group/group_cipher.js +89 -0
  14. package/src/Signal/Group/index.js +136 -0
  15. package/src/Signal/Group/keyhelper.js +73 -0
  16. package/src/Signal/Group/sender-chain-key.js +32 -0
  17. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  18. package/src/Signal/Group/sender-key-message.js +69 -0
  19. package/src/Signal/Group/sender-key-name.js +50 -0
  20. package/src/Signal/Group/sender-key-record.js +44 -0
  21. package/src/Signal/Group/sender-key-state.js +97 -0
  22. package/src/Signal/Group/sender-message-key.js +30 -0
  23. package/src/Signal/libsignal.js +470 -0
  24. package/src/Signal/lid-mapping.js +262 -0
  25. package/src/Socket/Client/index.js +30 -0
  26. package/src/Socket/Client/types.js +13 -0
  27. package/src/Socket/Client/websocket.js +62 -0
  28. package/src/Socket/aigroups.js +240 -0
  29. package/src/Socket/business.js +422 -0
  30. package/src/Socket/chats.js +2374 -0
  31. package/src/Socket/communities.js +580 -0
  32. package/src/Socket/graphql.js +915 -0
  33. package/src/Socket/groups.js +812 -0
  34. package/src/Socket/index.js +37 -0
  35. package/src/Socket/interactive-handler.js +579 -0
  36. package/src/Socket/interop.js +566 -0
  37. package/src/Socket/managed-account.js +214 -0
  38. package/src/Socket/messages-recv.js +3012 -0
  39. package/src/Socket/messages-send.js +2163 -0
  40. package/{lib → src}/Socket/mex.js +11 -5
  41. package/src/Socket/newsletter.js +1057 -0
  42. package/src/Socket/privacy.js +452 -0
  43. package/src/Socket/registration.js +434 -0
  44. package/src/Socket/socket.js +1079 -0
  45. package/src/Socket/text-router.js +67 -0
  46. package/src/Socket/username.js +234 -0
  47. package/src/Store/index.js +36 -0
  48. package/src/Store/make-cache-manager-store.js +90 -0
  49. package/src/Store/make-in-memory-store.js +506 -0
  50. package/src/Store/make-ordered-dictionary.js +81 -0
  51. package/src/Store/object-repository.js +29 -0
  52. package/src/Types/Auth.js +38 -0
  53. package/src/Types/Bussines.js +2 -0
  54. package/src/Types/Call.js +2 -0
  55. package/src/Types/Chat.js +4 -0
  56. package/src/Types/Contact.js +2 -0
  57. package/src/Types/Events.js +2 -0
  58. package/src/Types/GroupMetadata.js +2 -0
  59. package/src/Types/Label.js +27 -0
  60. package/src/Types/LabelAssociation.js +9 -0
  61. package/src/Types/Message.js +95 -0
  62. package/src/Types/Newsletter.js +152 -0
  63. package/src/Types/Product.js +2 -0
  64. package/src/Types/Signal.js +2 -0
  65. package/src/Types/Socket.js +2 -0
  66. package/src/Types/State.js +70 -0
  67. package/src/Types/USync.js +2 -0
  68. package/src/Types/index.js +54 -0
  69. package/src/Utils/auth-utils.js +306 -0
  70. package/src/Utils/browser-utils.js +114 -0
  71. package/src/Utils/business.js +247 -0
  72. package/src/Utils/chat-utils.js +1272 -0
  73. package/src/Utils/consumer-application.js +107 -0
  74. package/src/Utils/crypto.js +125 -0
  75. package/src/Utils/decode-wa-message.js +808 -0
  76. package/src/Utils/event-buffer.js +586 -0
  77. package/src/Utils/generics.js +640 -0
  78. package/src/Utils/group-history.js +60 -0
  79. package/src/Utils/history.js +244 -0
  80. package/src/Utils/identity-change-handler.js +52 -0
  81. package/src/Utils/index.js +53 -0
  82. package/src/Utils/jid-display-normalization.js +218 -0
  83. package/src/Utils/link-preview.js +143 -0
  84. package/src/Utils/logger.js +9 -0
  85. package/src/Utils/lt-hash.js +10 -0
  86. package/src/Utils/make-mutex.js +36 -0
  87. package/src/Utils/message-composer.js +479 -0
  88. package/src/Utils/message-inspect.js +400 -0
  89. package/src/Utils/message-retry-manager.js +231 -0
  90. package/src/Utils/messages-media.js +943 -0
  91. package/src/Utils/messages.js +2490 -0
  92. package/src/Utils/meta-ai-msmsg.js +133 -0
  93. package/src/Utils/noise-handler.js +194 -0
  94. package/src/Utils/offline-node-processor.js +42 -0
  95. package/src/Utils/pre-key-manager.js +107 -0
  96. package/src/Utils/process-message.js +1047 -0
  97. package/src/Utils/reporting-utils.js +262 -0
  98. package/src/Utils/signal.js +192 -0
  99. package/src/Utils/stanza-ack.js +74 -0
  100. package/src/Utils/sync-action-utils.js +54 -0
  101. package/src/Utils/tc-token-utils.js +161 -0
  102. package/src/Utils/use-multi-file-auth-state.js +121 -0
  103. package/src/Utils/validate-connection.js +248 -0
  104. package/src/Utils/voip-rekey.js +22 -0
  105. package/src/WABinary/constants.js +1304 -0
  106. package/src/WABinary/decode.js +377 -0
  107. package/src/WABinary/encode.js +58 -0
  108. package/src/WABinary/generic-utils.js +148 -0
  109. package/src/WABinary/index.js +33 -0
  110. package/src/WABinary/jid-utils.js +374 -0
  111. package/src/WABinary/types.js +2 -0
  112. package/src/WAM/BinaryInfo.js +13 -0
  113. package/src/WAM/constants.js +39486 -0
  114. package/src/WAM/encode.js +142 -0
  115. package/src/WAM/index.js +31 -0
  116. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +55 -0
  117. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +100 -0
  118. package/src/WAUSync/Protocols/USyncContactProtocol.js +60 -0
  119. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +65 -0
  120. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  121. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +74 -0
  122. package/src/WAUSync/Protocols/USyncLIDProtocol.js +31 -0
  123. package/src/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
  124. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  125. package/src/WAUSync/Protocols/USyncStatusProtocol.js +44 -0
  126. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  127. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  128. package/src/WAUSync/Protocols/index.js +40 -0
  129. package/src/WAUSync/USyncBackoff.js +31 -0
  130. package/src/WAUSync/USyncQuery.js +204 -0
  131. package/src/WAUSync/USyncUser.js +58 -0
  132. package/src/WAUSync/index.js +32 -0
  133. package/src/antiban.js +4726 -0
  134. package/{lib → src}/index.js +48 -15
  135. package/lib/Defaults/index.js +0 -130
  136. package/lib/Signal/Group/ciphertext-message.js +0 -12
  137. package/lib/Signal/Group/group-session-builder.js +0 -30
  138. package/lib/Signal/Group/group_cipher.js +0 -82
  139. package/lib/Signal/Group/index.js +0 -12
  140. package/lib/Signal/Group/keyhelper.js +0 -18
  141. package/lib/Signal/Group/sender-chain-key.js +0 -26
  142. package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
  143. package/lib/Signal/Group/sender-key-message.js +0 -66
  144. package/lib/Signal/Group/sender-key-name.js +0 -48
  145. package/lib/Signal/Group/sender-key-record.js +0 -41
  146. package/lib/Signal/Group/sender-key-state.js +0 -84
  147. package/lib/Signal/Group/sender-message-key.js +0 -26
  148. package/lib/Signal/libsignal.js +0 -431
  149. package/lib/Signal/lid-mapping.js +0 -277
  150. package/lib/Socket/Client/index.js +0 -3
  151. package/lib/Socket/Client/types.js +0 -11
  152. package/lib/Socket/Client/websocket.js +0 -54
  153. package/lib/Socket/business.js +0 -379
  154. package/lib/Socket/chats.js +0 -1193
  155. package/lib/Socket/communities.js +0 -431
  156. package/lib/Socket/groups.js +0 -374
  157. package/lib/Socket/index.js +0 -12
  158. package/lib/Socket/luxu.js +0 -386
  159. package/lib/Socket/messages-recv.js +0 -1916
  160. package/lib/Socket/messages-send.js +0 -1453
  161. package/lib/Socket/newsletter.js +0 -251
  162. package/lib/Socket/socket.js +0 -980
  163. package/lib/Socket/username.js +0 -146
  164. package/lib/Store/index.js +0 -10
  165. package/lib/Store/keyed-db.js +0 -108
  166. package/lib/Store/make-cache-manager-store.js +0 -85
  167. package/lib/Store/make-in-memory-store.js +0 -198
  168. package/lib/Store/make-ordered-dictionary.js +0 -75
  169. package/lib/Store/object-repository.js +0 -32
  170. package/lib/Types/Auth.js +0 -2
  171. package/lib/Types/Bussines.js +0 -2
  172. package/lib/Types/Call.js +0 -2
  173. package/lib/Types/Chat.js +0 -8
  174. package/lib/Types/Contact.js +0 -2
  175. package/lib/Types/Events.js +0 -2
  176. package/lib/Types/GroupMetadata.js +0 -2
  177. package/lib/Types/Label.js +0 -25
  178. package/lib/Types/LabelAssociation.js +0 -7
  179. package/lib/Types/Message.js +0 -11
  180. package/lib/Types/Mex.js +0 -37
  181. package/lib/Types/Product.js +0 -2
  182. package/lib/Types/Signal.js +0 -2
  183. package/lib/Types/Socket.js +0 -3
  184. package/lib/Types/State.js +0 -56
  185. package/lib/Types/USync.js +0 -2
  186. package/lib/Types/index.js +0 -26
  187. package/lib/Utils/auth-utils.js +0 -302
  188. package/lib/Utils/browser-utils.js +0 -49
  189. package/lib/Utils/business.js +0 -231
  190. package/lib/Utils/chat-utils.js +0 -872
  191. package/lib/Utils/companion-reg-client-utils.js +0 -35
  192. package/lib/Utils/crypto.js +0 -118
  193. package/lib/Utils/decode-wa-message.js +0 -350
  194. package/lib/Utils/event-buffer.js +0 -622
  195. package/lib/Utils/generics.js +0 -403
  196. package/lib/Utils/history.js +0 -134
  197. package/lib/Utils/identity-change-handler.js +0 -50
  198. package/lib/Utils/index.js +0 -23
  199. package/lib/Utils/link-preview.js +0 -85
  200. package/lib/Utils/logger.js +0 -3
  201. package/lib/Utils/lt-hash.js +0 -8
  202. package/lib/Utils/make-mutex.js +0 -33
  203. package/lib/Utils/message-composer.js +0 -273
  204. package/lib/Utils/message-retry-manager.js +0 -265
  205. package/lib/Utils/messages-media.js +0 -788
  206. package/lib/Utils/messages.js +0 -1260
  207. package/lib/Utils/noise-handler.js +0 -201
  208. package/lib/Utils/offline-node-processor.js +0 -40
  209. package/lib/Utils/pre-key-manager.js +0 -106
  210. package/lib/Utils/process-message.js +0 -630
  211. package/lib/Utils/reporting-utils.js +0 -258
  212. package/lib/Utils/signal.js +0 -201
  213. package/lib/Utils/stanza-ack.js +0 -38
  214. package/lib/Utils/sync-action-utils.js +0 -49
  215. package/lib/Utils/tc-token-utils.js +0 -163
  216. package/lib/Utils/use-multi-file-auth-state.js +0 -121
  217. package/lib/Utils/validate-connection.js +0 -203
  218. package/lib/WABinary/constants.js +0 -1301
  219. package/lib/WABinary/decode.js +0 -262
  220. package/lib/WABinary/encode.js +0 -220
  221. package/lib/WABinary/generic-utils.js +0 -204
  222. package/lib/WABinary/index.js +0 -6
  223. package/lib/WABinary/jid-utils.js +0 -98
  224. package/lib/WABinary/types.js +0 -2
  225. package/lib/WAM/BinaryInfo.js +0 -10
  226. package/lib/WAM/constants.js +0 -22853
  227. package/lib/WAM/encode.js +0 -150
  228. package/lib/WAM/index.js +0 -4
  229. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -52
  230. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -54
  231. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
  232. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -263
  233. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -38
  234. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  235. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
  236. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
  237. package/lib/WAUSync/Protocols/index.js +0 -6
  238. package/lib/WAUSync/USyncQuery.js +0 -98
  239. package/lib/WAUSync/USyncUser.js +0 -31
  240. package/lib/WAUSync/index.js +0 -4
@@ -0,0 +1,107 @@
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.consumerApplicationToMessage = exports.decodeConsumerApplication = void 0
4
+ const index_js_1 = require('../../WAProto/index.js')
5
+
6
+ const decodeConsumerApplication = buffer => {
7
+ if (!Buffer.isBuffer(buffer) && !(buffer instanceof Uint8Array)) {
8
+ throw new TypeError('decodeConsumerApplication: buffer must be Buffer or Uint8Array')
9
+ }
10
+ return index_js_1.proto.ConsumerApplication.decode(buffer)
11
+ }
12
+ exports.decodeConsumerApplication = decodeConsumerApplication
13
+
14
+ const textOf = mt => (mt && typeof mt.text === 'string' ? mt.text : undefined)
15
+
16
+ const mapContent = content => {
17
+ if (!content) return null
18
+ switch (content.content) {
19
+ case 'messageText':
20
+ return { conversation: textOf(content.messageText) ?? '' }
21
+ case 'extendedTextMessage': {
22
+ const e = content.extendedTextMessage
23
+ return {
24
+ extendedTextMessage: {
25
+ text: textOf(e.text),
26
+ matchedText: e.matchedText,
27
+ canonicalUrl: e.canonicalUrl,
28
+ description: e.description,
29
+ title: e.title
30
+ }
31
+ }
32
+ }
33
+ case 'imageMessage':
34
+ return {
35
+ imageMessage: { mediaPayload: content.imageMessage.image, caption: textOf(content.imageMessage.caption) }
36
+ }
37
+ case 'videoMessage':
38
+ return {
39
+ videoMessage: { mediaPayload: content.videoMessage.video, caption: textOf(content.videoMessage.caption) }
40
+ }
41
+ case 'audioMessage':
42
+ return { audioMessage: { mediaPayload: content.audioMessage.audio, ptt: content.audioMessage.ptt } }
43
+ case 'documentMessage':
44
+ return {
45
+ documentMessage: { mediaPayload: content.documentMessage.document, fileName: content.documentMessage.fileName }
46
+ }
47
+ case 'stickerMessage':
48
+ return { stickerMessage: { mediaPayload: content.stickerMessage.sticker } }
49
+ case 'contactMessage':
50
+ return { contactMessage: { mediaPayload: content.contactMessage.contact } }
51
+ case 'contactsArrayMessage':
52
+ return {
53
+ contactsArrayMessage: {
54
+ displayName: content.contactsArrayMessage.displayName,
55
+ contacts: content.contactsArrayMessage.contacts || []
56
+ }
57
+ }
58
+ case 'locationMessage': {
59
+ const loc = content.locationMessage.location || {}
60
+ return {
61
+ locationMessage: {
62
+ degreesLatitude: loc.degreesLatitude,
63
+ degreesLongitude: loc.degreesLongitude,
64
+ name: loc.name
65
+ }
66
+ }
67
+ }
68
+ case 'liveLocationMessage': {
69
+ const loc = content.liveLocationMessage.location || {}
70
+ return {
71
+ liveLocationMessage: {
72
+ degreesLatitude: loc.degreesLatitude,
73
+ degreesLongitude: loc.degreesLongitude,
74
+ caption: textOf(content.liveLocationMessage.caption)
75
+ }
76
+ }
77
+ }
78
+ case 'reactionMessage':
79
+ return { reactionMessage: content.reactionMessage }
80
+ default:
81
+ return null
82
+ }
83
+ }
84
+
85
+ const consumerApplicationToMessage = app => {
86
+ const payload = app?.payload
87
+ if (!payload) return null
88
+ switch (payload.payload) {
89
+ case 'content':
90
+ return mapContent(payload.content)
91
+ case 'applicationData': {
92
+ const ad = payload.applicationData
93
+ if (ad?.applicationContent === 'revoke' && ad.revoke?.key) {
94
+ return {
95
+ protocolMessage: {
96
+ key: ad.revoke.key,
97
+ type: index_js_1.proto.Message.ProtocolMessage.Type.REVOKE
98
+ }
99
+ }
100
+ }
101
+ return null
102
+ }
103
+ default:
104
+ return null
105
+ }
106
+ }
107
+ exports.consumerApplicationToMessage = consumerApplicationToMessage
@@ -0,0 +1,125 @@
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.signedKeyPair =
4
+ exports.Curve =
5
+ exports.generateSignalPubKey =
6
+ exports.getEnabledFeatures =
7
+ exports.hkdf =
8
+ exports.md5 =
9
+ void 0
10
+ exports.aesEncryptGCM = aesEncryptGCM
11
+ exports.aesDecryptGCM = aesDecryptGCM
12
+ exports.aesEncryptCTR = aesEncryptCTR
13
+ exports.aesDecryptCTR = aesDecryptCTR
14
+ exports.aesDecrypt = aesDecrypt
15
+ exports.aesDecryptWithIV = aesDecryptWithIV
16
+ exports.aesEncrypt = aesEncrypt
17
+ exports.aesEncrypWithIV = aesEncrypWithIV
18
+ exports.hmacSign = hmacSign
19
+ exports.sha256 = sha256
20
+ exports.derivePairingCodeKey = derivePairingCodeKey
21
+ const { subtle } = globalThis.crypto
22
+ const Defaults_1 = require('../Defaults')
23
+ const rb = require('whatsapp-rust-bridge-baron')
24
+
25
+ // ── Re-exports from Rust ─────────────────────────────────────────────────────
26
+ Object.defineProperty(exports, 'md5', { enumerable: true, get: () => rb.md5 })
27
+ Object.defineProperty(exports, 'hkdf', { enumerable: true, get: () => rb.hkdf })
28
+ Object.defineProperty(exports, 'getEnabledFeatures', { enumerable: true, get: () => rb.getEnabledFeatures })
29
+
30
+ // ── Signal pub key helper ─────────────────────────────────────────────────────
31
+ const generateSignalPubKey = pubKey =>
32
+ pubKey.length === 33 ? pubKey : Buffer.concat([Defaults_1.KEY_BUNDLE_TYPE, pubKey])
33
+ exports.generateSignalPubKey = generateSignalPubKey
34
+
35
+ // ── Curve — fully delegated to Rust bridge ────────────────────────────────────
36
+ exports.Curve = {
37
+ generateKeyPair: () => {
38
+ const pair = rb.generateKeyPair()
39
+ return {
40
+ private: Buffer.from(pair.privKey),
41
+ public: Buffer.from(pair.pubKey).subarray(1) // strip 0x05 prefix
42
+ }
43
+ },
44
+ sharedKey: (privateKey, publicKey) => Buffer.from(rb.calculateAgreement(generateSignalPubKey(publicKey), privateKey)),
45
+ sign: (privateKey, buf) => rb.calculateSignature(privateKey, buf),
46
+ verify: (pubKey, message, signature) => {
47
+ try {
48
+ return rb.verifySignature(generateSignalPubKey(pubKey), message, signature)
49
+ } catch {
50
+ return false
51
+ }
52
+ }
53
+ }
54
+
55
+ const signedKeyPair = (identityKeyPair, keyId) => {
56
+ const preKey = exports.Curve.generateKeyPair()
57
+ const pubKey = generateSignalPubKey(preKey.public)
58
+ const signature = exports.Curve.sign(identityKeyPair.private, pubKey)
59
+ return { keyPair: preKey, signature, keyId }
60
+ }
61
+ exports.signedKeyPair = signedKeyPair
62
+
63
+ // ── AES-256-GCM ───────────────────────────────────────────────────────────────
64
+ function aesEncryptGCM(plaintext, key, iv, additionalData) {
65
+ return Buffer.from(rb.aesEncryptGCM(plaintext, key, iv, additionalData))
66
+ }
67
+
68
+ function aesDecryptGCM(ciphertext, key, iv, additionalData) {
69
+ return Buffer.from(rb.aesDecryptGCM(ciphertext, key, iv, additionalData))
70
+ }
71
+
72
+ // ── AES-256-CTR ───────────────────────────────────────────────────────────────
73
+ function aesEncryptCTR(plaintext, key, iv) {
74
+ return Buffer.from(rb.aesEncryptCTR(plaintext, key, iv))
75
+ }
76
+
77
+ function aesDecryptCTR(ciphertext, key, iv) {
78
+ return Buffer.from(rb.aesDecryptCTR(ciphertext, key, iv))
79
+ }
80
+
81
+ // ── AES-256-CBC ───────────────────────────────────────────────────────────────
82
+ function aesDecrypt(buffer, key) {
83
+ return Buffer.from(rb.aesDecrypt(buffer, key))
84
+ }
85
+
86
+ function aesDecryptWithIV(buffer, key, IV) {
87
+ return Buffer.from(rb.aesDecryptWithIV(buffer, key, IV))
88
+ }
89
+
90
+ function aesEncrypt(buffer, key) {
91
+ return Buffer.from(rb.aesEncrypt(buffer, key))
92
+ }
93
+
94
+ function aesEncrypWithIV(buffer, key, IV) {
95
+ return Buffer.from(rb.aesEncrypWithIV(buffer, key, IV))
96
+ }
97
+
98
+ // ── HMAC-SHA256 ───────────────────────────────────────────────────────────────
99
+ function hmacSign(buffer, key, variant = 'sha256') {
100
+ if (variant !== 'sha256') {
101
+ // fallback for non-SHA256 variants (rare edge case)
102
+ const { createHmac } = require('crypto')
103
+ return createHmac(variant, key).update(buffer).digest()
104
+ }
105
+ return Buffer.from(rb.hmacSign(buffer, key))
106
+ }
107
+
108
+ // ── SHA-256 ───────────────────────────────────────────────────────────────────
109
+ function sha256(buffer) {
110
+ return Buffer.from(rb.sha256(buffer))
111
+ }
112
+
113
+ // ── PBKDF2 pairing code key ───────────────────────────────────────────────────
114
+ async function derivePairingCodeKey(pairingCode, salt) {
115
+ const encoder = new TextEncoder()
116
+ const pairingCodeBuffer = encoder.encode(pairingCode)
117
+ const saltBuffer = new Uint8Array(salt instanceof Uint8Array ? salt : new Uint8Array(salt))
118
+ const keyMaterial = await subtle.importKey('raw', pairingCodeBuffer, { name: 'PBKDF2' }, false, ['deriveBits'])
119
+ const derivedBits = await subtle.deriveBits(
120
+ { name: 'PBKDF2', salt: saltBuffer, iterations: 2 << 16, hash: 'SHA-256' },
121
+ keyMaterial,
122
+ 256
123
+ )
124
+ return Buffer.from(derivedBits)
125
+ }