technitium 0.4.0

Typed async Rust client for the Technitium DNS Server API
Documentation
# List Apps

## Endpoint
`/api/apps/list`

## Method
GET

## Description
Lists all installed apps on the DNS server. If the DNS server has Internet access and is able to retrieve data from the DNS App Store, the API call will also return if a store App has updates available.

## Authentication
Required. Session token from `login` or `createToken`.

## Permissions
Apps/Zones/Logs: View

## Parameters

| Name  | Type   | Required | Conditional | Description |
|-------|--------|----------|-------------|-------------|
| token | string | Yes      | No          | The session token generated by the `login` or the `createToken` call. |
| node  | string | No       | No          | The node domain name for which this API call is intended. When unspecified, the current node is used. This parameter can be used only when Clustering is initialized. |

## Response Fields

| Field | Type | Description |
|-------|------|-------------|
| response.apps | array | Array of installed app objects. |
| response.apps[].name | string | Name of the installed app. |
| response.apps[].version | string | Version string of the installed app. |
| response.apps[].dnsApps | array | Array of DNS app class entries within this app. |
| response.apps[].dnsApps[].classPath | string | The fully qualified class path of the DNS app. |
| response.apps[].dnsApps[].description | string | Human-readable description of what the DNS app does. |
| response.apps[].dnsApps[].isAppRecordRequestHandler | bool | Whether this app handles APP record requests. |
| response.apps[].dnsApps[].recordDataTemplate | string or null | Template for APP record data, if the app is an APP record request handler. Only present when `isAppRecordRequestHandler` is true. |
| response.apps[].dnsApps[].isRequestController | bool | Whether this app acts as a request controller. |
| response.apps[].dnsApps[].isAuthoritativeRequestHandler | bool | Whether this app handles authoritative requests. |
| response.apps[].dnsApps[].isRequestBlockingHandler | bool | Whether this app handles request blocking. |
| response.apps[].dnsApps[].isQueryLogger | bool | Whether this app acts as a query logger. |
| response.apps[].dnsApps[].isPostProcessor | bool | Whether this app acts as a post processor. |

## Conditional Logic Notes
- The `node` parameter is only effective when Clustering is initialized on the DNS server.
- The `recordDataTemplate` field only appears in the response for apps where `isAppRecordRequestHandler` is `true`.
- If the server has Internet access and can reach the DNS App Store, update availability information may be included implicitly (the docs note this capability but the response example does not show an explicit update flag on the list endpoint itself).

## Edge Cases
- The permission level is "Apps/Zones/Logs: View" which is broader than other apps endpoints (which require just "Apps: View" or "Apps: Delete"). This endpoint requires view access to Apps, Zones, or Logs.
- If the server lacks Internet access, store-related update information will not be available, but the call will still succeed with the list of installed apps.