@wenzyx1/bails 1.0.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.
- package/README.md +231 -0
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +79257 -0
- package/WAProto/index.js +242946 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.d.ts +53 -0
- package/lib/Defaults/index.js +147 -0
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
- package/lib/Signal/Group/ciphertext-message.js +15 -0
- package/lib/Signal/Group/group-session-builder.d.ts +14 -0
- package/lib/Signal/Group/group-session-builder.js +64 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/group_cipher.js +93 -0
- package/lib/Signal/Group/index.d.ts +11 -0
- package/lib/Signal/Group/index.js +57 -0
- package/lib/Signal/Group/keyhelper.d.ts +10 -0
- package/lib/Signal/Group/keyhelper.js +55 -0
- package/lib/Signal/Group/queue-job.d.ts +1 -0
- package/lib/Signal/Group/queue-job.js +53 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
- package/lib/Signal/Group/sender-chain-key.js +34 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.d.ts +18 -0
- package/lib/Signal/Group/sender-key-message.js +69 -0
- package/lib/Signal/Group/sender-key-name.d.ts +17 -0
- package/lib/Signal/Group/sender-key-name.js +51 -0
- package/lib/Signal/Group/sender-key-record.d.ts +30 -0
- package/lib/Signal/Group/sender-key-record.js +53 -0
- package/lib/Signal/Group/sender-key-state.d.ts +38 -0
- package/lib/Signal/Group/sender-key-state.js +99 -0
- package/lib/Signal/Group/sender-message-key.d.ts +11 -0
- package/lib/Signal/Group/sender-message-key.js +29 -0
- package/lib/Signal/libsignal.d.ts +3 -0
- package/lib/Signal/libsignal.js +454 -0
- package/lib/Signal/lid-mapping.js +280 -0
- package/lib/Socket/Client/abstract-socket-client.d.ts +17 -0
- package/lib/Socket/Client/abstract-socket-client.js +13 -0
- package/lib/Socket/Client/index.d.ts +3 -0
- package/lib/Socket/Client/index.js +19 -0
- package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/web-socket-client.d.ts +12 -0
- package/lib/Socket/Client/web-socket-client.js +62 -0
- package/lib/Socket/business.d.ts +171 -0
- package/lib/Socket/business.js +342 -0
- package/lib/Socket/chats.d.ts +267 -0
- package/lib/Socket/chats.js +978 -0
- package/lib/Socket/communities.mjs +428 -0
- package/lib/Socket/dugong.d.ts +254 -0
- package/lib/Socket/dugong.js +558 -0
- package/lib/Socket/groups.d.ts +115 -0
- package/lib/Socket/groups.js +380 -0
- package/lib/Socket/index.d.ts +173 -0
- package/lib/Socket/index.js +32 -0
- package/lib/Socket/luxu.js +545 -0
- package/lib/Socket/messages-recv.d.ts +161 -0
- package/lib/Socket/messages-recv.js +1124 -0
- package/lib/Socket/messages-send.d.ts +149 -0
- package/lib/Socket/messages-send.js +1476 -0
- package/lib/Socket/mex.mjs +50 -0
- package/lib/Socket/newsletter.d.ts +134 -0
- package/lib/Socket/newsletter.js +351 -0
- package/lib/Socket/registration.d.ts +267 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.d.ts +43 -0
- package/lib/Socket/socket.js +904 -0
- package/lib/Socket/username.mjs +132 -0
- package/lib/Socket/usync.d.ts +36 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.d.ts +3 -0
- package/lib/Store/index.js +10 -0
- package/lib/Store/keyed-db.d.ts +30 -0
- package/lib/Store/keyed-db.js +233 -0
- package/lib/Store/make-cache-manager-store.d.ts +13 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.d.ts +118 -0
- package/lib/Store/make-in-memory-store.js +427 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/make-ordered-dictionary.js +81 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.d.ts +110 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Call.d.ts +13 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Chat.d.ts +102 -0
- package/lib/Types/Chat.js +4 -0
- package/lib/Types/Contact.d.ts +19 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Events.d.ts +157 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/GroupMetadata.d.ts +55 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/Label.d.ts +35 -0
- package/lib/Types/Label.js +27 -0
- package/lib/Types/LabelAssociation.d.ts +29 -0
- package/lib/Types/LabelAssociation.js +9 -0
- package/lib/Types/Message.d.ts +273 -0
- package/lib/Types/Message.js +9 -0
- package/lib/Types/Mex.js +39 -0
- package/lib/Types/Newsletter.d.ts +103 -0
- package/lib/Types/Newsletter.js +38 -0
- package/lib/Types/Product.d.ts +78 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Signal.d.ts +57 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Socket.d.ts +111 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/State.d.ts +27 -0
- package/lib/Types/State.js +2 -0
- package/lib/Types/USync.d.ts +25 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.d.ts +57 -0
- package/lib/Types/index.js +43 -0
- package/lib/Utils/Mex.js +39 -0
- package/lib/Utils/auth-utils.d.ts +18 -0
- package/lib/Utils/auth-utils.js +206 -0
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/baileys-event-stream.js +57 -0
- package/lib/Utils/browser-presets.js +64 -0
- package/lib/Utils/business.d.ts +22 -0
- package/lib/Utils/business.js +234 -0
- package/lib/Utils/chat-utils.d.ts +71 -0
- package/lib/Utils/chat-utils.js +726 -0
- package/lib/Utils/companion-reg-client-utils.js +40 -0
- package/lib/Utils/crypto.d.ts +41 -0
- package/lib/Utils/crypto.js +151 -0
- package/lib/Utils/decode-wa-message.d.ts +19 -0
- package/lib/Utils/decode-wa-message.js +198 -0
- package/lib/Utils/event-buffer.d.ts +35 -0
- package/lib/Utils/event-buffer.js +514 -0
- package/lib/Utils/extended-messages.js +231 -0
- package/lib/Utils/generics.d.ts +92 -0
- package/lib/Utils/generics.js +425 -0
- package/lib/Utils/history.d.ts +15 -0
- package/lib/Utils/history.js +96 -0
- package/lib/Utils/identity-change-handler.js +52 -0
- package/lib/Utils/index.d.ts +17 -0
- package/lib/Utils/index.js +40 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/link-preview.js +93 -0
- package/lib/Utils/logger.d.ts +4 -0
- package/lib/Utils/logger.js +7 -0
- package/lib/Utils/lt-hash.d.ts +12 -0
- package/lib/Utils/lt-hash.js +51 -0
- package/lib/Utils/make-mutex.d.ts +7 -0
- package/lib/Utils/make-mutex.js +43 -0
- package/lib/Utils/message-composer.js +293 -0
- package/lib/Utils/message-retry-manager.js +226 -0
- package/lib/Utils/messages-media.d.ts +116 -0
- package/lib/Utils/messages-media.js +815 -0
- package/lib/Utils/messages.d.ts +77 -0
- package/lib/Utils/messages.js +888 -0
- package/lib/Utils/noise-handler.d.ts +21 -0
- package/lib/Utils/noise-handler.js +155 -0
- package/lib/Utils/offline-node-processor.js +46 -0
- package/lib/Utils/pre-key-manager.js +95 -0
- package/lib/Utils/process-message.d.ts +41 -0
- package/lib/Utils/process-message.js +321 -0
- package/lib/Utils/reporting-utils.js +272 -0
- package/lib/Utils/signal.d.ts +32 -0
- package/lib/Utils/signal.js +160 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/sync-action-utils.js +50 -0
- package/lib/Utils/tc-token-utils.js +169 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
- package/lib/Utils/use-multi-file-auth-state.js +119 -0
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/lib/Utils/validate-connection.js +229 -0
- package/lib/WABinary/constants.d.ts +30 -0
- package/lib/WABinary/constants.js +40 -0
- package/lib/WABinary/decode.d.ts +7 -0
- package/lib/WABinary/decode.js +252 -0
- package/lib/WABinary/encode.d.ts +3 -0
- package/lib/WABinary/encode.js +265 -0
- package/lib/WABinary/generic-utils.d.ts +17 -0
- package/lib/WABinary/generic-utils.js +204 -0
- package/lib/WABinary/index.d.ts +5 -0
- package/lib/WABinary/index.js +21 -0
- package/lib/WABinary/jid-utils.d.ts +31 -0
- package/lib/WABinary/jid-utils.js +132 -0
- package/lib/WABinary/types.d.ts +18 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WAM/BinaryInfo.d.ts +17 -0
- package/lib/WAM/BinaryInfo.js +13 -0
- package/lib/WAM/constants.d.ts +38 -0
- package/lib/WAM/constants.js +15350 -0
- package/lib/WAM/encode.d.ts +3 -0
- package/lib/WAM/encode.js +155 -0
- package/lib/WAM/index.d.ts +3 -0
- package/lib/WAM/index.js +19 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +55 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +27 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
- package/lib/WAUSync/Protocols/index.d.ts +4 -0
- package/lib/WAUSync/Protocols/index.js +21 -0
- package/lib/WAUSync/USyncQuery.d.ts +28 -0
- package/lib/WAUSync/USyncQuery.js +93 -0
- package/lib/WAUSync/USyncUser.d.ts +12 -0
- package/lib/WAUSync/USyncUser.js +34 -0
- package/lib/WAUSync/index.d.ts +3 -0
- package/lib/WAUSync/index.js +19 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +52 -0
- package/package.json +112 -0
package/README.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://files.catbox.moe/lu0i4m.jpg" alt="@wenzyx1/bails" width="100%" />
|
|
4
|
+
|
|
5
|
+
<br/>
|
|
6
|
+
<br/>
|
|
7
|
+
|
|
8
|
+
# @wenzyx1/bails
|
|
9
|
+
|
|
10
|
+
<p>
|
|
11
|
+
<img src="https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white" />
|
|
12
|
+
<img src="https://img.shields.io/badge/WhatsApp-25D366?style=for-the-badge&logo=whatsapp&logoColor=white" />
|
|
13
|
+
<img src="https://img.shields.io/badge/WebSocket-010101?style=for-the-badge&logo=socketdotio&logoColor=white" />
|
|
14
|
+
<img src="https://img.shields.io/badge/Open%20Source-FF4500?style=for-the-badge&logo=github&logoColor=white" />
|
|
15
|
+
<img src="https://img.shields.io/badge/license-MIT-blue?style=for-the-badge" />
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
**Open-source WhatsApp automation library — no browser required.**
|
|
19
|
+
Built on WebSocket for speed, stability, and full multi-device support.
|
|
20
|
+
|
|
21
|
+
<br/>
|
|
22
|
+
|
|
23
|
+
[Installation](#getting-started) • [Documentation](#sendmessage-documentation) • [Features](#main-features) • [Telegram Owner](https://t.me/AboutWenzyx1) • [Channel](https://t.me/wenzyx1Chanel)
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## What is Baileys?
|
|
30
|
+
|
|
31
|
+
**WhatsApp Baileys** is a powerful, open-source library for developers who need reliable WhatsApp automation without the overhead of a browser. Powered by **WebSocket technology**, it connects directly to WhatsApp's multi-device protocol — no Selenium, no Puppeteer, no headless Chrome.
|
|
32
|
+
|
|
33
|
+
Actively maintained with continuous improvements to **pairing stability**, **session management**, and **WhatsApp multi-device compatibility**.
|
|
34
|
+
|
|
35
|
+
Perfect for:
|
|
36
|
+
- Business bots & chat automation
|
|
37
|
+
- Customer service systems
|
|
38
|
+
- Broadcast & notification tools
|
|
39
|
+
- E-commerce integrations
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Main Features
|
|
44
|
+
|
|
45
|
+
| Feature | Description |
|
|
46
|
+
|---|---|
|
|
47
|
+
| **No Message History Required** | Runs perfectly fine without syncing or storing old chat history — connect and start sending/receiving immediately, no bulky history sync needed |
|
|
48
|
+
| **All Message Types Supported** | Text, image, video, audio, document, sticker, location, contact, poll, button, list, template, product, catalog, album, event, and more — every WhatsApp message type is covered |
|
|
49
|
+
| **Custom Pairing** | Stable pairing with your own codes — no disconnection issues |
|
|
50
|
+
| **Interactive Messages** | Buttons, menus, native flows, and more |
|
|
51
|
+
| **Session Management** | Automatic, efficient, and long-term stable |
|
|
52
|
+
| **Multi-Device Support** | Fully compatible with WhatsApp's latest multi-device API |
|
|
53
|
+
| **Lightweight & Modular** | Easy to integrate into any Node.js project |
|
|
54
|
+
| **Secure Auth** | Improved authentication flow with fixed prior vulnerabilities |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Getting Started
|
|
59
|
+
|
|
60
|
+
Install via npm or yarn:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install npm:@wenzyx1/bails
|
|
64
|
+
# or
|
|
65
|
+
npm i @wenzyx1/bails
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Import This To Your Index And Package:
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
Npm Version
|
|
72
|
+
Index :
|
|
73
|
+
╰➤ "@wenzyx1/bails"
|
|
74
|
+
package json :
|
|
75
|
+
╰➤ "@wenzyx1/bails": "^1.0.0"
|
|
76
|
+
|
|
77
|
+
Npm Version V2
|
|
78
|
+
Index :
|
|
79
|
+
╰➤ "@whiskeysockets/baileys"
|
|
80
|
+
package json :
|
|
81
|
+
╰➤ "@whiskeysockets/baileys" : "npm:@wenzyx1/bails"
|
|
82
|
+
|
|
83
|
+
Github Version :
|
|
84
|
+
Index :
|
|
85
|
+
╰➤ "@whiskeysockets/baileys"
|
|
86
|
+
package json :
|
|
87
|
+
╰➤ "@whiskeysockets/baileys" : "github:wenzyx1/bails"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Then import and initialize:
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
const { makeWASocket, useMultiFileAuthState } = require("@wenzyx1/bails");
|
|
94
|
+
|
|
95
|
+
const { state, saveCreds } = await useMultiFileAuthState("auth_info");
|
|
96
|
+
const sock = makeWASocket({
|
|
97
|
+
auth: state,
|
|
98
|
+
syncFullHistory: false // no need to load message history to run
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
sock.ev.on("creds.update", saveCreds);
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
> 💡 **Tip:** Set `syncFullHistory: false` (or simply leave it unset) if you don't need old chat history — the bot will still work normally for sending and receiving every supported message type without waiting for history sync.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Supported Message Types
|
|
109
|
+
|
|
110
|
+
The baileys can send and receive **every single WhatsApp message type that exists** — nothing is left out. Main ones include:
|
|
111
|
+
|
|
112
|
+
- Text, image, video, audio, document, sticker, GIF/video note (PTV)
|
|
113
|
+
- Location & live location
|
|
114
|
+
- Contact / vCard
|
|
115
|
+
- Poll (create, vote, add option, poll result)
|
|
116
|
+
- Button, list, template & interactive (native flow) messages
|
|
117
|
+
- Album (multiple images in one message)
|
|
118
|
+
- Event & event invite
|
|
119
|
+
- Group invite, group status & group mention
|
|
120
|
+
- Spoiler (blurred) messages
|
|
121
|
+
- Reaction & edited message
|
|
122
|
+
- View-once media
|
|
123
|
+
- Status/story mention & reply
|
|
124
|
+
- Newsletter / channel messages
|
|
125
|
+
- Payment & payment invite messages
|
|
126
|
+
|
|
127
|
+
Plus **all WhatsApp Business message types** — product message, catalog, order, invoice, business profile, and more — all fully supported.
|
|
128
|
+
|
|
129
|
+
In short: **every message type in the WhatsApp protocol is supported**, whether it's a common everyday message or a rare/business-only type.
|
|
130
|
+
|
|
131
|
+
<details>
|
|
132
|
+
<summary><b>Example: Poll message</b></summary>
|
|
133
|
+
<br/>
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
await sock.sendMessage(target, {
|
|
137
|
+
poll: {
|
|
138
|
+
name: "Poll Title",
|
|
139
|
+
values: ["Option A", "Option B"],
|
|
140
|
+
selectableCount: 1,
|
|
141
|
+
pollVersion: 6
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
</details>
|
|
146
|
+
|
|
147
|
+
<details>
|
|
148
|
+
<summary><b>Example: Spoiler message</b></summary>
|
|
149
|
+
<br/>
|
|
150
|
+
|
|
151
|
+
```javascript
|
|
152
|
+
await sock.sendMessage(target, {
|
|
153
|
+
text: "This is a spoiler!",
|
|
154
|
+
spoiler: true
|
|
155
|
+
});
|
|
156
|
+
```
|
|
157
|
+
</details>
|
|
158
|
+
|
|
159
|
+
<details>
|
|
160
|
+
<summary><b>Example: Live location</b></summary>
|
|
161
|
+
<br/>
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
await sock.sendMessage(target, {
|
|
165
|
+
liveLocation: {
|
|
166
|
+
degreesLatitude: -6.2,
|
|
167
|
+
degreesLongitude: 106.8,
|
|
168
|
+
caption: "Tracking live"
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
</details>
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Additional Functions
|
|
177
|
+
|
|
178
|
+
### Parse Incoming Extended Messages
|
|
179
|
+
```javascript
|
|
180
|
+
sock.ev.on('messages.upsert', ({ messages }) => {
|
|
181
|
+
const msg = messages[0];
|
|
182
|
+
const extended = sock.parseExtendedMessageContent(msg.message);
|
|
183
|
+
if (extended) {
|
|
184
|
+
console.log(extended.type, extended.data);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Business Profile
|
|
190
|
+
```javascript
|
|
191
|
+
const profile = await sock.getBusinessProfile(jid);
|
|
192
|
+
|
|
193
|
+
await sock.updateBusinessProfile({
|
|
194
|
+
description: "We're open 9-5!",
|
|
195
|
+
email: "hello@example.com",
|
|
196
|
+
category: "Retail"
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Get Channel ID
|
|
201
|
+
```javascript
|
|
202
|
+
await sock.newsletterId(url);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Check Banned Number
|
|
206
|
+
```javascript
|
|
207
|
+
await sock.checkWhatsApp(target);
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## SendMessage Documentation
|
|
213
|
+
|
|
214
|
+
For the full list of supported payload shapes (album, event, poll result, interactive message, native flow, product message, etc.), see the code examples in `lib/Socket/messages-send.js`.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Information Baileys
|
|
219
|
+
|
|
220
|
+
<div align="center">
|
|
221
|
+
|
|
222
|
+
**Telegram Owner:** [t.me/AboutWenzyx1](https://t.me/AboutWenzyx1)
|
|
223
|
+
**Official Channel:** [t.me/wenzyx1Chanel](https://t.me/wenzyx1Chanel)
|
|
224
|
+
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## License
|
|
230
|
+
|
|
231
|
+
MIT
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { exit } from 'process';
|
|
3
|
+
|
|
4
|
+
const filePath = './index.js'
|
|
5
|
+
|
|
6
|
+
try {
|
|
7
|
+
let content = readFileSync(filePath, 'utf8')
|
|
8
|
+
|
|
9
|
+
content = content.replace(/import \* as (\$protobuf) from/g, 'import $1 from')
|
|
10
|
+
content = content.replace(/(['"])protobufjs\/minimal(['"])/g, '$1protobufjs/minimal.js$2')
|
|
11
|
+
|
|
12
|
+
const marker = 'const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});\n\n'
|
|
13
|
+
const longToStringHelper =
|
|
14
|
+
'function longToString(value, unsigned) {\n' +
|
|
15
|
+
'\tif (typeof value === "string") {\n' +
|
|
16
|
+
'\t\treturn value;\n' +
|
|
17
|
+
'\t}\n' +
|
|
18
|
+
'\tif (typeof value === "number") {\n' +
|
|
19
|
+
'\t\treturn String(value);\n' +
|
|
20
|
+
'\t}\n' +
|
|
21
|
+
'\t// Fast path: convert Long {low, high} directly via native BigInt\n' +
|
|
22
|
+
'\t// BigInt.toString() is a native C++ operation, much faster than Long\'s pure JS division loops\n' +
|
|
23
|
+
'\tif (value && typeof value.low === "number" && typeof value.high === "number") {\n' +
|
|
24
|
+
'\t\tconst lo = BigInt(value.low >>> 0);\n' +
|
|
25
|
+
'\t\tconst hi = BigInt(value.high >>> 0);\n' +
|
|
26
|
+
'\t\tconst combined = (hi << 32n) | lo;\n' +
|
|
27
|
+
'\t\tif (!unsigned && value.high < 0) {\n' +
|
|
28
|
+
'\t\t\treturn (combined - (1n << 64n)).toString();\n' +
|
|
29
|
+
'\t\t}\n' +
|
|
30
|
+
'\t\treturn combined.toString();\n' +
|
|
31
|
+
'\t}\n' +
|
|
32
|
+
'\treturn String(value);\n' +
|
|
33
|
+
'}\n\n'
|
|
34
|
+
const longToNumberHelper =
|
|
35
|
+
'function longToNumber(value, unsigned) {\n' +
|
|
36
|
+
'\tif (typeof value === "number") {\n' +
|
|
37
|
+
'\t\treturn value;\n' +
|
|
38
|
+
'\t}\n' +
|
|
39
|
+
'\tif (typeof value === "string") {\n' +
|
|
40
|
+
'\t\treturn Number(value);\n' +
|
|
41
|
+
'\t}\n' +
|
|
42
|
+
'\t// Fast path: convert Long {low, high} directly via native BigInt\n' +
|
|
43
|
+
'\tif (value && typeof value.low === "number" && typeof value.high === "number") {\n' +
|
|
44
|
+
'\t\tconst lo = BigInt(value.low >>> 0);\n' +
|
|
45
|
+
'\t\tconst hi = BigInt(value.high >>> 0);\n' +
|
|
46
|
+
'\t\tconst combined = (hi << 32n) | lo;\n' +
|
|
47
|
+
'\t\tif (!unsigned && value.high < 0) {\n' +
|
|
48
|
+
'\t\t\treturn Number(combined - (1n << 64n));\n' +
|
|
49
|
+
'\t\t}\n' +
|
|
50
|
+
'\t\treturn Number(combined);\n' +
|
|
51
|
+
'\t}\n' +
|
|
52
|
+
'\treturn Number(value);\n' +
|
|
53
|
+
'}\n\n'
|
|
54
|
+
|
|
55
|
+
if (!content.includes('function longToString(')) {
|
|
56
|
+
const markerIndex = content.indexOf(marker)
|
|
57
|
+
if (markerIndex === -1) {
|
|
58
|
+
throw new Error('Unable to inject Long helpers: marker not found in WAProto index output')
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
content = content.replace(marker, `${marker}${longToStringHelper}${longToNumberHelper}`)
|
|
62
|
+
} else {
|
|
63
|
+
const longToStringRegex = /function longToString\(value, unsigned\) {\n[\s\S]*?\n}\n\n/
|
|
64
|
+
const longToNumberRegex = /function longToNumber\(value, unsigned\) {\n[\s\S]*?\n}\n\n/
|
|
65
|
+
|
|
66
|
+
if (!longToStringRegex.test(content) || !longToNumberRegex.test(content)) {
|
|
67
|
+
throw new Error('Unable to update Long helpers: existing definitions not found')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
content = content.replace(longToStringRegex, longToStringHelper)
|
|
71
|
+
content = content.replace(longToNumberRegex, longToNumberHelper)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const longPattern = /([ \t]+d\.(\w+) = )o\.longs === String \? \$util\.Long\.prototype\.toString\.call\(m\.\2\) : o\.longs === Number \? new \$util\.LongBits\(m\.\2\.low >>> 0, m\.\2\.high >>> 0\)\.toNumber\((true)?\) : m\.\2;/g
|
|
75
|
+
content = content.replace(longPattern, (_match, prefix, field, unsignedFlag) => {
|
|
76
|
+
const unsignedArg = unsignedFlag ? ', true' : ''
|
|
77
|
+
return `${prefix}o.longs === String ? longToString(m.${field}${unsignedArg}) : o.longs === Number ? longToNumber(m.${field}${unsignedArg}) : m.${field};`
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
writeFileSync(filePath, content, 'utf8')
|
|
81
|
+
console.log(`✅ Fixed imports in ${filePath}`)
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error(`❌ Error fixing imports: ${error.message}`)
|
|
84
|
+
exit(1)
|
|
85
|
+
}
|