@badzz88/baileys 8.4.7 → 8.5.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 (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1055 -337
  3. package/WAProto/index.js +5 -5
  4. package/lib/Defaults/index.js +187 -127
  5. package/lib/Defaults/phonenumber-mcc.json +223 -0
  6. package/lib/Signal/Group/ciphertext-message.js +14 -11
  7. package/lib/Signal/Group/group-session-builder.js +91 -29
  8. package/lib/Signal/Group/group_cipher.js +88 -81
  9. package/lib/Signal/Group/index.js +136 -12
  10. package/lib/Signal/Group/keyhelper.js +70 -15
  11. package/lib/Signal/Group/sender-chain-key.js +31 -25
  12. package/lib/Signal/Group/sender-key-distribution-message.js +65 -62
  13. package/lib/Signal/Group/sender-key-message.js +68 -65
  14. package/lib/Signal/Group/sender-key-name.js +43 -41
  15. package/lib/Signal/Group/sender-key-record.js +43 -40
  16. package/lib/Signal/Group/sender-key-state.js +96 -83
  17. package/lib/Signal/Group/sender-message-key.js +29 -25
  18. package/lib/Signal/libsignal.js +483 -424
  19. package/lib/Signal/lid-mapping.js +261 -276
  20. package/lib/Socket/Client/index.js +30 -3
  21. package/lib/Socket/Client/types.js +12 -10
  22. package/lib/Socket/Client/websocket.js +61 -53
  23. package/lib/Socket/aigroups.js +240 -0
  24. package/lib/Socket/business.js +422 -379
  25. package/lib/Socket/chats.js +1816 -1193
  26. package/lib/Socket/communities.js +549 -431
  27. package/lib/Socket/graphql.js +656 -0
  28. package/lib/Socket/groups.js +764 -374
  29. package/lib/Socket/index.js +38 -11
  30. package/lib/Socket/interactive-handler.js +522 -0
  31. package/lib/Socket/interop.js +549 -0
  32. package/lib/Socket/luxu.js +6 -5
  33. package/lib/Socket/managed-account.js +183 -0
  34. package/lib/Socket/messages-recv.js +2439 -1915
  35. package/lib/Socket/messages-send.js +1642 -1242
  36. package/lib/Socket/mex.js +59 -40
  37. package/lib/Socket/newsletter.js +812 -249
  38. package/lib/Socket/privacy.js +449 -0
  39. package/lib/Socket/registration.js +427 -0
  40. package/lib/Socket/socket.js +1077 -965
  41. package/lib/Socket/text-router.js +83 -0
  42. package/lib/Socket/username.js +237 -140
  43. package/lib/Store/index.js +36 -10
  44. package/lib/Store/make-cache-manager-store.js +85 -80
  45. package/lib/Store/make-in-memory-store.js +591 -185
  46. package/lib/Store/make-ordered-dictionary.js +78 -72
  47. package/lib/Store/object-repository.js +25 -28
  48. package/lib/Types/Auth.js +38 -2
  49. package/lib/Types/Bussines.js +2 -2
  50. package/lib/Types/Call.js +2 -2
  51. package/lib/Types/Chat.js +4 -8
  52. package/lib/Types/Contact.js +2 -2
  53. package/lib/Types/Events.js +2 -2
  54. package/lib/Types/GroupMetadata.js +2 -2
  55. package/lib/Types/Label.js +26 -24
  56. package/lib/Types/LabelAssociation.js +8 -6
  57. package/lib/Types/Message.js +95 -11
  58. package/lib/Types/Mex.js +112 -37
  59. package/lib/Types/Newsletter.js +121 -0
  60. package/lib/Types/Product.js +2 -2
  61. package/lib/Types/Signal.js +2 -2
  62. package/lib/Types/Socket.js +2 -3
  63. package/lib/Types/State.js +70 -56
  64. package/lib/Types/USync.js +2 -2
  65. package/lib/Types/index.js +55 -26
  66. package/lib/Utils/auth-utils.js +292 -288
  67. package/lib/Utils/browser-utils.js +113 -48
  68. package/lib/Utils/business.js +240 -224
  69. package/lib/Utils/chat-utils.js +1205 -869
  70. package/lib/Utils/command-loader.d.ts +31 -0
  71. package/lib/Utils/command-loader.js +100 -0
  72. package/lib/Utils/companion-reg-client-utils.js +41 -34
  73. package/lib/Utils/consumer-application.js +107 -0
  74. package/lib/Utils/crypto.js +144 -107
  75. package/lib/Utils/curve25519-js.js +275 -0
  76. package/lib/Utils/decode-wa-message.js +518 -308
  77. package/lib/Utils/event-buffer.js +596 -611
  78. package/lib/Utils/generics.js +514 -354
  79. package/lib/Utils/group-history.js +60 -0
  80. package/lib/Utils/history.js +244 -134
  81. package/lib/Utils/identity-change-handler.js +51 -49
  82. package/lib/Utils/index.js +57 -23
  83. package/lib/Utils/jid-display-normalization.js +218 -0
  84. package/lib/Utils/link-preview.js +135 -77
  85. package/lib/Utils/logger.js +9 -3
  86. package/lib/Utils/lt-hash.js +37 -6
  87. package/lib/Utils/make-mutex.js +36 -33
  88. package/lib/Utils/message-composer.js +439 -233
  89. package/lib/Utils/message-retry-manager.js +265 -260
  90. package/lib/Utils/messages-media.js +855 -747
  91. package/lib/Utils/messages.js +2528 -884
  92. package/lib/Utils/meta-ai-msmsg.js +262 -0
  93. package/lib/Utils/native-bridge.js +82 -0
  94. package/lib/Utils/noise-handler.js +195 -200
  95. package/lib/Utils/offline-node-processor.js +35 -33
  96. package/lib/Utils/pre-key-manager.js +103 -102
  97. package/lib/Utils/process-message.js +978 -560
  98. package/lib/Utils/reporting-utils.js +257 -253
  99. package/lib/Utils/session-pool.d.ts +16 -0
  100. package/lib/Utils/session-pool.js +94 -0
  101. package/lib/Utils/signal.js +218 -195
  102. package/lib/Utils/stanza-ack.js +31 -29
  103. package/lib/Utils/sticker.d.ts +17 -0
  104. package/lib/Utils/sticker.js +145 -0
  105. package/lib/Utils/sync-action-utils.js +50 -45
  106. package/lib/Utils/tc-token-utils.js +137 -139
  107. package/lib/Utils/use-multi-file-auth-state.js +109 -109
  108. package/lib/Utils/validate-connection.js +218 -202
  109. package/lib/Utils/view-once-cache.d.ts +9 -0
  110. package/lib/Utils/view-once-cache.js +79 -0
  111. package/lib/Utils/voip-rekey.js +22 -0
  112. package/lib/WABinary/constants.js +1302 -1299
  113. package/lib/WABinary/decode.js +343 -262
  114. package/lib/WABinary/encode.js +12 -4
  115. package/lib/WABinary/generic-utils.js +223 -187
  116. package/lib/WABinary/index.js +33 -6
  117. package/lib/WABinary/jid-utils.js +351 -88
  118. package/lib/WABinary/types.js +2 -2
  119. package/lib/WAM/BinaryInfo.js +12 -9
  120. package/lib/WAM/constants.js +39486 -22853
  121. package/lib/WAM/encode.js +132 -140
  122. package/lib/WAM/index.js +31 -4
  123. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +55 -0
  124. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +43 -0
  125. package/lib/WAUSync/Protocols/USyncContactProtocol.js +53 -51
  126. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +56 -53
  127. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +29 -26
  128. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +59 -0
  129. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +31 -0
  130. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
  131. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  132. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -37
  133. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  134. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +26 -24
  135. package/lib/WAUSync/Protocols/index.js +39 -6
  136. package/lib/WAUSync/USyncQuery.js +132 -97
  137. package/lib/WAUSync/USyncUser.js +49 -30
  138. package/lib/WAUSync/index.js +31 -4
  139. package/lib/antiban.js +4637 -0
  140. package/lib/index.js +48 -15
  141. package/package.json +55 -92
  142. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -263
  143. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
  144. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
@@ -1,63 +1,66 @@
1
- import { proto } from '../../../WAProto/index.js';
2
- import { CiphertextMessage } from './ciphertext-message.js';
3
- export class SenderKeyDistributionMessage extends CiphertextMessage {
4
- constructor(id, iteration, chainKey, signatureKey, serialized) {
5
- super();
6
- if (serialized) {
7
- try {
8
- const message = serialized.slice(1);
9
- const distributionMessage = proto.SenderKeyDistributionMessage.decode(message).toJSON();
10
- this.serialized = serialized;
11
- this.id = distributionMessage.id;
12
- this.iteration = distributionMessage.iteration;
13
- this.chainKey =
14
- typeof distributionMessage.chainKey === 'string'
15
- ? Buffer.from(distributionMessage.chainKey, 'base64')
16
- : distributionMessage.chainKey;
17
- this.signatureKey =
18
- typeof distributionMessage.signingKey === 'string'
19
- ? Buffer.from(distributionMessage.signingKey, 'base64')
20
- : distributionMessage.signingKey;
21
- }
22
- catch (e) {
23
- throw new Error(String(e));
24
- }
25
- }
26
- else {
27
- const version = this.intsToByteHighAndLow(this.CURRENT_VERSION, this.CURRENT_VERSION);
28
- this.id = id;
29
- this.iteration = iteration;
30
- this.chainKey = chainKey;
31
- this.signatureKey = signatureKey;
32
- const message = proto.SenderKeyDistributionMessage.encode(proto.SenderKeyDistributionMessage.create({
33
- id,
34
- iteration,
35
- chainKey,
36
- signingKey: this.signatureKey
37
- })).finish();
38
- this.serialized = Buffer.concat([Buffer.from([version]), message]);
39
- }
40
- }
41
- intsToByteHighAndLow(highValue, lowValue) {
42
- return (((highValue << 4) | lowValue) & 0xff) % 256;
43
- }
44
- serialize() {
45
- return this.serialized;
46
- }
47
- getType() {
48
- return this.SENDERKEY_DISTRIBUTION_TYPE;
49
- }
50
- getIteration() {
51
- return this.iteration;
52
- }
53
- getChainKey() {
54
- return this.chainKey;
55
- }
56
- getSignatureKey() {
57
- return this.signatureKey;
58
- }
59
- getId() {
60
- return this.id;
61
- }
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.SenderKeyDistributionMessage = void 0
4
+ const index_js_1 = require('../../../WAProto/index.js')
5
+ const ciphertext_message_1 = require('./ciphertext-message')
6
+ class SenderKeyDistributionMessage extends ciphertext_message_1.CiphertextMessage {
7
+ constructor(id, iteration, chainKey, signatureKey, serialized) {
8
+ super()
9
+ if (serialized) {
10
+ try {
11
+ const message = serialized.slice(1)
12
+ const distributionMessage = index_js_1.proto.SenderKeyDistributionMessage.decode(message).toJSON()
13
+ this.serialized = serialized
14
+ this.id = distributionMessage.id
15
+ this.iteration = distributionMessage.iteration
16
+ this.chainKey =
17
+ typeof distributionMessage.chainKey === 'string'
18
+ ? Buffer.from(distributionMessage.chainKey, 'base64')
19
+ : distributionMessage.chainKey
20
+ this.signatureKey =
21
+ typeof distributionMessage.signingKey === 'string'
22
+ ? Buffer.from(distributionMessage.signingKey, 'base64')
23
+ : distributionMessage.signingKey
24
+ } catch (e) {
25
+ throw new Error(String(e))
26
+ }
27
+ } else {
28
+ const version = this.intsToByteHighAndLow(this.CURRENT_VERSION, this.CURRENT_VERSION)
29
+ this.id = id
30
+ this.iteration = iteration
31
+ this.chainKey = chainKey
32
+ this.signatureKey = signatureKey
33
+ const message = index_js_1.proto.SenderKeyDistributionMessage.encode(
34
+ index_js_1.proto.SenderKeyDistributionMessage.create({
35
+ id,
36
+ iteration,
37
+ chainKey,
38
+ signingKey: this.signatureKey
39
+ })
40
+ ).finish()
41
+ this.serialized = Buffer.concat([Buffer.from([version]), message])
42
+ }
43
+ }
44
+ intsToByteHighAndLow(highValue, lowValue) {
45
+ return (((highValue << 4) | lowValue) & 0xff) % 256
46
+ }
47
+ serialize() {
48
+ return this.serialized
49
+ }
50
+ getType() {
51
+ return this.SENDERKEY_DISTRIBUTION_TYPE
52
+ }
53
+ getIteration() {
54
+ return this.iteration
55
+ }
56
+ getChainKey() {
57
+ return this.chainKey
58
+ }
59
+ getSignatureKey() {
60
+ return this.signatureKey
61
+ }
62
+ getId() {
63
+ return this.id
64
+ }
62
65
  }
63
- //# sourceMappingURL=sender-key-distribution-message.js.map
66
+ exports.SenderKeyDistributionMessage = SenderKeyDistributionMessage
@@ -1,66 +1,69 @@
1
- import { calculateSignature, verifySignature } from 'libsignal/src/curve.js';
2
- import { proto } from '../../../WAProto/index.js';
3
- import { CiphertextMessage } from './ciphertext-message.js';
4
- export class SenderKeyMessage extends CiphertextMessage {
5
- constructor(keyId, iteration, ciphertext, signatureKey, serialized) {
6
- super();
7
- this.SIGNATURE_LENGTH = 64;
8
- if (serialized) {
9
- const version = serialized[0];
10
- const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH);
11
- const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH);
12
- const senderKeyMessage = proto.SenderKeyMessage.decode(message).toJSON();
13
- this.serialized = serialized;
14
- this.messageVersion = (version & 0xff) >> 4;
15
- this.keyId = senderKeyMessage.id;
16
- this.iteration = senderKeyMessage.iteration;
17
- this.ciphertext =
18
- typeof senderKeyMessage.ciphertext === 'string'
19
- ? Buffer.from(senderKeyMessage.ciphertext, 'base64')
20
- : senderKeyMessage.ciphertext;
21
- this.signature = signature;
22
- }
23
- else {
24
- const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256;
25
- const ciphertextBuffer = Buffer.from(ciphertext);
26
- const message = proto.SenderKeyMessage.encode(proto.SenderKeyMessage.create({
27
- id: keyId,
28
- iteration: iteration,
29
- ciphertext: ciphertextBuffer
30
- })).finish();
31
- const signature = this.getSignature(signatureKey, Buffer.concat([Buffer.from([version]), message]));
32
- this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)]);
33
- this.messageVersion = this.CURRENT_VERSION;
34
- this.keyId = keyId;
35
- this.iteration = iteration;
36
- this.ciphertext = ciphertextBuffer;
37
- this.signature = signature;
38
- }
39
- }
40
- getKeyId() {
41
- return this.keyId;
42
- }
43
- getIteration() {
44
- return this.iteration;
45
- }
46
- getCipherText() {
47
- return this.ciphertext;
48
- }
49
- verifySignature(signatureKey) {
50
- const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH);
51
- const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH);
52
- const res = verifySignature(signatureKey, part1, part2);
53
- if (!res)
54
- throw new Error('Invalid signature!');
55
- }
56
- getSignature(signatureKey, serialized) {
57
- return Buffer.from(calculateSignature(signatureKey, serialized));
58
- }
59
- serialize() {
60
- return this.serialized;
61
- }
62
- getType() {
63
- return 4;
64
- }
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.SenderKeyMessage = void 0
4
+ const Crypto_1 = require('../../Utils/crypto')
5
+ const index_js_1 = require('../../../WAProto/index.js')
6
+ const ciphertext_message_1 = require('./ciphertext-message')
7
+ class SenderKeyMessage extends ciphertext_message_1.CiphertextMessage {
8
+ constructor(keyId, iteration, ciphertext, signatureKey, serialized) {
9
+ super()
10
+ this.SIGNATURE_LENGTH = 64
11
+ if (serialized) {
12
+ const version = serialized[0]
13
+ const message = serialized.slice(1, serialized.length - this.SIGNATURE_LENGTH)
14
+ const signature = serialized.slice(-1 * this.SIGNATURE_LENGTH)
15
+ const senderKeyMessage = index_js_1.proto.SenderKeyMessage.decode(message).toJSON()
16
+ this.serialized = serialized
17
+ this.messageVersion = (version & 0xff) >> 4
18
+ this.keyId = senderKeyMessage.id
19
+ this.iteration = senderKeyMessage.iteration
20
+ this.ciphertext =
21
+ typeof senderKeyMessage.ciphertext === 'string'
22
+ ? Buffer.from(senderKeyMessage.ciphertext, 'base64')
23
+ : senderKeyMessage.ciphertext
24
+ this.signature = signature
25
+ } else {
26
+ const version = (((this.CURRENT_VERSION << 4) | this.CURRENT_VERSION) & 0xff) % 256
27
+ const ciphertextBuffer = Buffer.from(ciphertext)
28
+ const message = index_js_1.proto.SenderKeyMessage.encode(
29
+ index_js_1.proto.SenderKeyMessage.create({
30
+ id: keyId,
31
+ iteration: iteration,
32
+ ciphertext: ciphertextBuffer
33
+ })
34
+ ).finish()
35
+ const signature = this.getSignature(signatureKey, Buffer.concat([Buffer.from([version]), message]))
36
+ this.serialized = Buffer.concat([Buffer.from([version]), message, Buffer.from(signature)])
37
+ this.messageVersion = this.CURRENT_VERSION
38
+ this.keyId = keyId
39
+ this.iteration = iteration
40
+ this.ciphertext = ciphertextBuffer
41
+ this.signature = signature
42
+ }
43
+ }
44
+ getKeyId() {
45
+ return this.keyId
46
+ }
47
+ getIteration() {
48
+ return this.iteration
49
+ }
50
+ getCipherText() {
51
+ return this.ciphertext
52
+ }
53
+ verifySignature(signatureKey) {
54
+ const part1 = this.serialized.slice(0, this.serialized.length - this.SIGNATURE_LENGTH)
55
+ const part2 = this.serialized.slice(-1 * this.SIGNATURE_LENGTH)
56
+ const res = Crypto_1.Curve.verify(signatureKey, part1, part2)
57
+ if (!res) throw new Error('Invalid signature!')
58
+ }
59
+ getSignature(signatureKey, serialized) {
60
+ return Buffer.from(Crypto_1.Curve.sign(signatureKey, serialized))
61
+ }
62
+ serialize() {
63
+ return this.serialized
64
+ }
65
+ getType() {
66
+ return 4
67
+ }
65
68
  }
66
- //# sourceMappingURL=sender-key-message.js.map
69
+ exports.SenderKeyMessage = SenderKeyMessage
@@ -1,48 +1,50 @@
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.SenderKeyName = void 0
1
4
  function isNull(str) {
2
- return str === null || str === '';
5
+ return str === null || str === ''
3
6
  }
4
7
  function intValue(num) {
5
- const MAX_VALUE = 0x7fffffff;
6
- const MIN_VALUE = -0x80000000;
7
- if (num > MAX_VALUE || num < MIN_VALUE) {
8
- return num & 0xffffffff;
9
- }
10
- return num;
8
+ const MAX_VALUE = 0x7fffffff
9
+ const MIN_VALUE = -0x80000000
10
+ if (num > MAX_VALUE || num < MIN_VALUE) {
11
+ return num & 0xffffffff
12
+ }
13
+ return num
11
14
  }
12
15
  function hashCode(strKey) {
13
- let hash = 0;
14
- if (!isNull(strKey)) {
15
- for (let i = 0; i < strKey.length; i++) {
16
- hash = hash * 31 + strKey.charCodeAt(i);
17
- hash = intValue(hash);
18
- }
19
- }
20
- return hash;
16
+ let hash = 0
17
+ if (!isNull(strKey)) {
18
+ for (let i = 0; i < strKey.length; i++) {
19
+ hash = hash * 31 + strKey.charCodeAt(i)
20
+ hash = intValue(hash)
21
+ }
22
+ }
23
+ return hash
21
24
  }
22
- export class SenderKeyName {
23
- constructor(groupId, sender) {
24
- this.groupId = groupId;
25
- this.sender = sender;
26
- }
27
- getGroupId() {
28
- return this.groupId;
29
- }
30
- getSender() {
31
- return this.sender;
32
- }
33
- serialize() {
34
- return `${this.groupId}::${this.sender.id}::${this.sender.deviceId}`;
35
- }
36
- toString() {
37
- return this.serialize();
38
- }
39
- equals(other) {
40
- if (other === null)
41
- return false;
42
- return this.groupId === other.groupId && this.sender.toString() === other.sender.toString();
43
- }
44
- hashCode() {
45
- return hashCode(this.groupId) ^ hashCode(this.sender.toString());
46
- }
25
+ class SenderKeyName {
26
+ constructor(groupId, sender) {
27
+ this.groupId = groupId
28
+ this.sender = sender
29
+ }
30
+ getGroupId() {
31
+ return this.groupId
32
+ }
33
+ getSender() {
34
+ return this.sender
35
+ }
36
+ serialize() {
37
+ return `${this.groupId}::${this.sender.id}::${this.sender.deviceId}`
38
+ }
39
+ toString() {
40
+ return this.serialize()
41
+ }
42
+ equals(other) {
43
+ if (other === null) return false
44
+ return this.groupId === other.groupId && this.sender.toString() === other.sender.toString()
45
+ }
46
+ hashCode() {
47
+ return hashCode(this.groupId) ^ hashCode(this.sender.toString())
48
+ }
47
49
  }
48
- //# sourceMappingURL=sender-key-name.js.map
50
+ exports.SenderKeyName = SenderKeyName
@@ -1,41 +1,44 @@
1
- import { BufferJSON } from '../../Utils/generics.js';
2
- import { SenderKeyState } from './sender-key-state.js';
3
- export class SenderKeyRecord {
4
- constructor(serialized) {
5
- this.MAX_STATES = 5;
6
- this.senderKeyStates = [];
7
- if (serialized) {
8
- for (const structure of serialized) {
9
- this.senderKeyStates.push(new SenderKeyState(null, null, null, null, null, null, structure));
10
- }
11
- }
12
- }
13
- isEmpty() {
14
- return this.senderKeyStates.length === 0;
15
- }
16
- getSenderKeyState(keyId) {
17
- if (keyId === undefined && this.senderKeyStates.length) {
18
- return this.senderKeyStates[this.senderKeyStates.length - 1];
19
- }
20
- return this.senderKeyStates.find(state => state.getKeyId() === keyId);
21
- }
22
- addSenderKeyState(id, iteration, chainKey, signatureKey) {
23
- this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, null, signatureKey));
24
- if (this.senderKeyStates.length > this.MAX_STATES) {
25
- this.senderKeyStates.shift();
26
- }
27
- }
28
- setSenderKeyState(id, iteration, chainKey, keyPair) {
29
- this.senderKeyStates.length = 0;
30
- this.senderKeyStates.push(new SenderKeyState(id, iteration, chainKey, keyPair));
31
- }
32
- serialize() {
33
- return this.senderKeyStates.map(state => state.getStructure());
34
- }
35
- static deserialize(data) {
36
- const str = Buffer.from(data).toString('utf-8');
37
- const parsed = JSON.parse(str, BufferJSON.reviver);
38
- return new SenderKeyRecord(parsed);
39
- }
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.SenderKeyRecord = void 0
4
+ const generics_1 = require('../../Utils/generics')
5
+ const sender_key_state_1 = require('./sender-key-state')
6
+ class SenderKeyRecord {
7
+ constructor(serialized) {
8
+ this.MAX_STATES = 5
9
+ this.senderKeyStates = []
10
+ if (serialized) {
11
+ for (const structure of serialized) {
12
+ this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(null, null, null, null, null, null, structure))
13
+ }
14
+ }
15
+ }
16
+ isEmpty() {
17
+ return this.senderKeyStates.length === 0
18
+ }
19
+ getSenderKeyState(keyId) {
20
+ if (keyId === undefined && this.senderKeyStates.length) {
21
+ return this.senderKeyStates[this.senderKeyStates.length - 1]
22
+ }
23
+ return this.senderKeyStates.find(state => state.getKeyId() === keyId)
24
+ }
25
+ addSenderKeyState(id, iteration, chainKey, signatureKey) {
26
+ this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(id, iteration, chainKey, null, signatureKey))
27
+ if (this.senderKeyStates.length > this.MAX_STATES) {
28
+ this.senderKeyStates.shift()
29
+ }
30
+ }
31
+ setSenderKeyState(id, iteration, chainKey, keyPair) {
32
+ this.senderKeyStates.length = 0
33
+ this.senderKeyStates.push(new sender_key_state_1.SenderKeyState(id, iteration, chainKey, keyPair))
34
+ }
35
+ serialize() {
36
+ return this.senderKeyStates.map(state => state.getStructure())
37
+ }
38
+ static deserialize(data) {
39
+ const str = Buffer.from(data).toString('utf-8')
40
+ const parsed = JSON.parse(str, generics_1.BufferJSON.reviver)
41
+ return new SenderKeyRecord(parsed)
42
+ }
40
43
  }
41
- //# sourceMappingURL=sender-key-record.js.map
44
+ exports.SenderKeyRecord = SenderKeyRecord
@@ -1,84 +1,97 @@
1
- import { SenderChainKey } from './sender-chain-key.js';
2
- import { SenderMessageKey } from './sender-message-key.js';
3
- export class SenderKeyState {
4
- constructor(id, iteration, chainKey, signatureKeyPair, signatureKeyPublic, signatureKeyPrivate, senderKeyStateStructure) {
5
- this.MAX_MESSAGE_KEYS = 2000;
6
- if (senderKeyStateStructure) {
7
- this.senderKeyStateStructure = {
8
- ...senderKeyStateStructure,
9
- senderMessageKeys: Array.isArray(senderKeyStateStructure.senderMessageKeys)
10
- ? senderKeyStateStructure.senderMessageKeys
11
- : []
12
- };
13
- }
14
- else {
15
- if (signatureKeyPair) {
16
- signatureKeyPublic = signatureKeyPair.public;
17
- signatureKeyPrivate = signatureKeyPair.private;
18
- }
19
- this.senderKeyStateStructure = {
20
- senderKeyId: id || 0,
21
- senderChainKey: {
22
- iteration: iteration || 0,
23
- seed: Buffer.from(chainKey || [])
24
- },
25
- senderSigningKey: {
26
- public: Buffer.from(signatureKeyPublic || []),
27
- private: Buffer.from(signatureKeyPrivate || [])
28
- },
29
- senderMessageKeys: []
30
- };
31
- }
32
- }
33
- getKeyId() {
34
- return this.senderKeyStateStructure.senderKeyId;
35
- }
36
- getSenderChainKey() {
37
- return new SenderChainKey(this.senderKeyStateStructure.senderChainKey.iteration, this.senderKeyStateStructure.senderChainKey.seed);
38
- }
39
- setSenderChainKey(chainKey) {
40
- this.senderKeyStateStructure.senderChainKey = {
41
- iteration: chainKey.getIteration(),
42
- seed: chainKey.getSeed()
43
- };
44
- }
45
- getSigningKeyPublic() {
46
- const publicKey = Buffer.from(this.senderKeyStateStructure.senderSigningKey.public);
47
- if (publicKey.length === 32) {
48
- const fixed = Buffer.alloc(33);
49
- fixed[0] = 0x05;
50
- publicKey.copy(fixed, 1);
51
- return fixed;
52
- }
53
- return publicKey;
54
- }
55
- getSigningKeyPrivate() {
56
- const privateKey = this.senderKeyStateStructure.senderSigningKey.private;
57
- return Buffer.from(privateKey || []);
58
- }
59
- hasSenderMessageKey(iteration) {
60
- return this.senderKeyStateStructure.senderMessageKeys.some(key => key.iteration === iteration);
61
- }
62
- addSenderMessageKey(senderMessageKey) {
63
- this.senderKeyStateStructure.senderMessageKeys.push({
64
- iteration: senderMessageKey.getIteration(),
65
- seed: senderMessageKey.getSeed()
66
- });
67
- if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {
68
- this.senderKeyStateStructure.senderMessageKeys.shift();
69
- }
70
- }
71
- removeSenderMessageKey(iteration) {
72
- const index = this.senderKeyStateStructure.senderMessageKeys.findIndex(key => key.iteration === iteration);
73
- if (index !== -1) {
74
- const messageKey = this.senderKeyStateStructure.senderMessageKeys[index];
75
- this.senderKeyStateStructure.senderMessageKeys.splice(index, 1);
76
- return new SenderMessageKey(messageKey.iteration, messageKey.seed);
77
- }
78
- return null;
79
- }
80
- getStructure() {
81
- return this.senderKeyStateStructure;
82
- }
1
+ 'use strict'
2
+ Object.defineProperty(exports, '__esModule', { value: true })
3
+ exports.SenderKeyState = void 0
4
+ const sender_chain_key_1 = require('./sender-chain-key')
5
+ const sender_message_key_1 = require('./sender-message-key')
6
+ class SenderKeyState {
7
+ constructor(
8
+ id,
9
+ iteration,
10
+ chainKey,
11
+ signatureKeyPair,
12
+ signatureKeyPublic,
13
+ signatureKeyPrivate,
14
+ senderKeyStateStructure
15
+ ) {
16
+ this.MAX_MESSAGE_KEYS = 2000
17
+ if (senderKeyStateStructure) {
18
+ this.senderKeyStateStructure = {
19
+ ...senderKeyStateStructure,
20
+ senderMessageKeys: Array.isArray(senderKeyStateStructure.senderMessageKeys)
21
+ ? senderKeyStateStructure.senderMessageKeys
22
+ : []
23
+ }
24
+ } else {
25
+ if (signatureKeyPair) {
26
+ signatureKeyPublic = signatureKeyPair.public
27
+ signatureKeyPrivate = signatureKeyPair.private
28
+ }
29
+ this.senderKeyStateStructure = {
30
+ senderKeyId: id || 0,
31
+ senderChainKey: {
32
+ iteration: iteration || 0,
33
+ seed: Buffer.from(chainKey || [])
34
+ },
35
+ senderSigningKey: {
36
+ public: Buffer.from(signatureKeyPublic || []),
37
+ private: Buffer.from(signatureKeyPrivate || [])
38
+ },
39
+ senderMessageKeys: []
40
+ }
41
+ }
42
+ }
43
+ getKeyId() {
44
+ return this.senderKeyStateStructure.senderKeyId
45
+ }
46
+ getSenderChainKey() {
47
+ return new sender_chain_key_1.SenderChainKey(
48
+ this.senderKeyStateStructure.senderChainKey.iteration,
49
+ this.senderKeyStateStructure.senderChainKey.seed
50
+ )
51
+ }
52
+ setSenderChainKey(chainKey) {
53
+ this.senderKeyStateStructure.senderChainKey = {
54
+ iteration: chainKey.getIteration(),
55
+ seed: chainKey.getSeed()
56
+ }
57
+ }
58
+ getSigningKeyPublic() {
59
+ const publicKey = Buffer.from(this.senderKeyStateStructure.senderSigningKey.public)
60
+ if (publicKey.length === 32) {
61
+ const fixed = Buffer.alloc(33)
62
+ fixed[0] = 0x05
63
+ publicKey.copy(fixed, 1)
64
+ return fixed
65
+ }
66
+ return publicKey
67
+ }
68
+ getSigningKeyPrivate() {
69
+ const privateKey = this.senderKeyStateStructure.senderSigningKey.private
70
+ return Buffer.from(privateKey || [])
71
+ }
72
+ hasSenderMessageKey(iteration) {
73
+ return this.senderKeyStateStructure.senderMessageKeys.some(key => key.iteration === iteration)
74
+ }
75
+ addSenderMessageKey(senderMessageKey) {
76
+ this.senderKeyStateStructure.senderMessageKeys.push({
77
+ iteration: senderMessageKey.getIteration(),
78
+ seed: senderMessageKey.getSeed()
79
+ })
80
+ if (this.senderKeyStateStructure.senderMessageKeys.length > this.MAX_MESSAGE_KEYS) {
81
+ this.senderKeyStateStructure.senderMessageKeys.shift()
82
+ }
83
+ }
84
+ removeSenderMessageKey(iteration) {
85
+ const index = this.senderKeyStateStructure.senderMessageKeys.findIndex(key => key.iteration === iteration)
86
+ if (index !== -1) {
87
+ const messageKey = this.senderKeyStateStructure.senderMessageKeys[index]
88
+ this.senderKeyStateStructure.senderMessageKeys.splice(index, 1)
89
+ return new sender_message_key_1.SenderMessageKey(messageKey.iteration, messageKey.seed)
90
+ }
91
+ return null
92
+ }
93
+ getStructure() {
94
+ return this.senderKeyStateStructure
95
+ }
83
96
  }
84
- //# sourceMappingURL=sender-key-state.js.map
97
+ exports.SenderKeyState = SenderKeyState