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

Defined in: [packages/common/src/local-first/Storage.ts:44](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/local-first/Storage.ts#L44)

## Extended by

- [`RelayConfig`](https://evolu.dev/docs/api-reference/common/local-first/Relay/interfaces/RelayConfig)

## Properties

<a id="isownerwithinquota"></a>

### isOwnerWithinQuota

```ts
readonly isOwnerWithinQuota: (ownerId: string & Brand<"Id"> & Brand<"OwnerId">, requiredBytes: number & Brand<"Int"> & Brand<"NonNegative"> & Brand<"Positive">) => Awaitable<boolean>;
```

Defined in: [packages/common/src/local-first/Storage.ts:74](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/local-first/Storage.ts#L74)

Callback called before an attempt to write, to check if an [OwnerId](https://evolu.dev/docs/api-reference/common/local-first/Owner/variables/OwnerId)
has sufficient quota for the write.

The callback receives the [OwnerId](https://evolu.dev/docs/api-reference/common/local-first/Owner/variables/OwnerId) and the total bytes that would be
stored after the write (current stored bytes plus incoming bytes), and
returns a [Awaitable](https://evolu.dev/docs/api-reference/common/Types/type-aliases/Awaitable) boolean: `true` to allow the write, or `false`
to deny it due to quota limits.

The callback can be synchronous (for SQLite or in-memory checks) or
asynchronous (for calling remote APIs).

The callback returns a boolean rather than an error because error handling
and logging are the responsibility of the callback implementation.

### Example

```ts
// Client
// evolu.subscribeError

// Relay
isOwnerWithinQuota: (ownerId, requiredBytes) => {
  console.log(ownerId, requiredBytes);
  // Check error via evolu.subscribeError
  return true;
};
```