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

# Module: offline

> Reference for the bijection/offline entry point.

## Variables

### offlineReplicaArguments

• `Const` **offlineReplicaArguments**: `Object`

Arguments of an application's authorized per-collection offline feed.

#### Type declaration

| Name | Type |
| :- | :- |
| `collection` | [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> |
| `since` | [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` \| `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> |
| `cursor` | [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` \| `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> |
| `known` | [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` \| `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> |

## Functions

### offlineReplicaPopulationDigest

▸ **offlineReplicaPopulationDigest**\<`Row`>(`rows`): `string`

Fingerprint the complete authorized population for a custom feed.

#### Type parameters

| Name | Type |
| :- | :- |
| `Row` | extends [`Value`](https://docs.bijection.com/api/modules/values#value) |

#### Parameters

| Name | Type |
| :- | :- |
| `rows` | readonly [`ReplicaRow`](https://docs.bijection.com/api/modules/browser#replicarow)\<`Row`>\[] |

#### Returns

`string`

***

### offlineReplicaPage

▸ **offlineReplicaPage**\<`V`>(`row`): [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<\{ `collection`: `string` ; `kind`: `"restart"` | `"denied"` ; `cursor`: `null` | `string` ; `since`: `null` | `string`  } | \{ `collection`: `string` ; `kind`: `"snapshot"` | `"delta"` ; `cursor`: `null` | `string` ; `checkpoint`: `string` ; `expiresAtMs`: `number` ; `changes`: ([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ kind: "delete"; id: string; })\[] ; `nextCursor`: `null` | `string` ; `since`: `null` | `string` ; `populationDigest`: `string`  }, \[[`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `collection`: `string` ; `kind`: `"restart"` | `"denied"` ; `cursor`: `null` | `string` ; `since`: `null` | `string`  }, \{ `collection`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `since`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `cursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `kind`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`"restart"` | `"denied"`, \[[`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"denied"`, `"required"`>, [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"restart"`, `"required"`>], `"required"`, `never`>  }, `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"since"`>, [`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `collection`: `string` ; `kind`: `"snapshot"` | `"delta"` ; `cursor`: `null` | `string` ; `checkpoint`: `string` ; `expiresAtMs`: `number` ; `changes`: ([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ kind: "delete"; id: string; })\[] ; `nextCursor`: `null` | `string` ; `since`: `null` | `string` ; `populationDigest`: `string`  }, \{ `collection`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `since`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `cursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `kind`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`"snapshot"` | `"delta"`, \[[`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"snapshot"`, `"required"`>, [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"delta"`, `"required"`>], `"required"`, `never`> ; `checkpoint`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `populationDigest`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `nextCursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `expiresAtMs`: [`VFloat64`](https://docs.bijection.com/api/classes/values.VFloat64)\<`number`, `"required"`> ; `changes`: [`VArray`](https://docs.bijection.com/api/classes/values.VArray)\<([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ `kind`: `"delete"` ; `id`: `string`  })\[], [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<[`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ `kind`: `"delete"` ; `id`: `string`  }, \[[`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<[`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }>, \{ `kind`: [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"put"`, `"required"`> ; `id`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `value`: `V` = row }, `"required"`, `"kind"` | `"id"` | `"value"` | \`value.$\{V["fieldPaths"]}\`\>, [`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `kind`: ``"delete"`` ; `id`: `string`  \}, \{ `kind`: [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<``"delete"``, ``"required"``\> ; `id`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, ``"required"``\>  \}, ``"required"``, ``"kind"`` \| ``"id"``\>], ``"required"``, ``"kind"`` \| ``"id"`` \| ``"value"`` \| \`value.$\{V\["fieldPaths"]}\`>, `"required"`>  }, `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"checkpoint"` | `"expiresAtMs"` | `"changes"` | `"nextCursor"` | `"since"` | `"populationDigest"`>], `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"checkpoint"` | `"expiresAtMs"` | `"changes"` | `"nextCursor"` | `"since"` | `"populationDigest"`>

Validate one page of an offline snapshot or a net change set.

#### Type parameters

| Name | Type |
| :- | :- |
| `V` | extends [`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`any`, `"required"`, `any`> |

#### Parameters

| Name | Type |
| :- | :- |
| `row` | `V` |

#### Returns

[`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<\{ `collection`: `string` ; `kind`: `"restart"` | `"denied"` ; `cursor`: `null` | `string` ; `since`: `null` | `string`  } | \{ `collection`: `string` ; `kind`: `"snapshot"` | `"delta"` ; `cursor`: `null` | `string` ; `checkpoint`: `string` ; `expiresAtMs`: `number` ; `changes`: ([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ kind: "delete"; id: string; })\[] ; `nextCursor`: `null` | `string` ; `since`: `null` | `string` ; `populationDigest`: `string`  }, \[[`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `collection`: `string` ; `kind`: `"restart"` | `"denied"` ; `cursor`: `null` | `string` ; `since`: `null` | `string`  }, \{ `collection`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `since`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `cursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `kind`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`"restart"` | `"denied"`, \[[`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"denied"`, `"required"`>, [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"restart"`, `"required"`>], `"required"`, `never`>  }, `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"since"`>, [`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `collection`: `string` ; `kind`: `"snapshot"` | `"delta"` ; `cursor`: `null` | `string` ; `checkpoint`: `string` ; `expiresAtMs`: `number` ; `changes`: ([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ kind: "delete"; id: string; })\[] ; `nextCursor`: `null` | `string` ; `since`: `null` | `string` ; `populationDigest`: `string`  }, \{ `collection`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `since`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `cursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `kind`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`"snapshot"` | `"delta"`, \[[`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"snapshot"`, `"required"`>, [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"delta"`, `"required"`>], `"required"`, `never`> ; `checkpoint`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `populationDigest`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `nextCursor`: [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<`null` | `string`, \[[`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`>, [`VNull`](https://docs.bijection.com/api/classes/values.VNull)\<`null`, `"required"`>], `"required"`, `never`> = position; `expiresAtMs`: [`VFloat64`](https://docs.bijection.com/api/classes/values.VFloat64)\<`number`, `"required"`> ; `changes`: [`VArray`](https://docs.bijection.com/api/classes/values.VArray)\<([`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ `kind`: `"delete"` ; `id`: `string`  })\[], [`VUnion`](https://docs.bijection.com/api/classes/values.VUnion)\<[`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }> | \{ `kind`: `"delete"` ; `id`: `string`  }, \[[`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<[`Expand`](https://docs.bijection.com/api/modules/server#expand)\<\{ \[Property in "value"]?: Exclude\<Infer\<Object\[Property]>, undefined> } & \{ \[Property in "kind" | "id" | "value"]: Infer\<Object\[Property]> }>, \{ `kind`: [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<`"put"`, `"required"`> ; `id`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, `"required"`> ; `value`: `V` = row }, `"required"`, `"kind"` | `"id"` | `"value"` | \`value.$\{V["fieldPaths"]}\`\>, [`VObject`](https://docs.bijection.com/api/classes/values.VObject)\<\{ `kind`: ``"delete"`` ; `id`: `string`  \}, \{ `kind`: [`VLiteral`](https://docs.bijection.com/api/classes/values.VLiteral)\<``"delete"``, ``"required"``\> ; `id`: [`VString`](https://docs.bijection.com/api/classes/values.VString)\<`string`, ``"required"``\>  \}, ``"required"``, ``"kind"`` \| ``"id"``\>], ``"required"``, ``"kind"`` \| ``"id"`` \| ``"value"`` \| \`value.$\{V\["fieldPaths"]}\`>, `"required"`>  }, `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"checkpoint"` | `"expiresAtMs"` | `"changes"` | `"nextCursor"` | `"since"` | `"populationDigest"`>], `"required"`, `"collection"` | `"kind"` | `"cursor"` | `"checkpoint"` | `"expiresAtMs"` | `"changes"` | `"nextCursor"` | `"since"` | `"populationDigest"`>

***

### offlineCollectionFeed

▸ **offlineCollectionFeed**\<`Ctx`, `Row`>(`options`): (`ctx`: `Ctx`, `args`: [`OfflineReplicaPageArgs`](https://docs.bijection.com/api/modules/browser#offlinereplicapageargs)) => `Promise`\<[`OfflineReplicaPage`](https://docs.bijection.com/api/modules/browser#offlinereplicapage)\<`Row`>>

Create a read-only feed handler for a collection's authorized projection.
Return `null` to deny retention, or all rows the current caller may retain.
Bijection seals checkpoints and computes the net changes for each replica.

#### Type parameters

| Name | Type |
| :- | :- |
| `Ctx` | extends `Object` |
| `Row` | extends [`Value`](https://docs.bijection.com/api/modules/values#value) |

#### Parameters

| Name | Type |
| :- | :- |
| `options` | `Object` |
| `options.collection` | \`collection:\$\{string}\` |
| `options.leaseMs` | `number` |
| `options.read` | (`ctx`: `Ctx`, `caller`: [`UserIdentity`](https://docs.bijection.com/api/interfaces/server.UserIdentity)) => readonly [`ReplicaRow`](https://docs.bijection.com/api/modules/browser#replicarow)\<`Row`>\[] \| `null` \| `Promise`\<readonly [`ReplicaRow`](https://docs.bijection.com/api/modules/browser#replicarow)\<`Row`>\[] \| `null`> |

#### Returns

`fn`

▸ (`ctx`, `args`): `Promise`\<[`OfflineReplicaPage`](https://docs.bijection.com/api/modules/browser#offlinereplicapage)\<`Row`>>

##### Parameters

| Name | Type |
| :- | :- |
| `ctx` | `Ctx` |
| `args` | [`OfflineReplicaPageArgs`](https://docs.bijection.com/api/modules/browser#offlinereplicapageargs) |

##### Returns

`Promise`\<[`OfflineReplicaPage`](https://docs.bijection.com/api/modules/browser#offlinereplicapage)\<`Row`>>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.