[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [WebSocket](https://evolu.dev/docs/api-reference/common/WebSocket) › WebSocketUrlFromString

```ts
const WebSocketUrlFromString: transform(
  "WebSocketUrlFromString",
  String,
  WebSocketUrl,
  {
    from: (value: string): Result<string, WebSocketUrlFromStringError> => {
      const url = UrlFromString.fromUnknown(value);
      return url.ok && isWebSocketUrl(url.value)
        ? ok(url.value)
        : err({ type: "WebSocketUrlFromString", value });
    },
    to: (value: WebSocketUrl) => value,
  },
  formatWebSocketUrlFromStringError,
);
```

Defined in: [packages/common/src/WebSocket.ts:716](https://github.com/evoluhq/evolu/blob/aa223771feea747ffb1b0f5f3271574455633e37/packages/common/src/WebSocket.ts#L716)

Transforms a WebSocket URL into its canonical [WebSocketUrl](https://evolu.dev/docs/api-reference/common/WebSocket/variables/WebSocketUrl).

Accepts what [UrlFromString](https://evolu.dev/docs/api-reference/common/Type/variables/UrlFromString) accepts when the result is a WebSocketUrl.
Encoding returns the canonical spelling, not the original one.

### Example

```ts
import {
  assertEqual,
  assertErr,
  assertOk,
  WebSocketUrlFromString,
} from "@evolu/common";

assertOk(
  WebSocketUrlFromString.fromUnknown("WSS://Free.EvoluHQ.com:443"),
  "wss://free.evoluhq.com/",
);

const invalid = WebSocketUrlFromString.fromUnknown("https://evolu.dev");
assertErr(invalid, {
  type: "WebSocketUrlFromString",
  value: "https://evolu.dev",
});
assertEqual(
  WebSocketUrlFromString.formatError(invalid.error),
  'The value "https://evolu.dev" is not a valid WebSocket URL.',
);
```