violetics 7.0.1-alpha → 7.0.2-alpha
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.
- package/LICENSE +3 -2
- package/README.md +1001 -232
- package/WAProto/index.js +75379 -142631
- package/engine-requirements.js +11 -8
- package/lib/Defaults/index.js +132 -146
- package/lib/Signal/Group/ciphertext-message.js +2 -6
- package/lib/Signal/Group/group-session-builder.js +7 -42
- package/lib/Signal/Group/group_cipher.js +37 -52
- package/lib/Signal/Group/index.js +11 -57
- package/lib/Signal/Group/keyhelper.js +7 -45
- package/lib/Signal/Group/sender-chain-key.js +7 -16
- package/lib/Signal/Group/sender-key-distribution-message.js +8 -12
- package/lib/Signal/Group/sender-key-message.js +9 -13
- package/lib/Signal/Group/sender-key-name.js +2 -6
- package/lib/Signal/Group/sender-key-record.js +9 -22
- package/lib/Signal/Group/sender-key-state.js +27 -43
- package/lib/Signal/Group/sender-message-key.js +4 -8
- package/lib/Signal/libsignal.js +319 -94
- package/lib/Signal/lid-mapping.js +224 -139
- package/lib/Socket/Client/index.js +2 -19
- package/lib/Socket/Client/types.js +10 -0
- package/lib/Socket/Client/websocket.js +53 -0
- package/lib/Socket/business.js +162 -44
- package/lib/Socket/chats.js +477 -418
- package/lib/Socket/communities.js +430 -0
- package/lib/Socket/groups.js +110 -99
- package/lib/Socket/index.js +10 -10
- package/lib/Socket/messages-recv.js +884 -561
- package/lib/Socket/messages-send.js +859 -428
- package/lib/Socket/mex.js +41 -0
- package/lib/Socket/newsletter.js +195 -390
- package/lib/Socket/socket.js +465 -315
- package/lib/Store/index.js +3 -10
- package/lib/Store/make-in-memory-store.js +73 -79
- package/lib/Store/make-ordered-dictionary.js +4 -7
- package/lib/Store/object-repository.js +2 -6
- package/lib/Types/Auth.js +1 -2
- package/lib/Types/Bussines.js +1 -0
- package/lib/Types/Call.js +1 -2
- package/lib/Types/Chat.js +7 -4
- package/lib/Types/Contact.js +1 -2
- package/lib/Types/Events.js +1 -2
- package/lib/Types/GroupMetadata.js +1 -2
- package/lib/Types/Label.js +2 -5
- package/lib/Types/LabelAssociation.js +2 -5
- package/lib/Types/Message.js +17 -9
- package/lib/Types/Newsletter.js +33 -38
- package/lib/Types/Product.js +1 -2
- package/lib/Types/Signal.js +1 -2
- package/lib/Types/Socket.js +2 -2
- package/lib/Types/State.js +12 -2
- package/lib/Types/USync.js +1 -2
- package/lib/Types/index.js +14 -31
- package/lib/Utils/auth-utils.js +228 -152
- package/lib/Utils/browser-utils.js +28 -0
- package/lib/Utils/business.js +66 -70
- package/lib/Utils/chat-utils.js +331 -249
- package/lib/Utils/crypto.js +57 -91
- package/lib/Utils/decode-wa-message.js +168 -84
- package/lib/Utils/event-buffer.js +138 -80
- package/lib/Utils/generics.js +180 -297
- package/lib/Utils/history.js +83 -49
- package/lib/Utils/identity-change-handler.js +48 -0
- package/lib/Utils/index.js +19 -33
- package/lib/Utils/link-preview.js +14 -23
- package/lib/Utils/logger.js +2 -7
- package/lib/Utils/lt-hash.js +2 -46
- package/lib/Utils/make-mutex.js +24 -47
- package/lib/Utils/message-retry-manager.js +224 -0
- package/lib/Utils/messages-media.js +501 -496
- package/lib/Utils/messages.js +1428 -362
- package/lib/Utils/noise-handler.js +145 -100
- package/lib/Utils/pre-key-manager.js +105 -0
- package/lib/Utils/process-message.js +356 -150
- package/lib/Utils/reporting-utils.js +257 -0
- package/lib/Utils/signal.js +78 -73
- package/lib/Utils/sync-action-utils.js +47 -0
- package/lib/Utils/tc-token-utils.js +17 -0
- package/lib/Utils/use-multi-file-auth-state.js +35 -45
- package/lib/Utils/validate-connection.js +91 -107
- package/lib/WABinary/constants.js +1300 -1304
- package/lib/WABinary/decode.js +26 -48
- package/lib/WABinary/encode.js +109 -155
- package/lib/WABinary/generic-utils.js +161 -149
- package/lib/WABinary/index.js +5 -21
- package/lib/WABinary/jid-utils.js +73 -40
- package/lib/WABinary/types.js +1 -2
- package/lib/WAM/BinaryInfo.js +2 -6
- package/lib/WAM/constants.js +19070 -11568
- package/lib/WAM/encode.js +17 -23
- package/lib/WAM/index.js +3 -19
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +8 -12
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -15
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -13
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -14
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -23
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -9
- package/lib/WAUSync/Protocols/index.js +4 -20
- package/lib/WAUSync/USyncQuery.js +40 -36
- package/lib/WAUSync/USyncUser.js +2 -6
- package/lib/WAUSync/index.js +3 -19
- package/lib/index.js +11 -44
- package/package.json +74 -107
- package/lib/Defaults/baileys-version.json +0 -3
- package/lib/Defaults/phonenumber-mcc.json +0 -223
- package/lib/Signal/Group/queue-job.js +0 -57
- package/lib/Socket/Client/abstract-socket-client.js +0 -13
- package/lib/Socket/Client/mobile-socket-client.js +0 -65
- package/lib/Socket/Client/web-socket-client.js +0 -118
- package/lib/Socket/groupStatus.js +0 -637
- package/lib/Socket/registration.js +0 -166
- package/lib/Socket/usync.js +0 -70
- package/lib/Store/make-cache-manager-store.js +0 -83
- package/lib/Utils/baileys-event-stream.js +0 -63
package/package.json
CHANGED
|
@@ -1,109 +1,76 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"qrcode-terminal": "^0.12.0",
|
|
77
|
-
"release-it": "^15.10.3",
|
|
78
|
-
"sharp": "^0.30.5",
|
|
79
|
-
"ts-jest": "^27.0.3",
|
|
80
|
-
"ts-node": "^10.8.1",
|
|
81
|
-
"typedoc": "^0.24.7",
|
|
82
|
-
"typescript": "^4.6.4",
|
|
83
|
-
"json": "^11.0.0"
|
|
84
|
-
},
|
|
85
|
-
"peerDependencies": {
|
|
86
|
-
"jimp": "^0.16.1",
|
|
87
|
-
"link-preview-js": "^3.0.0",
|
|
88
|
-
"qrcode-terminal": "^0.12.0",
|
|
89
|
-
"sharp": "^0.32.2"
|
|
90
|
-
},
|
|
91
|
-
"peerDependenciesMeta": {
|
|
92
|
-
"jimp": {
|
|
93
|
-
"optional": true
|
|
94
|
-
},
|
|
95
|
-
"link-preview-js": {
|
|
96
|
-
"optional": true
|
|
97
|
-
},
|
|
98
|
-
"qrcode-terminal": {
|
|
99
|
-
"optional": true
|
|
100
|
-
},
|
|
101
|
-
"sharp": {
|
|
102
|
-
"optional": true
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
"packageManager": "yarn@1.22.19",
|
|
106
|
-
"engines": {
|
|
107
|
-
"node": ">=20.0.0"
|
|
108
|
-
}
|
|
2
|
+
"name": "violetics",
|
|
3
|
+
"version": "7.0.2-alpha",
|
|
4
|
+
"description": "A simple fork of Baileys for WhatsApp automation",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"preinstall": "node ./engine-requirements.js"
|
|
9
|
+
},
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=20.0.0"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/cv3inx/violetics.git"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"lib/**/*",
|
|
19
|
+
"WAProto/**/*",
|
|
20
|
+
"engine-requirements.js"
|
|
21
|
+
],
|
|
22
|
+
"keywords": [
|
|
23
|
+
"automation",
|
|
24
|
+
"baileys",
|
|
25
|
+
"baileys-fork",
|
|
26
|
+
"baileys-mod",
|
|
27
|
+
"js-whatsapp",
|
|
28
|
+
"multi-device",
|
|
29
|
+
"whatsapp",
|
|
30
|
+
"whatsapp-api",
|
|
31
|
+
"whatsapp-bot",
|
|
32
|
+
"whatsapp-chat",
|
|
33
|
+
"whatsapp-group",
|
|
34
|
+
"whatsapp-web"
|
|
35
|
+
],
|
|
36
|
+
"homepage": "https://github.com/cv3inx/violetics#readme",
|
|
37
|
+
"author": "Lia Wynn",
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@adiwajshing/keyed-db": "^0.2.4",
|
|
41
|
+
"@cacheable/node-cache": "^1.4.0",
|
|
42
|
+
"@hapi/boom": "^9.1.3",
|
|
43
|
+
"async-mutex": "^0.5.0",
|
|
44
|
+
"fflate": "^0.8.2",
|
|
45
|
+
"libsignal": "github:WhiskeySockets/libsignal-wasm#master",
|
|
46
|
+
"lru-cache": "^11.2.6",
|
|
47
|
+
"music-metadata": "^11.7.0",
|
|
48
|
+
"p-queue": "^9.1.0",
|
|
49
|
+
"pino": "^9.6.0",
|
|
50
|
+
"protobufjs": "^7.5.4",
|
|
51
|
+
"whatsapp-rust-bridge": "^0.5.3",
|
|
52
|
+
"ws": "^8.19.0"
|
|
53
|
+
},
|
|
54
|
+
"peerDependencies": {
|
|
55
|
+
"@napi-rs/image": "~1.12.0",
|
|
56
|
+
"audio-decode": "^2.2.3",
|
|
57
|
+
"jimp": "^1.6.0",
|
|
58
|
+
"link-preview-js": "^3.0.0",
|
|
59
|
+
"sharp": "*"
|
|
60
|
+
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"@napi-rs/image": {
|
|
63
|
+
"optional": true
|
|
64
|
+
},
|
|
65
|
+
"audio-decode": {
|
|
66
|
+
"optional": true
|
|
67
|
+
},
|
|
68
|
+
"jimp": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"link-preview-js": {
|
|
72
|
+
"optional": true
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"packageManager": "yarn@4.9.2"
|
|
109
76
|
}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"93": 412,
|
|
3
|
-
"355": 276,
|
|
4
|
-
"213": 603,
|
|
5
|
-
"1-684": 544,
|
|
6
|
-
"376": 213,
|
|
7
|
-
"244": 631,
|
|
8
|
-
"1-264": 365,
|
|
9
|
-
"1-268": 344,
|
|
10
|
-
"54": 722,
|
|
11
|
-
"374": 283,
|
|
12
|
-
"297": 363,
|
|
13
|
-
"61": 505,
|
|
14
|
-
"43": 232,
|
|
15
|
-
"994": 400,
|
|
16
|
-
"1-242": 364,
|
|
17
|
-
"973": 426,
|
|
18
|
-
"880": 470,
|
|
19
|
-
"1-246": 342,
|
|
20
|
-
"375": 257,
|
|
21
|
-
"32": 206,
|
|
22
|
-
"501": 702,
|
|
23
|
-
"229": 616,
|
|
24
|
-
"1-441": 350,
|
|
25
|
-
"975": 402,
|
|
26
|
-
"591": 736,
|
|
27
|
-
"387": 218,
|
|
28
|
-
"267": 652,
|
|
29
|
-
"55": 724,
|
|
30
|
-
"1-284": 348,
|
|
31
|
-
"673": 528,
|
|
32
|
-
"359": 284,
|
|
33
|
-
"226": 613,
|
|
34
|
-
"257": 642,
|
|
35
|
-
"855": 456,
|
|
36
|
-
"237": 624,
|
|
37
|
-
"238": 625,
|
|
38
|
-
"1-345": 346,
|
|
39
|
-
"236": 623,
|
|
40
|
-
"235": 622,
|
|
41
|
-
"56": 730,
|
|
42
|
-
"86": 454,
|
|
43
|
-
"57": 732,
|
|
44
|
-
"269": 654,
|
|
45
|
-
"682": 548,
|
|
46
|
-
"506": 712,
|
|
47
|
-
"385": 219,
|
|
48
|
-
"53": 368,
|
|
49
|
-
"357": 280,
|
|
50
|
-
"420": 230,
|
|
51
|
-
"243": 630,
|
|
52
|
-
"45": 238,
|
|
53
|
-
"253": 638,
|
|
54
|
-
"1-767": 366,
|
|
55
|
-
"1-809": 370,
|
|
56
|
-
"1-849": 370,
|
|
57
|
-
"1-829": 370,
|
|
58
|
-
"593": 740,
|
|
59
|
-
"20": 602,
|
|
60
|
-
"503": 706,
|
|
61
|
-
"240": 627,
|
|
62
|
-
"291": 657,
|
|
63
|
-
"372": 248,
|
|
64
|
-
"251": 636,
|
|
65
|
-
"500": 750,
|
|
66
|
-
"298": 288,
|
|
67
|
-
"679": 542,
|
|
68
|
-
"358": 244,
|
|
69
|
-
"33": 208,
|
|
70
|
-
"689": 547,
|
|
71
|
-
"241": 628,
|
|
72
|
-
"220": 607,
|
|
73
|
-
"995": 282,
|
|
74
|
-
"49": 262,
|
|
75
|
-
"233": 620,
|
|
76
|
-
"350": 266,
|
|
77
|
-
"30": 202,
|
|
78
|
-
"299": 290,
|
|
79
|
-
"1-473": 352,
|
|
80
|
-
"1-671": 535,
|
|
81
|
-
"502": 704,
|
|
82
|
-
"224": 537,
|
|
83
|
-
"592": 738,
|
|
84
|
-
"509": 372,
|
|
85
|
-
"504": 708,
|
|
86
|
-
"852": 454,
|
|
87
|
-
"36": 216,
|
|
88
|
-
"354": 274,
|
|
89
|
-
"91": 404,
|
|
90
|
-
"62": 510,
|
|
91
|
-
"98": 432,
|
|
92
|
-
"964": 418,
|
|
93
|
-
"353": 234,
|
|
94
|
-
"972": 425,
|
|
95
|
-
"39": 222,
|
|
96
|
-
"225": 612,
|
|
97
|
-
"1-876": 338,
|
|
98
|
-
"81": 440,
|
|
99
|
-
"962": 416,
|
|
100
|
-
"254": 639,
|
|
101
|
-
"686": 545,
|
|
102
|
-
"383": 221,
|
|
103
|
-
"965": 419,
|
|
104
|
-
"371": 247,
|
|
105
|
-
"961": 415,
|
|
106
|
-
"266": 651,
|
|
107
|
-
"231": 618,
|
|
108
|
-
"218": 606,
|
|
109
|
-
"423": 295,
|
|
110
|
-
"370": 246,
|
|
111
|
-
"352": 270,
|
|
112
|
-
"389": 294,
|
|
113
|
-
"261": 646,
|
|
114
|
-
"265": 650,
|
|
115
|
-
"60": 502,
|
|
116
|
-
"960": 472,
|
|
117
|
-
"223": 610,
|
|
118
|
-
"356": 278,
|
|
119
|
-
"692": 551,
|
|
120
|
-
"222": 609,
|
|
121
|
-
"230": 617,
|
|
122
|
-
"52": 334,
|
|
123
|
-
"691": 550,
|
|
124
|
-
"373": 259,
|
|
125
|
-
"377": 212,
|
|
126
|
-
"976": 428,
|
|
127
|
-
"382": 297,
|
|
128
|
-
"1-664": 354,
|
|
129
|
-
"212": 604,
|
|
130
|
-
"258": 643,
|
|
131
|
-
"95": 414,
|
|
132
|
-
"264": 649,
|
|
133
|
-
"674": 536,
|
|
134
|
-
"977": 429,
|
|
135
|
-
"31": 204,
|
|
136
|
-
"687": 546,
|
|
137
|
-
"64": 530,
|
|
138
|
-
"505": 710,
|
|
139
|
-
"227": 614,
|
|
140
|
-
"234": 621,
|
|
141
|
-
"683": 555,
|
|
142
|
-
"1-670": 534,
|
|
143
|
-
"47": 242,
|
|
144
|
-
"968": 226,
|
|
145
|
-
"92": 410,
|
|
146
|
-
"680": 552,
|
|
147
|
-
"970": 423,
|
|
148
|
-
"507": 714,
|
|
149
|
-
"675": 537,
|
|
150
|
-
"595": 744,
|
|
151
|
-
"51": 716,
|
|
152
|
-
"63": 515,
|
|
153
|
-
"48": 260,
|
|
154
|
-
"351": 268,
|
|
155
|
-
"1-787, 1-939": 330,
|
|
156
|
-
"974": 427,
|
|
157
|
-
"242": 630,
|
|
158
|
-
"40": 226,
|
|
159
|
-
"7": 250,
|
|
160
|
-
"250": 635,
|
|
161
|
-
"290": 658,
|
|
162
|
-
"1-869": 356,
|
|
163
|
-
"1-758": 358,
|
|
164
|
-
"508": 308,
|
|
165
|
-
"1-784": 360,
|
|
166
|
-
"685": 544,
|
|
167
|
-
"378": 292,
|
|
168
|
-
"239": 626,
|
|
169
|
-
"966": 420,
|
|
170
|
-
"221": 608,
|
|
171
|
-
"381": 220,
|
|
172
|
-
"248": 633,
|
|
173
|
-
"232": 619,
|
|
174
|
-
"65": 525,
|
|
175
|
-
"386": 293,
|
|
176
|
-
"677": 540,
|
|
177
|
-
"27": 655,
|
|
178
|
-
"211": 659,
|
|
179
|
-
"34": 214,
|
|
180
|
-
"94": 413,
|
|
181
|
-
"249": 634,
|
|
182
|
-
"597": 746,
|
|
183
|
-
"268": 653,
|
|
184
|
-
"46": 240,
|
|
185
|
-
"41": 228,
|
|
186
|
-
"963": 417,
|
|
187
|
-
"886": 466,
|
|
188
|
-
"992": 436,
|
|
189
|
-
"255": 640,
|
|
190
|
-
"66": 520,
|
|
191
|
-
"228": 615,
|
|
192
|
-
"690": 554,
|
|
193
|
-
"676": 539,
|
|
194
|
-
"1-868": 374,
|
|
195
|
-
"216": 605,
|
|
196
|
-
"90": 286,
|
|
197
|
-
"993": 438,
|
|
198
|
-
"1-649": 376,
|
|
199
|
-
"688": 553,
|
|
200
|
-
"1-340": 332,
|
|
201
|
-
"256": 641,
|
|
202
|
-
"380": 255,
|
|
203
|
-
"971": 424,
|
|
204
|
-
"44": 234,
|
|
205
|
-
"1": 310,
|
|
206
|
-
"598": 748,
|
|
207
|
-
"998": 434,
|
|
208
|
-
"678": 541,
|
|
209
|
-
"379": 225,
|
|
210
|
-
"58": 734,
|
|
211
|
-
"681": 543,
|
|
212
|
-
"967": 421,
|
|
213
|
-
"260": 645,
|
|
214
|
-
"263": 648,
|
|
215
|
-
"670": 514,
|
|
216
|
-
"245": 632,
|
|
217
|
-
"856": 457,
|
|
218
|
-
"599": 362,
|
|
219
|
-
"850": 467,
|
|
220
|
-
"262": 647,
|
|
221
|
-
"82": 450,
|
|
222
|
-
"84": 452
|
|
223
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = queueJob;
|
|
4
|
-
const _queueAsyncBuckets = new Map();
|
|
5
|
-
const _gcLimit = 10000;
|
|
6
|
-
async function _asyncQueueExecutor(queue, cleanup) {
|
|
7
|
-
let offt = 0;
|
|
8
|
-
// eslint-disable-next-line no-constant-condition
|
|
9
|
-
while (true) {
|
|
10
|
-
const limit = Math.min(queue.length, _gcLimit);
|
|
11
|
-
for (let i = offt; i < limit; i++) {
|
|
12
|
-
const job = queue[i];
|
|
13
|
-
try {
|
|
14
|
-
job.resolve(await job.awaitable());
|
|
15
|
-
}
|
|
16
|
-
catch (e) {
|
|
17
|
-
job.reject(e);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (limit < queue.length) {
|
|
21
|
-
if (limit >= _gcLimit) {
|
|
22
|
-
queue.splice(0, limit);
|
|
23
|
-
offt = 0;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
offt = limit;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
cleanup();
|
|
34
|
-
}
|
|
35
|
-
function queueJob(bucket, awaitable) {
|
|
36
|
-
// Skip name assignment since it's readonly in strict mode
|
|
37
|
-
if (typeof bucket !== 'string') {
|
|
38
|
-
console.warn('Unhandled bucket type (for naming):', typeof bucket, bucket);
|
|
39
|
-
}
|
|
40
|
-
let inactive = false;
|
|
41
|
-
if (!_queueAsyncBuckets.has(bucket)) {
|
|
42
|
-
_queueAsyncBuckets.set(bucket, []);
|
|
43
|
-
inactive = true;
|
|
44
|
-
}
|
|
45
|
-
const queue = _queueAsyncBuckets.get(bucket);
|
|
46
|
-
const job = new Promise((resolve, reject) => {
|
|
47
|
-
queue.push({
|
|
48
|
-
awaitable,
|
|
49
|
-
resolve: resolve,
|
|
50
|
-
reject
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
if (inactive) {
|
|
54
|
-
_asyncQueueExecutor(queue, () => _queueAsyncBuckets.delete(bucket));
|
|
55
|
-
}
|
|
56
|
-
return job;
|
|
57
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AbstractSocketClient = void 0;
|
|
4
|
-
const events_1 = require("events");
|
|
5
|
-
class AbstractSocketClient extends events_1.EventEmitter {
|
|
6
|
-
constructor(url, config) {
|
|
7
|
-
super();
|
|
8
|
-
this.url = url;
|
|
9
|
-
this.config = config;
|
|
10
|
-
this.setMaxListeners(0);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.AbstractSocketClient = AbstractSocketClient;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MobileSocketClient = void 0;
|
|
4
|
-
const net_1 = require("net");
|
|
5
|
-
const abstract_socket_client_1 = require("./abstract-socket-client");
|
|
6
|
-
class MobileSocketClient extends abstract_socket_client_1.AbstractSocketClient {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.socket = null;
|
|
10
|
-
}
|
|
11
|
-
get isOpen() {
|
|
12
|
-
var _a;
|
|
13
|
-
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === 'open';
|
|
14
|
-
}
|
|
15
|
-
get isClosed() {
|
|
16
|
-
var _a;
|
|
17
|
-
return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === 'closed';
|
|
18
|
-
}
|
|
19
|
-
get isClosing() {
|
|
20
|
-
var _a;
|
|
21
|
-
return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === 'closed';
|
|
22
|
-
}
|
|
23
|
-
get isConnecting() {
|
|
24
|
-
var _a;
|
|
25
|
-
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === 'opening';
|
|
26
|
-
}
|
|
27
|
-
async connect() {
|
|
28
|
-
var _a;
|
|
29
|
-
if (this.socket) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (this.config.agent) {
|
|
33
|
-
throw new Error('There are not support for proxy agent for mobile connection');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
this.socket = (0, net_1.connect)({
|
|
37
|
-
host: this.url.hostname,
|
|
38
|
-
port: Number(this.url.port) || 443
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
this.socket.setMaxListeners(0);
|
|
42
|
-
const events = ['close', 'connect', 'data', 'drain', 'end', 'error', 'lookup', 'ready', 'timeout'];
|
|
43
|
-
for (const event of events) {
|
|
44
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.on(event, (...args) => this.emit(event, ...args));
|
|
45
|
-
}
|
|
46
|
-
this.socket.on('data', (...args) => this.emit('message', ...args));
|
|
47
|
-
this.socket.on('ready', (...args) => this.emit('open', ...args));
|
|
48
|
-
}
|
|
49
|
-
async close() {
|
|
50
|
-
if (!this.socket) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
return new Promise(resolve => {
|
|
54
|
-
this.socket.end(resolve);
|
|
55
|
-
this.socket = null;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
send(str, cb) {
|
|
59
|
-
if (this.socket === null) {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
return this.socket.write(str, undefined, cb);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
exports.MobileSocketClient = MobileSocketClient;
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.WebSocketClient = void 0;
|
|
7
|
-
const ws_1 = __importDefault(require("ws"));
|
|
8
|
-
const dns_1 = require("dns");
|
|
9
|
-
const Defaults_1 = require("../../Defaults");
|
|
10
|
-
const abstract_socket_client_1 = require("./abstract-socket-client");
|
|
11
|
-
|
|
12
|
-
// Simple DNS cache to prevent repeated lookups when many bots reconnect at once.
|
|
13
|
-
// ENOTFOUND errors are typically transient — caching the last good IP avoids them.
|
|
14
|
-
const DNS_CACHE = new Map(); // hostname → { address, expires }
|
|
15
|
-
const DNS_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
16
|
-
|
|
17
|
-
async function resolveWithCache(hostname) {
|
|
18
|
-
const now = Date.now();
|
|
19
|
-
const cached = DNS_CACHE.get(hostname);
|
|
20
|
-
if (cached && cached.expires > now) {
|
|
21
|
-
return cached.address;
|
|
22
|
-
}
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
(0, dns_1.lookup)(hostname, { family: 4 }, (err, address) => {
|
|
25
|
-
if (err) {
|
|
26
|
-
// If lookup fails but we have a stale cache entry, use it
|
|
27
|
-
if (cached) {
|
|
28
|
-
return resolve(cached.address);
|
|
29
|
-
}
|
|
30
|
-
return reject(err);
|
|
31
|
-
}
|
|
32
|
-
DNS_CACHE.set(hostname, { address, expires: now + DNS_TTL_MS });
|
|
33
|
-
resolve(address);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
class WebSocketClient extends abstract_socket_client_1.AbstractSocketClient {
|
|
39
|
-
constructor() {
|
|
40
|
-
super(...arguments);
|
|
41
|
-
this.socket = null;
|
|
42
|
-
}
|
|
43
|
-
get isOpen() {
|
|
44
|
-
var _a;
|
|
45
|
-
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.OPEN;
|
|
46
|
-
}
|
|
47
|
-
get isClosed() {
|
|
48
|
-
var _a;
|
|
49
|
-
return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CLOSED;
|
|
50
|
-
}
|
|
51
|
-
get isClosing() {
|
|
52
|
-
var _a;
|
|
53
|
-
return this.socket === null || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CLOSING;
|
|
54
|
-
}
|
|
55
|
-
get isConnecting() {
|
|
56
|
-
var _a;
|
|
57
|
-
return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === ws_1.default.CONNECTING;
|
|
58
|
-
}
|
|
59
|
-
async connect() {
|
|
60
|
-
var _a, _b;
|
|
61
|
-
if (this.socket) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
// Resolve hostname with cache to avoid ENOTFOUND on transient DNS failures
|
|
65
|
-
let connectUrl = this.url;
|
|
66
|
-
try {
|
|
67
|
-
const parsedUrl = new URL(this.url);
|
|
68
|
-
const ip = await resolveWithCache(parsedUrl.hostname);
|
|
69
|
-
// Replace hostname with resolved IP, keep original Host header for TLS SNI
|
|
70
|
-
const resolvedUrl = new URL(this.url);
|
|
71
|
-
resolvedUrl.hostname = ip;
|
|
72
|
-
connectUrl = resolvedUrl.toString();
|
|
73
|
-
}
|
|
74
|
-
catch (_c) {
|
|
75
|
-
// fallback: use original URL if DNS resolution fails entirely
|
|
76
|
-
}
|
|
77
|
-
this.socket = new ws_1.default(connectUrl, {
|
|
78
|
-
origin: Defaults_1.DEFAULT_ORIGIN,
|
|
79
|
-
headers: {
|
|
80
|
-
...((_a = this.config.options) === null || _a === void 0 ? void 0 : _a.headers),
|
|
81
|
-
// Preserve the original hostname for TLS SNI and WA server routing
|
|
82
|
-
Host: new URL(this.url).hostname,
|
|
83
|
-
},
|
|
84
|
-
handshakeTimeout: Math.max(this.config.connectTimeoutMs, 60000),
|
|
85
|
-
timeout: Math.max(this.config.connectTimeoutMs, 60000),
|
|
86
|
-
agent: this.config.agent,
|
|
87
|
-
});
|
|
88
|
-
this.socket.setMaxListeners(0);
|
|
89
|
-
const events = ['close', 'error', 'upgrade', 'message', 'open', 'ping', 'pong', 'unexpected-response'];
|
|
90
|
-
for (const event of events) {
|
|
91
|
-
(_b = this.socket) === null || _b === void 0 ? void 0 : _b.on(event, (...args) => this.emit(event, ...args));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async close() {
|
|
95
|
-
if (!this.socket) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
// Race against a 5-second timeout: if the underlying WebSocket never
|
|
99
|
-
// fires 'close' (e.g. network is already gone), we still proceed so
|
|
100
|
-
// that the old socket reference is cleared and a fresh reconnect can
|
|
101
|
-
// start without two sockets running in parallel.
|
|
102
|
-
const closePromise = new Promise((resolve) => {
|
|
103
|
-
this.socket.once('close', resolve);
|
|
104
|
-
});
|
|
105
|
-
const timeoutPromise = new Promise((resolve) =>
|
|
106
|
-
setTimeout(resolve, 5000)
|
|
107
|
-
);
|
|
108
|
-
this.socket.close();
|
|
109
|
-
await Promise.race([closePromise, timeoutPromise]);
|
|
110
|
-
this.socket = null;
|
|
111
|
-
}
|
|
112
|
-
send(str, cb) {
|
|
113
|
-
var _a;
|
|
114
|
-
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.send(str, cb);
|
|
115
|
-
return Boolean(this.socket);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
exports.WebSocketClient = WebSocketClient;
|