# Module BSV::Auth::AuthPayload <a id="module-BSV-Auth-AuthPayload"></a>

BRC-104 binary serialisation and deserialisation of HTTP requests and
responses for signing/verification.

The wire format is byte-compatible with the TS and Go SDKs, enabling cross-SDK
signature verification.

Absent optional fields (nil path, nil query, nil body) are encoded as `ABSENT`
(VarInt MAX_UINT64 = 9 bytes of 0xFF). Zero-length fields are encoded as
varint(0) followed by zero bytes — a distinct encoding from absent.

All varint operations delegate to {BSV::Transaction::VarInt}.

## Constants
### `ABSENT` <a id="constant-ABSENT"></a> <a id="ABSENT-constant"></a>
Sentinel value for absent optional fields (Bitcoin VarInt MAX_UINT64).

### `METHODS_WITH_BODY` <a id="constant-METHODS_WITH_BODY"></a> <a id="METHODS_WITH_BODY-constant"></a>
HTTP methods that typically carry a request body.

## Public Class Methods
### `deserialize_request(data)` <a id="method-c-deserialize_request"></a> <a id="deserialize_request-class_method"></a>
Deserialises a binary request payload into a Hash.
- **@param** `data` [String] binary payload (as returned by {.serialize_request})
- **@return** [Hash] with keys +:request_nonce+, +:method+, +:path+, +:query+,
+:headers+, +:body+ (all values may be nil for absent optional fields)

### `deserialize_response(data)` <a id="method-c-deserialize_response"></a> <a id="deserialize_response-class_method"></a>
Deserialises a binary response payload into a Hash.
- **@param** `data` [String] binary payload (as returned by {.serialize_response})
- **@return** [Hash] with keys +:request_id+, +:status+, +:headers+, +:body+

### `serialize_request(request_nonce:, method:, path:, query:, headers:, body:)` <a id="method-c-serialize_request"></a> <a id="serialize_request-class_method"></a>
Serialises an HTTP request into a binary payload for signing.
- **@param** `request_nonce` [String] raw 32-byte binary string (the request nonce)
- **@param** `method` [String] HTTP method (e.g. 'GET', 'POST')
- **@param** `path` [String, nil] URL path (e.g. '/api/v1/resource'); nil encodes as ABSENT
- **@param** `query` [String, nil] query string including leading '?' (e.g. '?q=hello'); nil encodes as ABSENT
- **@param** `headers` [Array<Array(String, String)>] pre-sorted, lowercased [key, value] pairs
- **@param** `body` [String, nil] request body bytes; nil encodes as ABSENT
- **@return** [String] binary payload (ASCII-8BIT encoding)

### `serialize_response(request_id:, status:, headers:, body:)` <a id="method-c-serialize_response"></a> <a id="serialize_response-class_method"></a>
Serialises an HTTP response into a binary payload for signing.
- **@param** `request_id` [String] raw 32-byte binary string
- **@param** `status` [Integer] HTTP status code (e.g. 200, 404)
- **@param** `headers` [Array<Array(String, String)>] pre-sorted, lowercased [key, value] pairs
- **@param** `body` [String, nil] response body bytes; nil or empty encodes as ABSENT
- **@return** [String] binary payload (ASCII-8BIT encoding)
