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

# Config Reference

## `ApiServerConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>auth</code></td>
      <td><a href="#authconfig"><code>AuthConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "allowAnonymous": true,
      "didEncryption": \{
      "enabled": false
      },
      "jwtSecret": "",
      "passwordPolicy": \{
      "minNewPasswordLength": 8
      },
      "providers": \[]
      }</code></pre></td>
      <td>Authentication & authorization</td>
    </tr>

    <tr>
      <td><code>database</code></td>
      <td><a href="#databaseconfig"><code>DatabaseConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "provider": "InMemory"
      }</code></pre></td>
      <td>Database</td>
    </tr>

    <tr>
      <td><code>datasetEnvVars</code></td>
      <td><a href="#datasetenvvarsconfig"><code>DatasetEnvVarsConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "enabled": false
      }</code></pre></td>
      <td>Dataset environment variable feature</td>
    </tr>

    <tr>
      <td><code>email</code></td>
      <td><a href="#emailconfig"><code>EmailConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "gateway": \{
      "kind": "Dummy"
      },
      "senderAddress": ""
      }</code></pre></td>
      <td>Email gateway configuration</td>
    </tr>

    <tr>
      <td><code>engine</code></td>
      <td><a href="#engineconfig"><code>EngineConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "datafusionEmbedded": \{
      "base": \{
      "datafusion.catalog.default\_catalog": "kamu",
      "datafusion.catalog.default\_schema": "kamu",
      "datafusion.catalog.information\_schema": "true",
      "datafusion.sql\_parser.enable\_ident\_normalization": "false"
      },
      "batchQuery": \{},
      "compaction": \{
      "datafusion.execution.target\_partitions": "1"
      },
      "ingest": \{
      "datafusion.execution.target\_partitions": "1"
      },
      "useLegacyArrowBufferEncoding": false
      },
      "images": \{
      "datafusion": "ghcr.io/kamu-data/engine-datafusion:0.9.0",
      "flink": "ghcr.io/kamu-data/engine-flink:0.18.2-flink\_1.16.0-scala\_2.12-java8",
      "risingwave": "ghcr.io/kamu-data/engine-risingwave:0.2.0-risingwave\_1.7.0-alpha",
      "spark": "ghcr.io/kamu-data/engine-spark:0.23.1-spark\_3.5.0"
      },
      "networkNs": "Private",
      "runtime": "Podman",
      "shutdownTimeout": "5s",
      "startTimeout": "30s"
      }</code></pre></td>
      <td>Ingest and transform engines</td>
    </tr>

    <tr>
      <td><code>extra</code></td>
      <td><a href="#extraconfig"><code>ExtraConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "graphql": \{}
      }</code></pre></td>
      <td>Experimental and temporary module configuration</td>
    </tr>

    <tr>
      <td><code>flowSystem</code></td>
      <td><a href="#flowsystemconfig"><code>FlowSystemConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "flowAgent": \{
      "awaitingStepSecs": 1,
      "defaultRetryPolicies": \{},
      "mandatoryThrottlingPeriodSecs": 60
      },
      "flowSystemEventAgent": \{
      "batchSize": 100,
      "maxListeningTimeoutMs": 60000,
      "minDebounceIntervalMs": 100
      },
      "taskAgent": \{
      "taskCheckingIntervalSecs": 1
      }
      }</code></pre></td>
      <td>Configuration for the flow system</td>
    </tr>

    <tr>
      <td><code>identity</code></td>
      <td><a href="#identityconfig"><code>IdentityConfig</code></a></td>
      <td><code class="language-json">null</code></td>
      <td>UNSTABLE: Identity configuration</td>
    </tr>

    <tr>
      <td><code>outbox</code></td>
      <td><a href="#outboxconfig"><code>OutboxConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "awaitingStepSecs": 1,
      "batchSize": 20
      }</code></pre></td>
      <td>Outbox configuration</td>
    </tr>

    <tr>
      <td><code>protocol</code></td>
      <td><a href="#protocolconfig"><code>ProtocolConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "flightSql": \{
      "allowAnonymous": true,
      "anonSessionExpirationTimeout": "5m",
      "anonSessionInactivityTimeout": "5s",
      "authedSessionExpirationTimeout": "30m",
      "authedSessionInactivityTimeout": "5s"
      },
      "ipfs": \{
      "httpGateway": "http\://localhost:8080/",
      "preResolveDnslink": true
      }
      }</code></pre></td>
      <td>Protocols</td>
    </tr>

    <tr>
      <td><code>quota</code></td>
      <td><a href="#quotaconfig"><code>QuotaConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "account": \{}
      }</code></pre></td>
      <td>Default quotas configured by type</td>
    </tr>

    <tr>
      <td><code>repo</code></td>
      <td><a href="#repoconfig"><code>RepoConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "caching": \{
      "registryCacheEnabled": false
      }
      }</code></pre></td>
      <td>Dataset repository</td>
    </tr>

    <tr>
      <td><code>runtime</code></td>
      <td><a href="#runtimeconfig"><code>RuntimeConfig</code></a></td>
      <td><code class="language-json">\{}</code></td>
      <td>Tokio runtime</td>
    </tr>

    <tr>
      <td><code>search</code></td>
      <td><a href="#searchconfig"><code>SearchConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "embeddingsChunker": \{
      "kind": "Simple",
      "splitParagraphs": false,
      "splitSections": false
      },
      "embeddingsEncoder": \{
      "dimensions": 1536,
      "kind": "OpenAi",
      "modelName": "text-embedding-ada-002"
      },
      "indexer": \{
      "clearOnStart": false,
      "incrementalIndexing": false
      },
      "repo": \{
      "kind": "Dummy"
      },
      "semanticSearchThresholdScore": 0.0
      }</code></pre></td>
      <td>Search configuration</td>
    </tr>

    <tr>
      <td><code>source</code></td>
      <td><a href="#sourceconfig"><code>SourceConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "ethereum": \{
      "commitAfterBlocksScanned": 1000000,
      "getLogsBlockStride": 100000,
      "rpcEndpoints": \[],
      "useBlockTimestampFallback": false
      },
      "mqtt": \{
      "brokerIdleTimeoutMs": 1000
      },
      "targetRecordsPerSlice": 10000
      }</code></pre></td>
      <td>Ingestion's sources</td>
    </tr>

    <tr>
      <td><code>uploadRepo</code></td>
      <td><a href="#uploadrepoconfig"><code>UploadRepoConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "maxFileSizeMb": 50,
      "storage": \{
      "kind": "Local"
      }
      }</code></pre></td>
      <td>File upload repository</td>
    </tr>

    <tr>
      <td><code>url</code></td>
      <td><a href="#urlconfig"><code>UrlConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "baseUrlFlightsql": "grpc://localhost:50050",
      "baseUrlPlatform": "http\://localhost:4200/",
      "baseUrlRest": "http\://localhost:8080/"
      }</code></pre></td>
      <td>External URLs</td>
    </tr>

    <tr>
      <td><code>webhooks</code></td>
      <td><a href="#webhooksconfig"><code>WebhooksConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "deliveryTimeoutSecs": 10,
      "maxConsecutiveFailures": 5,
      "secretEncryptionEnabled": false
      }</code></pre></td>
      <td>Configuration for webhooks</td>
    </tr>
  </tbody>
</table>

## `AccountConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>accountName</code></td>
      <td><a href="#accountname"><code>AccountName</code></a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>accountType</code></td>
      <td><a href="#accounttype"><code>AccountType</code></a></td>
      <td><code class="language-json">"User"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>avatarUrl</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>displayName</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td>
        Auto-derived from `account_name` if omitted
      </td>
    </tr>

    <tr>
      <td><code>email</code></td>
      <td><a href="#email"><code>Email</code></a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>id</code></td>
      <td><a href="#accountid"><code>AccountID</code></a></td>
      <td><code class="language-json">null</code></td>

      <td>
        Auto-derived from `account_name` if omitted
      </td>
    </tr>

    <tr>
      <td><code>password</code></td>
      <td><a href="#password"><code>Password</code></a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>properties</code></td>
      <td><code>array</code></td>
      <td><code class="language-json">\[]</code></td>

      <td />
    </tr>

    <tr>
      <td><code>provider</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"password"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>registeredAt</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>treatDatasetsAsPublic</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `AccountID`

Base type: `string`

## `AccountName`

Base type: `string`

## `AccountPropertyName`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><code>CanProvisionAccounts</code></td></tr>
    <tr><td><code>Admin</code></td></tr>
  </tbody>
</table>

## `AccountType`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><code>User</code></td></tr>
    <tr><td><code>Organization</code></td></tr>
  </tbody>
</table>

## `AuthConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>allowAnonymous</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">true</code></td>

      <td />
    </tr>

    <tr>
      <td><code>didEncryption</code></td>
      <td><a href="#didsecretencryptionconfig"><code>DidSecretEncryptionConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "enabled": false
      }</code></pre></td>

      <td />
    </tr>

    <tr>
      <td><code>jwtSecret</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">""</code></td>

      <td />
    </tr>

    <tr>
      <td><code>passwordPolicy</code></td>
      <td><a href="#passwordpolicyconfig"><code>PasswordPolicyConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "minNewPasswordLength": 8
      }</code></pre></td>

      <td />
    </tr>

    <tr>
      <td><code>providers</code></td>
      <td><code>array</code></td>
      <td><code class="language-json">\[]</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `AuthProviderConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#authproviderconfiggithub"><code>Github</code></a></td></tr>
    <tr><td><a href="#authproviderconfigpassword"><code>Password</code></a></td></tr>
  </tbody>
</table>

## `AuthProviderConfig::Github`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>clientId</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>clientSecret</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `AuthProviderConfig::Password`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>accounts</code></td>
      <td><code>array</code></td>
      <td><code class="language-json">\[]</code></td>

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `ContainerRuntimeType`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><code>Docker</code></td></tr>
    <tr><td><code>Podman</code></td></tr>
  </tbody>
</table>

## `DatabaseConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#databaseconfiginmemory"><code>InMemory</code></a></td></tr>
    <tr><td><a href="#databaseconfigsqlite"><code>Sqlite</code></a></td></tr>
    <tr><td><a href="#databaseconfigpostgres"><code>Postgres</code></a></td></tr>
  </tbody>
</table>

## `DatabaseConfig::InMemory`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>provider</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseConfig::Sqlite`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>databasePath</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>provider</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseConfig::Postgres`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>acquireTimeoutSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>credentialsPolicy</code></td>
      <td><a href="#databasecredentialspolicyconfig"><code>DatabaseCredentialsPolicyConfig</code></a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>databaseName</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>host</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>maxConnections</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>maxLifetimeSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>port</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>provider</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseCredentialSourceConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#databasecredentialsourceconfigrawpassword"><code>RawPassword</code></a></td></tr>
    <tr><td><a href="#databasecredentialsourceconfigawssecret"><code>AwsSecret</code></a></td></tr>
    <tr><td><a href="#databasecredentialsourceconfigawsiamtoken"><code>AwsIamToken</code></a></td></tr>
  </tbody>
</table>

## `DatabaseCredentialSourceConfig::RawPassword`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>rawPassword</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>userName</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseCredentialSourceConfig::AwsSecret`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>secretName</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseCredentialSourceConfig::AwsIamToken`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>userName</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatabaseCredentialsPolicyConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>rotationFrequencyInMinutes</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>source</code></td>
      <td><a href="#databasecredentialsourceconfig"><code>DatabaseCredentialSourceConfig</code></a></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `DatasetEnvVarsConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>enabled</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>encryptionKey</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td>
        Represents the encryption key for the dataset env vars. This field is
        required if `enabled` is `true` or `None`.

        The encryption key must be a 32-character alphanumeric string, which
        includes both uppercase and lowercase Latin letters (A-Z, a-z) and
        digits (0-9).

        To generate use:

        ```sh theme={null}
        tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32; echo
        ```
      </td>
    </tr>
  </tbody>
</table>

## `DidSecretEncryptionConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>enabled</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>encryptionKey</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td>
        The encryption key must be a 32-character alphanumeric string, which
        includes both uppercase and lowercase Latin letters (A-Z, a-z) and
        digits (0-9).

        To generate use:

        ```sh theme={null}
        tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32; echo
        ```
      </td>
    </tr>
  </tbody>
</table>

## `DurationString`

Base type: `string`

## `Email`

Base type: `string`

## `EmailConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>gateway</code></td>
      <td><a href="#emailconfiggateway"><code>EmailConfigGateway</code></a></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>senderAddress</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>senderName</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `EmailConfigGateway`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#emailconfiggatewaydummy"><code>Dummy</code></a></td></tr>
    <tr><td><a href="#emailconfiggatewaypostmark"><code>Postmark</code></a></td></tr>
  </tbody>
</table>

## `EmailConfigGateway::Dummy`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `EmailConfigGateway::Postmark`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>apiKey</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `EmbeddingsChunkerConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#embeddingschunkerconfigsimple"><code>Simple</code></a></td></tr>
  </tbody>
</table>

## `EmbeddingsChunkerConfig::Simple`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>splitParagraphs</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>splitSections</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `EmbeddingsEncoderConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#embeddingsencoderconfigopenai"><code>OpenAi</code></a></td></tr>
    <tr><td><a href="#embeddingsencoderconfigdummy"><code>Dummy</code></a></td></tr>
  </tbody>
</table>

## `EmbeddingsEncoderConfig::OpenAi`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>apiKey</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>dimensions</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1536</code></td>

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>modelName</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"text-embedding-ada-002"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>url</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `EmbeddingsEncoderConfig::Dummy`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `EngineConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>datafusionEmbedded</code></td>
      <td><a href="#engineconfigdatafusion"><code>EngineConfigDatafusion</code></a></td>
      <td><pre><code class="language-json">\{
      "base": \{
      "datafusion.catalog.default\_catalog": "kamu",
      "datafusion.catalog.default\_schema": "kamu",
      "datafusion.catalog.information\_schema": "true",
      "datafusion.sql\_parser.enable\_ident\_normalization": "false"
      },
      "batchQuery": \{},
      "compaction": \{
      "datafusion.execution.target\_partitions": "1"
      },
      "ingest": \{
      "datafusion.execution.target\_partitions": "1"
      },
      "useLegacyArrowBufferEncoding": false
      }</code></pre></td>
      <td>Embedded Datafusion engine configuration</td>
    </tr>

    <tr>
      <td><code>images</code></td>
      <td><a href="#engineimagesconfig"><code>EngineImagesConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "datafusion": "ghcr.io/kamu-data/engine-datafusion:0.9.0",
      "flink": "ghcr.io/kamu-data/engine-flink:0.18.2-flink\_1.16.0-scala\_2.12-java8",
      "risingwave": "ghcr.io/kamu-data/engine-risingwave:0.2.0-risingwave\_1.7.0-alpha",
      "spark": "ghcr.io/kamu-data/engine-spark:0.23.1-spark\_3.5.0"
      }</code></pre></td>
      <td>UNSTABLE: Default engine images</td>
    </tr>

    <tr>
      <td><code>maxConcurrency</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>
      <td>Maximum number of engine operations that can be performed concurrently</td>
    </tr>

    <tr>
      <td><code>networkNs</code></td>
      <td><a href="#networknamespacetype"><code>NetworkNamespaceType</code></a></td>
      <td><code class="language-json">"Private"</code></td>

      <td>
        Type of the networking namespace (relevant when running in container
        environments)
      </td>
    </tr>

    <tr>
      <td><code>runtime</code></td>
      <td><a href="#containerruntimetype"><code>ContainerRuntimeType</code></a></td>
      <td><code class="language-json">"Podman"</code></td>
      <td>Type of the runtime to use when running the data processing engines</td>
    </tr>

    <tr>
      <td><code>shutdownTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"5s"</code></td>
      <td>Timeout for waiting the engine container to stop gracefully</td>
    </tr>

    <tr>
      <td><code>startTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"30s"</code></td>
      <td>Timeout for starting an engine container</td>
    </tr>
  </tbody>
</table>

## `EngineConfigDatafusion`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>base</code></td>
      <td><code>object</code></td>
      <td><pre><code class="language-json">\{
      "datafusion.catalog.default\_catalog": "kamu",
      "datafusion.catalog.default\_schema": "kamu",
      "datafusion.catalog.information\_schema": "true",
      "datafusion.sql\_parser.enable\_ident\_normalization": "false"
      }</code></pre></td>

      <td>
        Base configuration options
        See: `<https://datafusion.apache.org/user-guide/configs.html>`
      </td>
    </tr>

    <tr>
      <td><code>batchQuery</code></td>
      <td><code>object</code></td>
      <td><code class="language-json">\{}</code></td>
      <td>Batch query-specific overrides to the base config</td>
    </tr>

    <tr>
      <td><code>compaction</code></td>
      <td><code>object</code></td>
      <td><pre><code class="language-json">\{
      "datafusion.execution.target\_partitions": "1"
      }</code></pre></td>
      <td>Compaction-specific overrides to the base config</td>
    </tr>

    <tr>
      <td><code>ingest</code></td>
      <td><code>object</code></td>
      <td><pre><code class="language-json">\{
      "datafusion.execution.target\_partitions": "1"
      }</code></pre></td>
      <td>Ingest-specific overrides to the base config</td>
    </tr>

    <tr>
      <td><code>useLegacyArrowBufferEncoding</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td>
        Makes arrow batches use contiguous `Binary` and `Utf8` encodings instead
        of more modern `BinaryView` and `Utf8View`. This is only needed for
        compatibility with some older libraries that don't yet support them.

        See: [kamu-node#277](https://github.com/kamu-data/kamu-node/issues/277)
      </td>
    </tr>
  </tbody>
</table>

## `EngineImagesConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>datafusion</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"ghcr.io/kamu-data/engine-datafusion:0.9.0"</code></td>
      <td>UNSTABLE: Datafusion engine image</td>
    </tr>

    <tr>
      <td><code>flink</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"ghcr.io/kamu-data/engine-flink:0.18.2-flink\_1.16.0-scala\_2.12-java8"</code></td>
      <td>UNSTABLE: Flink engine image</td>
    </tr>

    <tr>
      <td><code>risingwave</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"ghcr.io/kamu-data/engine-risingwave:0.2.0-risingwave\_1.7.0-alpha"</code></td>
      <td>UNSTABLE: RisingWave engine image</td>
    </tr>

    <tr>
      <td><code>spark</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"ghcr.io/kamu-data/engine-spark:0.23.1-spark\_3.5.0"</code></td>
      <td>UNSTABLE: Spark engine image</td>
    </tr>
  </tbody>
</table>

## `EthRpcEndpoint`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>chainId</code></td>
      <td><code>integer</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>chainName</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>nodeUrl</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `EthereumSourceConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>commitAfterBlocksScanned</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1000000</code></td>

      <td>
        Forces iteration to stop after the specified number of blocks were
        scanned even if we didn't reach the target record number. This is useful
        to not lose a lot of scanning progress in case of an RPC error.
      </td>
    </tr>

    <tr>
      <td><code>getLogsBlockStride</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">100000</code></td>

      <td>
        Default number of blocks to scan within one query to `eth_getLogs` RPC
        endpoint.
      </td>
    </tr>

    <tr>
      <td><code>rpcEndpoints</code></td>
      <td><code>array</code></td>
      <td><code class="language-json">\[]</code></td>
      <td>Default RPC endpoints to use if source does not specify one explicitly.</td>
    </tr>

    <tr>
      <td><code>useBlockTimestampFallback</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td>
        Many providers don't yet return `blockTimestamp` from `eth_getLogs` RPC
        endpoint and in such cases `block_timestamp` column will be `null`.
        If you enable this fallback the library will perform additional call to
        `eth_getBlock` to populate the timestam, but this may result in
        significant performance penalty when fetching many log records.

        See: [ethereum/execution-apis#295](https://github.com/ethereum/execution-apis/issues/295)
      </td>
    </tr>
  </tbody>
</table>

## `ExtraConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>graphql</code></td>
      <td><a href="#gqlconfig"><code>GqlConfig</code></a></td>
      <td><code class="language-json">\{}</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `FlightSqlConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>allowAnonymous</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">true</code></td>
      <td>Whether clients can authenticate as 'anonymous' user</td>
    </tr>

    <tr>
      <td><code>anonSessionExpirationTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"5m"</code></td>

      <td>
        Time after which FlightSQL client session will be forgotten and client
        will have to re-authroize (for anonymous clients)
      </td>
    </tr>

    <tr>
      <td><code>anonSessionInactivityTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"5s"</code></td>

      <td>
        Time after which FlightSQL session context will be released to free the
        resources (for anonymous clients)
      </td>
    </tr>

    <tr>
      <td><code>authedSessionExpirationTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"30m"</code></td>

      <td>
        Time after which FlightSQL client session will be forgotten and client
        will have to re-authroize (for authenticated clients)
      </td>
    </tr>

    <tr>
      <td><code>authedSessionInactivityTimeout</code></td>
      <td><a href="#durationstring"><code>DurationString</code></a></td>
      <td><code class="language-json">"5s"</code></td>

      <td>
        Time after which FlightSQL session context will be released to free the
        resources (for authenticated clients)
      </td>
    </tr>
  </tbody>
</table>

## `FlowAgentConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>awaitingStepSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1</code></td>

      <td />
    </tr>

    <tr>
      <td><code>defaultRetryPolicies</code></td>
      <td><code>object</code></td>
      <td><code class="language-json">\{}</code></td>

      <td />
    </tr>

    <tr>
      <td><code>mandatoryThrottlingPeriodSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">60</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `FlowSystemConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>flowAgent</code></td>
      <td><a href="#flowagentconfig"><code>FlowAgentConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "awaitingStepSecs": 1,
      "defaultRetryPolicies": \{},
      "mandatoryThrottlingPeriodSecs": 60
      }</code></pre></td>

      <td />
    </tr>

    <tr>
      <td><code>flowSystemEventAgent</code></td>
      <td><a href="#flowsystemeventagentconfig"><code>FlowSystemEventAgentConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "batchSize": 100,
      "maxListeningTimeoutMs": 60000,
      "minDebounceIntervalMs": 100
      }</code></pre></td>

      <td />
    </tr>

    <tr>
      <td><code>taskAgent</code></td>
      <td><a href="#taskagentconfig"><code>TaskAgentConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "taskCheckingIntervalSecs": 1
      }</code></pre></td>

      <td />
    </tr>
  </tbody>
</table>

## `FlowSystemEventAgentConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>batchSize</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">100</code></td>

      <td />
    </tr>

    <tr>
      <td><code>maxListeningTimeoutMs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">60000</code></td>

      <td />
    </tr>

    <tr>
      <td><code>minDebounceIntervalMs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">100</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `GqlConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody />
</table>

## `IdentityConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>privateKey</code></td>
      <td><a href="#privatekey"><code>PrivateKey</code></a></td>
      <td><code class="language-json">null</code></td>

      <td>
        Private key used to sign API responses.
        Currently only `ed25519` keys are supported.

        To generate use:

        dd if=/dev/urandom bs=1 count=32 status=none |
        base64 -w0 |
        tr '+/' '-\_' |
        tr -d '=' |
        (echo -n u && cat)

        The command above:

        * reads 32 random bytes
        * base64-encodes them
        * converts default base64 encoding to base64url and removes padding
        * prepends a multibase prefix
      </td>
    </tr>
  </tbody>
</table>

## `IpfsConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>httpGateway</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"http\://localhost:8080/"</code></td>

      <td>
        HTTP Gateway URL to use for downloads.
        For safety, it defaults to `http://localhost:8080` - a local IPFS daemon.
        If you don't have IPFS installed, you can set this URL to
        one of the public gateways like `https://ipfs.io`.
        List of public gateways can be found here: `https://ipfs.github.io/public-gateway-checker/`
      </td>
    </tr>

    <tr>
      <td><code>preResolveDnslink</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">true</code></td>

      <td>
        Whether kamu should pre-resolve IPNS DNSLink names using DNS or leave it
        to the Gateway.
      </td>
    </tr>
  </tbody>
</table>

## `MqttSourceConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>brokerIdleTimeoutMs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1000</code></td>

      <td>
        Time in milliseconds to wait for MQTT broker to send us some data after
        which we will consider that we have "caught up" and end the polling
        loop.
      </td>
    </tr>
  </tbody>
</table>

## `NetworkNamespaceType`

Corresponds to podman's `containers.conf::netns`
We podman is used inside containers (e.g. podman-in-docker or podman-in-k8s)
it usually runs uses host network namespace.

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><code>Private</code></td></tr>
    <tr><td><code>Host</code></td></tr>
  </tbody>
</table>

## `OutboxConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>awaitingStepSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1</code></td>

      <td />
    </tr>

    <tr>
      <td><code>batchSize</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">20</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `Password`

Base type: `string`

## `PasswordPolicyConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>minNewPasswordLength</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">8</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `PrivateKey`

Base type: `string`

## `ProtocolConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>flightSql</code></td>
      <td><a href="#flightsqlconfig"><code>FlightSqlConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "allowAnonymous": true,
      "anonSessionExpirationTimeout": "5m",
      "anonSessionInactivityTimeout": "5s",
      "authedSessionExpirationTimeout": "30m",
      "authedSessionInactivityTimeout": "5s"
      }</code></pre></td>
      <td>FlightSQL configuration</td>
    </tr>

    <tr>
      <td><code>ipfs</code></td>
      <td><a href="#ipfsconfig"><code>IpfsConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "httpGateway": "http\://localhost:8080/",
      "preResolveDnslink": true
      }</code></pre></td>
      <td>IPFS configuration</td>
    </tr>
  </tbody>
</table>

## `QuotaAccountConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>defaultStorageLimitInBytes</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `QuotaConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>account</code></td>
      <td><a href="#quotaaccountconfig"><code>QuotaAccountConfig</code></a></td>
      <td><code class="language-json">\{}</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `RepoCachingConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>metadataLocalFsCachePath</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>registryCacheEnabled</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `RepoConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>caching</code></td>
      <td><a href="#repocachingconfig"><code>RepoCachingConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "registryCacheEnabled": false
      }</code></pre></td>

      <td />
    </tr>

    <tr>
      <td><code>dataBlocksPageSize</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>repoUrl</code></td>
      <td><a href="#urlorpath"><code>UrlOrPath</code></a></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `RetryPolicyConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>backoffType</code></td>
      <td><a href="#retrypolicyconfigbackofftype"><code>RetryPolicyConfigBackoffType</code></a></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>maxAttempts</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>minDelaySecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `RetryPolicyConfigBackoffType`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><code>Fixed</code></td></tr>
    <tr><td><code>Linear</code></td></tr>
    <tr><td><code>Exponential</code></td></tr>
    <tr><td><code>ExponentialWithJitter</code></td></tr>
  </tbody>
</table>

## `RuntimeConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>maxBlockingThreads</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>threadStackSize</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>workerThreads</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `SearchConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>embeddingsChunker</code></td>
      <td><a href="#embeddingschunkerconfig"><code>EmbeddingsChunkerConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "kind": "Simple",
      "splitParagraphs": false,
      "splitSections": false
      }</code></pre></td>
      <td>Embeddings chunker configuration</td>
    </tr>

    <tr>
      <td><code>embeddingsEncoder</code></td>
      <td><a href="#embeddingsencoderconfig"><code>EmbeddingsEncoderConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "dimensions": 1536,
      "kind": "OpenAi",
      "modelName": "text-embedding-ada-002"
      }</code></pre></td>
      <td>Embeddings encoder configuration</td>
    </tr>

    <tr>
      <td><code>indexer</code></td>
      <td><a href="#searchindexerconfig"><code>SearchIndexerConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "clearOnStart": false,
      "incrementalIndexing": false
      }</code></pre></td>
      <td>Indexer configuration</td>
    </tr>

    <tr>
      <td><code>repo</code></td>
      <td><a href="#searchrepositoryconfig"><code>SearchRepositoryConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "kind": "Dummy"
      }</code></pre></td>
      <td>Search repository configuration</td>
    </tr>

    <tr>
      <td><code>semanticSearchThresholdScore</code></td>
      <td><code>number</code></td>
      <td><code class="language-json">0.0</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `SearchIndexerConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>clearOnStart</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>incrementalIndexing</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>
      <td>Whether incremental indexing is enabled</td>
    </tr>
  </tbody>
</table>

## `SearchRepositoryConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#searchrepositoryconfigdummy"><code>Dummy</code></a></td></tr>
    <tr><td><a href="#searchrepositoryconfigelasticsearch"><code>Elasticsearch</code></a></td></tr>
  </tbody>
</table>

## `SearchRepositoryConfig::Dummy`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `SearchRepositoryConfig::Elasticsearch`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>caCertPemPath</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>embeddingDimensions</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1536</code></td>

      <td />
    </tr>

    <tr>
      <td><code>enableCompression</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>indexPrefix</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"kamu-node"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>password</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td />
    </tr>

    <tr>
      <td><code>timeoutSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">30</code></td>

      <td />
    </tr>

    <tr>
      <td><code>url</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">"http\://localhost:9200"</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `SourceConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>ethereum</code></td>
      <td><a href="#ethereumsourceconfig"><code>EthereumSourceConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "commitAfterBlocksScanned": 1000000,
      "getLogsBlockStride": 100000,
      "rpcEndpoints": \[],
      "useBlockTimestampFallback": false
      }</code></pre></td>
      <td>Ethereum-specific configuration</td>
    </tr>

    <tr>
      <td><code>mqtt</code></td>
      <td><a href="#mqttsourceconfig"><code>MqttSourceConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "brokerIdleTimeoutMs": 1000
      }</code></pre></td>
      <td>MQTT-specific configuration</td>
    </tr>

    <tr>
      <td><code>targetRecordsPerSlice</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">10000</code></td>

      <td>
        Target number of records after which we will stop consuming from the
        resumable source and commit data, leaving the rest for the next
        iteration. This ensures that one data slice doesn't become too big.
      </td>
    </tr>
  </tbody>
</table>

## `TaskAgentConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>taskCheckingIntervalSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">1</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `UploadRepoConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>maxFileSizeMb</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">50</code></td>

      <td />
    </tr>

    <tr>
      <td><code>storage</code></td>
      <td><a href="#uploadrepostorageconfig"><code>UploadRepoStorageConfig</code></a></td>
      <td><pre><code class="language-json">\{
      "kind": "Local"
      }</code></pre></td>

      <td />
    </tr>
  </tbody>
</table>

## `UploadRepoStorageConfig`

<table>
  <thead><tr><th>Variants</th></tr></thead>

  <tbody>
    <tr><td><a href="#uploadrepostorageconfigs3"><code>S3</code></a></td></tr>
    <tr><td><a href="#uploadrepostorageconfiglocal"><code>Local</code></a></td></tr>
  </tbody>
</table>

## `UploadRepoStorageConfig::S3`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>bucketS3Url</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>

    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `UploadRepoStorageConfig::Local`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>kind</code></td>
      <td><code>string</code></td>

      <td />

      <td />
    </tr>
  </tbody>
</table>

## `UrlConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>baseUrlFlightsql</code></td>
      <td><a href="#urlorpath"><code>UrlOrPath</code></a></td>
      <td><code class="language-json">"grpc://localhost:50050"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>baseUrlPlatform</code></td>
      <td><a href="#urlorpath"><code>UrlOrPath</code></a></td>
      <td><code class="language-json">"http\://localhost:4200/"</code></td>

      <td />
    </tr>

    <tr>
      <td><code>baseUrlRest</code></td>
      <td><a href="#urlorpath"><code>UrlOrPath</code></a></td>
      <td><code class="language-json">"http\://localhost:8080/"</code></td>

      <td />
    </tr>
  </tbody>
</table>

## `UrlOrPath`

Base type: `string`

## `WebhooksConfig`

<table>
  <thead><tr><th>Field</th><th>Type</th><th>Default</th><th>Description</th></tr></thead>

  <tbody>
    <tr>
      <td><code>deliveryTimeoutSecs</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">10</code></td>

      <td />
    </tr>

    <tr>
      <td><code>maxConsecutiveFailures</code></td>
      <td><code>integer</code></td>
      <td><code class="language-json">5</code></td>

      <td />
    </tr>

    <tr>
      <td><code>secretEncryptionEnabled</code></td>
      <td><code>boolean</code></td>
      <td><code class="language-json">false</code></td>

      <td />
    </tr>

    <tr>
      <td><code>secretEncryptionKey</code></td>
      <td><code>string</code></td>
      <td><code class="language-json">null</code></td>

      <td>
        Represents the encryption key for the webhooks secret. This field is
        required if `secret_encryption_enabled` is `true` or `None`.

        The encryption key must be a 32-character alphanumeric string, which
        includes both uppercase and lowercase Latin letters (A-Z, a-z) and
        digits (0-9).

        # Example

        let config = WebhooksConfig \{
        ...
        secret\_encryption\_enabled: Some(true),
        encryption\_key:
        Some(String::from("aBcDeFgHiJkLmNoPqRsTuVwXyZ012345")) }; \`\`\`
      </td>
    </tr>
  </tbody>
</table>
