# `DocuSign.OAuth.AuthorizationCodeStrategy`
[🔗](https://github.com/neilberkman/docusign_elixir/blob/v3.4.0/lib/docusign/oauth/authorization_code_strategy.ex#L1)

OAuth2 Authorization Code Flow strategy for DocuSign using the battle-tested oauth2 library.

This module implements the standard OAuth2 Authorization Code Flow for DocuSign,
leveraging the existing OAuth2 library infrastructure used by the JWT impersonation flow.

## Usage

    # Create client
    client = DocuSign.OAuth.AuthorizationCodeStrategy.client(
      client_id: "your_integration_key",
      client_secret: "your_secret",
      redirect_uri: "https://yourapp.com/auth/docusign/callback"
    )

    # Generate authorization URL
    auth_url = OAuth2.Client.authorize_url!(client, scope: "signature")

    # Exchange authorization code for tokens
    client = OAuth2.Client.get_token!(client, code: "auth_code_from_callback")

    # Get DocuSign user info
    user_info = DocuSign.OAuth.AuthorizationCodeStrategy.get_user_info!(client)

## Configuration

    config :docusign,
      client_id: "your_integration_key",
      client_secret: "your_secret_key",
      hostname: "account-d.docusign.com"  # or "account.docusign.com" for production

# `client`

```elixir
@spec client(keyword()) :: OAuth2.Client.t()
```

Create a new OAuth2 client for DocuSign Authorization Code Flow.

## Parameters

- `opts` - Keyword list of options:
  - `:client_id` - DocuSign integration key (required if not in app config)
  - `:client_secret` - DocuSign secret (required if not in app config)
  - `:hostname` - DocuSign hostname (required if not in app config)
  - `:redirect_uri` - Callback URL for authorization (required)
  - `:scope` - OAuth scopes (default: "signature")

## Examples

    # With explicit configuration
    client = DocuSign.OAuth.AuthorizationCodeStrategy.client(
      client_id: "your_integration_key",
      client_secret: "your_secret",
      hostname: "account-d.docusign.com",
      redirect_uri: "https://yourapp.com/auth/callback"
    )

    # Using application config
    client = DocuSign.OAuth.AuthorizationCodeStrategy.client(
      redirect_uri: "https://yourapp.com/auth/callback"
    )

## Returns

Returns an `OAuth2.Client` struct configured for DocuSign Authorization Code Flow.

# `get_user_info!`

```elixir
@spec get_user_info!(OAuth2.Client.t()) :: map()
```

Get DocuSign user information using the access token.

## Parameters

- `client` - OAuth2.Client with valid access token

## Examples

    user_info = get_user_info!(client)
    user_email = user_info["email"]
    accounts = user_info["accounts"]

## Returns

Returns user information map from DocuSign /oauth/userinfo endpoint.

---

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