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

# Flex solana.src.Namespace.facilitator

[**Flex API**](/api/flex-solana.src)

***

[Flex API](/api/flex-solana.src) / facilitator

# facilitator

## Type Aliases

### EscrowAccounting

> **EscrowAccounting** = `object`

Defined in: [facilitator/accounting.ts:26](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L26)

Snapshot of an escrow's vault balances, pending settlements, and available capacity.

#### Properties

##### availableByMint

> **availableByMint**: `Map`\<`Address`, `bigint`>

Defined in: [facilitator/accounting.ts:33](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L33)

##### canSubmit

> **canSubmit**: `boolean`

Defined in: [facilitator/accounting.ts:34](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L34)

##### escrow

> **escrow**: `Address`

Defined in: [facilitator/accounting.ts:27](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L27)

##### holds

> **holds**: [`HoldEntry`](#holdentry)\[]

Defined in: [facilitator/accounting.ts:29](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L29)

##### maxPending

> **maxPending**: `number`

Defined in: [facilitator/accounting.ts:32](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L32)

##### pendingCount

> **pendingCount**: `number`

Defined in: [facilitator/accounting.ts:31](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L31)

##### totalPendingByMint

> **totalPendingByMint**: `Map`\<`Address`, `bigint`>

Defined in: [facilitator/accounting.ts:30](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L30)

##### vaultBalances

> **vaultBalances**: `Map`\<`Address`, `bigint`>

Defined in: [facilitator/accounting.ts:28](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L28)

***

### Hold

> **Hold** = `object`

Defined in: [facilitator/hold-manager.ts:5](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L5)

An in-memory hold representing a payment authorization awaiting on-chain submission.

#### Properties

##### authorizationId

> **authorizationId**: `bigint`

Defined in: [facilitator/hold-manager.ts:10](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L10)

##### escrow

> **escrow**: `Address`

Defined in: [facilitator/hold-manager.ts:6](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L6)

##### expiresAtSlot

> **expiresAtSlot**: `bigint`

Defined in: [facilitator/hold-manager.ts:11](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L11)

##### heldAt

> **heldAt**: `number`

Defined in: [facilitator/hold-manager.ts:21](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L21)

##### maxAmount

> **maxAmount**: `bigint`

Defined in: [facilitator/hold-manager.ts:9](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L9)

##### message

> **message**: `Uint8Array`

Defined in: [facilitator/hold-manager.ts:17](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L17)

##### mint

> **mint**: `Address`

Defined in: [facilitator/hold-manager.ts:7](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L7)

##### payer

> **payer**: `Address`

Defined in: [facilitator/hold-manager.ts:18](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L18)

##### retryCount

> **retryCount**: `number`

Defined in: [facilitator/hold-manager.ts:23](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L23)

##### sessionKeyAddress

> **sessionKeyAddress**: `Address`

Defined in: [facilitator/hold-manager.ts:12](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L12)

##### sessionKeyPDA

> **sessionKeyPDA**: `Address`

Defined in: [facilitator/hold-manager.ts:13](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L13)

##### settleAmount

> **settleAmount**: `bigint`

Defined in: [facilitator/hold-manager.ts:8](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L8)

##### signatureBytes

> **signatureBytes**: `Uint8Array`

Defined in: [facilitator/hold-manager.ts:16](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L16)

##### splits

> **splits**: [`SplitInput`](/api/flex-solana.src#splitinput)\[]

Defined in: [facilitator/hold-manager.ts:15](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L15)

##### status

> **status**: `"held"` | `"settled"` | `"submitting"` | `"submitted"` | `"finalizing"`

Defined in: [facilitator/hold-manager.ts:20](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L20)

##### submittedAtSlot

> **submittedAtSlot**: `bigint` | `null`

Defined in: [facilitator/hold-manager.ts:22](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L22)

##### validUntilSlot

> **validUntilSlot**: `bigint`

Defined in: [facilitator/hold-manager.ts:19](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L19)

##### vault

> **vault**: `Address`

Defined in: [facilitator/hold-manager.ts:14](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L14)

***

### HoldEntry

> **HoldEntry** = `object`

Defined in: [facilitator/accounting.ts:14](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L14)

A single on-chain pending settlement as seen by the accounting view.

#### Properties

##### amount

> **amount**: `bigint`

Defined in: [facilitator/accounting.ts:17](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L17)

##### authorizationId

> **authorizationId**: `bigint`

Defined in: [facilitator/accounting.ts:15](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L15)

##### maxAmount

> **maxAmount**: `bigint`

Defined in: [facilitator/accounting.ts:18](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L18)

##### mint

> **mint**: `Address`

Defined in: [facilitator/accounting.ts:16](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L16)

##### pendingAddress

> **pendingAddress**: `Address`

Defined in: [facilitator/accounting.ts:22](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L22)

##### sessionKey

> **sessionKey**: `Address`

Defined in: [facilitator/accounting.ts:20](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L20)

##### splits

> **splits**: `object`\[]

Defined in: [facilitator/accounting.ts:21](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L21)

###### bps

> **bps**: `number`

###### recipient

> **recipient**: `Address`

##### submittedAtSlot

> **submittedAtSlot**: `bigint`

Defined in: [facilitator/accounting.ts:19](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L19)

***

### HoldManager

> **HoldManager** = `ReturnType`\<*typeof* [`createHoldManager`](#createholdmanager)>

Defined in: [facilitator/hold-manager.ts:243](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L243)

The hold manager interface, inferred from `createHoldManager`.

***

### HoldResult

> **HoldResult** = \{ `ok`: `true`; } | \{ `ok`: `false`; `reason`: `string`; }

Defined in: [facilitator/hold-manager.ts:33](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L33)

Discriminated result from hold operations: success or failure with reason.

***

### TryHoldParams

> **TryHoldParams** = `Omit`\<[`Hold`](#hold), `"status"` | `"heldAt"` | `"submittedAtSlot"` | `"retryCount"`>

Defined in: [facilitator/hold-manager.ts:27](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L27)

Parameters for creating a new hold (lifecycle fields are added internally).

## Functions

### createHoldManager()

> **createHoldManager**(): `object`

Defined in: [facilitator/hold-manager.ts:43](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/hold-manager.ts#L43)

Creates an in-memory hold manager that tracks payment authorizations
through their lifecycle: held -> settled -> submitting -> submitted -> finalizing.

Enforces vault balance limits and pending settlement capacity per escrow.

#### Returns

`object`

A `HoldManager` instance

##### drainFinalizable()

> **drainFinalizable**: (`currentSlot`, `getRefundTimeout`) => [`Hold`](#hold)\[]

###### Parameters

###### currentSlot

`bigint`

###### getRefundTimeout

(`escrow`) => `bigint` | `null`

###### Returns

[`Hold`](#hold)\[]

##### drainSubmittable()

> **drainSubmittable**: (`currentSlot`) => [`Hold`](#hold)\[]

###### Parameters

###### currentSlot

`bigint`

###### Returns

[`Hold`](#hold)\[]

##### getHeldAmount()

> **getHeldAmount**: (`escrow`, `mint`) => `bigint`

###### Parameters

###### escrow

`Address`

###### mint

`Address`

###### Returns

`bigint`

##### getHolds()

> **getHolds**: () => [`Hold`](#hold)\[]

###### Returns

[`Hold`](#hold)\[]

##### getUnsubmittedCount()

> **getUnsubmittedCount**: (`escrow`) => `number`

###### Parameters

###### escrow

`Address`

###### Returns

`number`

##### markFailed()

> **markFailed**: (`escrow`, `authorizationId`) => `number`

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### Returns

`number`

##### markFinalized()

> **markFinalized**: (`escrow`, `authorizationId`) => `boolean`

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### Returns

`boolean`

##### markSubmitted()

> **markSubmitted**: (`escrow`, `authorizationId`, `currentSlot`) => `boolean`

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### currentSlot

`bigint`

###### Returns

`boolean`

##### pendingCount()

> **pendingCount**: () => `number`

###### Returns

`number`

##### releaseHold()

> **releaseHold**: (`escrow`, `authorizationId`) => `void`

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### Returns

`void`

##### resetToSubmitted()

> **resetToSubmitted**: (`escrow`, `authorizationId`) => `void`

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### Returns

`void`

##### sweepExpired()

> **sweepExpired**: (`currentSlot`) => [`Hold`](#hold)\[]

###### Parameters

###### currentSlot

`bigint`

###### Returns

[`Hold`](#hold)\[]

##### tryHold()

> **tryHold**: (`params`, `vaultBalance`, `onChainCommitted`, `onChainPendingCount`, `maxPending`) => [`HoldResult`](#holdresult)

###### Parameters

###### params

[`TryHoldParams`](#tryholdparams)

###### vaultBalance

`bigint`

###### onChainCommitted

`bigint`

###### onChainPendingCount

`number`

###### maxPending

`number`

###### Returns

[`HoldResult`](#holdresult)

##### updateSettleAmount()

> **updateSettleAmount**: (`escrow`, `authorizationId`, `settleAmount`) => [`HoldResult`](#holdresult)

###### Parameters

###### escrow

`Address`

###### authorizationId

`bigint`

###### settleAmount

`bigint`

###### Returns

[`HoldResult`](#holdresult)

***

### fetchEscrowAccounting()

> **fetchEscrowAccounting**(`rpc`, `escrowAddress`, `mints`): `Promise`\<[`EscrowAccounting`](#escrowaccounting)>

Defined in: [facilitator/accounting.ts:62](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/accounting.ts#L62)

Fetches a full accounting snapshot for an escrow: vault balances,
on-chain pending settlements, and the available capacity per mint.

#### Parameters

##### rpc

`Rpc`\<`SolanaRpcApi`>

Solana RPC client

##### escrowAddress

`Address`

Address of the escrow PDA

##### mints

`Address`\[]

Token mints to query vault balances for

#### Returns

`Promise`\<[`EscrowAccounting`](#escrowaccounting)>

An `EscrowAccounting` snapshot

***

### mergeSplits()

> **mergeSplits**(`splits`): `Split`\[]

Defined in: [facilitator/merge-splits.ts:3](https://github.com/faremeter/flex/blob/main/packages/flex-solana/src/facilitator/merge-splits.ts#L3)

#### Parameters

##### splits

`Split`\[]

#### Returns

`Split`\[]
