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

# Test Harness Package

> In-process test environment for x402 protocol testing

# test-harness/src

## Classes

### TestHarness

Defined in: [packages/test-harness/src/harness/harness.ts:63](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L63)

TestHarness provides an in-process test environment for the x402 protocol.

Supports two modes:

* **HTTP mode** (`accepts` + `facilitatorHandlers`): mounts facilitator
  routes and the middleware communicates via HTTP. Supports middleware
  interceptors.
* **In-process mode** (`x402Handlers` + `pricing`): handlers run directly
  in the middleware. Supports handler interceptors.

#### Constructors

##### Constructor

> **new TestHarness**(`config`): [`TestHarness`](#testharness)

Defined in: [packages/test-harness/src/harness/harness.ts:81](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L81)

###### Parameters

###### config

[`TestHarnessConfig`](#testharnessconfig)

###### Returns

[`TestHarness`](#testharness)

#### Properties

##### app

> `readonly` **app**: `Hono`

Defined in: [packages/test-harness/src/harness/harness.ts:67](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L67)

The internal Hono app containing facilitator and middleware routes.

#### Methods

##### addClientInterceptor()

> **addClientInterceptor**(`interceptor`): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:369](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L369)

Add an interceptor to the client chain (between test code and middleware).

###### Parameters

###### interceptor

[`Interceptor`](#interceptor)

###### Returns

`void`

##### addHandlerInterceptor()

> **addHandlerInterceptor**(`interceptor`): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:385](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L385)

###### Parameters

###### interceptor

[`HandlerInterceptor`](#handlerinterceptor)

###### Returns

`void`

##### addMiddlewareInterceptor()

> **addMiddlewareInterceptor**(`interceptor`): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:376](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L376)

Add an interceptor to the middleware chain (between middleware and facilitator).

###### Parameters

###### interceptor

[`Interceptor`](#interceptor)

###### Returns

`void`

##### clearInterceptors()

> **clearInterceptors**(): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:397](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L397)

Clear all interceptors added after construction.

###### Returns

`void`

##### createClientFetch()

> **createClientFetch**(): \{(`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; }

Defined in: [packages/test-harness/src/harness/harness.ts:262](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L262)

Create a fetch function for client->middleware calls.
This applies client interceptors and routes to the Hono app.

###### Returns

> (`input`, `init?`): `Promise`\<`Response`>

[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch)

###### Parameters

###### input

`RequestInfo` | `URL`

###### init?

`RequestInit`

###### Returns

`Promise`\<`Response`>

> (`input`, `init?`): `Promise`\<`Response`>

[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch)

###### Parameters

###### input

`string` | `Request` | `URL`

###### init?

`RequestInit`

###### Returns

`Promise`\<`Response`>

##### createFetch()

> **createFetch**(`opts?`): \{(`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; }

Defined in: [packages/test-harness/src/harness/harness.ts:295](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L295)

Create a fetch function that handles the full x402 payment flow.

###### Parameters

###### opts?

###### payerChooser?

(`execers`) => `PaymentExecerV1` | `Promise`\<`PaymentExecerV1`>

Function to choose which payment option to use.
Receives v1 PaymentExecerV1\[] for compatibility with v1 protocol tests.
The chosen execer is converted back to v2 internally.

###### Returns

> (`input`, `init?`): `Promise`\<`Response`>

[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch)

###### Parameters

###### input

`RequestInfo` | `URL`

###### init?

`RequestInit`

###### Returns

`Promise`\<`Response`>

> (`input`, `init?`): `Promise`\<`Response`>

[MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch)

###### Parameters

###### input

`string` | `Request` | `URL`

###### init?

`RequestInit`

###### Returns

`Promise`\<`Response`>

##### reset()

> **reset**(): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:413](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L413)

Reset harness state (interceptors, resource handler).

###### Returns

`void`

##### setResourceHandler()

> **setResourceHandler**(`handler`): `void`

Defined in: [packages/test-harness/src/harness/harness.ts:284](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/harness.ts#L284)

Set the resource handler that responds after successful payment.

###### Parameters

###### handler

[`ResourceHandler`](#resourcehandler)

###### Returns

`void`

## Type Aliases

### AmountPolicy()

> **AmountPolicy** = (`settleAmount`, `signedAmount`) => `boolean`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:34](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L34)

Policy that decides whether a settlement amount is acceptable
given the signed payment amount. The default is exact match.

#### Parameters

##### settleAmount

`bigint`

##### signedAmount

`bigint`

#### Returns

`boolean`

***

### CreateSimpleFacilitatorHandlerOpts

> **CreateSimpleFacilitatorHandlerOpts** = `object`

Defined in: [packages/test-harness/src/test-handlers.ts:139](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L139)

Options for creating a simple facilitator handler.

#### Properties

##### getSupported()?

> `optional` **getSupported**: () => `Promise`\<`x402SupportedKind`>\[]

Defined in: [packages/test-harness/src/test-handlers.ts:143](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L143)

Optional function returning supported payment kinds.

###### Returns

`Promise`\<`x402SupportedKind`>\[]

##### networkId

> **networkId**: `string`

Defined in: [packages/test-harness/src/test-handlers.ts:141](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L141)

Network identifier for settle responses.

***

### CreateTestFacilitatorHandlerOpts

> **CreateTestFacilitatorHandlerOpts** = `object`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:39](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L39)

#### Properties

##### amountPolicy?

> `optional` **amountPolicy**: [`AmountPolicy`](#amountpolicy)

Defined in: [packages/test-harness/src/scheme/facilitator.ts:48](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L48)

Decides whether a settlement amount is acceptable given the
signed payment amount. Defaults to exact match. Tests for
hold-and-settle schemes should pass
`(settle, signed) => settle <= signed`.

##### onSettle()?

> `optional` **onSettle**: (`requirements`, `payload`, `testPayload`) => `void`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:64](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L64)

Optional callback invoked during settle.

###### Parameters

###### requirements

`x402PaymentRequirements`

###### payload

`x402PaymentPayload`

###### testPayload

[`TestPaymentPayload`](#testpaymentpayload)

###### Returns

`void`

##### onVerify()?

> `optional` **onVerify**: (`requirements`, `payload`, `testPayload`) => `void`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:58](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L58)

Optional callback invoked during verify.

###### Parameters

###### requirements

`x402PaymentRequirements`

###### payload

`x402PaymentPayload`

###### testPayload

[`TestPaymentPayload`](#testpaymentpayload)

###### Returns

`void`

##### payTo

> **payTo**: `string`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:41](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L41)

Address that should receive payments.

##### supportsVerify?

> `optional` **supportsVerify**: `boolean`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:56](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L56)

When false, the returned handler omits `handleVerify` entirely so
the middleware's dispatch path treats it as a settle-only handler
(forces `capturesAt = "request"` for two-phase rules). Defaults to
true to preserve the historical shape. Mirrors the
`supportsVerify` opt on `createTestMPPHandler`.

***

### CreateTestMPPHandlerOpts

> **CreateTestMPPHandlerOpts** = `object`

Defined in: [packages/test-harness/src/scheme/mpp.ts:47](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L47)

#### Properties

##### intents?

> `optional` **intents**: `string`\[]

Defined in: [packages/test-harness/src/scheme/mpp.ts:50](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L50)

##### method?

> `optional` **method**: `string`

Defined in: [packages/test-harness/src/scheme/mpp.ts:48](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L48)

##### onChallenge()?

> `optional` **onChallenge**: (`intent`, `pricing`, `resourceURL`) => `void`

Defined in: [packages/test-harness/src/scheme/mpp.ts:52](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L52)

###### Parameters

###### intent

`string`

###### pricing

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

###### resourceURL

`string`

###### Returns

`void`

##### onSettle()?

> `optional` **onSettle**: (`credential`) => `void`

Defined in: [packages/test-harness/src/scheme/mpp.ts:57](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L57)

###### Parameters

###### credential

`mppCredential`

###### Returns

`void`

##### onVerify()?

> `optional` **onVerify**: (`credential`) => `void`

Defined in: [packages/test-harness/src/scheme/mpp.ts:58](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L58)

###### Parameters

###### credential

`mppCredential`

###### Returns

`void`

##### realm?

> `optional` **realm**: `string`

Defined in: [packages/test-harness/src/scheme/mpp.ts:49](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L49)

##### supportsVerify?

> `optional` **supportsVerify**: `boolean`

Defined in: [packages/test-harness/src/scheme/mpp.ts:51](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L51)

***

### CreateTestMPPPaymentHandlerOpts

> **CreateTestMPPPaymentHandlerOpts** = `object`

Defined in: [packages/test-harness/src/scheme/mpp.ts:146](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L146)

#### Properties

##### intent?

> `optional` **intent**: `string`

Defined in: [packages/test-harness/src/scheme/mpp.ts:148](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L148)

##### method?

> `optional` **method**: `string`

Defined in: [packages/test-harness/src/scheme/mpp.ts:147](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L147)

##### onExec()?

> `optional` **onExec**: (`challenge`) => `void`

Defined in: [packages/test-harness/src/scheme/mpp.ts:150](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L150)

###### Parameters

###### challenge

`mppChallengeParams`

###### Returns

`void`

##### onMatch()?

> `optional` **onMatch**: (`challenge`) => `void`

Defined in: [packages/test-harness/src/scheme/mpp.ts:149](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L149)

###### Parameters

###### challenge

`mppChallengeParams`

###### Returns

`void`

***

### CreateTestPaymentHandlerOpts

> **CreateTestPaymentHandlerOpts** = `object`

Defined in: [packages/test-harness/src/scheme/client.ts:15](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/client.ts#L15)

Options for creating a test payment handler.

#### Properties

##### metadata?

> `optional` **metadata**: `Record`\<`string`, `unknown`>

Defined in: [packages/test-harness/src/scheme/client.ts:24](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/client.ts#L24)

Custom metadata to include in test payloads.

##### onExec()?

> `optional` **onExec**: (`requirements`, `payload`) => `void`

Defined in: [packages/test-harness/src/scheme/client.ts:19](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/client.ts#L19)

Optional callback when payment is executed.

###### Parameters

###### requirements

`x402PaymentRequirements`

###### payload

[`TestPaymentPayload`](#testpaymentpayload)

###### Returns

`void`

##### onMatch()?

> `optional` **onMatch**: (`requirements`) => `void`

Defined in: [packages/test-harness/src/scheme/client.ts:17](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/client.ts#L17)

Optional callback when requirements are matched.

###### Parameters

###### requirements

`x402PaymentRequirements`

###### Returns

`void`

***

### HandlerInterceptor()

> **HandlerInterceptor** = (`handler`) => `FacilitatorHandler`

Defined in: [packages/test-harness/src/interceptors/types.ts:49](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/types.ts#L49)

A function that wraps a `FacilitatorHandler` to intercept handler
method calls. Used for in-process handler testing where there is no HTTP
layer to intercept.

#### Parameters

##### handler

`FacilitatorHandler`

#### Returns

`FacilitatorHandler`

***

### HTTPConfig

> **HTTPConfig** = `BaseConfig` & `object`

Defined in: [packages/test-harness/src/harness/config.ts:44](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/config.ts#L44)

Configuration for HTTP facilitator testing. The test harness mounts
facilitator routes and the middleware communicates via HTTP.

#### Type declaration

##### accepts

> **accepts**: `Partial`\<`x402PaymentRequirements`>\[]

##### facilitatorHandlers

> **facilitatorHandlers**: `FacilitatorHandler`\[]

##### middlewareInterceptors?

> `optional` **middlewareInterceptors**: [`Interceptor`](#interceptor)\[]

***

### InProcessConfig

> **InProcessConfig** = `BaseConfig` & `object`

Defined in: [packages/test-harness/src/harness/config.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/config.ts#L33)

Configuration for in-process handler testing. Handlers run directly
in the middleware with no facilitator HTTP service.

#### Type declaration

##### handlerInterceptors?

> `optional` **handlerInterceptors**: [`HandlerInterceptor`](#handlerinterceptor)\[]

##### mppMethodHandlers?

> `optional` **mppMethodHandlers**: `MPPMethodHandler`\[]

##### pricing

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

##### x402Handlers?

> `optional` **x402Handlers**: `FacilitatorHandler`\[]

***

### Interceptor()

> **Interceptor** = (`fetch`) => *typeof* `globalThis.fetch`

Defined in: [packages/test-harness/src/interceptors/types.ts:7](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/types.ts#L7)

A function that wraps fetch to intercept requests and responses.

Interceptors can modify requests before they're sent, inspect or modify
responses, inject failures, add delays, or log activity.

#### Parameters

##### fetch

*typeof* `globalThis.fetch`

#### Returns

*typeof* `globalThis.fetch`

***

### LogEvent

> **LogEvent** = `object`

Defined in: [packages/test-harness/src/interceptors/logging.ts:7](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L7)

Event emitted by logging interceptors for requests, responses, and errors.

#### Properties

##### error?

> `optional` **error**: `string`

Defined in: [packages/test-harness/src/interceptors/logging.ts:12](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L12)

##### method?

> `optional` **method**: `string`

Defined in: [packages/test-harness/src/interceptors/logging.ts:10](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L10)

##### status?

> `optional` **status**: `number`

Defined in: [packages/test-harness/src/interceptors/logging.ts:11](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L11)

##### timestamp

> **timestamp**: `number`

Defined in: [packages/test-harness/src/interceptors/logging.ts:13](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L13)

##### type

> **type**: `"request"` | `"response"` | `"error"`

Defined in: [packages/test-harness/src/interceptors/logging.ts:8](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L8)

##### url

> **url**: `string`

Defined in: [packages/test-harness/src/interceptors/logging.ts:9](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L9)

***

### RequestMatcher()

> **RequestMatcher** = (`url`, `init?`) => `boolean`

Defined in: [packages/test-harness/src/interceptors/types.ts:42](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/types.ts#L42)

Predicate function that determines whether a request should be matched.

Used by interceptors to selectively apply behavior to specific requests.

#### Parameters

##### url

`string`

##### init?

`RequestInit`

#### Returns

`boolean`

***

### ResourceContext

> **ResourceContext** = [`ResourceContextX402`](#resourcecontextx402) | [`ResourceContextMPP`](#resourcecontextmpp)

Defined in: [packages/test-harness/src/harness/resource.ts:65](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L65)

Resource context passed to the resource handler after successful payment.
Discriminated union based on protocolVersion.

***

### ResourceContextMPP

> **ResourceContextMPP** = `ResourceContextBase` & `object`

Defined in: [packages/test-harness/src/harness/resource.ts:48](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L48)

Resource context for MPP protocol.

#### Type declaration

##### credential

> **credential**: `mppCredential`

##### protocolVersion

> **protocolVersion**: `"mpp"`

##### receipt

> **receipt**: `mppReceipt`

##### verifyReceipt?

> `optional` **verifyReceipt**: `mppReceipt`

***

### ResourceContextV1

> **ResourceContextV1** = `ResourceContextBase` & `object`

Defined in: [packages/test-harness/src/harness/resource.ts:26](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L26)

Resource context for v1 protocol.

#### Type declaration

##### paymentPayload

> **paymentPayload**: `x402PaymentPayloadV1`

##### paymentRequirements

> **paymentRequirements**: `x402PaymentRequirementsV1`

##### protocolVersion

> **protocolVersion**: `1`

##### settleResponse

> **settleResponse**: `x402SettleResponseV1`

##### verifyResponse?

> `optional` **verifyResponse**: `x402VerifyResponseV1`

***

### ResourceContextV2

> **ResourceContextV2** = `ResourceContextBase` & `object`

Defined in: [packages/test-harness/src/harness/resource.ts:37](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L37)

Resource context for v2 protocol.

#### Type declaration

##### paymentPayload

> **paymentPayload**: `x402PaymentPayload`

##### paymentRequirements

> **paymentRequirements**: `x402PaymentRequirements`

##### protocolVersion

> **protocolVersion**: `2`

##### settleResponse

> **settleResponse**: `x402SettleResponse`

##### verifyResponse?

> `optional` **verifyResponse**: `x402VerifyResponse`

***

### ResourceContextX402

> **ResourceContextX402** = [`ResourceContextV1`](#resourcecontextv1) | [`ResourceContextV2`](#resourcecontextv2)

Defined in: [packages/test-harness/src/harness/resource.ts:59](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L59)

Resource context for x402 protocols (v1 or v2).
Use when the handler only needs to work with x402 payment fields.

***

### ResourceHandler()

> **ResourceHandler** = (`ctx`) => [`ResourceResult`](#resourceresult) | `Promise`\<[`ResourceResult`](#resourceresult)>

Defined in: [packages/test-harness/src/harness/resource.ts:73](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L73)

#### Parameters

##### ctx

[`ResourceContext`](#resourcecontext)

#### Returns

[`ResourceResult`](#resourceresult) | `Promise`\<[`ResourceResult`](#resourceresult)>

***

### ResourceResult

> **ResourceResult** = `object`

Defined in: [packages/test-harness/src/harness/resource.ts:67](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L67)

#### Properties

##### body

> **body**: `unknown`

Defined in: [packages/test-harness/src/harness/resource.ts:69](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L69)

##### headers?

> `optional` **headers**: `Record`\<`string`, `string`>

Defined in: [packages/test-harness/src/harness/resource.ts:70](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L70)

##### status

> **status**: `number`

Defined in: [packages/test-harness/src/harness/resource.ts:68](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L68)

***

### SettleMode

> **SettleMode** = `"settle-only"` | `"verify-then-settle"`

Defined in: [packages/test-harness/src/harness/config.ts:16](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/config.ts#L16)

How the middleware handles payment verification and settlement.

* `"settle-only"` - Skip verification, settle directly (faster tests).
* `"verify-then-settle"` - Verify payment before settling (more realistic).

***

### TestHarnessConfig

> **TestHarnessConfig** = [`InProcessConfig`](#inprocessconfig) | [`HTTPConfig`](#httpconfig)

Defined in: [packages/test-harness/src/harness/config.ts:53](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/config.ts#L53)

Configuration for [TestHarness](#testharness).

***

### TestPaymentPayload

> **TestPaymentPayload** = `object`

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

Payload structure for test payment scheme transactions.

#### Properties

##### amount

> **amount**: `string`

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

##### metadata?

> `optional` **metadata**: `Record`\<`string`, `unknown`>

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

##### testId

> **testId**: `string`

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

##### timestamp

> **timestamp**: `number`

Defined in: [packages/test-harness/src/scheme/types.ts:7](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/types.ts#L7)

## Variables

### defaultResourceHandler

> `const` **defaultResourceHandler**: [`ResourceHandler`](#resourcehandler)

Defined in: [packages/test-harness/src/harness/resource.ts:101](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L101)

***

### matchAll

> `const` **matchAll**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:77](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L77)

***

### matchFacilitator

> `const` **matchFacilitator**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:15](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L15)

***

### matchFacilitatorAccepts

> `const` **matchFacilitatorAccepts**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:3](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L3)

***

### matchFacilitatorSettle

> `const` **matchFacilitatorSettle**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:9](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L9)

***

### matchFacilitatorSupported

> `const` **matchFacilitatorSupported**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:12](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L12)

***

### matchFacilitatorVerify

> `const` **matchFacilitatorVerify**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:6](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L6)

***

### matchNone

> `const` **matchNone**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:78](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L78)

***

### matchResource

> `const` **matchResource**: [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:21](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L21)

***

### TEST\_ASSET

> `const` **TEST\_ASSET**: `"TEST"` = `"TEST"`

Defined in: [packages/test-harness/src/scheme/constants.ts:3](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/constants.ts#L3)

***

### TEST\_MPP\_INTENT

> `const` **TEST\_MPP\_INTENT**: `"charge"` = `"charge"`

Defined in: [packages/test-harness/src/scheme/mpp.ts:16](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L16)

***

### TEST\_MPP\_METHOD

> `const` **TEST\_MPP\_METHOD**: `"test-solana"` = `"test-solana"`

Defined in: [packages/test-harness/src/scheme/mpp.ts:15](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L15)

***

### TEST\_MPP\_REALM

> `const` **TEST\_MPP\_REALM**: `"test-realm"` = `"test-realm"`

Defined in: [packages/test-harness/src/scheme/mpp.ts:17](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L17)

***

### TEST\_NETWORK

> `const` **TEST\_NETWORK**: `"test-local"` = `"test-local"`

Defined in: [packages/test-harness/src/scheme/constants.ts:2](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/constants.ts#L2)

***

### TEST\_SCHEME

> `const` **TEST\_SCHEME**: `"test"` = `"test"`

Defined in: [packages/test-harness/src/scheme/constants.ts:1](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/constants.ts#L1)

## Functions

### accepts()

> **accepts**(`overrides?`): `object`

Defined in: [packages/test-harness/src/harness/defaults.ts:10](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/defaults.ts#L10)

Creates a payment requirements object with test defaults (v1 format).
Override specific fields by passing a partial:
accepts(\{ maxAmountRequired: "500" })

#### Parameters

##### overrides?

`Partial`\<\{ `asset`: `string`; `description`: `string`; `extra?`: `object`; `maxAmountRequired`: `string`; `maxTimeoutSeconds`: `number`; `mimeType?`: `string`; `network`: `string`; `outputSchema?`: `object`; `payTo`: `string`; `resource`: `string`; `scheme`: `string`; }>

#### Returns

`object`

##### asset

> **asset**: `string`

##### description

> **description**: `string`

##### extra?

> `optional` **extra**: `object`

##### maxAmountRequired

> **maxAmountRequired**: `string`

##### maxTimeoutSeconds

> **maxTimeoutSeconds**: `number`

##### mimeType?

> `optional` **mimeType**: `string`

##### network

> **network**: `string`

##### outputSchema?

> `optional` **outputSchema**: `object`

##### payTo

> **payTo**: `string`

##### resource

> **resource**: `string`

##### scheme

> **scheme**: `string`

***

### acceptsV2()

> **acceptsV2**(`overrides?`): `object`

Defined in: [packages/test-harness/src/harness/defaults.ts:32](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/defaults.ts#L32)

Creates a payment requirements object with test defaults (v2 format).
Override specific fields by passing a partial:
acceptsV2(\{ amount: "500" })

#### Parameters

##### overrides?

`Partial`\<\{ `amount`: `string`; `asset`: `string`; `extra?`: `object`; `maxTimeoutSeconds`: `number`; `network`: `string`; `payTo`: `string`; `scheme`: `string`; }>

#### Returns

`object`

##### amount

> **amount**: `string`

##### asset

> **asset**: `string`

##### extra?

> `optional` **extra**: `object`

##### maxTimeoutSeconds

> **maxTimeoutSeconds**: `number`

##### network

> **network**: `string`

##### payTo

> **payTo**: `string`

##### scheme

> **scheme**: `string`

***

### and()

> **and**(...`matchers`): [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:29](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L29)

Combines matchers with logical AND: all must match.

#### Parameters

##### matchers

...[`RequestMatcher`](#requestmatcher)\[]

Matchers to combine.

#### Returns

[`RequestMatcher`](#requestmatcher)

A matcher that succeeds only if all provided matchers succeed.

***

### chooseByAsset()

> **chooseByAsset**(`asset`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:68](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L68)

Creates a chooser that selects by asset name.

#### Parameters

##### asset

`string`

Asset name to match (case-insensitive).

#### Returns

A chooser function.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### chooseByIndex()

> **chooseByIndex**(`index`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:128](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L128)

Creates a chooser that selects by array index.

#### Parameters

##### index

`number`

Zero-based index of the option to select.

#### Returns

A chooser function.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### chooseByNetwork()

> **chooseByNetwork**(`network`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:88](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L88)

Creates a chooser that selects by network name.

#### Parameters

##### network

`string`

Network name to match (case-insensitive).

#### Returns

A chooser function.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### chooseByScheme()

> **chooseByScheme**(`scheme`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:108](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L108)

Creates a chooser that selects by payment scheme.

#### Parameters

##### scheme

`string`

Scheme name to match (case-insensitive).

#### Returns

A chooser function.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### chooseCheapest()

> **chooseCheapest**(`execers`): `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:29](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L29)

Chooser that selects the cheapest payment option by maxAmountRequired.

#### Parameters

##### execers

`PaymentExecerV1`\[]

Available payment execers.

#### Returns

`PaymentExecerV1`

The execer with the lowest amount.

#### Throws

If no options are available.

***

### chooseFirst()

> **chooseFirst**(`execers`): `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:11](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L11)

Chooser that selects the first available payment option.

#### Parameters

##### execers

`PaymentExecerV1`\[]

Available payment execers.

#### Returns

`PaymentExecerV1`

The first execer in the list.

#### Throws

If no options are available.

***

### chooseMostExpensive()

> **chooseMostExpensive**(`execers`): `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:48](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L48)

Chooser that selects the most expensive payment option by maxAmountRequired.

#### Parameters

##### execers

`PaymentExecerV1`\[]

Available payment execers.

#### Returns

`PaymentExecerV1`

The execer with the highest amount.

#### Throws

If no options are available.

***

### chooseNone()

> **chooseNone**(): `never`

Defined in: [packages/test-harness/src/choosers.ts:147](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L147)

Chooser that always throws, useful for testing "no suitable option" paths.

#### Returns

`never`

#### Throws

Always throws "No suitable payment option".

***

### chooseWithFilter()

> **chooseWithFilter**(`filter`, `inner`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:175](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L175)

Wraps a chooser to filter options before choosing.

#### Parameters

##### filter

(`execer`) => `boolean`

Predicate to filter available options.

##### inner

(`execers`) => `PaymentExecerV1`

Chooser to delegate to after filtering.

#### Returns

A chooser that filters then delegates.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### chooseWithInspection()

> **chooseWithInspection**(`inspector`, `inner`): (`execers`) => `PaymentExecerV1`

Defined in: [packages/test-harness/src/choosers.ts:158](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/choosers.ts#L158)

Wraps a chooser to inspect options before choosing.

#### Parameters

##### inspector

(`execers`) => `void`

Callback to inspect available options.

##### inner

(`execers`) => `PaymentExecerV1`

Chooser to delegate to after inspection.

#### Returns

A chooser that inspects then delegates.

> (`execers`): `PaymentExecerV1`

##### Parameters

###### execers

`PaymentExecerV1`\[]

##### Returns

`PaymentExecerV1`

***

### composeHandlerInterceptors()

> **composeHandlerInterceptors**(...`interceptors`): [`HandlerInterceptor`](#handlerinterceptor)

Defined in: [packages/test-harness/src/interceptors/types.ts:60](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/types.ts#L60)

Compose multiple handler interceptors into a single interceptor.

Interceptors are applied right-to-left (last interceptor wraps innermost).
This means the first interceptor in the array sees calls first and results
last, matching the semantics of [composeInterceptors](#composeinterceptors).

#### Parameters

##### interceptors

...[`HandlerInterceptor`](#handlerinterceptor)\[]

#### Returns

[`HandlerInterceptor`](#handlerinterceptor)

***

### composeInterceptors()

> **composeInterceptors**(...`interceptors`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/types.ts:27](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/types.ts#L27)

Compose multiple interceptors into a single interceptor.

Interceptors are applied right-to-left (last interceptor wraps innermost).
This means the first interceptor in the array sees the request first and
the response last.

#### Parameters

##### interceptors

...[`Interceptor`](#interceptor)\[]

#### Returns

[`Interceptor`](#interceptor)

#### Example

```ts theme={null}
const composed = composeInterceptors(
  loggingInterceptor,    // Sees request first, response last
  failureInterceptor,    // Sees request second
  delayInterceptor,      // Innermost - closest to actual fetch
);
```

***

### createCaptureInterceptor()

> **createCaptureInterceptor**(`match`): `object`

Defined in: [packages/test-harness/src/interceptors/hooks.ts:101](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/hooks.ts#L101)

Creates an interceptor that captures matching requests for later inspection.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to capture.

#### Returns

`object`

Object with the interceptor, captured array, and clear function.

##### captured

> **captured**: `CapturedRequest`\[]

##### clear()

> **clear**: () => `void`

###### Returns

`void`

##### interceptor

> **interceptor**: [`Interceptor`](#interceptor)

***

### createConsoleLoggingInterceptor()

> **createConsoleLoggingInterceptor**(`prefix`, `log`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/logging.ts:69](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L69)

Creates an interceptor that logs to the console with a prefix.

#### Parameters

##### prefix

`string` = `"[test-harness]"`

Prefix for log messages.

##### log

Logger with log and error methods (defaults to console).

###### error

(`msg`) => `void`

###### log

(`msg`) => `void`

#### Returns

[`Interceptor`](#interceptor)

An interceptor that logs to console.

***

### createDelayInterceptor()

> **createDelayInterceptor**(`match`, `delayMs`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/delay.ts:11](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/delay.ts#L11)

Creates an interceptor that delays matching requests before sending.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to delay.

##### delayMs

`number`

Delay in milliseconds.

#### Returns

[`Interceptor`](#interceptor)

An interceptor that adds request delay.

***

### createEmptyPayloadHandler()

> **createEmptyPayloadHandler**(): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:80](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L80)

Creates a payment handler that returns an empty payload object.

#### Returns

`PaymentHandlerV1`

***

### createEventCollector()

> **createEventCollector**(): `object`

Defined in: [packages/test-harness/src/interceptors/logging.ts:92](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L92)

Creates an interceptor that collects events into an array for assertions.

#### Returns

`object`

Object with the interceptor, events array, and clear function.

##### clear()

> **clear**: () => `void`

###### Returns

`void`

##### events

> **events**: [`LogEvent`](#logevent)\[]

##### interceptor

> **interceptor**: [`Interceptor`](#interceptor)

***

### createFailureInterceptor()

> **createFailureInterceptor**(`match`, `failFn`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/failures.ts:11](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/failures.ts#L11)

Creates an interceptor that fails matching requests.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to fail.

##### failFn

() => `Response` | `Error` | `Promise`\<`Response` | `Error`>

Function returning the failure (Response or Error).

#### Returns

[`Interceptor`](#interceptor)

An interceptor that fails matching requests.

***

### createHook()

> **createHook**(`match`, `hooks`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/hooks.ts:60](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/hooks.ts#L60)

Creates an interceptor with both request and response hooks.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to hook.

##### hooks

Object with optional onRequest and onResponse callbacks.

###### onRequest?

(`url`, `init?`) => `void` | `Promise`\<`void`>

###### onResponse?

(`url`, `response`, `init?`) => `void` | `Promise`\<`void`>

#### Returns

[`Interceptor`](#interceptor)

An interceptor with both-side hooks.

***

### createInvalidPayloadHandler()

> **createInvalidPayloadHandler**(`payloadFactory`): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:120](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L120)

Creates a payment handler with a custom payload factory.
Useful for testing invalid/edge-case payloads.

#### Parameters

##### payloadFactory

(`requirements`) => `object`

#### Returns

`PaymentHandlerV1`

***

### createLoggingInterceptor()

> **createLoggingInterceptor**(`log`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/logging.ts:22](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/logging.ts#L22)

Creates an interceptor that logs all requests, responses, and errors.

#### Parameters

##### log

(`event`) => `void`

Callback to receive log events.

#### Returns

[`Interceptor`](#interceptor)

An interceptor that logs activity.

***

### createNonMatchingHandler()

> **createNonMatchingHandler**(): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:21](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L21)

Creates a payment handler that returns no matching execers.
Useful for testing "no handler matches" scenarios.

#### Returns

`PaymentHandlerV1`

***

### createNullPayloadHandler()

> **createNullPayloadHandler**(): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:62](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L62)

Creates a payment handler that returns null payload.

#### Returns

`PaymentHandlerV1`

***

### createRequestHook()

> **createRequestHook**(`match`, `hook`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/hooks.ts:11](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/hooks.ts#L11)

Creates an interceptor that calls a hook before matching requests.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to hook.

##### hook

(`url`, `init?`) => `void` | `Promise`\<`void`>

Callback invoked before the request is sent.

#### Returns

[`Interceptor`](#interceptor)

An interceptor with request-side hooks.

***

### createResponseDelayInterceptor()

> **createResponseDelayInterceptor**(`match`, `delayMs`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/delay.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/delay.ts#L33)

Creates an interceptor that delays matching responses after receiving.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which responses to delay.

##### delayMs

`number`

Delay in milliseconds.

#### Returns

[`Interceptor`](#interceptor)

An interceptor that adds response delay.

***

### createResponseHook()

> **createResponseHook**(`match`, `hook`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/hooks.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/hooks.ts#L33)

Creates an interceptor that calls a hook after matching responses.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which responses to hook.

##### hook

(`url`, `response`, `init?`) => `void` | `Promise`\<`void`>

Callback invoked after the response is received.

#### Returns

[`Interceptor`](#interceptor)

An interceptor with response-side hooks.

***

### createSimpleFacilitatorHandler()

> **createSimpleFacilitatorHandler**(`opts`): `FacilitatorHandler`

Defined in: [packages/test-harness/src/test-handlers.ts:150](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L150)

Creates a minimal facilitator handler for testing.
Useful for testing /supported endpoint behavior.

#### Parameters

##### opts

[`CreateSimpleFacilitatorHandlerOpts`](#createsimplefacilitatorhandleropts)

#### Returns

`FacilitatorHandler`

***

### createTestFacilitatorHandler()

> **createTestFacilitatorHandler**(`opts`): `FacilitatorHandler`

Defined in: [packages/test-harness/src/scheme/facilitator.ts:89](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/facilitator.ts#L89)

Create a test facilitator handler.

This handler validates protocol structure without any cryptographic
operations, making it suitable for testing the x402 protocol flow.

#### Parameters

##### opts

[`CreateTestFacilitatorHandlerOpts`](#createtestfacilitatorhandleropts)

#### Returns

`FacilitatorHandler`

***

### createTestMPPHandler()

> **createTestMPPHandler**(`opts`): `MPPMethodHandler`

Defined in: [packages/test-harness/src/scheme/mpp.ts:61](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L61)

#### Parameters

##### opts

[`CreateTestMPPHandlerOpts`](#createtestmpphandleropts) = `{}`

#### Returns

`MPPMethodHandler`

***

### createTestMPPPaymentHandler()

> **createTestMPPPaymentHandler**(`opts`): `MPPPaymentHandler`

Defined in: [packages/test-harness/src/scheme/mpp.ts:153](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/mpp.ts#L153)

#### Parameters

##### opts

[`CreateTestMPPPaymentHandlerOpts`](#createtestmpppaymenthandleropts) = `{}`

#### Returns

`MPPPaymentHandler`

***

### createTestPaymentHandler()

> **createTestPaymentHandler**(`opts`): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/scheme/client.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/client.ts#L33)

Create a test payment handler.

This handler creates simple test payment payloads without any cryptographic
operations, making it suitable for testing the x402 protocol flow.

#### Parameters

##### opts

[`CreateTestPaymentHandlerOpts`](#createtestpaymenthandleropts) = `{}`

#### Returns

`PaymentHandlerV1`

***

### createThrowingExecHandler()

> **createThrowingExecHandler**(`message`): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:45](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L45)

Creates a payment handler that throws during exec().

#### Parameters

##### message

`string`

#### Returns

`PaymentHandlerV1`

***

### createThrowingHandler()

> **createThrowingHandler**(`message`): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:33](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L33)

Creates a payment handler that throws during the match phase.

#### Parameters

##### message

`string`

#### Returns

`PaymentHandlerV1`

***

### createV2ResponseInterceptor()

> **createV2ResponseInterceptor**(): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/v2.ts:20](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/v2.ts#L20)

Creates an interceptor that transforms v1 402 responses to v2 format.

This allows testing v2 client behavior by making the middleware appear
to respond with v2 format even though it defaults to v1.

The transformation:

* Parses the JSON body as v1 PaymentRequiredResponse
* Converts to v2 PaymentRequiredResponse format
* Encodes as base64 in PAYMENT-REQUIRED header
* Returns 402 with the new header

#### Returns

[`Interceptor`](#interceptor)

***

### createVariableDelayInterceptor()

> **createVariableDelayInterceptor**(`match`, `getDelay`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/delay.ts:56](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/delay.ts#L56)

Creates an interceptor with variable delay based on request context.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to delay.

##### getDelay

(`url`, `init?`) => `number`

Function returning delay in ms for each request.

#### Returns

[`Interceptor`](#interceptor)

An interceptor with dynamic delay.

***

### createWorkingHandler()

> **createWorkingHandler**(): `PaymentHandlerV1`

Defined in: [packages/test-harness/src/test-handlers.ts:98](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/test-handlers.ts#L98)

Creates a payment handler that works correctly.
Useful for fallback testing scenarios.

#### Returns

`PaymentHandlerV1`

***

### failNTimes()

> **failNTimes**(`n`, `match`, `failFn`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/failures.ts:63](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/failures.ts#L63)

Creates an interceptor that fails the first N matching requests.

#### Parameters

##### n

`number`

Number of times to fail before passing through.

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to fail.

##### failFn

() => `Response` | `Error`

Function returning the failure.

#### Returns

[`Interceptor`](#interceptor)

An interceptor that fails N times then passes through.

***

### failOnce()

> **failOnce**(`match`, `failFn`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/failures.ts:37](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/failures.ts#L37)

Creates an interceptor that fails the first matching request only.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to fail.

##### failFn

() => `Response` | `Error`

Function returning the failure.

#### Returns

[`Interceptor`](#interceptor)

An interceptor that fails once then passes through.

***

### failUntilCleared()

> **failUntilCleared**(`match`, `failFn`): [`Interceptor`](#interceptor) & `object`

Defined in: [packages/test-harness/src/interceptors/failures.ts:91](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/failures.ts#L91)

Creates an interceptor that fails until manually cleared.

Call `clear()` on the returned interceptor to stop failing.

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to fail.

##### failFn

() => `Response` | `Error`

Function returning the failure.

#### Returns

[`Interceptor`](#interceptor) & `object`

An interceptor with a `clear()` method.

***

### failWhen()

> **failWhen**(`match`, `shouldFail`, `failFn`): [`Interceptor`](#interceptor)

Defined in: [packages/test-harness/src/interceptors/failures.ts:120](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/failures.ts#L120)

Creates an interceptor that fails based on a dynamic condition.

The condition receives the URL and attempt count, allowing patterns
like "fail every other request" or "fail first 3 attempts".

#### Parameters

##### match

[`RequestMatcher`](#requestmatcher)

Predicate to determine which requests to consider.

##### shouldFail

(`ctx`) => `boolean`

Condition that receives context with attempt count.

##### failFn

() => `Response` | `Error`

Function returning the failure.

#### Returns

[`Interceptor`](#interceptor)

An interceptor with conditional failure logic.

***

### generateTestId()

> **generateTestId**(): `string`

Defined in: [packages/test-harness/src/scheme/types.ts:16](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/types.ts#L16)

Generates a unique test payment identifier.

#### Returns

`string`

A string like "test-1234567890-abc123".

***

### getURLFromRequestInfo()

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

Defined in: [packages/test-harness/src/interceptors/utils.ts:7](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/utils.ts#L7)

Extracts the URL string from various request input types.

#### Parameters

##### input

A URL string, URL object, or Request object.

`RequestInfo` | `URL`

#### Returns

`string`

The URL as a string.

***

### httpError()

> **httpError**(`status`, `message`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:159](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L159)

Creates an HTTP error response.

#### Parameters

##### status

`number`

HTTP status code.

##### message

`string`

Error message.

#### Returns

`Response`

A Response with the error JSON body.

***

### isInProcessConfig()

> **isInProcessConfig**(`config`): `config is InProcessConfig`

Defined in: [packages/test-harness/src/harness/config.ts:58](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/config.ts#L58)

Type guard for in-process handler configuration.

#### Parameters

##### config

[`TestHarnessConfig`](#testharnessconfig)

#### Returns

`config is InProcessConfig`

***

### isMatchingRequirement()

> **isMatchingRequirement**(`req`): `boolean`

Defined in: [packages/test-harness/src/scheme/constants.ts:8](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/scheme/constants.ts#L8)

Checks if a payment requirement matches the test scheme and network.

#### Parameters

##### req

###### network

`string`

###### scheme

`string`

#### Returns

`boolean`

***

### isResourceContextMPP()

> **isResourceContextMPP**(`ctx`): `ctx is ResourceContextMPP`

Defined in: [packages/test-harness/src/harness/resource.ts:95](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L95)

#### Parameters

##### ctx

[`ResourceContext`](#resourcecontext)

#### Returns

`ctx is ResourceContextMPP`

***

### isResourceContextV1()

> **isResourceContextV1**(`ctx`): `ctx is ResourceContextV1`

Defined in: [packages/test-harness/src/harness/resource.ts:80](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L80)

Type guard to check if context is v1.

#### Parameters

##### ctx

[`ResourceContext`](#resourcecontext)

#### Returns

`ctx is ResourceContextV1`

***

### isResourceContextV2()

> **isResourceContextV2**(`ctx`): `ctx is ResourceContextV2`

Defined in: [packages/test-harness/src/harness/resource.ts:89](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/harness/resource.ts#L89)

Type guard to check if context is v2.

#### Parameters

##### ctx

[`ResourceContext`](#resourcecontext)

#### Returns

`ctx is ResourceContextV2`

***

### jsonResponse()

> **jsonResponse**(`status`, `body`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:10](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L10)

Creates a JSON Response with the given status and body.

#### Parameters

##### status

`number`

HTTP status code.

##### body

`object`

Object to serialize as JSON.

#### Returns

`Response`

A Response with JSON content type.

***

### matchMethod()

> **matchMethod**(`method`): [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:72](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L72)

Creates a matcher that checks the HTTP method.

#### Parameters

##### method

`string`

HTTP method to match (case-insensitive).

#### Returns

[`RequestMatcher`](#requestmatcher)

A matcher that succeeds if the request uses the specified method.

***

### matchURL()

> **matchURL**(`pattern`): [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:59](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L59)

Creates a matcher that checks the URL against a pattern.

#### Parameters

##### pattern

String to search for or RegExp to test.

`string` | `RegExp`

#### Returns

[`RequestMatcher`](#requestmatcher)

A matcher that succeeds if the URL matches the pattern.

***

### networkError()

> **networkError**(`message`): `Error`

Defined in: [packages/test-harness/src/interceptors/responses.ts:139](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L139)

Creates a network error for testing error handling.

#### Parameters

##### message

`string` = `"Network error"`

Error message.

#### Returns

`Error`

An Error to be thrown by interceptors.

***

### not()

> **not**(`matcher`): [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:49](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L49)

Negates a matcher.

#### Parameters

##### matcher

[`RequestMatcher`](#requestmatcher)

Matcher to negate.

#### Returns

[`RequestMatcher`](#requestmatcher)

A matcher that succeeds when the provided matcher fails.

***

### or()

> **or**(...`matchers`): [`RequestMatcher`](#requestmatcher)

Defined in: [packages/test-harness/src/interceptors/matchers.ts:39](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/matchers.ts#L39)

Combines matchers with logical OR: any must match.

#### Parameters

##### matchers

...[`RequestMatcher`](#requestmatcher)\[]

Matchers to combine.

#### Returns

[`RequestMatcher`](#requestmatcher)

A matcher that succeeds if any provided matcher succeeds.

***

### paymentRequiredResponse()

> **paymentRequiredResponse**(`accepts`, `error`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:122](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L122)

Creates a 402 Payment Required response.

#### Parameters

##### accepts

`object`\[]

Payment requirements the server accepts.

##### error

`string` = `""`

Optional error message.

#### Returns

`Response`

A 402 Response with x402Version: 1.

***

### settleFailedResponse()

> **settleFailedResponse**(`errorReason`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:49](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L49)

Creates a failed settle response (v1 format).

#### Parameters

##### errorReason

`string`

Reason for settlement failure.

#### Returns

`Response`

A 200 Response with success: false.

***

### settleFailedResponseV2()

> **settleFailedResponseV2**(`errorReason`, `network`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:66](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L66)

Creates a failed settle response (v2 format).

#### Parameters

##### errorReason

`string`

Reason for settlement failure.

##### network

`string`

Network identifier for the response.

#### Returns

`Response`

A 200 Response with success: false.

***

### settleSuccessResponse()

> **settleSuccessResponse**(`transaction`, `network`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:85](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L85)

Creates a successful settle response (v1 format).

#### Parameters

##### transaction

`string`

Transaction identifier.

##### network

`string`

Network identifier.

#### Returns

`Response`

A 200 Response with success: true.

***

### settleSuccessResponseV2()

> **settleSuccessResponseV2**(`transaction`, `network`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:104](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L104)

Creates a successful settle response (v2 format).

#### Parameters

##### transaction

`string`

Transaction identifier.

##### network

`string`

Network identifier.

#### Returns

`Response`

A 200 Response with success: true.

***

### suppressConsoleErrors()

> **suppressConsoleErrors**(): () => `void`

Defined in: [packages/test-harness/src/testing/console.ts:10](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/testing/console.ts#L10)

Suppresses console.error output during tests.
Returns a restore function to be called in teardown.

Usage with tap:
t.teardown(suppressConsoleErrors());

#### Returns

> (): `void`

##### Returns

`void`

***

### timeoutError()

> **timeoutError**(): `Error`

Defined in: [packages/test-harness/src/interceptors/responses.ts:148](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L148)

Creates a timeout error for testing timeout handling.

#### Returns

`Error`

An Error with "Request timed out" message.

***

### verifyFailedResponse()

> **verifyFailedResponse**(`reason`): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:23](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L23)

Creates a failed verify response.

#### Parameters

##### reason

`string`

Reason for verification failure.

#### Returns

`Response`

A 200 Response with isValid: false.

***

### verifySuccessResponse()

> **verifySuccessResponse**(): `Response`

Defined in: [packages/test-harness/src/interceptors/responses.ts:36](https://github.com/faremeter/faremeter/blob/main/packages/test-harness/src/interceptors/responses.ts#L36)

Creates a successful verify response.

#### Returns

`Response`

A 200 Response with isValid: true.
