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

# secret()

> La solution de secours quand le proxy ne peut pas injecter la clé — la valeur brute, en dernier recours.

`secret()` récupère la **valeur brute** d'une clé depuis le vault. C'est le **filet de sécurité** pour les cas que le proxy ne sait pas (encore) router. Tant qu'un provider fonctionne avec [`configure()`](/fr/sdk/configure), préfère-le toujours : avec `configure()`, la clé ne touche jamais ton process.

<Warning>
  `secret()` **ne passe pas par le proxy**. La vraie clé entre dans la mémoire de ton application (mode client) et le host-lock n'est **pas appliqué**. À n'utiliser que lorsque `configure()` ne peut pas faire le travail.
</Warning>

```js theme={null}
import { secret } from "@elding/sdk";

const authToken = await secret("TWILIO_AUTH_TOKEN");
const client = twilio(accountSid, authToken);
```

***

## Quand l'utiliser

`configure()` couvre les providers à header simple (`Authorization: Bearer …`, `x-api-key`). `secret()` prend le relais pour le reste :

<CardGroup cols={2}>
  <Card title="Auth composée" icon="key">
    Twilio (`Basic base64(SID:token)`) et tout schéma à deux valeurs que le proxy ne sait pas assembler.
  </Card>

  <Card title="Header custom" icon="code">
    Azure OpenAI (`api-key:`), schémas `Token …` ou tout en-tête d'authentification non standard.
  </Card>

  <Card title="SDK sans baseURL" icon="plug">
    Un client qui n'expose ni `baseURL` ni `fetch` personnalisé — impossible de le router vers le proxy.
  </Card>

  <Card title="Secret non-HTTP ponctuel" icon="lock">
    Une valeur utilisée directement en process, hors d'un appel HTTP.
  </Card>
</CardGroup>

***

## Le compromis

|                     | [`configure()`](/fr/sdk/configure) (proxy) | `secret()` (client)                |
| ------------------- | ------------------------------------------ | ---------------------------------- |
| Clé dans le process | jamais                                     | oui (5 min puis effacée)           |
| Host-lock appliqué  | oui                                        | non                                |
| Providers           | header simple (Bearer / x-api-key)         | **tous** (Basic, custom, non-HTTP) |

On perd le zero-knowledge pour cette clé. Mais ça reste supérieur à un `.env` : valeur centralisée, **rotatable**, chiffrée au repos, **fetch audité**, et gardée en mémoire **5 minutes maximum** puis effacée — au lieu d'un `.env` présent dans tout le process à vie.

<Note>
  Règle : [`configure()`](/fr/sdk/configure) par défaut. `secret()` uniquement quand le proxy ne peut pas injecter la clé.
</Note>

***

## Paramètres

| Paramètre | Type            | Requis | Description                                       |
| --------- | --------------- | ------ | ------------------------------------------------- |
| `name`    | `string`        | Oui    | Nom de la clé dans le vault (`A-Z`, `0-9`, `_`).  |
| `options` | `ClientOptions` | Non    | Override `refreshToken`, `setId` ou `cacheTtlMs`. |

Retourne `Promise<string>` — la valeur brute de la clé.
