Re-write net docs
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# Adapter
|
||||
|
||||
Adapters provide a unified interface for communicating with relays. Adapters aren't meant to be used directly, but as an injection point for custom logic.
|
||||
|
||||
## Core Classes
|
||||
|
||||
### `AbstractAdapter`
|
||||
|
||||
Base class for all adapters. Handles events and cleanup.
|
||||
|
||||
- `send(message)` - Send message to relay
|
||||
- `cleanup()` - Clean up resources
|
||||
- Emits `AdapterEvent.Receive` when messages arrive
|
||||
|
||||
### Built-in Adapters
|
||||
|
||||
- `SocketAdapter(socket)` - WebSocket relay connections
|
||||
- `LocalAdapter(relay)` - Local in-memory relays
|
||||
- `MockAdapter(url, sendHandler)` - Testing with manual control
|
||||
|
||||
### Factory
|
||||
|
||||
`getAdapter(url, context?)` creates the appropriate adapter:
|
||||
|
||||
```typescript
|
||||
const adapter = getAdapter('wss://relay.example.com')
|
||||
adapter.on(AdapterEvent.Receive, (message, url) => {
|
||||
console.log('Received:', message)
|
||||
})
|
||||
adapter.send(['REQ', 'sub1', {}])
|
||||
adapter.cleanup()
|
||||
```
|
||||
|
||||
## Custom Adapter Example
|
||||
|
||||
Custom adapters can be created against any target:
|
||||
|
||||
```typescript
|
||||
class IPFSAdapter extends AbstractAdapter {
|
||||
constructor(private url string) {
|
||||
super()
|
||||
|
||||
// Set up an IPFS connection here
|
||||
}
|
||||
|
||||
get urls() { return [this.url] }
|
||||
get sockets() { return [] }
|
||||
|
||||
send(message: ClientMessage) {
|
||||
// Handle messages as if the ipfs backend was a relay
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Custom adapters can also be provided to several net utilities, including `publish` and `request`:
|
||||
|
||||
```typescript
|
||||
request({
|
||||
relays: ['ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb'],
|
||||
filters: [{kinds: [1]}],
|
||||
context: {
|
||||
getAdapter: (url: string) => {
|
||||
// getAdapter optionally returns an adapter. If none is returned, the stock adapters will be used.
|
||||
if (url.startsWith('ipfs://')) {
|
||||
return new IPFSAdapter(url)
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
Reference in New Issue
Block a user