70 lines
1.9 KiB
Markdown
70 lines
1.9 KiB
Markdown
# Socket
|
|
The Socket class is exclusively used by the `Connection` class as its low-level WebSocket manager. It's not meant to be used directly by other classes.
|
|
Its sole purpose is to provide a reliable, manageable WebSocket connection with nostr-specific handling.
|
|
|
|
## Core Responsibilities
|
|
|
|
```typescript
|
|
export class Socket {
|
|
// Track connection state
|
|
status: SocketStatus = "new" | "open" | "opening" | "closing" | "closed" | "error"
|
|
|
|
// Handle nostr message queue
|
|
worker: Worker<Message>
|
|
|
|
// Core operations
|
|
open = async () => {/* Initialize WebSocket */}
|
|
close = async () => {/* Clean shutdown */}
|
|
send = async (message: Message) => {/* Send with JSON serialization */}
|
|
}
|
|
```
|
|
|
|
Key features:
|
|
- State tracking
|
|
- Message queuing
|
|
- JSON serialization
|
|
- Error recovery
|
|
- Connection lifecycle
|
|
|
|
Think of it as a thin wrapper that turns raw WebSocket connections into something more suitable for nostr:
|
|
```typescript
|
|
// Raw WebSocket
|
|
ws.send(JSON.stringify(["REQ", "sub1", {kinds: [1]}]))
|
|
|
|
// With Socket
|
|
socket.send(["REQ", "sub1", {kinds: [1]}]) // Handles serialization
|
|
```
|
|
|
|
## Usage Chain
|
|
|
|
```typescript
|
|
// Hierarchy
|
|
Socket // WebSocket management
|
|
↳ Connection // Uses Socket
|
|
↳ Relay Target // Uses Connection
|
|
↳ Executor // Uses Target
|
|
↳ Subscribe // Uses Executor
|
|
↳ Publish // Uses Executor
|
|
|
|
// In Connection.ts
|
|
export class Connection extends Emitter {
|
|
socket: Socket
|
|
|
|
constructor(url: string) {
|
|
this.socket = new Socket(this)
|
|
}
|
|
}
|
|
```
|
|
|
|
It's an internal implementation detail that you shouldn't need to use directly - always interact with the `Connection` class instead, which provides a higher-level interface.
|
|
|
|
```typescript
|
|
// DON'T use Socket directly
|
|
const socket = new Socket(/*...*/) // ❌
|
|
|
|
// DO use Connection
|
|
const connection = new Connection(url) // ✅
|
|
```
|
|
|
|
This encapsulation ensures consistent connection management across the library.
|