Clés d’API
La page des clés d’API d’un produit d’IA, comme les consoles d’OpenAI et d’Anthropic. Créez des clés avec des permissions limitées et une expiration, voyez le secret une seule fois avec une copie qui confirme, révoquez avec annulation, renommez sur place, effectuez une rotation avec période de grâce et consultez l’utilisation par clé.
OpenAI, Anthropic et Vercel proposent tous la même page de clés d’API : une liste de clés dont on ne voit que la fin, une boîte de dialogue pour en créer une et une seule occasion de copier le secret. API keys est cette page en un seul block qui s’intègre dans n’importe quelle section Settings. Il gère ce qui tourne mal : secrets perdus parce qu’une boîte s’est fermée, clés révoquées par erreur et listes qui sautent quand un élément disparaît.
Chaque ligne affiche le nom de la clé, le secret masqué du type hx_live_…a3F9, ses permissions, le projet, sa date de création et sa dernière utilisation, ou Never used. Les clés qui expirent dans la semaine reçoivent un badge d’avertissement et les clés expirées l’indiquent. Passez usage et un petit graphique des requêtes quotidiennes apparaît à côté de la clé sur les écrans larges.
Create key ouvre une boîte de dialogue avec un nom, un projet, des permissions (toutes, lecture seule ou limitées aux ressources cochées) et une expiration de 30 jours, 90 jours, jamais ou une date de votre choix. La même boîte se transforme ensuite en révélation : la clé complète dans une zone monospace, un bouton Copy qui confirme avec une coche, et une case à cocher avant que Done ne fonctionne. Si vous essayez de fermer avant d’avoir copié, elle reste ouverte avec un avertissement et un bouton Close anyway. L’onglet demande aussi confirmation avant de se fermer.
La révocation demande d’abord confirmation, en nommant la clé. Ensuite la ligne se replie et un toast propose Undo pendant cinq secondes ; onRevoke ne s’exécute qu’une fois cette fenêtre fermée, donc Undo n’exige rien de votre serveur. Quitter la page ou créer une autre clé envoie immédiatement toutes les révocations en attente. Rotate key insère un nouveau secret et peut garder l’ancien actif une heure, un jour ou une semaine. Renommez sur place avec F2 ou un double-clic, Enter pour enregistrer et Escape pour annuler.
Ajouter le registre Pro à components.json
components.json Ajouter votre token
Créez un token sur votre page de compte et placez-le dans
.env.localsous le nomHEXTAUI_PRO_TOKEN.Ajouter le block
pnpm dlx shadcn@latest add @hextaui-pro/api-keys
Branchez-le à votre API
ApiKeySettings affiche les clés que vous lui passez et vous appelle pour les créer, les révoquer et les renommer. Levez une erreur depuis n’importe quel callback et l’utilisateur voit pourquoi, sans perdre sa saisie. Affichez ApiKeySettingsSkeleton pendant le chargement de la liste.
Créer les clés sur votre serveur
generateApiKey utilise crypto.getRandomValues, donc il fonctionne dans Node, les runtimes edge et les Workers. Stockez un hash et les quatre derniers caractères, et ne renvoyez le secret qu’une seule fois.
Rotation, vos propres scopes et pas d’annulation
Passez onRotate pour ajouter Rotate key avec une période de grâce pour l’ancien secret. Mettez undoTimeout à 0 pour révoquer dès la confirmation, et passez resources, prefix et snippet pour correspondre à votre API.
Anatomie
Les parties à composer, de l’extérieur vers l’intérieur.
| Partie | Description |
|---|---|
ApiKeySettings | La liste, son en-tête avec Create key, la note de limite, l’état vide et toutes les boîtes de dialogue. |
ApiKeySettingsSkeleton | Un placeholder de chargement à la forme de la liste, pour la prop skeleton de SettingsSection. |
generateApiKey | Crée une clé aléatoire avec un préfixe à partir de crypto.getRandomValues. |
keyHint | Les derniers caractères d’un secret, à stocker et à afficher comme clé masquée. |
ApiKeySettings
Accepte aussi toutes les props de div.
| Prop | Type | Par défaut |
|---|---|---|
keys{ id, name, hint, permission, resources?, project?, createdAt, lastUsedAt?, expiresAt?, usage? }. Les dates acceptent un Date, une chaîne ISO ou un timestamp. usage correspond aux requêtes par jour, les plus anciennes d’abord. | ApiKey[] | – |
onCreateCrée la clé et la renvoie avec son secret, affiché une seule fois. Levez une erreur pour afficher le message dans la boîte de dialogue. | (input: ApiKeyInput) => Promise<{ key, secret }> | – |
onRevokeRévoque la clé. S’exécute après la fenêtre d’annulation. Levez une erreur et la clé revient avec Try again. | (key) => void | Promise<void> | – |
onRenameAjoute Rename, F2 et le double-clic. Le nouveau nom s’affiche tout de suite et revient en arrière si l’appel lève une erreur. | (key, name) => void | Promise<void> | – |
onRotateAjoute Rotate key. expireOldIn indique pendant combien d’heures l’ancien secret continue de fonctionner, 0 pour l’arrêter immédiatement. | (key, { expireOldIn }) => Promise<{ key, secret }> | – |
limitNombre maximal de clés autorisées. À la limite, Create key est désactivé et la note en explique la raison. | number | – |
resourcesCe qu’une clé restreinte peut être autorisée à utiliser. Par défaut : models, responses, embeddings, files, agents et usage. | { value, label, description? }[] | – |
projectsAjoute un sélecteur Project à la boîte de dialogue de création et affiche le projet sur chaque clé. | { value, label }[] | – |
prefixAffiché avant l’indice dans les clés masquées, sauf si une clé a son propre préfixe. | string | "hx_live_" |
snippetLa commande affichée dans l’état vide, avec un bouton Copy. | string | – |
undoTimeoutDurée pendant laquelle Undo est proposé après une révocation, en ms. 0 révoque dès la confirmation. | number | 5000 |
expiringSoonNombre de jours avant l’expiration à partir duquel une clé reçoit le badge d’avertissement. | number | 7 |
nowFixe l’heure utilisée pour les dates relatives, pour les tests et les captures d’écran. | Date | – |
| Prop | Type | Par défaut |
|---|---|---|
rowsNombre de clés placeholder à afficher. | number | 3 |
generateApiKey
Renvoie le préfixe suivi de lettres et de chiffres aléatoires.
| Prop | Type | Par défaut |
|---|---|---|
prefixPlacé au début de la clé. | string | "hx_live_" |
lengthCaractères aléatoires après le préfixe, de 8 à 256. | number | 40 |
| Touche | Action |
|---|---|
| F2 | Renomme la clé dont la ligne a le focus. |
| Enter | Pendant un renommage, enregistre le nom. Dans la boîte de création, crée la clé. |
| Escape | Pendant un renommage, conserve l’ancien nom. Dans la révélation, avertit une fois si la clé n’a pas été copiée. |
| Tab | Parcourt les actions de chaque clé, puis les champs et boutons de la boîte de dialogue. |
- Quand une clé est créée, le focus passe à Copy et un message de statut demande de la copier maintenant car elle ne sera plus affichée.
- Les confirmations nomment la clé et son secret masqué, et le focus démarre sur Cancel.
- Après une révocation, le focus passe à la clé suivante, ou à la précédente, ou à Create key. Après Undo, il revient sur la clé restaurée. Après un renommage, il revient aux actions de la clé.
- Les badges Restricted nomment leurs ressources, le graphique d’utilisation est lu comme un total, et les renommages et restaurations sont annoncés.
- Avec réduction des animations, les lignes apparaissent et disparaissent sans se replier.
Construit avec
Les composants HextaUI gratuits dont API keys est constitué. Chacun s’installe séparément.
Code
4 fichiers, ajoutés à components/blocks/api-keys.