Aller au contenu principal
ApiGlow v0.3.0
Copier la page

Toute la config, en un bloc.

Toutes les clés qu’ApiGlow accepte, dans la forme que la config prend dans la page, un commentaire par clé. Référence de configuration parcourt la même surface clé par clé — valeurs par défaut, sémantique, règles par spec ; cette page-ci en est la version copiable, en date de la v0.3.0.

config.js
// Le même objet, sans les commentaires, peut vivre inline dans la page en
// JSON strict : <script id="api-doc-config" type="application/json">{ … }</script>
window.API_DOC_CONFIG = {
  openapi: {
    // La seule clé requise : votre schéma, JSON ou YAML, lisible en CORS.
    url: "https://example.com/openapi.json",
    // …ou le schéma porté par la page — aucune requête, aucun CORS ; gagne sur url.
    // spec: { openapi: "3.1.0", … },
    // …ou plusieurs API dans une installation ; presque toutes les clés
    // ci-dessous sont redéclarables par entrée. Gagne sur url.
    // specs: [{ id: "payments", title: "API Paiements", url: "…" }],
    // default: "payments",              // spec affichée à l'arrivée (multi-spec)
    // Masquage documentaire, pas contrôle d'accès — par tag, méthode + chemin,
    // chemin, ou operationId.
    hide: ["tag:Internal", "DELETE /admin/*"],
    // Documents OpenAPI Overlay 1.1 appliqués au schéma au chargement, dans l'ordre.
    overlays: ["/overlays/fix-descriptions.json"],
    // Un correctif de départ amorcé dans l'éditeur d'overlay du lecteur.
    userOverlay: null
  },
  theme: {
    default: "light",                    // thème du premier chargement (défaut "system" : suit l'OS) ; le choix du lecteur prime ensuite
    available: ["light", "dark", "nord"], // entrées du sélecteur — les 35 thèmes daisyUI sont dans le bundle
    custom: [                            // votre thème, sans étape de build (racine uniquement en multi-spec)
      { name: "acme", extends: "dark", tokens: { "--color-primary": "#7c3aed" } }
    ]
  },
  language: {
    default: "browser",                  // suit les langues du navigateur ; ou épinglez un code
    available: ["en", "fr"]              // les langues non actives se téléchargent à la demande
  },
  environments: [                        // pré-remplis au premier chargement ; le stockage du lecteur prime ensuite
    {
      name: "sandbox",
      color: "green",                    // le rouge signale la production d'un coup d'œil
      baseUrl: "https://sandbox.example.com",
      variables: { "auth.bearerAuth": { value: "demo-token", sensitive: true } },
      defaultHeaders: { "X-Client": "docs" }
    }
  ],
  environmentsLocked: false,             // true retire tout point d'entrée de création ou d'édition
  docsPages: [                           // vos guides markdown, tissés dans la nav
    { slug: "premiers-pas", title: "Premiers pas", url: "/docs/premiers-pas.md" },
    { slug: "changelog", title: "Journal des versions", url: "/docs/changelog.md", kind: "changelog" },
    // nav: "bottom" envoie une entrée de premier niveau en zone d'annexe, sous la référence.
    { slug: "support", title: "Support", url: "/docs/support.md", nav: "bottom" }
  ],
  announcements: [                       // un bandeau au-dessus de l'en-tête — ou "/news.json", un fichier que vos ops éditent
    { id: "v2", text: "**La v2 est là** — voir le [guide de migration](/migrate).", level: "info" },
    { text: "Maintenance dimanche, 02:00–06:00 UTC.", level: "warning", dismissible: false,
      startsAt: "2026-09-01T00:00:00Z", endsAt: "2026-09-07T06:00:00Z" }
  ],
  feedback: {
    url: null                            // votre endpoint pour « Cette page vous a-t-elle été utile ? » — null retire la ligne
  },
  scenarios: [                           // scénarios exécutables livrés avec la doc
    { id: "premiere-commande", title: "Commander un animal", url: "/scenarios/premiere-commande.json", pinned: true }
  ],
  features: {
    scenarios: true,                     // false retire la fonctionnalité en entier
    audit: true,                         // false retire l'audit de schéma
    onboarding: false,                   // true ajoute la page « Premier appel » générée (#/first-call)
    ci: true                             // false retire le panneau « Automatiser ce scénario »
  },
  audit: {                               // configuration des règles, lue par #/audit comme par `apiglow audit`
    rules: { "property-described": "off" },   // identifiant de règle → "error" | "warning" | "info" | "off"
    overrides: [                         // la même chose, sous des motifs de pointeurs JSON — la dernière l'emporte
      { paths: ["/paths/~1legacy~1*"], rules: { "response-example": "off" }, reason: "frozen legacy API" }
    ]
  },
  branding: {
    productName: "API Acme",             // nom dans l'en-tête
    logoUrl: "/logo.svg"                 // logo dans l'en-tête
  },
  tryIt: {
    proxyUrl: null,                      // proxy CORS optionnel que vous hébergez — "{{target}}" = URL cible encodée
    requestCredentials: "same-origin"    // "include" pour l'auth par cookie de session cross-origin
  },
  history: {
    maxEntries: 500,                     // purge au-delà de ce nombre…
    maxAgeDays: 30                       // …ou de cet âge (racine uniquement en multi-spec)
  },
  oauth: {
    // Clé = le nom du scheme dans securitySchemes. Jamais de client secret.
    acme_auth: { clientId: "public-client-id" }
  },
  seo: {
    index: true                          // false injecte un noindex robots avant le premier rendu (racine uniquement)
  }
}

Seule openapi.url, spec ou specs est requise : supprimez toute ligne qui ne vous sert pas, l’app appliquera ses valeurs par défaut. Le builder assemble le même objet dans un formulaire, audite le thème qu’il écrit, et vous rend les deux balises d’installation.