> ## 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.

# MPP Types

> Machine Payments Protocol types, encoding, and handler interfaces

# mpp

## Interfaces

### MPPMethodHandler

Defined in: [packages/types/src/mpp/handler.ts:16](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L16)

#### Properties

##### capabilities

> **capabilities**: [`HandlerCapabilities`](/api/types.src.Namespace.pricing#handlercapabilities)

Defined in: [packages/types/src/mpp/handler.ts:18](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L18)

##### method

> **method**: `string`

Defined in: [packages/types/src/mpp/handler.ts:17](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L17)

#### Methods

##### getChallenge()

> **getChallenge**(`intent`, `pricing`, `resourceURL`, `opts?`): `Promise`\<\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:20](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L20)

###### Parameters

###### intent

`string`

###### pricing

[`ResourcePricing`](/api/types.src.Namespace.pricing#resourcepricing)

###### resourceURL

`string`

###### opts?

[`ChallengeOpts`](#challengeopts)

###### Returns

`Promise`\<\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }>

##### getSupportedIntents()

> **getSupportedIntents**(): `string`\[]

Defined in: [packages/types/src/mpp/handler.ts:19](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L19)

###### Returns

`string`\[]

##### handleSettle()

> **handleSettle**(`credential`): `Promise`\<`null` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:26](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L26)

###### Parameters

###### credential

###### challenge

\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; } = `mppChallengeParams`

###### challenge.description?

`string` = `"string"`

###### challenge.digest?

`string` = `"string"`

###### challenge.expires?

`string` = `"string"`

###### challenge.id

`string` = `"string"`

###### challenge.intent

`string` = `"string"`

###### challenge.method

`string` = `"string"`

###### challenge.opaque?

`string` = `"string"`

###### challenge.realm

`string` = `"string"`

###### challenge.request

`string` = `"string"`

###### payload

`Record`\<`string`, `unknown`> = `"Record<string, unknown>"`

###### source?

`string` = `"string"`

###### Returns

`Promise`\<`null` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

##### handleVerify()?

> `optional` **handleVerify**(`credential`): `Promise`\<`null` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:27](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L27)

###### Parameters

###### credential

###### challenge

\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; } = `mppChallengeParams`

###### challenge.description?

`string` = `"string"`

###### challenge.digest?

`string` = `"string"`

###### challenge.expires?

`string` = `"string"`

###### challenge.id

`string` = `"string"`

###### challenge.intent

`string` = `"string"`

###### challenge.method

`string` = `"string"`

###### challenge.opaque?

`string` = `"string"`

###### challenge.realm

`string` = `"string"`

###### challenge.request

`string` = `"string"`

###### payload

`Record`\<`string`, `unknown`> = `"Record<string, unknown>"`

###### source?

`string` = `"string"`

###### Returns

`Promise`\<`null` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

## Type Aliases

### ChallengeOpts

> **ChallengeOpts** = `object`

Defined in: [packages/types/src/mpp/handler.ts:12](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L12)

Server-side handler for an MPP payment method.

Named after the spec's concept of a "payment method" -- the mechanism
for transferring value (e.g. "solana"). A method handler supports one
or more intents (e.g. "charge").

#### Properties

##### digest?

> `optional` **digest**: `string`

Defined in: [packages/types/src/mpp/handler.ts:13](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L13)

***

### mppChallengeParams

> **mppChallengeParams** = *typeof* `mppChallengeParams.infer`

Defined in: [packages/types/src/mpp/types.ts:8](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L8)

***

### mppCredential

> **mppCredential** = *typeof* `mppCredential.infer`

Defined in: [packages/types/src/mpp/types.ts:22](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L22)

***

### MPPPaymentExecer

> **MPPPaymentExecer** = `object`

Defined in: [packages/types/src/mpp/handler.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L33)

Result of executing an MPP payment on the client side.

#### Properties

##### challenge

> **challenge**: [`mppChallengeParams`](#mppchallengeparams)

Defined in: [packages/types/src/mpp/handler.ts:34](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L34)

#### Methods

##### exec()

> **exec**(): `Promise`\<\{ `challenge`: \{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }; `payload`: `Record`\<`string`, `unknown`>; `source?`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:35](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L35)

###### Returns

`Promise`\<\{ `challenge`: \{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }; `payload`: `Record`\<`string`, `unknown`>; `source?`: `string`; }>

***

### MPPPaymentHandler()

> **MPPPaymentHandler** = (`challenge`) => `Promise`\<[`MPPPaymentExecer`](#mpppaymentexecer) | `null`>

Defined in: [packages/types/src/mpp/handler.ts:44](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L44)

Client-side handler that matches MPP challenges and produces credentials.

Returns null when the challenge does not match this handler's method
or intent, allowing multiple handlers to be composed.

#### Parameters

##### challenge

[`mppChallengeParams`](#mppchallengeparams)

#### Returns

`Promise`\<[`MPPPaymentExecer`](#mpppaymentexecer) | `null`>

***

### mppReceipt

> **mppReceipt** = *typeof* `mppReceipt.infer`

Defined in: [packages/types/src/mpp/types.ts:30](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L30)

## Variables

### AUTHORIZATION\_HEADER

> `const` **AUTHORIZATION\_HEADER**: `"Authorization"` = `"Authorization"`

Defined in: [packages/types/src/mpp/types.ts:4](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L4)

***

### MPP\_PAYMENT\_SCHEME

> `const` **MPP\_PAYMENT\_SCHEME**: `"Payment"` = `"Payment"`

Defined in: [packages/types/src/mpp/types.ts:6](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L6)

***

### mppChallengeParams

> `const` **mppChallengeParams**: `Type`\<\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }, \{ }>

Defined in: [packages/types/src/mpp/types.ts:8](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L8)

***

### mppCredential

> `const` **mppCredential**: `Type`\<\{ `challenge`: \{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }; `payload`: `Record`\<`string`, `unknown`>; `source?`: `string`; }, \{ }>

Defined in: [packages/types/src/mpp/types.ts:22](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L22)

***

### mppReceipt

> `const` **mppReceipt**: `Type`\<\{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }, \{ }>

Defined in: [packages/types/src/mpp/types.ts:30](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L30)

***

### PAYMENT\_RECEIPT\_HEADER

> `const` **PAYMENT\_RECEIPT\_HEADER**: `"Payment-Receipt"` = `"Payment-Receipt"`

Defined in: [packages/types/src/mpp/types.ts:5](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L5)

***

### WWW\_AUTHENTICATE\_HEADER

> `const` **WWW\_AUTHENTICATE\_HEADER**: `"WWW-Authenticate"` = `"WWW-Authenticate"`

Defined in: [packages/types/src/mpp/types.ts:3](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/types.ts#L3)

## Functions

### canonicalizeSortedJSON()

> **canonicalizeSortedJSON**(`obj`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:38](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L38)

Sorted-key JSON canonicalization following RFC 8785 JCS for the
subset of inputs used by MPP (string keys, no integer-indexed
properties). Integer-indexed keys would violate RFC 8785 sort order
due to ECMAScript property enumeration rules.

#### Parameters

##### obj

`unknown`

#### Returns

`string`

***

### computeBodyDigest()

> **computeBodyDigest**(`body`): `Promise`\<`string`>

Defined in: [packages/types/src/mpp/encoding.ts:165](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L165)

Computes an RFC 9530 content digest for a request body.
Format: `sha-256=:base64value:`

#### Parameters

##### body

`ArrayBuffer`

#### Returns

`Promise`\<`string`>

***

### decodeBase64URL()

> **decodeBase64URL**(`encoded`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:21](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L21)

#### Parameters

##### encoded

`string`

#### Returns

`string`

***

### encodeBase64URL()

> **encodeBase64URL**(`input`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:9](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L9)

#### Parameters

##### input

`string`

#### Returns

`string`

***

### formatWWWAuthenticate()

> **formatWWWAuthenticate**(`challenges`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:58](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L58)

#### Parameters

##### challenges

`object`\[]

#### Returns

`string`

***

### parseAuthorizationPayment()

> **parseAuthorizationPayment**(`header`): `undefined` | \{ `challenge`: \{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }; `payload`: `Record`\<`string`, `unknown`>; `source?`: `string`; }

Defined in: [packages/types/src/mpp/encoding.ts:125](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L125)

#### Parameters

##### header

`string`

#### Returns

`undefined` | \{ `challenge`: \{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; }; `payload`: `Record`\<`string`, `unknown`>; `source?`: `string`; }

***

### parseReceipt()

> **parseReceipt**(`header`): `undefined` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }

Defined in: [packages/types/src/mpp/encoding.ts:171](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L171)

#### Parameters

##### header

`string`

#### Returns

`undefined` | \{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }

***

### parseWWWAuthenticate()

> **parseWWWAuthenticate**(`header`): `object`\[]

Defined in: [packages/types/src/mpp/encoding.ts:93](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L93)

Parses a WWW-Authenticate header value containing one or more Payment
challenges. Each challenge starts with the token "Payment" followed by
auth-param key=value pairs.

#### Parameters

##### header

`string`

#### Returns

`object`\[]

***

### resolveMPPChallenges()

> **resolveMPPChallenges**(`handlers`, `pricing`, `resourceURL`, `opts?`): `Promise`\<`object`\[]>

Defined in: [packages/types/src/mpp/handler.ts:64](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L64)

Generates MPP challenges by matching pricing entries to handlers.

For each handler, matches pricing by capabilities, then calls
getChallenge for each matched pricing entry and each supported
intent. The middleware emits all challenges; the client picks one.

#### Parameters

##### handlers

[`MPPMethodHandler`](#mppmethodhandler)\[]

##### pricing

[`ResourcePricing`](/api/types.src.Namespace.pricing#resourcepricing)\[]

##### resourceURL

`string`

##### opts?

`ResolveOpts`

#### Returns

`Promise`\<`object`\[]>

***

### serializeCredential()

> **serializeCredential**(`credential`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:153](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L153)

#### Parameters

##### credential

###### challenge

\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; } = `mppChallengeParams`

###### challenge.description?

`string` = `"string"`

###### challenge.digest?

`string` = `"string"`

###### challenge.expires?

`string` = `"string"`

###### challenge.id

`string` = `"string"`

###### challenge.intent

`string` = `"string"`

###### challenge.method

`string` = `"string"`

###### challenge.opaque?

`string` = `"string"`

###### challenge.realm

`string` = `"string"`

###### challenge.request

`string` = `"string"`

###### payload

`Record`\<`string`, `unknown`> = `"Record<string, unknown>"`

###### source?

`string` = `"string"`

#### Returns

`string`

***

### serializeReceipt()

> **serializeReceipt**(`receipt`): `string`

Defined in: [packages/types/src/mpp/encoding.ts:157](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/encoding.ts#L157)

#### Parameters

##### receipt

###### method

`string` = `"string"`

###### reference

`string` = `"string"`

###### status

`"success"` | `"failed"` = "'success'|'failed'"

###### timestamp

`string` = `"string"`

#### Returns

`string`

***

### settleMPPPayment()

> **settleMPPPayment**(`handlers`, `credential`): `Promise`\<\{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:115](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L115)

Routes an MPP credential to the appropriate handler for settlement.

Filters handlers by exact method match against the credential's
challenge method, then iterates handleSettle until one returns a
non-null result.

#### Parameters

##### handlers

[`MPPMethodHandler`](#mppmethodhandler)\[]

##### credential

###### challenge

\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; } = `mppChallengeParams`

###### challenge.description?

`string` = `"string"`

###### challenge.digest?

`string` = `"string"`

###### challenge.expires?

`string` = `"string"`

###### challenge.id

`string` = `"string"`

###### challenge.intent

`string` = `"string"`

###### challenge.method

`string` = `"string"`

###### challenge.opaque?

`string` = `"string"`

###### challenge.realm

`string` = `"string"`

###### challenge.request

`string` = `"string"`

###### payload

`Record`\<`string`, `unknown`> = `"Record<string, unknown>"`

###### source?

`string` = `"string"`

#### Returns

`Promise`\<\{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

***

### verifyMPPPayment()

> **verifyMPPPayment**(`handlers`, `credential`): `Promise`\<\{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>

Defined in: [packages/types/src/mpp/handler.ts:136](https://github.com/faremeter/faremeter/blob/main/packages/types/src/mpp/handler.ts#L136)

Routes an MPP credential to the appropriate handler for verification.

Filters handlers by exact method match and presence of handleVerify,
then iterates until one returns a non-null result.

#### Parameters

##### handlers

[`MPPMethodHandler`](#mppmethodhandler)\[]

##### credential

###### challenge

\{ `description?`: `string`; `digest?`: `string`; `expires?`: `string`; `id`: `string`; `intent`: `string`; `method`: `string`; `opaque?`: `string`; `realm`: `string`; `request`: `string`; } = `mppChallengeParams`

###### challenge.description?

`string` = `"string"`

###### challenge.digest?

`string` = `"string"`

###### challenge.expires?

`string` = `"string"`

###### challenge.id

`string` = `"string"`

###### challenge.intent

`string` = `"string"`

###### challenge.method

`string` = `"string"`

###### challenge.opaque?

`string` = `"string"`

###### challenge.realm

`string` = `"string"`

###### challenge.request

`string` = `"string"`

###### payload

`Record`\<`string`, `unknown`> = `"Record<string, unknown>"`

###### source?

`string` = `"string"`

#### Returns

`Promise`\<\{ `method`: `string`; `reference`: `string`; `status`: `"success"` | `"failed"`; `timestamp`: `string`; }>
