[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:529](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/local-first/Owner.ts#L529)

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 {
  assertEqual,
  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}`;

assertEqual(parseOwnerIdFromOwnerWebSocketTransportUrl(url), appOwner.id);
assertEqual(
  parseOwnerIdFromOwnerWebSocketTransportUrl("/sync?ownerId=invalid"),
  null,
);
```