# ltws is a websocket library

ltws will manage ws connection that will automatically reconnect if the connection is closed.

## Install

```bash
npm i ltws
```

#### Or

```bash
npm install --save ltws
```

## Usage

### Simple usage

```javascript
import ltws from 'ltws'

const ws = ltws.connect('ws://my.site.com')

ws.on('connect', () => {
  ws.send('hello!')

  ws.sendJson({msg: 'hello!'})
})

ws.on('json', (message) => {
  console.log('on json', message)
})

ws.on('message', (message) => {
  console.log('on message', message)
})

ws.once('message', (message) => {
  console.log('once message', message)
})
```

### Async usage

```javascript
import ltws from 'ltws'

const ws = ltws.createInstance()

ws.on('json', (message) => {
  console.log('on json', message)
})

ws.on('message', (message) => {
  console.log('on message', message)
})

ws.once('message', (message) => {
  console.log('once message', message)
})

await ws.connectAsync('ws://my.site.com')
```

### Options

#### Sample with custom options

```javascript
import ltws from 'ltws'

const options = {
  connectTimeout: 5000,
  maxRetries: 10,
}
const ltws = ltws.connect('ws://my.site.com', options)
```

#### Available options

```typescript
type Options = {
  pingInterval?: number
  pingTimeout?: number
  connectTimeout?: number
  reconnectTimeout?: number
  reconnectDelay?: number
  maxRetries?: number
  useReconnectEvent?: boolean
  autoReconnect?: boolean
  debug?: boolean
  warn?: boolean
  error?: boolean
}
```

#### Default values

```javascript
{
  pingInterval: 5000,
  pingTimeout: 5000,
  connectTimeout: 5000,
  reconnectTimeout: 5000,
  reconnectDelay: 5000,
  maxRetries: Number.MAX_SAFE_INTEGER,
  useReconnectEvent: false,
  autoReconnect: true,
  debug: false,
  warn: true,
  error: true
}
```

## API

### Methods

```typescript
connect(url: String, options: Options)
reconnect()
disconnect()

send(data: string | ArrayBuffer | Blob | ArrayBufferView)
sendJson(data: Object)

type Event = 'ping' | 'pong' | 'message' | 'json' | 'connect' | 'reconnect' | 'reconnecting' | 'disconnect' | 'disconnecting' | 'error' | 'connectError'

on(type: Event, listener: EventListener)
once(type: Event, listener: EventListener)
off(type: Event, listener: EventListener)
removeListener(type: Event, listener: EventListener)
removeOnceListener(type: Event, listener: EventListener)
```

## License

MIT
