# `Pristine.Operation`
[🔗](https://github.com/nshkrdotcom/pristine/blob/pristine-v0.4.0/lib/pristine/operation.ex#L1)

Normalized runtime operation envelope rendered by generated providers.

# `auth_t`

```elixir
@type auth_t() :: %{
  use_client_default?: boolean(),
  override: term(),
  security_schemes: [String.t()]
}
```

# `key_spec`

```elixir
@type key_spec() :: {String.t(), atom()}
```

# `pagination_t`

```elixir
@type pagination_t() :: %{
  strategy: :cursor | :keyset | :link_header | :offset_limit | :page_number,
  request_mapping: map(),
  response_mapping: map(),
  default_limit: pos_integer() | nil,
  items_path: [term()] | nil
}
```

# `partition_spec`

```elixir
@type partition_spec() :: %{
  optional(:auth) =&gt; key_spec() | payload_spec(),
  optional(:headers) =&gt; [key_spec()],
  optional(:path) =&gt; [key_spec()],
  optional(:query) =&gt; [key_spec()],
  optional(:body) =&gt; payload_spec(),
  optional(:form_data) =&gt; payload_spec()
}
```

# `partition_t`

```elixir
@type partition_t() :: %{
  path_params: map(),
  query: map(),
  headers: map(),
  body: term(),
  form_data: term(),
  auth: term()
}
```

# `payload_spec`

```elixir
@type payload_spec() ::
  %{mode: :keys, keys: [key_spec()]}
  | %{mode: :key, key: key_spec()}
  | %{mode: :remaining}
  | %{mode: :none}
```

# `runtime_t`

```elixir
@type runtime_t() :: %{
  resource: String.t() | nil,
  retry_group: String.t() | nil,
  circuit_breaker: String.t() | nil,
  rate_limit_group: String.t() | nil,
  telemetry_event: term(),
  timeout_ms: non_neg_integer() | nil
}
```

# `t`

```elixir
@type t() :: %Pristine.Operation{
  auth: auth_t(),
  body: term(),
  form_data: term(),
  headers: map(),
  id: String.t(),
  method: atom() | String.t(),
  pagination: pagination_t() | nil,
  path_params: map(),
  path_template: String.t(),
  query: map(),
  request_schema: term(),
  response_schemas: map(),
  runtime: runtime_t()
}
```

# `items`

```elixir
@spec items(t(), term()) :: term()
```

# `new`

```elixir
@spec new(map() | keyword()) :: t()
```

# `next_page`

```elixir
@spec next_page(t(), term()) :: t() | nil
```

# `partition`

```elixir
@spec partition(map(), partition_spec()) :: partition_t()
```

# `render_path`

```elixir
@spec render_path(String.t(), map()) :: String.t()
```

# `response_schema`

```elixir
@spec response_schema(t(), integer() | nil) :: term()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
