bitchat-node 0.1.0 → 0.1.2
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 +94 -23
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +143 -28
- package/dist/client.js.map +1 -1
- package/dist/debug.d.ts +39 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +89 -0
- package/dist/debug.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mesh/router.d.ts.map +1 -1
- package/dist/mesh/router.js +9 -1
- package/dist/mesh/router.js.map +1 -1
- package/dist/protocol/binary.d.ts +1 -1
- package/dist/protocol/binary.d.ts.map +1 -1
- package/dist/protocol/binary.js +2 -2
- package/dist/protocol/binary.js.map +1 -1
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +18 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/transport/ble.d.ts +15 -0
- package/dist/transport/ble.d.ts.map +1 -1
- package/dist/transport/ble.js +63 -16
- package/dist/transport/ble.js.map +1 -1
- package/dist/ui/html.d.ts +5 -0
- package/dist/ui/html.d.ts.map +1 -0
- package/dist/ui/html.js +506 -0
- package/dist/ui/html.js.map +1 -0
- package/dist/ui/server.d.ts +5 -1
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/ui/server.js +61 -255
- package/dist/ui/server.js.map +1 -1
- package/package.json +3 -2
- package/src/client.ts +159 -34
- package/src/debug.ts +119 -0
- package/src/index.ts +11 -0
- package/src/mesh/router.ts +11 -1
- package/src/protocol/binary.ts +2 -2
- package/src/session/manager.ts +19 -1
- package/src/transport/ble.ts +70 -16
- package/src/ui/html.ts +506 -0
- package/src/ui/server.ts +78 -258
package/README.md
CHANGED
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
# bitchat-node
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/bitchat-node)
|
|
4
|
+
[](https://unlicense.org/)
|
|
5
|
+
|
|
3
6
|
Node.js/TypeScript implementation of the Bitchat BLE mesh networking protocol.
|
|
4
7
|
|
|
5
|
-
>
|
|
8
|
+
> 🚀 **Production Ready** — Core functionality complete and tested. Ready for public use and contributions.
|
|
6
9
|
|
|
7
10
|
## Overview
|
|
8
11
|
|
|
9
12
|
Bitchat is a peer-to-peer mesh network that operates over Bluetooth Low Energy (BLE). This library enables Node.js applications to participate as full peers in the Bitchat mesh, supporting:
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
✅ **Public messages** — Broadcast to all peers in range (WORKING)
|
|
15
|
+
✅ **Direct messages** — Encrypted point-to-point communication via Noise protocol (WORKING)
|
|
16
|
+
✅ **Peer discovery** — Automatic discovery and connection to nearby peers (WORKING)
|
|
17
|
+
✅ **Multi-hop routing** — Messages relay through intermediate peers (WORKING)
|
|
18
|
+
✅ **Web UI** — Built-in web interface for monitoring and messaging (WORKING)
|
|
19
|
+
✅ **CLI Tool** — Command-line interface for easy deployment (WORKING)
|
|
20
|
+
|
|
21
|
+
## 🎯 What Works Right Now
|
|
22
|
+
|
|
23
|
+
- **Full BLE mesh networking** between Mac/Linux nodes and iOS Bitchat app
|
|
24
|
+
- **Automatic peer discovery** and connection management
|
|
25
|
+
- **Encrypted direct messaging** using Noise protocol (perfect forward secrecy)
|
|
26
|
+
- **Web-based chat interface** with real-time updates
|
|
27
|
+
- **Persistent identity** management with key storage
|
|
28
|
+
- **Message routing** through multi-hop mesh topology
|
|
29
|
+
- **TypeScript implementation** with full type safety
|
|
15
30
|
|
|
16
31
|
## Installation
|
|
17
32
|
|
|
@@ -33,6 +48,20 @@ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
|
|
|
33
48
|
|
|
34
49
|
## Quick Start
|
|
35
50
|
|
|
51
|
+
### Option 1: CLI Tool (Easiest)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Install globally
|
|
55
|
+
npm install -g bitchat-node
|
|
56
|
+
|
|
57
|
+
# Run with web UI
|
|
58
|
+
bitchat --nickname=YourName --port=3939
|
|
59
|
+
|
|
60
|
+
# Open browser to http://localhost:3939
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Option 2: Library Usage
|
|
64
|
+
|
|
36
65
|
```typescript
|
|
37
66
|
import { BitchatClient } from 'bitchat-node';
|
|
38
67
|
|
|
@@ -63,6 +92,16 @@ await client.sendDirectMessage(peerID, 'Private hello');
|
|
|
63
92
|
await client.stop();
|
|
64
93
|
```
|
|
65
94
|
|
|
95
|
+
## 🌟 Demo: iOS + Node.js Mesh
|
|
96
|
+
|
|
97
|
+
1. Install [Bitchat iOS app](https://github.com/wkyleg/bitchat-ios) on iPhone
|
|
98
|
+
2. Run `bitchat --nickname=MyNode` on Mac/Linux
|
|
99
|
+
3. Both devices appear in each other's peer lists automatically
|
|
100
|
+
4. Send messages bidirectionally through BLE mesh
|
|
101
|
+
5. Add more devices to create multi-hop network
|
|
102
|
+
|
|
103
|
+
**Range:** ~10-100 meters depending on hardware and environment.
|
|
104
|
+
|
|
66
105
|
## API Reference
|
|
67
106
|
|
|
68
107
|
### BitchatClient
|
|
@@ -112,7 +151,7 @@ new BitchatClient(config: BitchatClientConfig)
|
|
|
112
151
|
| `peer:updated` | `PeerInfo` | Peer info was updated |
|
|
113
152
|
| `error` | `Error, string` | An error occurred |
|
|
114
153
|
|
|
115
|
-
## Architecture
|
|
154
|
+
## 🏗️ Architecture
|
|
116
155
|
|
|
117
156
|
```
|
|
118
157
|
┌─────────────────────────────────────────────────────────────┐
|
|
@@ -136,7 +175,7 @@ new BitchatClient(config: BitchatClientConfig)
|
|
|
136
175
|
└─────────────────────────────────────────────────────────────┘
|
|
137
176
|
```
|
|
138
177
|
|
|
139
|
-
## Protocol Details
|
|
178
|
+
## 🔐 Protocol Details
|
|
140
179
|
|
|
141
180
|
### Packet Format
|
|
142
181
|
|
|
@@ -170,24 +209,37 @@ Each peer has:
|
|
|
170
209
|
- **Signing Key**: Ed25519 for packet authentication
|
|
171
210
|
- **Noise Key**: X25519 for key agreement
|
|
172
211
|
|
|
173
|
-
##
|
|
212
|
+
## 🎮 Web UI Features
|
|
174
213
|
|
|
175
|
-
|
|
214
|
+
The built-in web interface (`http://localhost:3939`) provides:
|
|
176
215
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
216
|
+
- **Live peer discovery** with connection status
|
|
217
|
+
- **Public chat** with all mesh participants
|
|
218
|
+
- **Private messaging** with end-to-end encryption
|
|
219
|
+
- **Debug panel** showing raw packet flows
|
|
220
|
+
- **Identity management** with persistent keys
|
|
221
|
+
- **Network topology** visualization
|
|
180
222
|
|
|
181
|
-
|
|
182
|
-
npx bitchat --nickname=MyNode --port=3939
|
|
223
|
+
## 🗺️ Roadmap
|
|
183
224
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
225
|
+
### Phase 1: UI Improvements ✨
|
|
226
|
+
- [ ] Enhanced debug panel with packet inspector
|
|
227
|
+
- [ ] Conversation threading and history
|
|
228
|
+
- [ ] Mobile-responsive design improvements
|
|
187
229
|
|
|
188
|
-
|
|
230
|
+
### Phase 2: Nostr Integration 🌐
|
|
231
|
+
- [ ] Fallback messaging over Nostr relays
|
|
232
|
+
- [ ] Location-based chat via geohash
|
|
233
|
+
- [ ] Hybrid BLE + internet topology
|
|
189
234
|
|
|
190
|
-
|
|
235
|
+
### Phase 3: Media Support 📷
|
|
236
|
+
- [ ] Image transfer with chunking protocol
|
|
237
|
+
- [ ] Voice notes with compression
|
|
238
|
+
- [ ] File transfer up to 1MB
|
|
239
|
+
|
|
240
|
+
See [ROADMAP.md](./ROADMAP.md) for complete development plan.
|
|
241
|
+
|
|
242
|
+
## 🧪 Development
|
|
191
243
|
|
|
192
244
|
```bash
|
|
193
245
|
# Install dependencies
|
|
@@ -202,22 +254,41 @@ npm test
|
|
|
202
254
|
# Run tests with coverage
|
|
203
255
|
npm run test:coverage
|
|
204
256
|
|
|
257
|
+
# Start development mode
|
|
258
|
+
npm run dev
|
|
259
|
+
|
|
205
260
|
# Lint and format
|
|
206
261
|
npm run check:fix
|
|
207
262
|
```
|
|
208
263
|
|
|
209
|
-
## Security Considerations
|
|
264
|
+
## 🔒 Security Considerations
|
|
210
265
|
|
|
211
266
|
- **BLE Range**: Messages only propagate within BLE range (~10-100m depending on hardware)
|
|
212
267
|
- **No Central Server**: All communication is peer-to-peer; no data leaves local mesh
|
|
213
268
|
- **Forward Secrecy**: Direct message sessions use ephemeral keys
|
|
214
269
|
- **Traffic Analysis**: Padding applied to resist packet size analysis
|
|
270
|
+
- **Identity Persistence**: Keys stored locally in `~/.bitchat-node/identity.json`
|
|
271
|
+
|
|
272
|
+
## 🤝 Contributing
|
|
273
|
+
|
|
274
|
+
This project is ready for contributions! Areas where help is needed:
|
|
275
|
+
|
|
276
|
+
- **Windows BLE support** testing and debugging
|
|
277
|
+
- **Protocol compatibility** with other Bitchat implementations
|
|
278
|
+
- **Performance optimization** for large meshes
|
|
279
|
+
- **UI/UX improvements** for web interface
|
|
280
|
+
- **Documentation** and example applications
|
|
215
281
|
|
|
216
282
|
## License
|
|
217
283
|
|
|
218
284
|
[Unlicense](https://unlicense.org/) — Public Domain
|
|
219
285
|
|
|
220
|
-
## Related
|
|
286
|
+
## Related Projects
|
|
287
|
+
|
|
288
|
+
- [OpenClaw Bitchat Plugin](https://github.com/wkyleg/openclaw-bitchat) — Integrate with OpenClaw AI assistant
|
|
289
|
+
- [Bitchat iOS](https://github.com/wkyleg/bitchat-ios) — Original iOS implementation
|
|
290
|
+
- [Noise Protocol](https://noiseprotocol.org/) — Cryptographic framework for secure communication
|
|
291
|
+
|
|
292
|
+
---
|
|
221
293
|
|
|
222
|
-
|
|
223
|
-
- [Noise Protocol](https://noiseprotocol.org/) — Cryptographic framework used for DMs
|
|
294
|
+
**🚀 Ready to deploy? Just run `bitchat --nickname=YourName` and start meshing!**
|
package/dist/client.d.ts
CHANGED
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EAEL,KAAK,WAAW,EAGhB,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,OAAO,CAAS;IAGxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,mCAAmC;IACnC,SAAS,IAAI,mBAAmB;gBAIpB,MAAM,EAAE,mBAAmB;IA8BvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EAEL,KAAK,WAAW,EAGhB,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,OAAO,CAAS;IAGxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,mCAAmC;IACnC,SAAS,IAAI,mBAAmB;gBAIpB,MAAM,EAAE,mBAAmB;IA8BvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCzD;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8C5E;;OAEG;IACH,iBAAiB,IAAI,QAAQ,EAAE;IAI/B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAMjD,OAAO,CAAC,kBAAkB;YA6DZ,kBAAkB;IAOhC,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,cAAc;IAqDtB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,WAAW;YAUL,eAAe;IAe7B,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,oBAAoB;YAoBd,YAAY;YAoCZ,SAAS;YAcT,mBAAmB;IAejC,OAAO,CAAC,0BAA0B;YAuCpB,oBAAoB;CAqBnC"}
|
package/dist/client.js
CHANGED
|
@@ -60,8 +60,9 @@ export class BitchatClient extends EventEmitter {
|
|
|
60
60
|
await this.transport.start();
|
|
61
61
|
this.running = true;
|
|
62
62
|
this.emit('ready');
|
|
63
|
-
// Send initial announce
|
|
63
|
+
// Send initial announce and then periodic announces (like iOS does)
|
|
64
64
|
setTimeout(() => this.sendAnnounce(), 1000);
|
|
65
|
+
setInterval(() => this.sendAnnounce(), 5000); // Every 5 seconds like iOS
|
|
65
66
|
}
|
|
66
67
|
catch (error) {
|
|
67
68
|
this.emit('error', error, 'start');
|
|
@@ -124,21 +125,42 @@ export class BitchatClient extends EventEmitter {
|
|
|
124
125
|
*/
|
|
125
126
|
async sendPrivateMessage(content, toPeerID) {
|
|
126
127
|
const messageID = crypto.randomUUID();
|
|
128
|
+
const peerHex = toPeerID.toHex().slice(0, 8);
|
|
129
|
+
console.log(`[PM] Sending to ${peerHex}: "${content.slice(0, 30)}..."`);
|
|
127
130
|
// Check if we have a session
|
|
128
131
|
if (!this.sessions.hasSession(toPeerID)) {
|
|
129
|
-
|
|
130
|
-
if
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
console.log(`[PM] No session with ${peerHex}`);
|
|
133
|
+
// Tie-breaker: only initiate if our peerID < target peerID
|
|
134
|
+
// This prevents both sides from initiating simultaneously
|
|
135
|
+
const weInitiate = this.peerID.toHex() < toPeerID.toHex();
|
|
136
|
+
console.log(`[PM] We initiate: ${weInitiate} (us: ${this.peerID.toHex().slice(0, 8)} vs them: ${peerHex})`);
|
|
137
|
+
if (weInitiate) {
|
|
138
|
+
// Need to establish session first
|
|
139
|
+
if (!this.sessions.hasHandshakeInProgress(toPeerID)) {
|
|
140
|
+
console.log(`[PM] Initiating handshake with ${peerHex}`);
|
|
141
|
+
// Initiate handshake
|
|
142
|
+
const handshakeMsg = this.sessions.initiateHandshake(toPeerID);
|
|
143
|
+
console.log(`[PM] Handshake message: ${handshakeMsg.length} bytes`);
|
|
144
|
+
await this.sendHandshakePacket(toPeerID, handshakeMsg);
|
|
145
|
+
console.log(`[PM] Handshake packet sent`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log(`[PM] Handshake already in progress with ${peerHex}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(`[PM] Waiting for ${peerHex} to initiate handshake (they have lower ID)`);
|
|
134
153
|
}
|
|
135
154
|
// Queue message for after handshake
|
|
136
155
|
const payload = this.buildPrivateMessagePayload(content, messageID);
|
|
137
156
|
this.sessions.queueMessage(toPeerID, payload);
|
|
157
|
+
console.log(`[PM] Message queued for after handshake`);
|
|
138
158
|
return messageID;
|
|
139
159
|
}
|
|
160
|
+
console.log(`[PM] Session exists, encrypting and sending`);
|
|
140
161
|
// Encrypt and send
|
|
141
162
|
await this.sendEncryptedMessage(toPeerID, content, messageID);
|
|
163
|
+
console.log(`[PM] Encrypted message sent`);
|
|
142
164
|
return messageID;
|
|
143
165
|
}
|
|
144
166
|
/**
|
|
@@ -177,12 +199,20 @@ export class BitchatClient extends EventEmitter {
|
|
|
177
199
|
});
|
|
178
200
|
// Session events
|
|
179
201
|
this.sessions.on('session:established', (peerID, _session) => {
|
|
202
|
+
const peerHex = peerID.toHex().slice(0, 8);
|
|
203
|
+
console.log(`[Session] ✓ Established with ${peerHex}`);
|
|
180
204
|
const peer = this.sessions.getPeerInfo(peerID);
|
|
181
205
|
if (peer) {
|
|
182
206
|
this.emit('peer:updated', peer);
|
|
183
207
|
}
|
|
184
208
|
});
|
|
209
|
+
this.sessions.on('session:failed', (peerID, error) => {
|
|
210
|
+
const peerHex = peerID.toHex().slice(0, 8);
|
|
211
|
+
console.log(`[Session] ✗ Failed with ${peerHex}:`, error.message);
|
|
212
|
+
});
|
|
185
213
|
this.sessions.on('handshake:message', async (peerID, encrypted) => {
|
|
214
|
+
const peerHex = peerID.toHex().slice(0, 8);
|
|
215
|
+
console.log(`[Session] Flushing queued message to ${peerHex}: ${encrypted.length} bytes`);
|
|
186
216
|
// Send queued encrypted message
|
|
187
217
|
const packet = {
|
|
188
218
|
version: 1,
|
|
@@ -195,6 +225,7 @@ export class BitchatClient extends EventEmitter {
|
|
|
195
225
|
isRSR: false,
|
|
196
226
|
};
|
|
197
227
|
await this.router.sendToPeer(packet, peerID);
|
|
228
|
+
console.log(`[Session] Queued message sent`);
|
|
198
229
|
});
|
|
199
230
|
}
|
|
200
231
|
async handleIncomingData(data, link) {
|
|
@@ -204,6 +235,10 @@ export class BitchatClient extends EventEmitter {
|
|
|
204
235
|
await this.router.handlePacket(packet, link);
|
|
205
236
|
}
|
|
206
237
|
handlePacket(packet, fromLink) {
|
|
238
|
+
// Ignore our own packets (echoed back through mesh)
|
|
239
|
+
if (packet.senderID.equals(this.peerID)) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
207
242
|
switch (packet.type) {
|
|
208
243
|
case MessageType.ANNOUNCE:
|
|
209
244
|
this.handleAnnounce(packet, fromLink);
|
|
@@ -233,11 +268,13 @@ export class BitchatClient extends EventEmitter {
|
|
|
233
268
|
// Verify signature if present
|
|
234
269
|
if (packet.signature && announcement?.signingPublicKey) {
|
|
235
270
|
const dataToSign = encodeForSigning(packet);
|
|
271
|
+
console.log('[Announce] Verifying', nickname, '- dataToSign first 60:', Buffer.from(dataToSign.slice(0, 60)).toString('hex'));
|
|
236
272
|
const isValid = verify(dataToSign, packet.signature, announcement.signingPublicKey);
|
|
237
273
|
if (!isValid) {
|
|
238
274
|
console.warn('[Announce] Invalid signature from', nickname, peerID.toHex().slice(0, 8));
|
|
239
275
|
return; // Reject invalid announces
|
|
240
276
|
}
|
|
277
|
+
console.log('[Announce] Valid signature from', nickname);
|
|
241
278
|
}
|
|
242
279
|
// Check if this is a NEW peer or an existing one
|
|
243
280
|
const existingPeer = this.sessions.getPeerInfo(peerID);
|
|
@@ -253,8 +290,12 @@ export class BitchatClient extends EventEmitter {
|
|
|
253
290
|
});
|
|
254
291
|
// Associate peer ID with link
|
|
255
292
|
if (fromLink) {
|
|
293
|
+
console.log(`[Announce] Setting peer ${peerID.toHex().slice(0, 8)} on link ${fromLink.id.slice(0, 8)}`);
|
|
256
294
|
fromLink.setPeerID(peerID);
|
|
257
295
|
}
|
|
296
|
+
else {
|
|
297
|
+
console.log(`[Announce] No fromLink for peer ${peerID.toHex().slice(0, 8)} - cannot associate!`);
|
|
298
|
+
}
|
|
258
299
|
const peer = this.sessions.getPeerInfo(peerID);
|
|
259
300
|
if (peer) {
|
|
260
301
|
// Only emit 'peer:connected' for NEW peers, not repeat announces
|
|
@@ -290,42 +331,85 @@ export class BitchatClient extends EventEmitter {
|
|
|
290
331
|
}
|
|
291
332
|
async handleHandshake(packet) {
|
|
292
333
|
const peerID = packet.senderID;
|
|
334
|
+
const peerHex = peerID.toHex().slice(0, 8);
|
|
335
|
+
console.log(`[Handshake] Received from ${peerHex}: ${packet.payload.length} bytes`);
|
|
293
336
|
const response = this.sessions.handleHandshakeMessage(peerID, packet.payload);
|
|
294
337
|
if (response) {
|
|
338
|
+
console.log(`[Handshake] Sending response to ${peerHex}: ${response.length} bytes`);
|
|
295
339
|
await this.sendHandshakePacket(peerID, response);
|
|
296
340
|
}
|
|
341
|
+
else {
|
|
342
|
+
console.log(`[Handshake] No response needed (complete or error)`);
|
|
343
|
+
}
|
|
297
344
|
}
|
|
298
345
|
handleEncrypted(packet) {
|
|
299
346
|
const peerID = packet.senderID;
|
|
300
347
|
try {
|
|
301
348
|
const decrypted = this.sessions.decrypt(peerID, packet.payload);
|
|
302
|
-
|
|
349
|
+
console.log(`[Encrypted] Decrypted ${decrypted.length} bytes from ${peerID.toHex().slice(0, 8)}`);
|
|
350
|
+
console.log(`[Encrypted] First 20 bytes: ${Buffer.from(decrypted.slice(0, 20)).toString('hex')}`);
|
|
351
|
+
// Check payload type byte
|
|
303
352
|
const payloadType = decrypted[0];
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
353
|
+
if (payloadType === NoisePayloadType.PRIVATE_MESSAGE) {
|
|
354
|
+
// TLV format: [0x01] [messageID TLV: 0x00, len, data] [content TLV: 0x01, len, data]
|
|
355
|
+
const tlvData = decrypted.subarray(1);
|
|
356
|
+
const parsed = this.parseTLVPrivateMessage(tlvData);
|
|
357
|
+
if (parsed) {
|
|
358
|
+
console.log(`[Encrypted] Parsed TLV: msgID="${parsed.messageID.slice(0, 20)}...", content="${parsed.content.slice(0, 30)}..."`);
|
|
359
|
+
this.handlePrivateMessage(peerID, new TextEncoder().encode(parsed.content), packet.timestamp, parsed.messageID);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
console.log(`[Encrypted] Failed to parse TLV, treating as raw`);
|
|
363
|
+
this.handlePrivateMessage(peerID, tlvData, packet.timestamp);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
else if (payloadType === NoisePayloadType.READ_RECEIPT) {
|
|
367
|
+
console.log(`[Encrypted] Read receipt from ${peerID.toHex().slice(0, 8)}`);
|
|
368
|
+
// TODO: Handle read receipt
|
|
369
|
+
}
|
|
370
|
+
else if (payloadType === NoisePayloadType.DELIVERED) {
|
|
371
|
+
console.log(`[Encrypted] Delivery confirmation from ${peerID.toHex().slice(0, 8)}`);
|
|
372
|
+
// TODO: Handle delivery confirmation
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
console.log(`[Encrypted] Unknown payload type: 0x${payloadType.toString(16)}`);
|
|
318
376
|
}
|
|
319
377
|
}
|
|
320
378
|
catch (error) {
|
|
321
379
|
this.emit('error', error, 'decrypt');
|
|
322
380
|
}
|
|
323
381
|
}
|
|
324
|
-
|
|
382
|
+
parseTLVPrivateMessage(data) {
|
|
383
|
+
let offset = 0;
|
|
384
|
+
let messageID;
|
|
385
|
+
let content;
|
|
386
|
+
while (offset + 2 <= data.length) {
|
|
387
|
+
const tlvType = data[offset++];
|
|
388
|
+
const tlvLen = data[offset++];
|
|
389
|
+
if (offset + tlvLen > data.length)
|
|
390
|
+
break;
|
|
391
|
+
const tlvValue = data.subarray(offset, offset + tlvLen);
|
|
392
|
+
offset += tlvLen;
|
|
393
|
+
if (tlvType === 0x00) {
|
|
394
|
+
// messageID
|
|
395
|
+
messageID = new TextDecoder().decode(tlvValue);
|
|
396
|
+
}
|
|
397
|
+
else if (tlvType === 0x01) {
|
|
398
|
+
// content
|
|
399
|
+
content = new TextDecoder().decode(tlvValue);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (messageID && content) {
|
|
403
|
+
return { messageID, content };
|
|
404
|
+
}
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
handlePrivateMessage(senderID, payload, timestamp, messageID) {
|
|
325
408
|
const content = new TextDecoder().decode(payload);
|
|
409
|
+
const id = messageID ?? `${senderID.toHex()}-${timestamp}-private`;
|
|
326
410
|
const peer = this.sessions.getPeerInfo(senderID);
|
|
327
411
|
const message = {
|
|
328
|
-
id
|
|
412
|
+
id,
|
|
329
413
|
sender: senderID,
|
|
330
414
|
senderNickname: peer?.nickname ?? 'anon',
|
|
331
415
|
content,
|
|
@@ -333,6 +417,7 @@ export class BitchatClient extends EventEmitter {
|
|
|
333
417
|
isPrivate: true,
|
|
334
418
|
deliveryStatus: { type: 'delivered', to: this.peerID, at: new Date() },
|
|
335
419
|
};
|
|
420
|
+
console.log(`[PM] Received from ${peer?.nickname ?? 'anon'}: "${content.slice(0, 30)}..."`);
|
|
336
421
|
this.emit('message', message);
|
|
337
422
|
}
|
|
338
423
|
async sendAnnounce() {
|
|
@@ -356,6 +441,12 @@ export class BitchatClient extends EventEmitter {
|
|
|
356
441
|
const dataToSign = encodeForSigning(packet);
|
|
357
442
|
const signature = sign(dataToSign, this.sessions.signingKeyPair.secretKey);
|
|
358
443
|
packet.signature = signature;
|
|
444
|
+
// Debug: verify our own signature
|
|
445
|
+
const selfVerify = verify(dataToSign, signature, this.sessions.signingKeyPair.publicKey);
|
|
446
|
+
console.log('[Announce] Self-verify:', selfVerify ? 'PASS' : 'FAIL');
|
|
447
|
+
console.log('[Announce] DataToSign length:', dataToSign.length);
|
|
448
|
+
console.log('[Announce] DataToSign first 60:', Buffer.from(dataToSign.slice(0, 60)).toString('hex'));
|
|
449
|
+
console.log('[Announce] Signature:', Buffer.from(signature).toString('hex').slice(0, 40) + '...');
|
|
359
450
|
await this.router.sendPacket(packet);
|
|
360
451
|
const encoded = encode(packet);
|
|
361
452
|
await this.transport.broadcast(encoded);
|
|
@@ -385,11 +476,35 @@ export class BitchatClient extends EventEmitter {
|
|
|
385
476
|
};
|
|
386
477
|
await this.router.sendToPeer(packet, toPeerID);
|
|
387
478
|
}
|
|
388
|
-
buildPrivateMessagePayload(content,
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
479
|
+
buildPrivateMessagePayload(content, messageID) {
|
|
480
|
+
// iOS TLV format:
|
|
481
|
+
// [0x01] - NoisePayloadType.privateMessage
|
|
482
|
+
// [0x00][len][messageID UTF8] - TLV for messageID
|
|
483
|
+
// [0x01][len][content UTF8] - TLV for content
|
|
484
|
+
const encoder = new TextEncoder();
|
|
485
|
+
const messageIDBytes = encoder.encode(messageID);
|
|
486
|
+
const contentBytes = encoder.encode(content);
|
|
487
|
+
// Validate lengths (must fit in 1 byte)
|
|
488
|
+
if (messageIDBytes.length > 255 || contentBytes.length > 255) {
|
|
489
|
+
throw new Error('Message ID or content too long for TLV encoding');
|
|
490
|
+
}
|
|
491
|
+
// Build TLV payload: 1 + (1+1+msgIDLen) + (1+1+contentLen)
|
|
492
|
+
const payload = new Uint8Array(1 + 2 + messageIDBytes.length + 2 + contentBytes.length);
|
|
493
|
+
let offset = 0;
|
|
494
|
+
// NoisePayloadType.privateMessage = 0x01
|
|
495
|
+
payload[offset++] = 0x01;
|
|
496
|
+
// TLV for messageID: type=0x00, length, data
|
|
497
|
+
payload[offset++] = 0x00;
|
|
498
|
+
payload[offset++] = messageIDBytes.length;
|
|
499
|
+
payload.set(messageIDBytes, offset);
|
|
500
|
+
offset += messageIDBytes.length;
|
|
501
|
+
// TLV for content: type=0x01, length, data
|
|
502
|
+
payload[offset++] = 0x01;
|
|
503
|
+
payload[offset++] = contentBytes.length;
|
|
504
|
+
payload.set(contentBytes, offset);
|
|
505
|
+
console.log(`[PM] Building TLV payload: msgID="${messageID.slice(0, 20)}...", content="${content.slice(0, 20)}..."`);
|
|
506
|
+
console.log(`[PM] Total payload: ${payload.length} bytes`);
|
|
507
|
+
console.log(`[PM] First 50 bytes: ${Buffer.from(payload.slice(0, 50)).toString('hex')}`);
|
|
393
508
|
return payload;
|
|
394
509
|
}
|
|
395
510
|
async sendEncryptedMessage(toPeerID, content, messageID) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/debug.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global debug logger for Bitchat
|
|
3
|
+
* Emits events that can be forwarded to UI/webhooks
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'node:events';
|
|
6
|
+
export interface DebugEvent {
|
|
7
|
+
category: 'ble-rx' | 'ble-tx' | 'session' | 'error' | 'packet' | 'pm';
|
|
8
|
+
tag?: string;
|
|
9
|
+
text?: string;
|
|
10
|
+
hex?: string;
|
|
11
|
+
decoded?: string;
|
|
12
|
+
time: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SessionState {
|
|
15
|
+
peerID: string;
|
|
16
|
+
established: boolean;
|
|
17
|
+
initiator: boolean;
|
|
18
|
+
txNonce?: number;
|
|
19
|
+
rxNonce?: number;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
declare class DebugLogger extends EventEmitter {
|
|
23
|
+
private enabled;
|
|
24
|
+
private logToConsole;
|
|
25
|
+
enable(): void;
|
|
26
|
+
disable(): void;
|
|
27
|
+
setConsoleLogging(enabled: boolean): void;
|
|
28
|
+
log(event: Omit<DebugEvent, 'time'>): void;
|
|
29
|
+
bleRx(data: Uint8Array, decoded?: string): void;
|
|
30
|
+
bleTx(data: Uint8Array, decoded?: string): void;
|
|
31
|
+
session(peerID: string, text: string): void;
|
|
32
|
+
packet(direction: 'rx' | 'tx', type: string, info: string): void;
|
|
33
|
+
pm(direction: 'rx' | 'tx', peerID: string, text: string): void;
|
|
34
|
+
error(context: string, error: Error | string): void;
|
|
35
|
+
updateSession(state: SessionState): void;
|
|
36
|
+
}
|
|
37
|
+
export declare const debugLog: DebugLogger;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,WAAY,SAAQ,YAAY;IACpC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAE5B,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;IAIf,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIzC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI;IAqB1C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/C,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3C,MAAM,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQhE,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAQnD,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;CAGzC;AAGD,eAAO,MAAM,QAAQ,aAAoB,CAAC"}
|