SDK
Le client TypeScript typé pour Node, le navigateur et les runtimes edge.
Le SDK TypeScript enveloppe l’API avec les types, les réessais et la pagination. Il est basé sur fetch et tourne sur Node 18+, le navigateur et les runtimes edge.
npm install @gheima/sdkimport { GheimaClient } from '@gheima/sdk';
const gheima = new GheimaClient({
apiKey: process.env.GHEIMA_API_KEY!,
// baseUrl, timeoutMs (30000), maxRetries (2) are all optional
});
// Paginated lists are async-iterable
for await (const service of gheima.services.list()) {
console.log(service.name, service.url);
}
// Create and deploy
const svc = await gheima.services.create({
projectId: 'prj_1',
name: 'web',
repoUrl: 'https://github.com/me/app',
});
const { deploymentId } = await gheima.services.deploy(svc.id);
// Stream logs
for await (const entry of gheima.services.streamLogs(svc.id)) {
console.log(entry.line);
}Ressources du SDK#
Le client expose un namespace par ressource. Méthodes principales :
- account
- get(), usage()
- services
- list(), get(id), create(), update(id), delete(id), deploy(id), deployments(id), rollback(id, deploymentId), restart/pause/resume(id), scale(id), metrics(id), logs(id), streamLogs(id)
- services.env
- list(id), set(id, key, value), remove(id, key)
- databases
- list(), get(id), create(), delete(id), reveal(id), resetPassword(id), query(id, statement)
- databases.snapshots / .branches
- list / create / restore|reset / delete (Postgres)
- storage.buckets
- list(), get(id), create(name), delete(id), setPublic(id, isPublic), reveal(id)
- storage.objects
- list(bucket, prefix?), presign(bucket, key, method?, expiresIn?), presignPut/presignGet, delete(bucket, key), rename(bucket, from, to)
- projects
- list(), get(id), create({ name }), delete(id)
- cron
- list(), get(id), create(), update(id), delete(id), runNow(id), toggle(id, enabled), runs(id)
- domains
- list(serviceId), add(serviceId, domain), verify(domainId), remove(domainId)
- alerts
- list(), create(), update(id), delete(id), events(id)
- webhooks
- list(), get(id), create(), update(id), delete(id), test(id)
- apiKeys
- list(), get(id), createKey(name, scopes?), revoke(id), delete(id)
- activity / previews
- activity.list(); previews.list(), delete(id), toggleAutoCreate(serviceId, enabled)
Pagination#
Les méthodes de liste renvoient un Paginator itérable de façon asynchrone — il parcourt chaque page pour vous. Ce n’est pas une promesse : ne l’attendez pas directement ; itérez-le, ou appelez .all() pour tout collecter, ou .page() pour une seule page.
// one item at a time, across all pages
for await (const db of gheima.databases.list()) console.log(db.name);
// or collect them
const all = await gheima.services.list().all();
// or a single page
const { data, pagination } = await gheima.activity.list().page();Erreurs#
Les appels en échec lèvent une erreur typée qui étend GheimaError (avec status, code, message, details, requestId) :
- GheimaAuthError
- 401 — clé manquante, malformée ou révoquée.
- GheimaForbiddenError
- 403 — authentifié mais non autorisé (portée/rôle).
- GheimaNotFoundError
- 404 — ressource introuvable.
- GheimaConflictError
- 409 — conflit, par ex. un nom déjà utilisé.
- GheimaValidationError
- 422 — entrée invalide ; details liste les champs.
- GheimaRateLimitError
- 429 — limité ; retryAfter donne les secondes à attendre.
- GheimaServerError
- 5xx — échec côté serveur.
import { GheimaRateLimitError, GheimaValidationError } from '@gheima/sdk';
try {
await gheima.services.get('missing');
} catch (e) {
if (e instanceof GheimaRateLimitError) console.log('retry after', e.retryAfter);
else if (e instanceof GheimaValidationError) console.log(e.details);
else throw e;
}✦ Vous pouvez scripter chaque déploiement, suivre les logs et gérer vos ressources depuis votre terminal, avec curl, ou en TypeScript typé — le tout avec une seule clé API.