@bsv/authsocket-client
Version:
Mutually Authenticated Web Sockets Client
38 lines (33 loc) • 1.14 kB
text/typescript
/**
* A client-side transport for BRC-103 using Socket.IO client.
*
* The BRC-103 `Peer` uses `transport.send()` to send an `AuthMessage`,
* which is forwarded via `this.socket.emit('authMessage', message)`.
*
* This class also listens for `'authMessage'` events from the server.
*/
import { Socket as IoClientSocket } from 'socket.io-client'
import { AuthMessage, Transport } from '@bsv/sdk'
export class SocketClientTransport implements Transport {
private onDataCallback?: (message: AuthMessage) => Promise<void>
constructor(private socket: IoClientSocket) {
// Subscribe to the 'authMessage' event from the server
this.socket.on('authMessage', async (msg: AuthMessage) => {
if (this.onDataCallback) {
await this.onDataCallback(msg)
}
})
}
/**
* Send an AuthMessage to the server.
*/
async send(message: AuthMessage): Promise<void> {
this.socket.emit('authMessage', message)
}
/**
* Register a callback to handle incoming AuthMessages.
*/
async onData(callback: (message: AuthMessage) => Promise<void>): Promise<void> {
this.onDataCallback = callback
}
}