# `AgentSessionManager.Adapters.S3ArtifactStore.S3Client`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.8.0/lib/agent_session_manager/adapters/s3_artifact_store/s3_client.ex#L1)

Behaviour for S3 API operations.

This behaviour abstracts the S3 client to allow mocking in tests.
The default implementation uses `ExAws.S3`.

## Custom Implementations

You can provide your own implementation:

    {:ok, store} = S3ArtifactStore.start_link(
      bucket: "my-bucket",
      client: MyCustomS3Client
    )

# `key`

```elixir
@type key() :: String.t()
```

# `delete_object`

```elixir
@callback delete_object(bucket :: String.t(), key(), opts :: keyword()) ::
  :ok | {:error, term()}
```

# `get_object`

```elixir
@callback get_object(bucket :: String.t(), key(), opts :: keyword()) ::
  {:ok, binary()} | {:error, term()}
```

# `put_object`

```elixir
@callback put_object(bucket :: String.t(), key(), data :: binary(), opts :: keyword()) ::
  :ok | {:error, term()}
```

---

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