[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [local‑first/Owner](https://evolu.dev/docs/api-reference/common/local-first/Owner) › parseOwnerIdFromOwnerWebSocketTransportUrl

```ts
function parseOwnerIdFromOwnerWebSocketTransportUrl(
  url: string,
): (string & Brand<"Id"> & Brand<"OwnerId">) | null;
```

Defined in: [packages/common/src/local-first/Owner.ts:435](https://github.com/evoluhq/evolu/blob/a18269a1b822c670b507c6a9b73b23eed32551fe/packages/common/src/local-first/Owner.ts#L435)

Extracts [OwnerId](https://evolu.dev/docs/api-reference/common/local-first/Owner/variables/OwnerId) from an [OwnerWebSocketTransport](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/OwnerWebSocketTransport) URL query
string.

Parses the query string `?ownerId=...` and validates that the extracted value
is a valid [OwnerId](https://evolu.dev/docs/api-reference/common/local-first/Owner/variables/OwnerId).

### Example

```ts
import {
  createAppOwner,
  createOwnerSecret,
  createRandomBytes,
  parseOwnerIdFromOwnerWebSocketTransportUrl,
} from "@evolu/common";

// Create once, persist the mnemonic securely, and restore it on later runs.
const appOwner = createAppOwner(
  createOwnerSecret({ randomBytes: createRandomBytes() }),
);
const url = `/sync?ownerId=${appOwner.id}`;

expect(parseOwnerIdFromOwnerWebSocketTransportUrl(url)).toBe(appOwner.id);
expect(
  parseOwnerIdFromOwnerWebSocketTransportUrl("/sync?ownerId=invalid"),
).toBeNull();
```