> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qu.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# WebSocketProvider

A JSON-RPC provider which is backed by a WebSocket.

WebSockets are often preferred because they retain a live connection to a server, which permits more instant access
to events.

However, this incurs higher server infrastructure costs, so additional resources may be required to host your own
WebSocket nodes and many third-party services charge additional fees for WebSocket endpoints.

## Extends

* [`SocketProvider`](/sdk/content/classes/SocketProvider)

## Constructors

### new WebSocketProvider()

```ts theme={null}
new WebSocketProvider(
   url, 
   network?, 
   options?): WebSocketProvider
```

Create a new WebSocketProvider.

#### Parameters

| Parameter  | Type                                                                                                                                                    | Description                                |
| :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------- |
| `url`      | `string` \| `string`\[] \| [`WebSocketLike`](/sdk/content/interfaces/WebSocketLike) \| [`WebSocketCreator`](/sdk/content/type-aliases/WebSocketCreator) | The URL(s) or WebSocket object or creator. |
| `network`? | [`Networkish`](/sdk/content/type-aliases/Networkish)                                                                                                    | The network to connect to.                 |
| `options`? | [`JsonRpcApiProviderOptions`](/sdk/content/type-aliases/JsonRpcApiProviderOptions)                                                                      | The options for the JSON-RPC API provider. |

#### Returns

[`WebSocketProvider`](/sdk/content/classes/WebSocketProvider)

#### Overrides

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`constructor`](/sdk/content/classes/SocketProvider#constructors)

#### Source

[providers/provider-websocket.ts:94](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-websocket.ts#L94)

## Properties

| Property   | Type                                                          | Default value | Description                                 |
| :--------- | :------------------------------------------------------------ | :------------ | :------------------------------------------ |
| `readyMap` | `Map`\<[`Shard`](/sdk/content/enumerations/Shard), `boolean`> | `...`         | A map to track the readiness of each shard. |

## Accessors

### connect

```ts theme={null}
get connect(): FetchRequest[]
```

Get the list of connected FetchRequests.

#### Returns

[`FetchRequest`](/sdk/content/classes/FetchRequest)\[]

The list of connected FetchRequests.

#### Source

[providers/abstract-provider.ts:1026](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1026)

***

### destroyed

```ts theme={null}
get destroyed(): boolean
```

If this provider has been destroyed using the [**destroy**](/sdk/content/classes/AbstractProvider#destroy) method.

Once destroyed, all resources are reclaimed, internal event loops and timers are cleaned up and no further
requests may be sent to the provider.

#### Returns

`boolean`

#### Source

[providers/abstract-provider.ts:2545](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2545)

***

### paused

```ts theme={null}
get paused(): boolean
```

Whether the provider is currently paused.

A paused provider will not emit any events, and generally should not make any requests to the network, but that
is up to sub-classes to manage.

Setting `paused = true` is identical to calling `.pause(false)`, which will buffer any events that occur while
paused until the provider is unpaused.

#### Returns

`boolean`

Whether the provider is paused.

#### Source

[providers/abstract-provider.ts:2577](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2577)

***

### pollingInterval

```ts theme={null}
get pollingInterval(): number
```

Get the polling interval.

#### Returns

`number`

The polling interval.

#### Source

[providers/abstract-provider.ts:1183](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1183)

***

### provider

```ts theme={null}
get provider(): this
```

Returns `this`, to allow an **AbstractProvider** to implement the [Contract Runner](../classes/ContractRunner)
interface.

#### Returns

`this`

The provider instance.

#### Source

[providers/abstract-provider.ts:1193](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1193)

***

### ready

```ts theme={null}
get ready(): boolean
```

Returns true only if the JsonRpcApiProvider.\_start | **\_start** has been called.

#### Returns

`boolean`

True if the provider is ready.

#### Source

[providers/provider-jsonrpc.ts:1117](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1117)

***

### websocket

```ts theme={null}
get websocket(): WebSocketLike[]
```

Get the array of WebSocketLike objects.

#### Throws

If the websocket is closed.

#### Returns

[`WebSocketLike`](/sdk/content/interfaces/WebSocketLike)\[]

The array of WebSocketLike objects.

#### Source

[providers/provider-websocket.ts:80](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-websocket.ts#L80)

## Methods

### \_clearTimeout()

```ts theme={null}
_clearTimeout(timerId): void
```

Clear a timer created using the AbstractProvider.\_setTimeout | **\_setTimeout** method.

#### Parameters

| Parameter | Type     | Description                   |
| :-------- | :------- | :---------------------------- |
| `timerId` | `number` | The ID of the timer to clear. |

#### Returns

`void`

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`_clearTimeout`](/sdk/content/classes/SocketProvider#_cleartimeout)

#### Source

[providers/abstract-provider.ts:2221](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2221)

***

### destroy()

```ts theme={null}
destroy(): Promise<void>
```

Destroy the WebSocket connections and clean up resources.

#### Returns

`Promise`\<`void`>

A promise that resolves when the WebSocket connections are closed.

#### Overrides

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`destroy`](/sdk/content/classes/SocketProvider#destroy)

#### Source

[providers/provider-websocket.ts:399](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-websocket.ts#L399)

***

### getActiveRegions()

```ts theme={null}
getActiveRegions(): Promise<Shard[]>
```

Get the active region shards based on the protocol expansion number.

#### Returns

`Promise`\<[`Shard`](/sdk/content/enumerations/Shard)\[]>

A promise that resolves to the active shards.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getActiveRegions`](/sdk/content/classes/SocketProvider#getactiveregions)

#### Source

[providers/abstract-provider.ts:1110](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1110)

***

### getActiveZones()

```ts theme={null}
getActiveZones(): Promise<Zone[]>
```

Get the active zones for a shard based on the protocol expansion number.

#### Returns

`Promise`\<[`Zone`](/sdk/content/enumerations/Zone)\[]>

A promise that resolves to the active zones.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getActiveZones`](/sdk/content/classes/SocketProvider#getactivezones)

#### Source

[providers/abstract-provider.ts:1127](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1127)

***

### getLatestQiToQuaiRate()

```ts theme={null}
getLatestQiToQuaiRate(zone, amt?): Promise<bigint>
```

Get the latest Qi rate for a zone.

#### Parameters

| Parameter | Type                                     | Description                                    |
| :-------- | :--------------------------------------- | :--------------------------------------------- |
| `zone`    | [`Zone`](/sdk/content/enumerations/Zone) | The zone to get the rate for.                  |
| `amt`?    | `bigint`                                 | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the latest Qi rate.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getLatestQiToQuaiRate`](/sdk/content/classes/SocketProvider#getlatestqitoquairate)

#### Source

[providers/abstract-provider.ts:1149](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1149)

***

### getLatestQuaiToQiRate()

```ts theme={null}
getLatestQuaiToQiRate(zone, amt?): Promise<bigint>
```

Get the latest Quai rate for a zone.

#### Parameters

| Parameter | Type                                     | Description                                             |
| :-------- | :--------------------------------------- | :------------------------------------------------------ |
| `zone`    | [`Zone`](/sdk/content/enumerations/Zone) | The zone to get the rate for.                           |
| `amt`?    | `bigint`                                 | The amount in quais to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the latest Quai -> Qi rate for the given amount.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getLatestQuaiToQiRate`](/sdk/content/classes/SocketProvider#getlatestquaitoqirate)

#### Source

[providers/abstract-provider.ts:1068](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1068)

***

### getProtocolExpansionNumber()

```ts theme={null}
getProtocolExpansionNumber(): Promise<number>
```

Get the protocol expansion number.

#### Returns

`Promise`\<`number`>

A promise that resolves to the protocol expansion number.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getProtocolExpansionNumber`](/sdk/content/classes/SocketProvider#getprotocolexpansionnumber)

#### Source

[providers/abstract-provider.ts:1101](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1101)

***

### getQiToQuaiRateAtBlock()

```ts theme={null}
getQiToQuaiRateAtBlock(
   zone, 
   blockTag, 
amt?): Promise<bigint>
```

Get the Qi rate at a specific block.

#### Parameters

| Parameter  | Type                                             | Description                                    |
| :--------- | :----------------------------------------------- | :--------------------------------------------- |
| `zone`     | [`Zone`](/sdk/content/enumerations/Zone)         | The zone to get the rate for.                  |
| `blockTag` | [`BlockTag`](/sdk/content/type-aliases/BlockTag) | The block tag to get the rate at.              |
| `amt`?     | `bigint`                                         | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the Qi rate at the specified block.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getQiToQuaiRateAtBlock`](/sdk/content/classes/SocketProvider#getqitoquairateatblock)

#### Source

[providers/abstract-provider.ts:1162](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1162)

***

### getQuaiToQiRateAtBlock()

```ts theme={null}
getQuaiToQiRateAtBlock(
   zone, 
   blockTag, 
amt?): Promise<bigint>
```

Get the Quai rate at a specific block.

#### Parameters

| Parameter  | Type                                             | Description                                    |
| :--------- | :----------------------------------------------- | :--------------------------------------------- |
| `zone`     | [`Zone`](/sdk/content/enumerations/Zone)         | The zone to get the rate for.                  |
| `blockTag` | [`BlockTag`](/sdk/content/type-aliases/BlockTag) | The block tag to get the rate at.              |
| `amt`?     | `bigint`                                         | The amount to get the rate for. Default is `1` |

#### Returns

`Promise`\<`bigint`>

A promise that resolves to the Quai rate at the specified block.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getQuaiToQiRateAtBlock`](/sdk/content/classes/SocketProvider#getquaitoqirateatblock)

#### Source

[providers/abstract-provider.ts:1081](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1081)

***

### getSigner()

```ts theme={null}
getSigner(address?): Promise<JsonRpcSigner>
```

Returns a JsonRpcSigner for the given address.

#### Parameters

| Parameter  | Type                 | Description                          |
| :--------- | :------------------- | :----------------------------------- |
| `address`? | `string` \| `number` | The address or index of the account. |

#### Returns

`Promise`\<[`JsonRpcSigner`](/sdk/content/classes/JsonRpcSigner)>

A promise that resolves to the JsonRpcSigner.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`getSigner`](/sdk/content/classes/SocketProvider#getsigner)

#### Throws

If the account is invalid.

#### Source

[providers/provider-jsonrpc.ts:1542](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1542)

***

### listAccounts()

```ts theme={null}
listAccounts(): Promise<JsonRpcSigner[]>
```

Returns a list of JsonRpcSigners for all accounts.

#### Returns

`Promise`\<[`JsonRpcSigner`](/sdk/content/classes/JsonRpcSigner)\[]>

A promise that resolves to an array of JsonRpcSigners.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`listAccounts`](/sdk/content/classes/SocketProvider#listaccounts)

#### Source

[providers/provider-jsonrpc.ts:1579](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1579)

***

### pause()

```ts theme={null}
pause(dropWhilePaused?): void
```

Pause the provider. If `dropWhilePaused`, any events that occur while paused are dropped, otherwise all events
will be emitted once the provider is unpaused.

#### Parameters

| Parameter          | Type      | Description                          |
| :----------------- | :-------- | :----------------------------------- |
| `dropWhilePaused`? | `boolean` | Whether to drop events while paused. |

#### Returns

`void`

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`pause`](/sdk/content/classes/SocketProvider#pause)

#### Source

[providers/abstract-provider.ts:2598](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2598)

***

### resume()

```ts theme={null}
resume(): void
```

Resume the provider.

#### Returns

`void`

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`resume`](/sdk/content/classes/SocketProvider#resume)

#### Source

[providers/abstract-provider.ts:2627](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L2627)

***

### send()

```ts theme={null}
send(
   method, 
   params, 
   shard?, 
now?): Promise<any>
```

Requests the `method` with `params` via the JSON-RPC protocol over the underlying channel. This can be used to
call methods on the backend that do not have a high-level API within the Provider API.

This method queues requests according to the batch constraints in the options, assigns the request a unique ID.

**Do NOT override** this method in sub-classes; instead override JsonRpcApiProvider.\_send | **\_send** or
force the options values in the call to the constructor to modify this method's behavior.

#### Parameters

| Parameter | Type                                       | Description                                    |
| :-------- | :----------------------------------------- | :--------------------------------------------- |
| `method`  | `string`                                   | The method to call.                            |
| `params`  | `any`\[] \| `Record`\<`string`, `any`>     | The parameters to pass to the method.          |
| `shard`?  | [`Shard`](/sdk/content/enumerations/Shard) | The shard to send the request to.              |
| `now`?    | `boolean`                                  | If true, the request will be sent immediately. |

#### Returns

`Promise`\<`any`>

A promise that resolves to the result of the method call.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`send`](/sdk/content/classes/SocketProvider#send)

#### Source

[providers/provider-jsonrpc.ts:1500](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-jsonrpc.ts#L1500)

***

### shardFromHash()

```ts theme={null}
shardFromHash(hash): Shard
```

Get the shard from a hash.

#### Parameters

| Parameter | Type     | Description                     |
| :-------- | :------- | :------------------------------ |
| `hash`    | `string` | The hash to get the shard from. |

#### Returns

[`Shard`](/sdk/content/enumerations/Shard)

The shard.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`shardFromHash`](/sdk/content/classes/SocketProvider#shardfromhash)

#### Source

[providers/abstract-provider.ts:1047](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1047)

***

### waitShardReady()

```ts theme={null}
waitShardReady(shard): Promise<void>
```

Wait until the shard is ready. Max wait time is \~8 seconds.

#### Parameters

| Parameter | Type                                       | Description           |
| :-------- | :----------------------------------------- | :-------------------- |
| `shard`   | [`Shard`](/sdk/content/enumerations/Shard) | The shard identifier. |

#### Returns

`Promise`\<`void`>

A promise that resolves when the shard is ready.

#### Throws

If the shard is not ready within the timeout period.

#### Source

[providers/provider-websocket.ts:166](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/provider-websocket.ts#L166)

***

### zoneFromAddress()

```ts theme={null}
zoneFromAddress(_address): Promise<Zone>
```

Get the zone from an address.

#### Parameters

| Parameter  | Type                                                   | Description                       |
| :--------- | :----------------------------------------------------- | :-------------------------------- |
| `_address` | [`AddressLike`](/sdk/content/type-aliases/AddressLike) | The address to get the zone from. |

#### Returns

`Promise`\<[`Zone`](/sdk/content/enumerations/Zone)>

A promise that resolves to the zone.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`zoneFromAddress`](/sdk/content/classes/SocketProvider#zonefromaddress)

#### Source

[providers/abstract-provider.ts:1036](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1036)

***

### zoneFromHash()

```ts theme={null}
zoneFromHash(hash): Zone
```

Get the zone from a hash.

#### Parameters

| Parameter | Type     | Description                    |
| :-------- | :------- | :----------------------------- |
| `hash`    | `string` | The hash to get the zone from. |

#### Returns

[`Zone`](/sdk/content/enumerations/Zone)

The zone.

#### Inherited from

[`SocketProvider`](/sdk/content/classes/SocketProvider).[`zoneFromHash`](/sdk/content/classes/SocketProvider#zonefromhash)

#### Source

[providers/abstract-provider.ts:1057](https://github.com/dominant-strategies/quais.js/blob/c1c12d43f9d34c6baad2b0542bd6d0acd6fefcbf/src/providers/abstract-provider.ts#L1057)
