@gqb333/based 2.7.71

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 (201) hide show
  1. package/LICENSE +58 -0
  2. package/README.MD +611 -0
  3. package/WAProto/GenerateStatics.sh +4 -0
  4. package/WAProto/WAProto.proto +5604 -0
  5. package/WAProto/index.d.ts +63156 -0
  6. package/WAProto/index.js +195638 -0
  7. package/WAProto/p.html +1 -0
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/baileys-version.json +3 -0
  10. package/lib/Defaults/index.d.ts +53 -0
  11. package/lib/Defaults/index.js +108 -0
  12. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  13. package/lib/Signal/Group/ciphertext-message.js +15 -0
  14. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  15. package/lib/Signal/Group/group-session-builder.js +64 -0
  16. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  17. package/lib/Signal/Group/group_cipher.js +96 -0
  18. package/lib/Signal/Group/index.d.ts +11 -0
  19. package/lib/Signal/Group/index.js +57 -0
  20. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  21. package/lib/Signal/Group/keyhelper.js +55 -0
  22. package/lib/Signal/Group/queue-job.d.ts +1 -0
  23. package/lib/Signal/Group/queue-job.js +57 -0
  24. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  25. package/lib/Signal/Group/sender-chain-key.js +34 -0
  26. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  27. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  28. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  29. package/lib/Signal/Group/sender-key-message.js +69 -0
  30. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  31. package/lib/Signal/Group/sender-key-name.js +51 -0
  32. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  33. package/lib/Signal/Group/sender-key-record.js +53 -0
  34. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  35. package/lib/Signal/Group/sender-key-state.js +99 -0
  36. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  37. package/lib/Signal/Group/sender-message-key.js +29 -0
  38. package/lib/Signal/libsignal.d.ts +3 -0
  39. package/lib/Signal/libsignal.js +174 -0
  40. package/lib/Socket/Client/index.d.ts +2 -0
  41. package/lib/Socket/Client/index.js +18 -0
  42. package/lib/Socket/Client/types.d.ts +16 -0
  43. package/lib/Socket/Client/types.js +13 -0
  44. package/lib/Socket/Client/websocket.d.ts +13 -0
  45. package/lib/Socket/Client/websocket.js +111 -0
  46. package/lib/Socket/business.d.ts +172 -0
  47. package/lib/Socket/business.js +260 -0
  48. package/lib/Socket/chats.d.ts +85 -0
  49. package/lib/Socket/chats.js +1094 -0
  50. package/lib/Socket/groups.d.ts +124 -0
  51. package/lib/Socket/groups.js +423 -0
  52. package/lib/Socket/index.d.ts +172 -0
  53. package/lib/Socket/index.js +32 -0
  54. package/lib/Socket/messages-interactive.js +259 -0
  55. package/lib/Socket/messages-recv.d.ts +161 -0
  56. package/lib/Socket/messages-recv.js +1474 -0
  57. package/lib/Socket/messages-send.d.ts +151 -0
  58. package/lib/Socket/messages-send.js +1085 -0
  59. package/lib/Socket/newsletter.d.ts +136 -0
  60. package/lib/Socket/newsletter.js +250 -0
  61. package/lib/Socket/socket.d.ts +43 -0
  62. package/lib/Socket/socket.js +1241 -0
  63. package/lib/Socket/usync.d.ts +36 -0
  64. package/lib/Socket/usync.js +123 -0
  65. package/lib/Store/index.d.ts +2 -0
  66. package/lib/Store/index.js +8 -0
  67. package/lib/Store/make-in-memory-store.d.ts +118 -0
  68. package/lib/Store/make-in-memory-store.js +452 -0
  69. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  70. package/lib/Store/make-ordered-dictionary.js +81 -0
  71. package/lib/Store/object-repository.d.ts +10 -0
  72. package/lib/Store/object-repository.js +27 -0
  73. package/lib/Types/Auth.d.ts +114 -0
  74. package/lib/Types/Auth.js +2 -0
  75. package/lib/Types/Call.d.ts +13 -0
  76. package/lib/Types/Call.js +2 -0
  77. package/lib/Types/Chat.d.ts +109 -0
  78. package/lib/Types/Chat.js +4 -0
  79. package/lib/Types/Contact.d.ts +29 -0
  80. package/lib/Types/Contact.js +2 -0
  81. package/lib/Types/Events.d.ts +199 -0
  82. package/lib/Types/Events.js +2 -0
  83. package/lib/Types/GroupMetadata.d.ts +64 -0
  84. package/lib/Types/GroupMetadata.js +2 -0
  85. package/lib/Types/Label.d.ts +35 -0
  86. package/lib/Types/Label.js +27 -0
  87. package/lib/Types/LabelAssociation.d.ts +29 -0
  88. package/lib/Types/LabelAssociation.js +9 -0
  89. package/lib/Types/Message.d.ts +740 -0
  90. package/lib/Types/Message.js +7 -0
  91. package/lib/Types/Newsletter.d.ts +22 -0
  92. package/lib/Types/Newsletter.js +18 -0
  93. package/lib/Types/Product.d.ts +78 -0
  94. package/lib/Types/Product.js +2 -0
  95. package/lib/Types/Signal.d.ts +63 -0
  96. package/lib/Types/Signal.js +2 -0
  97. package/lib/Types/Socket.d.ts +134 -0
  98. package/lib/Types/Socket.js +2 -0
  99. package/lib/Types/State.d.ts +27 -0
  100. package/lib/Types/State.js +2 -0
  101. package/lib/Types/USync.d.ts +25 -0
  102. package/lib/Types/USync.js +2 -0
  103. package/lib/Types/index.d.ts +65 -0
  104. package/lib/Types/index.js +43 -0
  105. package/lib/Utils/auth-utils.d.ts +18 -0
  106. package/lib/Utils/auth-utils.js +209 -0
  107. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  108. package/lib/Utils/baileys-event-stream.js +63 -0
  109. package/lib/Utils/business.d.ts +22 -0
  110. package/lib/Utils/business.js +234 -0
  111. package/lib/Utils/cache-manager.d.ts +16 -0
  112. package/lib/Utils/cache-manager.js +114 -0
  113. package/lib/Utils/chat-utils.d.ts +70 -0
  114. package/lib/Utils/chat-utils.js +734 -0
  115. package/lib/Utils/crypto.d.ts +40 -0
  116. package/lib/Utils/crypto.js +193 -0
  117. package/lib/Utils/decode-wa-message.d.ts +35 -0
  118. package/lib/Utils/decode-wa-message.js +207 -0
  119. package/lib/Utils/event-buffer.d.ts +35 -0
  120. package/lib/Utils/event-buffer.js +619 -0
  121. package/lib/Utils/generics.d.ts +89 -0
  122. package/lib/Utils/generics.js +440 -0
  123. package/lib/Utils/history.d.ts +19 -0
  124. package/lib/Utils/history.js +94 -0
  125. package/lib/Utils/index.d.ts +22 -0
  126. package/lib/Utils/index.js +38 -0
  127. package/lib/Utils/jid-validation.d.ts +2 -0
  128. package/lib/Utils/jid-validation.js +186 -0
  129. package/lib/Utils/link-preview.d.ts +21 -0
  130. package/lib/Utils/link-preview.js +152 -0
  131. package/lib/Utils/logger.d.ts +11 -0
  132. package/lib/Utils/logger.js +59 -0
  133. package/lib/Utils/lt-hash.d.ts +12 -0
  134. package/lib/Utils/lt-hash.js +51 -0
  135. package/lib/Utils/make-mutex.d.ts +7 -0
  136. package/lib/Utils/make-mutex.js +43 -0
  137. package/lib/Utils/messages-media.d.ts +120 -0
  138. package/lib/Utils/messages-media.js +848 -0
  139. package/lib/Utils/messages.d.ts +131 -0
  140. package/lib/Utils/messages.js +1793 -0
  141. package/lib/Utils/newsletter-utils.d.ts +2 -0
  142. package/lib/Utils/newsletter-utils.js +48 -0
  143. package/lib/Utils/noise-handler.d.ts +19 -0
  144. package/lib/Utils/noise-handler.js +150 -0
  145. package/lib/Utils/performance-config.d.ts +70 -0
  146. package/lib/Utils/performance-config.js +183 -0
  147. package/lib/Utils/process-message.d.ts +42 -0
  148. package/lib/Utils/process-message.js +498 -0
  149. package/lib/Utils/rate-limiter.js +90 -0
  150. package/lib/Utils/retry.js +66 -0
  151. package/lib/Utils/signal.d.ts +33 -0
  152. package/lib/Utils/signal.js +153 -0
  153. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  154. package/lib/Utils/use-multi-file-auth-state.js +129 -0
  155. package/lib/Utils/validate-connection.d.ts +10 -0
  156. package/lib/Utils/validate-connection.js +233 -0
  157. package/lib/WABinary/constants.d.ts +27 -0
  158. package/lib/WABinary/constants.js +1303 -0
  159. package/lib/WABinary/decode.d.ts +6 -0
  160. package/lib/WABinary/decode.js +279 -0
  161. package/lib/WABinary/encode.d.ts +2 -0
  162. package/lib/WABinary/encode.js +264 -0
  163. package/lib/WABinary/generic-utils.d.ts +14 -0
  164. package/lib/WABinary/generic-utils.js +114 -0
  165. package/lib/WABinary/index.d.ts +5 -0
  166. package/lib/WABinary/index.js +21 -0
  167. package/lib/WABinary/jid-utils.d.ts +38 -0
  168. package/lib/WABinary/jid-utils.js +485 -0
  169. package/lib/WABinary/types.d.ts +18 -0
  170. package/lib/WABinary/types.js +2 -0
  171. package/lib/WAM/BinaryInfo.d.ts +8 -0
  172. package/lib/WAM/BinaryInfo.js +13 -0
  173. package/lib/WAM/constants.d.ts +38 -0
  174. package/lib/WAM/constants.js +15350 -0
  175. package/lib/WAM/encode.d.ts +2 -0
  176. package/lib/WAM/encode.js +155 -0
  177. package/lib/WAM/index.d.ts +3 -0
  178. package/lib/WAM/index.js +19 -0
  179. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  180. package/lib/WAUSync/Protocols/USyncContactProtocol.js +102 -0
  181. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  182. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +110 -0
  183. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  184. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  185. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  186. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  187. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  188. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
  189. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  190. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  191. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  192. package/lib/WAUSync/Protocols/index.js +20 -0
  193. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  194. package/lib/WAUSync/USyncQuery.js +147 -0
  195. package/lib/WAUSync/USyncUser.d.ts +12 -0
  196. package/lib/WAUSync/USyncUser.js +26 -0
  197. package/lib/WAUSync/index.d.ts +3 -0
  198. package/lib/WAUSync/index.js +19 -0
  199. package/lib/index.d.ts +17 -0
  200. package/lib/index.js +53 -0
  201. package/package.json +104 -0
@@ -0,0 +1,2 @@
1
+ import { BinaryInfo } from './BinaryInfo';
2
+ export declare const encodeWAM: (binaryInfo: BinaryInfo) => Buffer<ArrayBuffer>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeWAM = void 0;
4
+ const constants_1 = require("./constants");
5
+ const getHeaderBitLength = (key) => (key < 256 ? 2 : 3);
6
+ const encodeWAM = (binaryInfo) => {
7
+ binaryInfo.buffer = [];
8
+ encodeWAMHeader(binaryInfo);
9
+ encodeEvents(binaryInfo);
10
+
11
+ const totalSize = binaryInfo.buffer
12
+ .map((a) => a.length)
13
+ .reduce((a, b) => a + b);
14
+ const buffer = Buffer.alloc(totalSize);
15
+ let offset = 0;
16
+ binaryInfo.buffer.forEach((buffer_) => {
17
+ buffer_.copy(buffer, offset);
18
+ offset += buffer_.length;
19
+ });
20
+ return buffer;
21
+ };
22
+ exports.encodeWAM = encodeWAM;
23
+ function encodeWAMHeader(binaryInfo) {
24
+ const headerBuffer = Buffer.alloc(8); // starting buffer
25
+ headerBuffer.write('WAM', 0, 'utf8');
26
+ headerBuffer.writeUInt8(binaryInfo.protocolVersion, 3);
27
+ headerBuffer.writeUInt8(1, 4); //random flag
28
+ headerBuffer.writeUInt16BE(binaryInfo.sequence, 5);
29
+ headerBuffer.writeUInt8(0, 7); // regular channel
30
+ binaryInfo.buffer.push(headerBuffer);
31
+ }
32
+ function encodeGlobalAttributes(binaryInfo, globals) {
33
+ for (const [key, _value] of Object.entries(globals)) {
34
+ const id = constants_1.WEB_GLOBALS.find(a => (a === null || a === void 0 ? void 0 : a.name) === key).id;
35
+ let value = _value;
36
+ if (typeof value === 'boolean') {
37
+ value = value ? 1 : 0;
38
+ }
39
+ binaryInfo.buffer.push(serializeData(id, value, constants_1.FLAG_GLOBAL));
40
+ }
41
+ }
42
+ function encodeEvents(binaryInfo) {
43
+ for (const [name, { props, globals },] of binaryInfo.events.map((a) => Object.entries(a)[0])) {
44
+ encodeGlobalAttributes(binaryInfo, globals);
45
+ const event = constants_1.WEB_EVENTS.find((a) => a.name === name);
46
+ const props_ = Object.entries(props);
47
+ let extended = false;
48
+ for (const [, value] of props_) {
49
+ extended || (extended = value !== null);
50
+ }
51
+ const eventFlag = extended ? constants_1.FLAG_EVENT : constants_1.FLAG_EVENT | constants_1.FLAG_EXTENDED;
52
+ binaryInfo.buffer.push(serializeData(event.id, -event.weight, eventFlag));
53
+ for (let i = 0; i < props_.length; i++) {
54
+ const [key, _value] = props_[i];
55
+ const id = (event.props)[key][0];
56
+ extended = i < (props_.length - 1);
57
+ let value = _value;
58
+ if (typeof value === 'boolean') {
59
+ value = value ? 1 : 0;
60
+ }
61
+ const fieldFlag = extended ? constants_1.FLAG_EVENT : constants_1.FLAG_FIELD | constants_1.FLAG_EXTENDED;
62
+ binaryInfo.buffer.push(serializeData(id, value, fieldFlag));
63
+ }
64
+ }
65
+ }
66
+ function serializeData(key, value, flag) {
67
+ const bufferLength = getHeaderBitLength(key);
68
+ let buffer;
69
+ let offset = 0;
70
+ if (value === null) {
71
+ if (flag === constants_1.FLAG_GLOBAL) {
72
+ buffer = Buffer.alloc(bufferLength);
73
+ offset = serializeHeader(buffer, offset, key, flag);
74
+ return buffer;
75
+ }
76
+ }
77
+ else if (typeof value === 'number' && Number.isInteger(value)) {
78
+ // is number
79
+ if (value === 0 || value === 1) {
80
+ buffer = Buffer.alloc(bufferLength);
81
+ offset = serializeHeader(buffer, offset, key, flag | ((value + 1) << 4));
82
+ return buffer;
83
+ }
84
+ else if (-128 <= value && value < 128) {
85
+ buffer = Buffer.alloc(bufferLength + 1);
86
+ offset = serializeHeader(buffer, offset, key, flag | (3 << 4));
87
+ buffer.writeInt8(value, offset);
88
+ return buffer;
89
+ }
90
+ else if (-32768 <= value && value < 32768) {
91
+ buffer = Buffer.alloc(bufferLength + 2);
92
+ offset = serializeHeader(buffer, offset, key, flag | (4 << 4));
93
+ buffer.writeInt16LE(value, offset);
94
+ return buffer;
95
+ }
96
+ else if (-2147483648 <= value && value < 2147483648) {
97
+ buffer = Buffer.alloc(bufferLength + 4);
98
+ offset = serializeHeader(buffer, offset, key, flag | (5 << 4));
99
+ buffer.writeInt32LE(value, offset);
100
+ return buffer;
101
+ }
102
+ else {
103
+ buffer = Buffer.alloc(bufferLength + 8);
104
+ offset = serializeHeader(buffer, offset, key, flag | (7 << 4));
105
+ buffer.writeDoubleLE(value, offset);
106
+ return buffer;
107
+ }
108
+ }
109
+ else if (typeof value === 'number') {
110
+ // is float
111
+ buffer = Buffer.alloc(bufferLength + 8);
112
+ offset = serializeHeader(buffer, offset, key, flag | (7 << 4));
113
+ buffer.writeDoubleLE(value, offset);
114
+ return buffer;
115
+ }
116
+ else if (typeof value === 'string') {
117
+ // is string
118
+ const utf8Bytes = Buffer.byteLength(value, 'utf8');
119
+ if (utf8Bytes < 256) {
120
+ buffer = Buffer.alloc(bufferLength + 1 + utf8Bytes);
121
+ offset = serializeHeader(buffer, offset, key, flag | (8 << 4));
122
+ buffer.writeUint8(utf8Bytes, offset++);
123
+ }
124
+ else if (utf8Bytes < 65536) {
125
+ buffer = Buffer.alloc(bufferLength + 2 + utf8Bytes);
126
+ offset = serializeHeader(buffer, offset, key, flag | (9 << 4));
127
+ buffer.writeUInt16LE(utf8Bytes, offset);
128
+ offset += 2;
129
+ }
130
+ else {
131
+ buffer = Buffer.alloc(bufferLength + 4 + utf8Bytes);
132
+ offset = serializeHeader(buffer, offset, key, flag | (10 << 4));
133
+ buffer.writeUInt32LE(utf8Bytes, offset);
134
+ offset += 4;
135
+ }
136
+ buffer.write(value, offset, 'utf8');
137
+ return buffer;
138
+ }
139
+ throw 'missing';
140
+ }
141
+ function serializeHeader(buffer, offset, key, flag) {
142
+ if (key < 256) {
143
+ buffer.writeUInt8(flag, offset);
144
+ offset += 1;
145
+ buffer.writeUInt8(key, offset);
146
+ offset += 1;
147
+ }
148
+ else {
149
+ buffer.writeUInt8(flag | constants_1.FLAG_BYTE, offset);
150
+ offset += 1;
151
+ buffer.writeUInt16LE(key, offset);
152
+ offset += 2;
153
+ }
154
+ return offset;
155
+ }
@@ -0,0 +1,3 @@
1
+ export * from './constants';
2
+ export * from './encode';
3
+ export * from './BinaryInfo';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./encode"), exports);
19
+ __exportStar(require("./BinaryInfo"), exports);
@@ -0,0 +1,9 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ import { USyncUser } from '../USyncUser';
4
+ export declare class USyncContactProtocol implements USyncQueryProtocol {
5
+ name: string;
6
+ getQueryElement(): BinaryNode;
7
+ getUserElement(user: USyncUser): BinaryNode;
8
+ parser(node: BinaryNode): boolean;
9
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncContactProtocol = void 0;
4
+ const WABinary_1 = require("../../WABinary");
5
+ class USyncContactProtocol {
6
+ constructor() {
7
+ this.name = 'contact';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'contact',
12
+ attrs: {},
13
+ };
14
+ }
15
+ getUserElement(user) {
16
+ const attrs = {};
17
+ const content = [];
18
+
19
+ // Add type field if specified
20
+ if (user.type) {
21
+ attrs.type = user.type;
22
+ }
23
+
24
+ // Add username field if specified
25
+ if (user.username) {
26
+ attrs.username = user.username;
27
+ }
28
+
29
+ // Add phone number as content if available
30
+ if (user.phone) {
31
+ content.push({
32
+ tag: 'phone',
33
+ attrs: {},
34
+ content: user.phone
35
+ });
36
+ }
37
+
38
+ // Add business details if available
39
+ if (user.business) {
40
+ content.push({
41
+ tag: 'business',
42
+ attrs: {
43
+ description: user.business.description || '',
44
+ category: user.business.category || '',
45
+ website: user.business.website || ''
46
+ }
47
+ });
48
+ }
49
+
50
+ // Add push name if available
51
+ if (user.pushName) {
52
+ content.push({
53
+ tag: 'pushname',
54
+ attrs: {},
55
+ content: user.pushName
56
+ });
57
+ }
58
+
59
+ return {
60
+ tag: 'contact',
61
+ attrs,
62
+ content: content.length > 0 ? content : user.phone
63
+ };
64
+ }
65
+ parser(node) {
66
+ var _a, _b;
67
+ if (node.tag === 'contact') {
68
+ (0, WABinary_1.assertNodeErrorFree)(node);
69
+
70
+ const result = {
71
+ type: ((_a = node === null || node === void 0 ? void 0 : node.attrs) === null || _a === void 0 ? void 0 : _a.type) || 'unknown',
72
+ username: ((_b = node === null || node === void 0 ? void 0 : node.attrs) === null || _b === void 0 ? void 0 : _b.username) || null,
73
+ isInContact: ((_a = node === null || node === void 0 ? void 0 : node.attrs) === null || _a === void 0 ? void 0 : _a.type) === 'in'
74
+ };
75
+
76
+ // Parse content for additional contact information
77
+ if (Array.isArray(node.content)) {
78
+ for (const contentNode of node.content) {
79
+ switch (contentNode.tag) {
80
+ case 'phone':
81
+ result.phone = contentNode.content;
82
+ break;
83
+ case 'pushname':
84
+ result.pushName = contentNode.content;
85
+ break;
86
+ case 'business':
87
+ result.business = {
88
+ description: contentNode.attrs.description || '',
89
+ category: contentNode.attrs.category || '',
90
+ website: contentNode.attrs.website || ''
91
+ };
92
+ break;
93
+ }
94
+ }
95
+ }
96
+
97
+ return result;
98
+ }
99
+ return false;
100
+ }
101
+ }
102
+ exports.USyncContactProtocol = USyncContactProtocol;
@@ -0,0 +1,22 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ export type KeyIndexData = {
4
+ timestamp: number;
5
+ signedKeyIndex?: Uint8Array;
6
+ expectedTimestamp?: number;
7
+ };
8
+ export type DeviceListData = {
9
+ id: number;
10
+ keyIndex?: number;
11
+ isHosted?: boolean;
12
+ };
13
+ export type ParsedDeviceInfo = {
14
+ deviceList?: DeviceListData[];
15
+ keyIndex?: KeyIndexData;
16
+ };
17
+ export declare class USyncDeviceProtocol implements USyncQueryProtocol {
18
+ name: string;
19
+ getQueryElement(): BinaryNode;
20
+ getUserElement(): BinaryNode | null;
21
+ parser(node: BinaryNode): ParsedDeviceInfo;
22
+ }
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncDeviceProtocol = void 0;
4
+ const WABinary_1 = require("../../WABinary");
5
+ class USyncDeviceProtocol {
6
+ constructor() {
7
+ this.name = 'devices';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'devices',
12
+ attrs: {
13
+ version: '2',
14
+ },
15
+ };
16
+ }
17
+ getUserElement(user) {
18
+ // Check if device information is available
19
+ if (!user.devices || !Array.isArray(user.devices) || user.devices.length === 0) {
20
+ return null; // Return null if no device info available
21
+ }
22
+
23
+ const deviceAttrs = {};
24
+
25
+ // Add device phashing if available
26
+ if (user.devicePhash) {
27
+ deviceAttrs.phash = user.devicePhash;
28
+ }
29
+
30
+ // Add timestamp if available
31
+ if (user.timestamp) {
32
+ deviceAttrs.ts = user.timestamp.toString();
33
+ }
34
+
35
+ // Add expected timestamp if available
36
+ if (user.expectedTimestamp) {
37
+ deviceAttrs.expected_ts = user.expectedTimestamp.toString();
38
+ }
39
+
40
+ // If no device attributes are present, return null
41
+ if (Object.keys(deviceAttrs).length === 0) {
42
+ return null;
43
+ }
44
+
45
+ return {
46
+ tag: 'devices',
47
+ attrs: deviceAttrs,
48
+ content: user.devices.map(device => ({
49
+ tag: 'device',
50
+ attrs: {
51
+ id: device.id?.toString() || '0',
52
+ 'key-index': device.keyIndex?.toString() || '0',
53
+ 'is_hosted': device.isHosted ? 'true' : 'false'
54
+ }
55
+ }))
56
+ };
57
+ }
58
+ parser(node) {
59
+ const deviceList = [];
60
+ let keyIndex = undefined;
61
+ let devicePhash = undefined;
62
+ let timestamp = undefined;
63
+ let expectedTimestamp = undefined;
64
+
65
+ if (node.tag === 'devices') {
66
+ (0, WABinary_1.assertNodeErrorFree)(node);
67
+
68
+ // Extract device-level attributes
69
+ if (node.attrs) {
70
+ devicePhash = node.attrs.phash;
71
+ timestamp = node.attrs.ts ? +node.attrs.ts : undefined;
72
+ expectedTimestamp = node.attrs.expected_ts ? +node.attrs.expected_ts : undefined;
73
+ }
74
+
75
+ const deviceListNode = (0, WABinary_1.getBinaryNodeChild)(node, 'device-list');
76
+ const keyIndexNode = (0, WABinary_1.getBinaryNodeChild)(node, 'key-index-list');
77
+
78
+ if (Array.isArray(deviceListNode === null || deviceListNode === void 0 ? void 0 : deviceListNode.content)) {
79
+ for (const { tag, attrs } of deviceListNode.content) {
80
+ const id = +attrs.id;
81
+ const keyIndex = +attrs['key-index'];
82
+ if (tag === 'device') {
83
+ deviceList.push({
84
+ id,
85
+ keyIndex,
86
+ isHosted: !!(attrs['is_hosted'] && attrs['is_hosted'] === 'true')
87
+ });
88
+ }
89
+ }
90
+ }
91
+
92
+ if ((keyIndexNode === null || keyIndexNode === void 0 ? void 0 : keyIndexNode.tag) === 'key-index-list') {
93
+ keyIndex = {
94
+ timestamp: +keyIndexNode.attrs['ts'],
95
+ signedKeyIndex: keyIndexNode === null || keyIndexNode === void 0 ? void 0 : keyIndexNode.content,
96
+ expectedTimestamp: keyIndexNode.attrs['expected_ts'] ? +keyIndexNode.attrs['expected_ts'] : undefined
97
+ };
98
+ }
99
+ }
100
+
101
+ return {
102
+ deviceList,
103
+ keyIndex,
104
+ devicePhash,
105
+ timestamp,
106
+ expectedTimestamp
107
+ };
108
+ }
109
+ }
110
+ exports.USyncDeviceProtocol = USyncDeviceProtocol;
@@ -0,0 +1,12 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ export type DisappearingModeData = {
4
+ duration: number;
5
+ setAt?: Date;
6
+ };
7
+ export declare class USyncDisappearingModeProtocol implements USyncQueryProtocol {
8
+ name: string;
9
+ getQueryElement(): BinaryNode;
10
+ getUserElement(): null;
11
+ parser(node: BinaryNode): DisappearingModeData | undefined;
12
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncDisappearingModeProtocol = void 0;
4
+ const WABinary_1 = require("../../WABinary");
5
+ class USyncDisappearingModeProtocol {
6
+ constructor() {
7
+ this.name = 'disappearing_mode';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'disappearing_mode',
12
+ attrs: {},
13
+ };
14
+ }
15
+ getUserElement() {
16
+ return null;
17
+ }
18
+ parser(node) {
19
+ if (node.tag === 'disappearing_mode') {
20
+ (0, WABinary_1.assertNodeErrorFree)(node);
21
+ const duration = +(node === null || node === void 0 ? void 0 : node.attrs.duration);
22
+ const setAt = new Date(+((node === null || node === void 0 ? void 0 : node.attrs.t) || 0) * 1000);
23
+ return {
24
+ duration,
25
+ setAt,
26
+ };
27
+ }
28
+ }
29
+ }
30
+ exports.USyncDisappearingModeProtocol = USyncDisappearingModeProtocol;
@@ -0,0 +1,12 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ export type StatusData = {
4
+ status?: string | null;
5
+ setAt?: Date;
6
+ };
7
+ export declare class USyncStatusProtocol implements USyncQueryProtocol {
8
+ name: string;
9
+ getQueryElement(): BinaryNode;
10
+ getUserElement(): null;
11
+ parser(node: BinaryNode): StatusData | undefined;
12
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncStatusProtocol = void 0;
4
+ const WABinary_1 = require("../../WABinary");
5
+ class USyncStatusProtocol {
6
+ constructor() {
7
+ this.name = 'status';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'status',
12
+ attrs: {},
13
+ };
14
+ }
15
+ getUserElement() {
16
+ return null;
17
+ }
18
+ parser(node) {
19
+ var _a, _b, _c;
20
+ if (node.tag === 'status') {
21
+ (0, WABinary_1.assertNodeErrorFree)(node);
22
+ let status = (_b = (_a = node === null || node === void 0 ? void 0 : node.content) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : null;
23
+ const setAt = new Date(+((node === null || node === void 0 ? void 0 : node.attrs.t) || 0) * 1000);
24
+ if (!status) {
25
+ if (+((_c = node.attrs) === null || _c === void 0 ? void 0 : _c.code) === 401) {
26
+ status = '';
27
+ }
28
+ else {
29
+ status = null;
30
+ }
31
+ }
32
+ else if (typeof status === 'string' && status.length === 0) {
33
+ status = null;
34
+ }
35
+ return {
36
+ status,
37
+ setAt,
38
+ };
39
+ }
40
+ }
41
+ }
42
+ exports.USyncStatusProtocol = USyncStatusProtocol;
@@ -0,0 +1,25 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ import { USyncUser } from '../USyncUser';
4
+ export type BotProfileCommand = {
5
+ name: string;
6
+ description: string;
7
+ };
8
+ export type BotProfileInfo = {
9
+ jid: string;
10
+ name: string;
11
+ attributes: string;
12
+ description: string;
13
+ category: string;
14
+ isDefault: boolean;
15
+ prompts: string[];
16
+ personaId: string;
17
+ commands: BotProfileCommand[];
18
+ commandsDescription: string;
19
+ };
20
+ export declare class USyncBotProfileProtocol implements USyncQueryProtocol {
21
+ name: string;
22
+ getQueryElement(): BinaryNode;
23
+ getUserElement(user: USyncUser): BinaryNode;
24
+ parser(node: BinaryNode): BotProfileInfo;
25
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncBotProfileProtocol = void 0;
4
+ const WABinary_1 = require("../../WABinary");
5
+ class USyncBotProfileProtocol {
6
+ constructor() {
7
+ this.name = 'bot';
8
+ }
9
+ getQueryElement() {
10
+ return {
11
+ tag: 'bot',
12
+ attrs: {},
13
+ content: [{ tag: 'profile', attrs: { v: '1' } }]
14
+ };
15
+ }
16
+ getUserElement(user) {
17
+ return {
18
+ tag: 'bot',
19
+ attrs: {},
20
+ content: [{ tag: 'profile', attrs: { 'persona_id': user.personaId } }]
21
+ };
22
+ }
23
+ parser(node) {
24
+ const botNode = (0, WABinary_1.getBinaryNodeChild)(node, 'bot');
25
+ const profile = (0, WABinary_1.getBinaryNodeChild)(botNode, 'profile');
26
+ const commandsNode = (0, WABinary_1.getBinaryNodeChild)(profile, 'commands');
27
+ const promptsNode = (0, WABinary_1.getBinaryNodeChild)(profile, 'prompts');
28
+ const commands = [];
29
+ const prompts = [];
30
+ for (const command of (0, WABinary_1.getBinaryNodeChildren)(commandsNode, 'command')) {
31
+ commands.push({
32
+ name: (0, WABinary_1.getBinaryNodeChildString)(command, 'name'),
33
+ description: (0, WABinary_1.getBinaryNodeChildString)(command, 'description')
34
+ });
35
+ }
36
+ for (const prompt of (0, WABinary_1.getBinaryNodeChildren)(promptsNode, 'prompt')) {
37
+ prompts.push(`${(0, WABinary_1.getBinaryNodeChildString)(prompt, 'emoji')} ${(0, WABinary_1.getBinaryNodeChildString)(prompt, 'text')}`);
38
+ }
39
+ return {
40
+ isDefault: !!(0, WABinary_1.getBinaryNodeChild)(profile, 'default'),
41
+ jid: node.attrs.jid,
42
+ name: (0, WABinary_1.getBinaryNodeChildString)(profile, 'name'),
43
+ attributes: (0, WABinary_1.getBinaryNodeChildString)(profile, 'attributes'),
44
+ description: (0, WABinary_1.getBinaryNodeChildString)(profile, 'description'),
45
+ category: (0, WABinary_1.getBinaryNodeChildString)(profile, 'category'),
46
+ personaId: profile.attrs['persona_id'],
47
+ commandsDescription: (0, WABinary_1.getBinaryNodeChildString)(commandsNode, 'description'),
48
+ commands,
49
+ prompts
50
+ };
51
+ }
52
+ }
53
+ exports.USyncBotProfileProtocol = USyncBotProfileProtocol;
@@ -0,0 +1,8 @@
1
+ import { USyncQueryProtocol } from '../../Types/USync';
2
+ import { BinaryNode } from '../../WABinary';
3
+ export declare class USyncLIDProtocol implements USyncQueryProtocol {
4
+ name: string;
5
+ getQueryElement(): BinaryNode;
6
+ getUserElement(): null;
7
+ parser(node: BinaryNode): string | null;
8
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USyncLIDProtocol = void 0;
4
+ class USyncLIDProtocol {
5
+ constructor() {
6
+ this.name = 'lid';
7
+ }
8
+ getQueryElement() {
9
+ return {
10
+ tag: 'lid',
11
+ attrs: {},
12
+ };
13
+ }
14
+ getUserElement() {
15
+ return null;
16
+ }
17
+ parser(node) {
18
+ if (node.tag === 'lid') {
19
+ return node.attrs.val;
20
+ }
21
+ return null;
22
+ }
23
+ }
24
+ exports.USyncLIDProtocol = USyncLIDProtocol;
@@ -0,0 +1,4 @@
1
+ export * from './USyncDeviceProtocol';
2
+ export * from './USyncContactProtocol';
3
+ export * from './USyncStatusProtocol';
4
+ export * from './USyncDisappearingModeProtocol';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./USyncDeviceProtocol"), exports);
18
+ __exportStar(require("./USyncContactProtocol"), exports);
19
+ __exportStar(require("./USyncStatusProtocol"), exports);
20
+ __exportStar(require("./USyncDisappearingModeProtocol"), exports);