Référence de configuration
Chaque clé de flexway.yaml, chaque type de politique, chaque extension du contrat et l'option gRPC de Flexway v1.7.1, lus dans le schéma JSON que la version publie : type, valeurs admises, défaut, bornes, version d'arrivée, rechargement.
Valider dans l'éditeur
Une ligne en tête de flexway.yaml suffit aux éditeurs qui utilisent yaml-language-server : ils complètent les clés, affichent leur description et soulignent une faute à l'écriture - clé inconnue, valeur hors liste, durée mal écrite - plutôt qu'au démarrage.
# yaml-language-server: $schema=https://flexway.io/schema/v1/flexway.schema.json
version: 1Les schémas de la version publiée (JSON Schema 2020-12), servis à leur identifiant :
https://flexway.io/schema/v1/architecture.schema.jsonhttps://flexway.io/schema/v1/contract-extensions.schema.jsonhttps://flexway.io/schema/v1/flexway.schema.jsonhttps://flexway.io/schema/v1/policy-fragment.schema.json
Le schéma décrit ; flexway validate décide. Ce qui croise plusieurs fichiers - un amont pour chaque opération du contrat, une politique nommée qui n'existe pas - n'est vérifié que par flexway validate et au démarrage : gardez-le dans la CI.
390 clés
flexway.yaml
Le fichier de configuration de la passerelle : il dit comment servir, jamais quoi. Il ne liste aucune opération - il référence les contrats et décrit les amonts, hôtes, identités et politiques. Décodage strict : une clé inconnue est refusée, et tous les problèmes sont rapportés d'un coup.
agents
Ce que les agents atteignent : la surface MCP, les bornes des chaînes de délégation et la gouvernance A2A. Aucun outil n'est listé ici : une opération devient un outil dans le contrat (x-flexway-tool).
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.a2a
La part du déploiement dans la gouvernance A2A : ce que les cartes d'agents déclarées (contracts.a2a) ne disent pas.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
agents.a2a.push
Garde des cibles de notification push qu'un appelant confie à un agent amont. Absente ou vide : toute configuration de notification push est refusée - fermé par défaut.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
agents.a2a.push.allowed_hosts
Noms d'hôtes qu'une notification push peut viser : nom exact ou *.domaine pour ses sous-domaines, chacun avec un :port facultatif, en minuscules. Jamais une adresse IP, ni * seul, ni localhost ; une entrée en double est refusée.
- Type
list<string>- Depuis
- 1.2.0
- Rechargement
- à chaud
agents.delegation
Borne les chaînes d'agents agissant pour une personne (claim act de la RFC 8693) et permet à une révocation de les rompre. Absent : un jeton délégué est accepté comme un autre. Présent, chaque émetteur de auth.issuers doit déclarer client, pour l'introspection.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.delegation.introspection
Comment une révocation est vue : les jetons délégués sont introspectés auprès de leur émetteur (RFC 7662).
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.delegation.introspection.cache
Durée de réutilisation d'une réponse d'introspection - le plus long délai pendant lequel une chaîne révoquée fonctionne encore. Durée (10s) ; défaut 10s.
- Type
string- Défaut
10s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.delegation.max_age
Âge maximal d'une chaîne, compté depuis l'authentification de la personne (auth_time, sinon iat). Durée (15m) ; défaut 15m. Un contrat peut le resserrer par opération, jamais l'élargir.
- Type
string- Défaut
15m- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.delegation.max_depth
Nombre d'agents qu'une chaîne peut contenir. Entier positif ou nul ; 0 n'accepte aucun jeton délégué ; défaut 2. Un contrat peut le resserrer par opération, jamais l'élargir.
- Type
integer- Défaut
2- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp
Surface Model Context Protocol : où elle est servie et pour quelle ressource. Les opérations marquées x-flexway-tool y sont offertes en outils sous la même décision que REST ; le jeton reçu n'est jamais relayé à l'amont.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.clients
Quand il est renseigné, seuls clients OAuth admis sur la surface, nommés par l'URL de leur document de métadonnées client : URL https exacte, ou préfixe se terminant par /*. Absent : tout client.
- Type
list<string>- Depuis
- 1.0.0
- Rechargement
- à chaud
agents.mcp.path
Chemin où la surface MCP répond, sur chaque hôte de resources. Chemin littéral commençant par /, sans {, } ni * ; défaut /mcp.
- Type
string- Défaut
/mcp- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.resources
Associe chaque hôte qui sert la surface à son URL publique - l'audience qu'un jeton doit porter pour y être accepté (RFC 8707). URL absolue https (http pour localhost seulement), sans requête ni fragment, terminée par path. Obligatoire et non vide ; déclarée, jamais déduite de la requête.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers
Serveurs MCP existants dont les outils sont servis aussi par la surface (fédération), sous leurs noms d'origine, avec l'autorisation, le quota et les métriques de la passerelle. La clé nomme le serveur.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.discovery
Comment les outils du serveur sont listés. La découverte tourne en arrière-plan et ne bloque jamais le démarrage.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.discovery.issuer
Nom d'un émetteur de auth.issuers, doté d'un client, dont la passerelle obtient un jeton client_credentials pour lister les outils - pour un serveur qui exige un jeton même pour cela. Absent : listés anonymement.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.discovery.refresh
Fréquence à laquelle les outils sont listés à nouveau. Durée (5m) ; défaut 5m.
- Type
string- Défaut
5m- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.hosts
Surfaces MCP (hôtes de agents.mcp.resources) qui servent ce serveur. Vide : toutes les surfaces.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.rate_classes
Classe de débit d'un outil, par nom d'origine (outil servi). Sinon read quand le serveur annonce l'outil en lecture seule, write autrement.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.rename
Donne à un outil un autre nom sur la surface, par nom d'origine - contre une collision par exemple. L'outil doit figurer dans tools.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.scopes
Portées exigées pour chaque outil du serveur. Vide : un appelant authentifié suffit.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.tool_scopes
Remplace scopes pour un outil, par nom d'origine ; l'outil doit figurer dans tools.
- Type
map<list<string>>- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.toolsobligatoire
Outils servis : une liste de noms déclarée - le choix fermé par défaut - ou "*" pour tout ce que le serveur annonce, choisi explicitement. Obligatoire.
- Type
"*" | list<string>- Valeurs admises
*- Depuis
- 0.1.0
- Rechargement
- à chaud
agents.mcp.servers.*.upstreamobligatoire
Nom d'un amont de upstreams de protocol: mcp : où est le serveur, avec le pool, les budgets, le coupe-circuit, le cloisonnement et l'échange de jeton qui vont avec. Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai
Surface d'inférence /v1/* (compatible OpenAI) servie par le plan de données, routée par politique vers des backends, sous des budgets de tokens et d'euros par tenant. Absente : non servie. Aucun contrat à écrire : ses opérations sont intégrées.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends
Backends d'inférence, par nom. Au moins un. Un backend se déclare par genre (kind), capacités, authentification et mesure ; aucun fournisseur n'est nommé : un fournisseur est une URL, une authentification et un prix.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.api_keysecret
Clé du backend, envoyée en jeton Bearer - une référence (${VAR} ou file:/chemin), lue à chaque usage. Vide pour un backend interne sans clé. Exclusive de auth (équivaut à auth: { scheme: bearer, key: ... }).
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.auth
Comment la passerelle s'authentifie auprès du backend, un seul schéma. Absent : api_key en jeton Bearer, sinon aucune.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.auth.header
Nom de l'en-tête qui porte la clé : schéma header seulement, et alors obligatoire.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.auth.keysecret
Clé envoyée, par référence (${VAR} ou file:/chemin), relue à chaque appel : schémas bearer et header. Jamais une clé en clair.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.auth.path
Fichier d'où un jeton de courte durée est lu à chaque appel, tel qu'une identité de charge de travail le projette ; envoyé en jeton Bearer. Schéma token_file seulement, et alors obligatoire.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.auth.schemeobligatoire
Schéma d'authentification : none (rien), bearer (Authorization: Bearer <key>), header (la clé dans l'en-tête header), token_file (un jeton lu dans path). Obligatoire dans auth.
- Type
string- Valeurs admises
nonebearerheadertoken_file- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.capabilities
Ce que sert le backend : chat, vision (sert aussi le texte), embeddings, model (modèle spécialisé d'un backend grpc seulement). Sans doublon. Vide : chat, ou model pour un backend grpc.
- Type
list<string>- Valeurs admises
chatvisionembeddingsmodel- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.default_model
Modèle servi quand l'appelant n'en demande pas un de models. Obligatoire, sauf pour un relay (la passerelle relayée choisit) et un grpc.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.external
Marque un tiers : une requête sensible n'y va jamais. Booléen ; non renseigné : false, sauf pour un relay, externe tant que l'exploitant ne déclare pas external: false.
- Type
boolean- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.fallback
Backends essayés tour à tour quand celui-ci échoue avant de répondre (connexion, 5xx, délai, coupe-circuit ouvert), chacun une fois ; jamais sur un 4xx, ni après le premier octet d'un flux, ni vers un externe pour une requête sensible. Noms de ai.backends, sans lui-même, sans doublon, jamais un grpc.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.identity_headers
Noms d'en-têtes sous lesquels un backend relay reçoit le tenant, l'agent et la sensibilité de l'appel - ceux que l'autre passerelle déclare dans auth.trusted_headers et ai.sensitive_header. Réservé au genre relay, où tenant est obligatoire.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.identity_headers.agent
Nom de l'en-tête qui porte l'agent appelant vers le relais. Facultatif.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.identity_headers.sensitive
Nom de l'en-tête qui porte la sensibilité de l'appel vers le relais. Facultatif.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.identity_headers.tenant
Nom de l'en-tête qui porte le tenant réel de l'appel vers le relais. Obligatoire pour un relay : la passerelle relayée doit voir le vrai tenant, pas un seul appelant.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.kind
Genre du backend : openai (toute API compatible OpenAI, défaut), relay (une autre Flexway, parlée en OpenAI avec l'identité de l'appel sous des en-têtes déclarés), grpc (modèle spécialisé servi par une méthode d'un contrat gRPC, jamais une cible de /v1/*).
- Type
string- Valeurs admises
openairelaygrpc- Défaut
openai- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.metering
Qui compte le coût : local (défaut, cette passerelle compte et plafonne) ou upstream (la passerelle relayée compte ; celle-ci applique toujours son propre plafond local). upstream est refusé sur un backend openai.
- Type
string- Valeurs admises
localupstream- Défaut
local- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.models
Modèles qu'un appelant peut demander par leur nom ; tout autre est servi par default_model. Aucune entrée vide.
- Type
list<string>- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.price
Prix d'un million de tokens, en euros, entrée et sortie à part ; 0 est un prix. Obligatoire dès qu'un budget est compté en euros (sauf backend grpc ou mesuré en amont).
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.price.input_per_mtok
Prix en euros d'un million de tokens d'entrée. Nombre positif ou nul.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.price.output_per_mtok
Prix en euros d'un million de tokens de sortie. Nombre positif ou nul.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.backends.*.tls
TLS client vers le backend - le TLS mutuel d'un relais -, comme celui d'un amont. Ignoré tant que l'URL n'est pas https://.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.tls.ca_file
Fichier PEM des autorités qui vérifient le certificat du backend. Absent : les autorités du système.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.tls.cert_file
Certificat client PEM présenté au backend ; va avec key_file.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.tls.key_file
Clé privée PEM du certificat client ; va avec cert_file.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.tls.server_name
Nom attendu dans le certificat du backend (SNI), quand il diffère de l'hôte de l'URL.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.upstream
Pour un backend grpc seulement, et alors obligatoire : nom d'un amont de protocol: grpc qui sert ses méthodes. Un tel backend ne porte ni url, ni modèle, ni authentification, ni prix : ceux de ses méthodes (x-flexway-ai).
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.backends.*.url
Adresse du backend : URL absolue http ou https (par exemple https://api.provider.example/v1). Obligatoire, sauf pour un backend grpc.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget
Budget d'inférence par tenant, compté dans un cache partagé compatible Redis (Redis, Dragonfly ou Valkey), commun à toutes les répliques.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.daily_tokens
Tokens par tenant et par jour UTC. Entier positif ou nul ; 0 : aucun budget journalier.
- Type
integer- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.monthly_eur
Budget par tenant en euros sur le mois civil, au prix déclaré de chaque backend. Nombre positif ou nul ; 0 : aucun. Exige price sur les backends.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.monthly_tokens
Tokens par tenant et par mois civil UTC. Entier positif ou nul ; 0 : aucun budget mensuel.
- Type
integer- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.soft
Plafond souple : passé at du budget en euros, la passerelle prévient (Flexway-Budget: soft, métrique, journal) et route vers backend s'il est renseigné. Exige un budget en euros (monthly_eur ou celui d'une surcharge).
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.soft.at
Part du budget en euros au-delà de laquelle le plafond souple s'applique : nombre dans ]0, 1] (par exemple 0.8).
- Type
number- Bornes
- valeur ≥ 0, ≤ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.soft.backend
Backend de ai.backends vers lequel basculer au-delà du plafond souple - sauf une requête sensible, qui reste épinglée. Jamais un grpc. Absent : prévenir seulement.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.budget.store
Cache des compteurs de budget : redis://hôte:port (ou rediss://), ou une référence (${VAR}, file:/chemin) dès qu'il porte un mot de passe. Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.default_backend
Backend de ai.backends qui sert un appel qu'aucune surcharge ne route ailleurs. Obligatoire ; un backend openai ou relay, jamais grpc.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides
Routent ou budgètent autrement un tenant, ou un agent de ce tenant ; la première qui correspond gagne. Une surcharge qui nomme une capacité ne fait que router, jamais budgéter.
- Type
list<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.backend
Backend de ai.backends qui sert les appels concernés ; jamais un grpc. Obligatoire quand match.capability est renseigné, et ce backend doit servir la capacité.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.daily_tokens
Budget journalier en tokens du tenant concerné, à la place de ai.budget.daily_tokens. Entier positif ou nul ; interdit avec match.capability.
- Type
integer- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.match
Ce qui sélectionne les appels : un tenant, un agent de ce tenant, une capacité.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.match.agent
Agent appelant (le sujet de l'appel) à qui la surcharge s'applique, au sein de tenant.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.match.capability
Capacité demandée : chat, vision ou embeddings. Une telle surcharge route seulement : elle exige backend et refuse tout budget.
- Type
string- Valeurs admises
chatvisionembeddings- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.overrides.*.match.tenant
Tenant à qui la surcharge s'applique.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.monthly_eur
Budget mensuel en euros du tenant concerné, à la place de ai.budget.monthly_eur. Nombre positif ou nul ; exige price sur les backends ; interdit avec match.capability.
- Type
number- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.overrides.*.monthly_tokens
Budget mensuel en tokens du tenant concerné, à la place de ai.budget.monthly_tokens. Entier positif ou nul ; interdit avec match.capability.
- Type
integer- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security
Identités que /v1/* accepte, dont une seule suffit - comme security dans un contrat. Liste non vide ; chaque entrée nomme exactement un mécanisme : trusted_headers, oidc, api_key ou mtls.
- Type
list<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.api_key
Accepte une clé d'API ({}). Exige auth.api_keys.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.mtls
Accepte un certificat client déclaré ({}). Exige auth.mtls.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.oidc
Accepte un jeton d'un émetteur de auth.issuers, avec les portées et rôles exigés. Exige au moins un émetteur.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.oidc.roles
Rôles que le jeton doit porter (lus par roles_claim de son émetteur).
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.oidc.scopes
Portées que le jeton doit porter.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.security.*.trusted_headers
Accepte l'identité écrite par un pair de confiance dans les en-têtes de auth.trusted_headers ({}), crue d'un pair de server.trusted_proxies seulement. Exige auth.trusted_headers.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.sensitive_backend
Backend interne de ai.backends où une requête sensible est épinglée. Un backend externe ou grpc est refusé ; sans lui, une requête sensible est refusée (403), jamais envoyée à un externe.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.sensitive_header
En-tête qui, mis à true par l'appelant, épingle la requête sur sensitive_backend. Cru de tout appelant : il ne peut que resserrer le routage. Nom d'en-tête (lettres, chiffres, -).
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
ai.vision
Bornes des images d'une complétion de chat. Absent : les défauts, et seules les images data: en ligne sont acceptées.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.vision.allowed_origins
Origines (https://hôte[:port], sans chemin) depuis lesquelles une image peut être donnée par URL. Vide : images data: en ligne seulement. La passerelle ne les télécharge jamais : le backend le fait.
- Type
list<string>- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.vision.max_body_bytes
Borne du corps d'une complétion qui porte des images. Taille (24MiB, ou un nombre d'octets) ; défaut 24MiB. Une complétion sans image garde server.limits.max_body. Au moins max_image_bytes.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.5.0
- Rechargement
- à chaud
ai.vision.max_image_bytes
Borne d'une image, une fois décodée. Taille (8MiB, ou un nombre d'octets) ; défaut 8MiB.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.5.0
- Rechargement
- à chaud
audit
Journal d'audit chaîné des décisions d'autorisation du plan API : chaque entrée est liée à la précédente par une empreinte, ce qui rend une réécriture visible.
- Type
object- Depuis
- 1.0.0
- Rechargement
- à chaud
audit.decisions
Décisions enregistrées : all (toutes) ou refusals (les refus seulement). Absente ou vide : aucune décision n'est enregistrée.
- Type
string- Valeurs admises
allrefusals- Depuis
- 1.0.0
- Rechargement
- à chaud
audit.keyredémarrage
Clé HMAC de la chaîne et de l'empreinte du sujet, par référence (${VAR} ou file:/chemin), jamais en clair. Sans elle, qui peut écrire tout le flux peut le réécrire et recalculer chaque empreinte. Lue une seule fois au démarrage.
- Type
string- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
auth
Comment une identité est vérifiée - jamais ce qu'une opération exige, que le contrat déclare (security) : émetteurs de jetons, clés d'API, certificats clients, en-têtes de confiance.
- Type
object- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.api_keys
Clés d'API des appelants, une identité - jamais une autorisation : ce qu'une opération exige reste au contrat (schéma apiKey). La clé ne satisfait que l'alternative qui la nomme et n'ouvre que ses opérations liées.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.api_keys.storeobligatoire
Fichier des empreintes des clés : file: suivi d'un chemin, relatif au fichier de configuration sauf s'il est absolu, monté depuis un secret. Jamais une clé en clair ; relu à chaque rechargement - retirer une entrée révoque la clé.
- Type
string- Motif
^file:.+- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.issuers
Fournisseurs de jetons de confiance (OIDC), plusieurs à la fois : un client en a souvent un pour ses employés et un autre pour ses utilisateurs finaux. Deux entrées ne peuvent désigner le même émetteur.
- Type
list<object>- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.algorithms
Algorithmes de signature acceptés. Défaut : la famille asymétrique (RS256 à RS512, PS256 à PS512, ES256 à ES512, EdDSA). none et la famille HMAC (HS*) sont refusés au chargement.
- Type
list<string>- Défaut
["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512","EdDSA"]- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.audience
Audience pour laquelle un jeton doit être émis, vérifiée avec l'émetteur. Obligatoire sauf si audiences est utilisé ; exclusive de audiences.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.audiences
À la place de audience, accepte un jeton émis pour l'une d'elles - le temps qu'une API renomme son audience. Aucune entrée vide ; exclusive de audience.
- Type
list<string>- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.client
Client de la passerelle chez cet émetteur : pour échanger un jeton d'appelant contre un jeton émis pour un amont (RFC 8693), introspecter des jetons opaques ou délégués, obtenir un jeton de découverte. Obligatoire dès qu'un amont déclare token_exchange ou que agents.delegation est présent.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.issuers.*.client.idobligatoire
Identifiant du client de la passerelle chez l'émetteur. Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.issuers.*.client.secretobligatoiresecret
Secret du client, par référence (${VAR} ou file:/chemin), résolu à chaque usage : une rotation est lue sans rechargement. Jamais une valeur en clair.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 0.1.0
- Rechargement
- à chaud
auth.issuers.*.discoveryobligatoire
URL du document de découverte du fournisseur, terminée par /.well-known/openid-configuration. URL absolue http(s) ; obligatoire. L'identifiant de l'émetteur en est déduit, sauf si issuer le donne.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.issuer
Identifiant que le fournisseur énonce, quand il diffère de l'URL de découverte - un fournisseur joint en interne sous un nom et annonçant son nom public (horizon partagé). URL absolue http(s) ; le document de découverte et chaque jeton doivent énoncer exactement cette valeur. Absent : déduit de discovery.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.issuers.*.nameobligatoire
Nom de l'émetteur dans les journaux et les métriques, unique. Obligatoire ; apikey et mtls sont réservés.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.opaque_tokens
Fait de cet émetteur celui qui répond des jetons qui ne sont pas des JWT : ils sont introspectés (RFC 7662) avec client, qui est alors obligatoire. Un seul émetteur au plus : un jeton opaque ne nomme aucun émetteur.
- Type
object- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.opaque_tokens.cache
Durée de réutilisation d'une réponse d'introspection - le délai avant qu'une révocation soit vue -, jamais au-delà de l'exp du jeton. Durée de 1s à 5m ; défaut 30s.
- Type
string- Défaut
30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.roles_claim
Chemin pointé de la claim qui porte les rôles (realm_access.roles pour Keycloak, roles pour Entra ID). Absent : aucun rôle ne peut être satisfait pour cet émetteur.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.scopes_claim
Claim qui porte les portées. Défaut scope (séparées par des espaces), puis scp.
- Type
string- Défaut
scope- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.issuers.*.service_accounts
Comment ce fournisseur marque un jeton émis à un client agissant pour lui-même, quand son sujet n'est pas l'identifiant du client (Keycloak : preferred_username = service-account-<client>). claim et prefix sont obligatoires.
- Type
object- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.service_accounts.claimobligatoire
Claim qui marque un compte de service (par exemple preferred_username). Obligatoire.
- Type
string- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.service_accounts.prefixobligatoire
Préfixe de la valeur de claim qui marque un compte de service, suivi de l'identifiant du client (par exemple service-account-). Obligatoire et non vide : un préfixe vide marquerait tous les jetons.
- Type
string- Depuis
- 1.0.0
- Rechargement
- à chaud
auth.issuers.*.tenant_claim
Nom de la claim qui porte le tenant. Absente : les requêtes de cet émetteur n'en portent aucun.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.mtls
Certificats clients reconnus par la passerelle - une identité, exigée par un schéma mutualTLS du contrat. Vérifiés par l'écouteur TLS (server.tls) ou attestés par l'en-tête x-forwarded-client-cert d'un edge de confiance.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients
Certificats reconnus, chacun lié à un tenant et à des opérations.
- Type
list<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients.*.idobligatoire
Nom du certificat dans les journaux et les métriques, unique. Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients.*.operations
Identifiants d'opération (operationId) que ce certificat ouvre - et seulement eux. Obligatoire et non vide.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients.*.subject
Sujet du certificat (par exemple CN=batch,O=Acme). Exactement un de uri ou subject.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients.*.tenantobligatoire
Tenant auquel le certificat est lié. Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.mtls.clients.*.uri
Premier SAN URI du certificat (un identifiant SPIFFE par exemple, spiffe://bank.example/settler). Exactement un de uri ou subject.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.tenant_header
En-tête où le tenant résolu est écrit vers l'amont ; ce qu'un appelant a envoyé sous ce nom est écrasé. Nom d'en-tête (lettres, chiffres, -). Vide : le tenant n'est pas propagé (il reste une dimension des métriques).
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
auth.trusted_headers
En-têtes où un pair de confiance - une entrée de maillage qui a authentifié l'appelant - écrit l'identité. Crus d'un pair de server.trusted_proxies seulement, qui est alors obligatoire ; refusés avec server.peer_identity_header. Les noms sont ceux du déploiement.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.trusted_headers.subject
Nom de l'en-tête qui porte le sujet (l'agent appelant). Facultatif ; nom d'en-tête.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
auth.trusted_headers.tenant
Nom de l'en-tête qui porte le tenant. Obligatoire ; nom d'en-tête (lettres, chiffres, -).
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
contracts
Les fichiers qui portent l'ensemble servi : le contrat est la configuration. Au moins un des contrats est requis (openapi, protobuf, a2a ou asyncapi), sauf pour une passerelle qui ne sert que la surface d'inférence (ai). Chemins relatifs au fichier de configuration, lus sur disque au chargement, sans accès réseau.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
contracts.a2a
Cartes d'agent A2A déclarées (fichiers JSON .json) : chaque méthode d'un agent est une opération, servie aux adresses de sa carte et relayée vers l'amont que nomme son x-flexway-a2a. Chaque entrée une seule fois, jamais vide.
- Type
list<string>- Depuis
- 1.2.0
- Rechargement
- à chaud
contracts.asyncapi
Document AsyncAPI 3 (.yaml, .yml ou .json) : ses opérations send et receive forment le plan asynchrone - publications atteintes par les opérations OpenAPI marquées x-flexway-publish, consommations par x-flexway-subscribe, livraisons webhook déclarées par x-flexway-deliver.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
contracts.openapi
Contrat OpenAPI par défaut : servi sur chaque hôte qui ne déclare pas ses propres contracts, et sur tout hôte non déclaré. Facultatif dès qu'un hôte déclare les siens.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
contracts.protobuf
Jeux de descripteurs Protobuf (FileDescriptorSet, imports compris - buf build ou protoc avec ses imports), extensions .binpb, .pb ou .protoset, servis à côté de l'OpenAPI sur les mêmes hôtes : chaque méthode de chaque service déclaré est une opération.
- Type
list<string>- Depuis
- 1.1.0
- Rechargement
- à chaud
errors
Forme des documents d'erreur RFC 9457 des routes produit. La surface d'inférence /v1/* garde l'enveloppe OpenAI.
- Type
object- Depuis
- 1.0.0
- Rechargement
- à chaud
errors.field_codes
Renomme le code d'une erreur de champ (errors[].code d'une réponse 422) : un mot-clé JSON Schema qu'une requête peut enfreindre (required, type, enum, pattern, minLength...) ou invalid, vers un jeton du client (lettres, chiffres, _ . -, 64 au plus). Un mot-clé non listé garde son nom.
- Type
map<string>- Depuis
- 1.0.0
- Rechargement
- à chaud
errors.type_base
Espace de noms du champ type des erreurs : une URL http(s) absolue terminée par /, à laquelle le code est ajouté - le portail du client plutôt que celui du produit. Absent : l'espace de noms par défaut du produit.
- Type
string- Depuis
- 1.0.0
- Rechargement
- à chaud
hosts
Les hôtes servis, par nom (l'autorité de la requête) : chacun regroupe les opérations servies sous ce nom et leur donne un amont par défaut.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
hosts.*.contracts
Contrats OpenAPI que sert cet hôte - exactement leur union, rien du contrat par défaut. Chemins relatifs au fichier de configuration, chacun une seule fois. Absent : le contrat par défaut (contracts.openapi).
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
hosts.*.default_upstream
Amont (nom déclaré dans upstreams) des opérations de cet hôte qui n'en nomment pas par x-flexway-upstream.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
hosts.*.validation
Part d'une requête validée contre le contrat sur cet hôte : full (défaut, tout), params (paramètres seulement, le corps est relayé sans être lu et le service le valide) ou off. Le x-flexway-validation d'une opération l'emporte.
- Type
string- Valeurs admises
fullparamsoff- Défaut
full- Depuis
- 1.0.0
- Rechargement
- à chaud
kms
Le service de gestion de clés du chiffrement par champ sur l'écouteur Kafka : il enveloppe les clés de données que la passerelle tire, sous une clé qui ne le quitte jamais. Exactement un genre est écrit : vault_transit, aws_kms, gcp_kms ou local ; absent, un contrat qui déclare x-flexway-encrypt est refusé au chargement.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.aws_kms
AWS KMS. Sans credentials_file, les identifiants viennent de la chaîne par défaut du SDK (IRSA, rôle d'instance).
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.aws_kms.credentials_filesecret
Chemin d'un fichier d'identifiants partagés AWS monté (pas une valeur) ; le fichier doit exister. Absent : chaîne par défaut du SDK.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
kms.aws_kms.endpoint
Adresse https:// d'un point d'accès KMS autre que celui de la région (point d'accès privé, émulateur). Absent : le point d'accès public de la région.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.aws_kms.profile
Profil à lire dans credentials_file ; refusé si credentials_file n'est pas écrit.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.aws_kms.regionobligatoire
Région AWS de la clé (eu-west-3) ; obligatoire.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.cache
Borne les clés de données gardées déchiffrées en mémoire : en nombre, en durée, et la mémoire d'un refus du KMS.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.cache.max_keys
Nombre de clés de données gardées déchiffrées, partagé entre tenants ; de 1 à 1 000 000, défaut 10000.
- Type
integer- Défaut
10000- Bornes
- valeur ≥ 1, ≤ 1000000
- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.cache.negative_ttl
Durée pendant laquelle un refus du KMS est retenu avant de redemander ; de 100ms à 5m, défaut 5s. Un effacement de clé prend effet au plus après ttl + negative_ttl.
- Type
string- Défaut
5s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.cache.ttl
Durée de vie d'une clé de données déchiffrée en mémoire, comptée depuis son déchiffrement ; la clé d'écriture est revérifiée au KMS à chaque ttl. De 1s à 24h, défaut 1h.
- Type
string- Défaut
1h- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.gcp_kms
Google Cloud KMS. Sans credentials_file, les identifiants par défaut de l'application (Workload Identity).
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.gcp_kms.credentials_filesecret
Chemin d'une clé de compte de service monté (pas une valeur) ; le fichier doit exister. Absent : identifiants par défaut de l'application.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
kms.gcp_kms.endpoint
Point d'accès de Cloud KMS autre que le public ; absent : cloudkms.googleapis.com.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.keyobligatoire
La clé du KMS qui enveloppe les clés de données : clé transit Vault, identifiant, ARN ou alias AWS, nom de ressource projects/<p>/locations/<l>/keyRings/<r>/cryptoKeys/<k> pour GCP, fichier de clé en local. {tenant} en fait une clé par tenant (détruire la clé efface les champs de ce seul tenant). Lettres, chiffres et . _ : / @ + = , - ; une clé Vault ou locale est un seul nom, sans / ni :. Obligatoire, vérifiée au démarrage.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.local
Clés dans des fichiers d'un répertoire monté : tests et développement seulement.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.local.dirobligatoire
Répertoire des fichiers de clés ; obligatoire, il doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.previous_keys
Anciennes valeurs de key qu'un enregistrement peut encore nommer : lues, jamais écrites ; un enregistrement qui nomme une autre clé est refusé. Même syntaxe que key, {tenant} compris ; 8 au plus, sans doublon ni key elle-même.
- Type
list<string>- Bornes
- éléments ≤ 8
- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.rotation
Quand une nouvelle clé de données commence : après interval ou max_encryptions champs chiffrés, au premier atteint.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.rotation.interval
Durée d'usage d'une clé de données avant la suivante ; de 1m à 168h (7 jours), défaut 1h.
- Type
string- Défaut
1h- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.rotation.max_encryptions
Nombre de champs chiffrés sous une même clé de données avant la suivante ; de 1 à 2^30 (1 073 741 824), défaut 5000000.
- Type
integer- Défaut
5000000- Bornes
- valeur ≥ 1, ≤ 1073741824
- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.tenant_calls
Seau à jetons des appels au KMS que causent les enregistrements d'un tenant : un producteur qui épuise le sien n'entame jamais celui d'un autre tenant.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.tenant_calls.burst
Appels au KMS permis d'un coup pour un tenant ; au moins 1, défaut 20.
- Type
integer- Défaut
20- Bornes
- valeur ≥ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.tenant_calls.rate
Appels au KMS par seconde pour un tenant ; plus de 0, défaut 10.
- Type
number- Défaut
10- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.timeout
Délai d'un appel au KMS, qui retient la requête Kafka qui en a besoin ; plus de 0 et 30s au plus, défaut 2s. KMS indisponible : KAFKA_STORAGE_ERROR, jamais un clair.
- Type
string- Défaut
2s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit
Le moteur transit de Vault, clé dérivée (son contexte lie le tenant et le sujet). Authentification par token ou par kubernetes, l'une des deux.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.addressobligatoire
Adresse absolue de Vault en https:// (https://vault.security:8200), sans identifiants ni paramètres ; http:// est refusé : le jeton circulerait en clair. Obligatoire.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.kubernetes
Méthode d'authentification Kubernetes de Vault : le jeton du compte de service du pod, pour un rôle. Exclusive de token.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.kubernetes.mount
Chemin de la méthode d'authentification Kubernetes dans Vault ; défaut kubernetes.
- Type
string- Défaut
kubernetes- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.kubernetes.roleobligatoire
Rôle Vault demandé avec le jeton du compte de service ; obligatoire.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.kubernetes.token_filesecret
Fichier du jeton du compte de service ; défaut /var/run/secrets/kubernetes.io/serviceaccount/token.
- Type
string- Défaut
/var/run/secrets/kubernetes.io/serviceaccount/token- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.mount
Chemin du moteur transit dans Vault ; segments de lettres, chiffres, ., _, - séparés par /. Défaut transit.
- Type
string- Défaut
transit- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.namespace
Espace de noms Vault (Vault Enterprise) ; facultatif.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tls
TLS client vers Vault : autorité de confiance, certificat client, nom attendu.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tls.ca_file
Fichier PEM de l'autorité qui vérifie le certificat du serveur ; absent : les autorités du système. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tls.cert_file
Certificat client PEM présenté à Vault ; va avec key_file. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tls.key_file
Clé privée PEM du certificat client ; va avec cert_file. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tls.server_name
Nom attendu dans le certificat de Vault, quand il diffère de l'hôte de address.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
kms.vault_transit.tokensecret
Jeton Vault par référence, ${VAR} ou file:/chemin, relu à chaque appel ; jamais la valeur. Exclusif de kubernetes.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
listeners
Les points d'entrée de la passerelle à côté de HTTP.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka
L'écouteur Kafka : producteurs, consommateurs et outils d'administration Kafka atteignent les clusters virtuels que le contrat AsyncAPI déclare (x-flexway-kafka-proxy), sous la même décision que HTTP. Rien ici ne liste un sujet : le contrat le fait. Un port TLS, le courtier nommé par le SNI du client (address), ou des ports en clair dans un maillage (plaintext) ; exige contracts.asyncapi.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.addressredémarrage
Adresse hôte:port de l'écouteur TLS (:9093) ; exige tls et sni_domain. Absente : ports en clair seulement. Lue une fois au démarrage.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.advertised_portredémarrage
Port écrit dans les adresses de courtier données au client (Metadata, FindCoordinator) : celui qu'expose un répartiteur de charge. De 1 à 65535 ; absent : le port d'address. Seulement avec address.
- Type
integer- Bornes
- valeur ≥ 1, ≤ 65535
- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.auth_timeout
Délai absolu dont dispose une connexion pour s'authentifier ; plus de 0 et 1m au plus, défaut 10s.
- Type
string- Défaut
10s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.idle_timeout
Ferme une connexion qui n'a rien envoyé pendant cette durée (connections.max.idle.ms de Kafka) ; 1s au moins, défaut 10m.
- Type
string- Défaut
10m- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_connection_rate_per_tenant
Connexions qu'un tenant ouvre par seconde, comptées à l'authentification (seau d'une seconde) : un client qui se reconnecte en boucle coûte les places de son tenant, jamais celles des autres. De 0 (sans borne) à 100000, défaut 100.
- Type
number- Défaut
100- Bornes
- valeur ≥ 0, ≤ 100000
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_connectionsredémarrage
Connexions clientes ouvertes à la fois ; au-delà, une nouvelle attend d'être acceptée. De 1 à 100000, défaut 4096.
- Type
integer- Défaut
4096- Bornes
- valeur ≥ 1, ≤ 100000
- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.max_connections_per_ip
Connexions d'une même adresse cliente ; de 0 (sans borne, derrière un proxy qui masque les adresses) à max_connections, défaut 16.
- Type
integer- Défaut
16- Bornes
- valeur ≥ 0
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_connections_per_tenant
Connexions d'un même tenant, comptées à l'authentification ; de 1 à max_connections, défaut 1024.
- Type
integer- Défaut
1024- Bornes
- valeur ≥ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_fetch_wait
Attente maximale d'un Fetch chez le courtier pour des données (son max_wait_ms) ; de 100ms à 5m, défaut 30s.
- Type
string- Défaut
30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_in_flight_bytes
Réponses qu'une connexion garde en mémoire, lues du courtier et pas encore écrites ; au-delà, l'écouteur cesse de lire le courtier (contre-pression, jamais un refus). Taille (64MiB) de 1MiB à max_total_in_flight_bytes, défaut 64MiB.
- Type
integer | string- Défaut
64MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_request_bytes
Taille maximale d'une trame de requête d'un client authentifié, lue en entier avant d'être décodée ; de 64KiB à 100MiB, défaut 16MiB. Avant l'authentification, 64 Kio seulement.
- Type
integer | string- Défaut
16MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_response_bytes
Taille maximale d'une réponse du courtier ; le MaxBytes d'un Fetch est tenu sous sa moitié. De 1MiB à 256MiB, défaut 64MiB ; avec des champs chiffrés, au moins max_request_bytes.
- Type
integer | string- Défaut
64MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_session_lifetime
Durée maximale d'une session quel que soit l'identifiant : un client SASL se réauthentifie avant (KIP-368), une connexion identifiée par certificat est fermée ; une révocation se voit au plus tard alors. De 1m à 24h, défaut 1h.
- Type
string- Défaut
1h- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_tenant_in_flight_bytesredémarrage
Même borne que max_in_flight_bytes, pour toutes les connexions d'un tenant : sa part de max_total_in_flight_bytes ; un tenant qui ne lit pas ne bloque jamais les autres. De max_in_flight_bytes à max_total_in_flight_bytes ; absente : un huitième du total, au moins max_in_flight_bytes. Lue une fois au démarrage.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.max_topic_partitions
Partitions qu'un administrateur peut donner à un sujet (CreateTopics, CreatePartitions) ; de 1 à 10000, défaut 64.
- Type
integer- Défaut
64- Bornes
- valeur ≥ 1, ≤ 10000
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.max_total_in_flight_bytesredémarrage
Réponses en mémoire pour toute la réplique, toutes connexions confondues ; 64GiB au plus, défaut 1GiB. Lue une fois au démarrage.
- Type
integer | string- Défaut
1GiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.max_unauthenticated_connections
Connexions qui n'ont pas encore prouvé leur identité ; au-delà, une nouvelle est fermée aussitôt et les clients authentifiés gardent leurs places. De 1 à max_connections, défaut 256.
- Type
integer- Défaut
256- Bornes
- valeur ≥ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.on_tenant_budget_exceeded
Sort d'une connexion dont la réponse dépasserait max_tenant_in_flight_bytes : wait (défaut) - le courtier n'est plus lu jusqu'à ce que les clients du tenant lisent - ou close - la connexion est fermée aussitôt, pour des tenants dont on ne garantit pas la lecture. Les autres tenants ne sont jamais bloqués.
- Type
string- Valeurs admises
waitclose- Défaut
wait- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.plaintextredémarrage
Repli sans TLS : un port d'amorçage et un port par courtier pour chaque cluster virtuel, seulement là où un maillage chiffre déjà entre pods (mesh_only: true obligatoire). Lu une fois au démarrage.
- Type
object- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.advertised_hostredémarrage
Hôte écrit dans les adresses de courtier données au client : le nom du Service de la passerelle dans le maillage, sans port. Obligatoire.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.clustersredémarrage
Les ports de chaque cluster virtuel, par nom de cluster (un label DNS : minuscules, chiffres, -) ; au moins un.
- Type
map<object>- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.clusters.*.first_node_idredémarrage
Identifiant de nœud du premier courtier : le port from + 1 + i sert le nœud first_node_id + i. Entier positif ou nul, défaut 0.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.clusters.*.portsredémarrage
Plage fermée des ports du cluster : from est l'amorçage, puis un port par courtier jusqu'à to ; 65 ports au plus, jamais partagés avec un autre cluster ni avec address.
- Type
object- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.clusters.*.ports.fromredémarrage
Port d'amorçage du cluster ; de 1 à 65535.
- Type
integer- Bornes
- valeur ≥ 1, ≤ 65535
- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.clusters.*.ports.toredémarrage
Dernier port de la plage, plus grand que from ; 65535 au plus.
- Type
integer- Bornes
- valeur ≥ 1, ≤ 65535
- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.plaintext.mesh_onlyredémarrage
Doit valoir true : affirme qu'un maillage chiffre entre pods. Sans lui, les identifiants d'un client Kafka traverseraient le réseau en clair, et la configuration est refusée.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.quotas
Quotas d'octets et de requêtes par principal vérifié et par tenant, comme un courtier Kafka (KIP-219) : la réponse part aussitôt avec throttle_time_ms, puis la connexion n'est plus lue pendant ce délai. Absent : rien n'est freiné.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.client
Débits de chaque principal vérifié - sujet du jeton, clé d'API, certificat -, jamais le client.id qu'un client se donne. Aucune borne par défaut.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.client.consumer_byte_rate
Octets lus par seconde (réponses Fetch) par principal ; une taille (10MiB), 0 ou absent : sans borne.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.client.producer_byte_rate
Octets produits par seconde (requêtes Produce) par principal ; une taille (10MiB), 0 ou absent : sans borne.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.client.request_rate
Requêtes par seconde par principal, quelle que soit l'API ; nombre positif, 0 ou absent : sans borne.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.max_throttle
Plafond du throttle_time_ms annoncé et du silence qui suit, sous le request.timeout.ms des clients ; de 100ms à 30s, défaut 10s.
- Type
string- Défaut
10s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.quota
Nom d'une politique de type quota de policies.definitions : le budget jour ou mois des Produce du tenant, partagé avec HTTP sous le même nom ; épuisé : POLICY_VIOLATION. Vide : aucun.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.tenant
Débits de tous les principaux d'un même tenant ensemble. Aucune borne par défaut.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.tenant.consumer_byte_rate
Octets lus par seconde par tenant ; une taille, 0 ou absent : sans borne.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.tenant.producer_byte_rate
Octets produits par seconde par tenant ; une taille, 0 ou absent : sans borne.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.tenant.request_rate
Requêtes par seconde par tenant, quelle que soit l'API ; 0 ou absent : sans borne.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.quotas.window
Part d'un débit qu'une rafale peut prendre d'un coup : un seau contient débit x fenêtre ; de 100ms à 10s, défaut 1s.
- Type
string- Défaut
1s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.kafka.sni_domainredémarrage
Domaine DNS sous lequel vivent les noms de courtier (kafka.example.com) : bootstrap.<cluster>.<sni_domain> et broker-<id>.<cluster>.<sni_domain>. Au moins deux labels, en minuscules ; obligatoire avec address.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.tlsredémarrage
Certificat de l'écouteur TLS - un certificat qui couvre *.<cluster>.<sni_domain> pour chaque cluster - et, avec client_ca_file, l'autorité des certificats clients. Obligatoire avec address, refusé sans lui.
- Type
object- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.tls.cert_fileredémarrage
Certificat PEM de l'écouteur ; obligatoire, le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.tls.client_ca_fileredémarrage
Autorité PEM contre laquelle les certificats clients sont vérifiés (identité X509) ; facultative, le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.kafka.tls.key_fileredémarrage
Clé privée PEM du certificat de l'écouteur ; obligatoire, le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
listeners.mqtt
L'écouteur MQTT des appareils : les appareils se connectent en MQTT 5 ou 3.1.1 sur TCP, TLS ou WebSocket et atteignent le courtier du client à travers lui, une connexion au courtier par appareil, chaque paquet sous la même décision que HTTP. Rien ici ne liste un topic : le contrat AsyncAPI le fait (x-flexway-device). Exige contracts.asyncapi.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.address
Adresse hôte:port de l'écouteur (:8883) ; TLS quand tls est renseigné. Lue une seule fois au démarrage.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.advertised_address
Adresse hôte:port où les appareils joignent l'écouteur - celle de l'équilibreur : la failover.server_reference par défaut.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.allow_zero_keepalive
Admet un appareil MQTT 3.1.1 qui ne demande aucun keep-alive (0). false (défaut) : il est refusé (code 0x05), comme celui qui demande plus que max_keepalive - MQTT 3.1.1 ne permet pas d'imposer un keep-alive, et un appareil muet ne serait jamais vu parti. Un appareil MQTT 5 reçoit max_keepalive à la place.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.broker_mesh_only
Admet des courtiers en clair (mqtt://, ws://) quand l'écouteur lui-même est en TLS : le maillage chiffre le saut vers le courtier. false (défaut) : un courtier en clair est refusé au chargement sauf avec mesh_only.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.connect_timeout
Temps laissé à une connexion pour finir TLS et envoyer son CONNECT, et au courtier pour répondre ; plus de 0 et 1m au plus, défaut 5s.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device
Bornes de chaque connexion d'appareil ; le x-flexway-device d'une opération surcharge ses débits.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.burst
Secondes de chaque débit qu'une rafale peut prendre d'un coup ; de 1 à 60, défaut 2.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.bytes_per_second
Octets de charge des PUBLISH d'un appareil par seconde, sous la même contre-pression. 0 : aucune borne. Défaut 512 Kio.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.connect_rate_per_identity
CONNECT d'une identité par seconde ; au-delà 0x9F : un appareil qui se reconnecte en boucle ne s'évince pas lui-même sans fin. 0 : aucune borne. Défaut 1.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_correlation_data_bytes
Octets de la donnée de corrélation d'un PUBLISH ; au-delà 0x95. Défaut 8 Kio.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_filters_per_subscribe
Filtres d'un SUBSCRIBE ; au-delà chacun est refusé 0x97. Défaut 10.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_refusals_per_minute
Paquets refusés d'une connexion en une minute : chaque refus dépense le débit de messages de l'appareil, son audit est échantillonné (une entrée par seconde et par cause), et au-delà de ce nombre l'appareil est déconnecté 0x96. 0 : sans borne. De 0 à 100000, défaut 60.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_sessions_per_identity
Connexions qu'une identité tient à la fois sur un réplica avec sessions: per_client_id ; au-delà une nouvelle est refusée 0x97 (3.1.1 : 0x03). De 1 à max_connections, défaut 10 (ou max_connections s'il est plus bas).
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_subscriptions
Abonnements d'un appareil ; au-delà un filtre est refusé 0x97 (3.1.1 0x80). Défaut 50.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.max_user_properties_bytes
Octets des propriétés utilisateur d'un paquet ; au-delà 0x95. Défaut 8 Kio.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.messages_per_second
PUBLISH envoyés par seconde par un appareil ; au-delà l'écouteur cesse de lire l'appareil (contre-pression, jamais un refus) et garde vivante sa connexion au courtier. 0 : aucune borne. Défaut 100.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.receive_maximum
PUBLISH QoS 1 et 2 en vol d'un appareil, annoncé comme le plus bas de lui et du courtier ; au-delà 0x93. Défaut 100.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.device.sessions
Sessions d'une identité : single (défaut) - client id <tenant>/<identité> au courtier, une seconde connexion évince la première (0x8E) -, ou per_client_id - <tenant>/<identité>/<client id de l'appareil>, pour une identité que plusieurs appareils partagent.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover
Bascule les appareils d'une réplique qui draine ou est pleine vers une autre : MQTT 5 est dirigé, 3.1.1 se reconnecte par l'équilibreur.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.handover_timeout
Temps pendant lequel une réplique qui draine tient la connexion au courtier d'un appareil pour qu'il revienne ailleurs ; au-delà elle se ferme avec le testament. De 0s à 10m, défaut 30s.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.mode
redirect (défaut) : 0x9C (ou 0x9D) et une Server Reference, la connexion au courtier tenue handover_timeout pour que l'appareil revienne par une autre réplique ; off : un arrêt envoie 0x8B et ferme la connexion au courtier avec le testament.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.reason
use_another_server (0x9C, temporaire, défaut) ou server_moved (0x9D, permanent).
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.redirect_above
Part de max_connections, en pourcentage, au-delà de laquelle un CONNECT est redirigé plutôt qu'accepté. Défaut 95.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.server_reference
Où va un appareil redirigé ; défaut advertised_address - un client qui l'ignore se reconnecte au même endroit de toute façon.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.failover.will_delay_on_handover
Vers un courtier MQTT 5, un testament qui ne déclare aucun délai (Will Delay Interval) est écrit avec un délai égal à handover_timeout, et l'expiration de la session au courtier relevée pour le couvrir : le testament survit à une reprise par une autre réplique. La contrepartie : le testament d'un appareil vraiment perdu part jusqu'à handover_timeout plus tard. Sans effet sur un appareil MQTT 3.1.1. Défaut false.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_connection_rate_per_ip
Nouvelles connexions d'une adresse cliente par seconde ; 0 : aucune borne. Défaut 20.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_connection_rate_per_tenant
Nouvelles connexions d'appareils d'un tenant par seconde ; au-delà 0x9F (3.1.1 0x03). 0 : aucune borne. Défaut 100.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_connections
Connexions d'appareils d'une réplique ; au-delà un CONNECT est refusé 0x97 (3.1.1 0x03). De 1 à 1000000, défaut 50000. Lu une seule fois au démarrage.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_connections_per_ip
Connexions d'une adresse cliente ; 0 : aucune borne - à poser derrière un répartiteur ou un proxy qui masque les adresses des appareils (le chart les garde avec externalTrafficPolicy: Local), sinon tous les appareils partagent une adresse et une borne. Défaut 64.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_connections_per_tenant
Connexions d'appareils d'un tenant sur une réplique ; au-delà 0x97. Défaut 10000.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_keepalive
Keep-alive le plus haut accordé : un appareil MQTT 5 qui demande plus (ou rien) reçoit celui-ci (Server Keep Alive) ; un appareil MQTT 3.1.1 qui demande plus est refusé (0x05), rien aussi sauf avec allow_zero_keepalive. De 1s à 65535s, défaut 1200s.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_packet_bytes
Borne d'un paquet, lu en entier avant d'être décodé ; annoncée à un appareil MQTT 5 comme la plus basse d'elle et du Maximum Packet Size du courtier. De 1 Kio à 256 Mio, défaut 256 Kio.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_session_expiry
Expiration de session la plus longue accordée au courtier. Défaut 1h.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_session_lifetime
Durée la plus longue d'une connexion d'appareil quel que soit son identifiant : au-delà l'appareil est déconnecté et se reconnecte avec un identifiant vérifié à nouveau. De 1m à 30d, défaut 24h.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.max_unauthenticated_connections
Connexions qui n'ont pas encore envoyé leur CONNECT ; au-delà une nouvelle est fermée aussitôt. De 1 à max_connections, défaut 1024.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.mesh_only
Admet l'écouteur sans TLS : le jeton ou la clé d'un appareil traverse le réseau en clair, donc ne s'écrit que là où un maillage chiffre entre pods. Refusé avec tls. Défaut false.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tenant
Bornes de tous les appareils d'un tenant ensemble.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tenant.bytes_per_second
Octets de charge des PUBLISH de tous les appareils d'un tenant par seconde, sous contre-pression. 0 : aucune borne. Défaut 20 Mio.
- Type
integer | string- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tenant.messages_per_second
PUBLISH de tous les appareils d'un tenant par seconde, sous contre-pression. 0 : aucune borne. Défaut 5000.
- Type
number- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tenant.quota
Nomme une politique de type quota : le budget jour et mois de PUBLISH du tenant, partagé avec HTTP sous ce nom. Épuisé : PUBACK 0x97, QoS 0 jeté et compté, 3.1.1 fermé. Absent : aucun.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tls
Certificat de l'écouteur et, avec client_ca_file, l'autorité qui vérifie les certificats d'appareil (exigée par une alternative X509). Obligatoire sauf mesh_only. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tls.cert_file
Chemin du certificat de l'écouteur (PEM).
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tls.client_ca_file
Chemin de l'autorité qui vérifie les certificats d'appareil ; absent : aucun certificat d'appareil vérifié.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.tls.key_file
Chemin de la clé privée de l'écouteur (PEM).
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.topic_alias_maximum
Alias de topic qu'un appareil MQTT 5 peut employer vers l'écouteur ; un alias n'est retenu qu'une fois son topic accordé, jamais relayé. 0 : aucun. Au plus 1000, défaut 10.
- Type
integer- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.websocket
MQTT sur WebSocket (sous-protocole mqtt) sur une adresse à lui, avec le TLS de l'écouteur. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.websocket.address
Adresse hôte:port de l'écouteur WebSocket (:8884), pas celle de l'écouteur.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
listeners.mqtt.websocket.path
Chemin HTTP du WebSocket ; défaut /mqtt.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
observability
Traces, journaux et mesures de la passerelle. Sans collecteur, la passerelle démarre quand même : c'est une configuration valide, pas un mode dégradé ; /metrics reste servi.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.access_log
Écrit une ligne par requête terminée, avec le gabarit du chemin - jamais le chemin reçu. Défaut false.
- Type
boolean- Depuis
- 1.0.0
- Rechargement
- à chaud
observability.kafka
Mesures de l'écouteur Kafka au-delà de ses instruments fixes.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
observability.kafka.budget_wait_bucketsredémarrage
Bornes de l'histogramme flexway.kafka.tenant_budget.wait (attente d'un tenant pour sa part d'octets en vol) : durées strictement croissantes et positives, 20 au plus ; défaut de 1 ms à 30 s. Lues une seule fois au démarrage.
- Type
list<string>- Défaut
["1ms","5ms","10ms","50ms","100ms","500ms","1s","5s","10s","30s"]- Bornes
- éléments ≤ 20
- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- redémarrage nécessaire
observability.kafka.closures
Compte les fermetures normales de connexions Kafka (flexway.kafka.connections.closed). Défaut true.
- Type
boolean- Défaut
true- Depuis
- 1.6.0
- Rechargement
- à chaud
observability.log_level
Niveau le moins grave écrit dans les journaux : debug, info (défaut), warn, error ou fatal. Se change à chaud, par exemple debug le temps d'un diagnostic.
- Type
string- Valeurs admises
debuginfowarnerrorfatal- Défaut
info- Depuis
- 1.1.0
- Rechargement
- à chaud
observability.mqtt
Mesures de l'écouteur MQTT des appareils au-delà de ses instruments fixes.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.mqtt.closures
Compte les fermetures normales de connexions d'appareils (flexway.mqtt.connections.closed). Défaut true.
- Type
boolean- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.otlp_endpointredémarrage
Collecteur OTLP des traces (hôte:port, par exemple tempo.observ:4317) ; prime sur OTEL_EXPORTER_OTLP_ENDPOINT. Vide : aucun export de traces. Lu une seule fois au démarrage.
- Type
string- Depuis
- 0.2.0
- Rechargement
- redémarrage nécessaire
observability.samplingredémarrage
Plafond d'échantillonnage des traces. Absent : toutes les traces sont gardées. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
observability.sampling.max_per_secondredémarrage
Nouvelles traces racines gardées par seconde et par réplique, nombre positif ; 0 : sans plafond.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
observability.sparkplug
Table des nœuds Sparkplug B que chaque réplique tient pour les nœuds qui la traversent (GET /sparkplug/nodes, écran Appareils de la console). Se change à chaud.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.sparkplug.max_devices_per_node
Appareils (DBIRTH, DDEATH) gardés pour un nœud, de 1 à 10000 ; au-delà, la liste est dite tronquée. Défaut 1000.
- Type
integer- Défaut
1000- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.sparkplug.max_nodes
Nœuds et applications hôtes gardés par réplique, de 1 à 50000 (un nœud est une connexion). Pleine, la table oublie d'abord un nœud inconnu, puis le plus ancien hors ligne ; pleine de nœuds en ligne, un nouveau n'est pas gardé et il est compté. Défaut 10000.
- Type
integer- Défaut
10000- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.sparkplug.max_nodes_per_tenant
Nœuds d'un même tenant gardés par réplique, de 1 à max_nodes : un tenant ne remplit jamais la table des autres ; à sa borne, la table oublie d'abord un de ses nœuds inconnus, puis le plus ancien hors ligne ; plein de nœuds en ligne, un nouveau n'est pas gardé et il est compté. Défaut 1000 (ou max_nodes s'il est plus bas).
- Type
integer- Défaut
1000- Depuis
- 0.2.0
- Rechargement
- à chaud
observability.sparkplug.offline_retention
Durée pendant laquelle un nœud hors ligne, rattaché à une autre réplique ou seulement vu par ses commandes reste dans la table, de 1m à 720h. Défaut 24h.
- Type
string- Défaut
24h- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
policies
Le modèle de politiques : des définitions nommées et réutilisables, attachées par des chaînes. Chaîne effective global -> hôte -> routes -> opération ; l'opération ajoute la sienne par x-flexway-policies au contrat.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.chains
Attache les politiques, du plus large au plus précis : global, par hôte, par motif de route. Un nom préfixé de ! retire une politique qu'un niveau plus large a apportée.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.chains.global
Politiques appliquées à toute requête, par nom de définition.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.chains.hosts
Politiques par hôte : nom d'hôte -> liste de noms de définitions.
- Type
map<list<string>>- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.chains.routes
Politiques par motif de route : un gabarit de chemin commençant par /, où * vaut un segment et ** plusieurs ("/orders/**") -> liste de noms de définitions.
- Type
map<list<string>>- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.definitions
Les politiques nommées : nom -> définition (type, phase, when, config). Seules les politiques attachées par une chaîne ou par x-flexway-policies s'appliquent.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.definitions.*.config
Configuration propre au type, décodée strictement contre le schéma de ce type (voir les types de politiques) : une clé inconnue est refusée.
- Type
any- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.definitions.*.phase
Moment où la politique agit : request, response ou error, parmi les phases que son type accepte. Absente : la première phase du type.
- Type
string- Valeurs admises
requestresponseerror- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.definitions.*.typeobligatoire
Type de la politique, dans le catalogue : cors, rate-limit, quota, cache, header-inject, header-remove, rewrite-path, query-inject, query-remove, transform-body, redact, map-status, external-call. Obligatoire.
- Type
string- Valeurs admises
cachecorsexternal-callheader-injectheader-removemap-statusquery-injectquery-removequotarate-limitredactrewrite-pathtransform-body- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.definitions.*.when
Condition CEL compilée au chargement (has(auth.subject)) : la politique ne s'applique que si elle est vraie. Refusée pour cors, rate-limit et quota, qu'on attache plutôt là où ils s'appliquent.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
policies.fragments
Fragments de politique importés (1.7.0) : nom d'import -> fichier épinglé par son empreinte. Les définitions d'un fragment s'appellent ici <import>/<nom> ; celles qu'il impose passent en tête de chaque chaîne de l'écouteur HTTP, avant global, et ne se retirent, ne se remplacent ni ne se défont localement. Lu de fichiers montés seulement, jamais du réseau ; ancres, alias et clés de fusion YAML refusés ici. Absent : aucun fragment, comportement de 1.6.0. Le nom d'import : lettres minuscules, chiffres et -, 63 au plus.
- Type
map<object>- Depuis
- 1.7.0
- Rechargement
- à chaud
policies.fragments.*.digestobligatoire
Empreinte qui épingle le fichier : sha256: suivi des 64 caractères hexadécimaux du sha256 de ses octets, sans forme canonique - la valeur de sha256sum et de flexway fragment digest. Obligatoire. Différente de l'empreinte lue : refus qui nomme l'import, l'attendue et la lue.
- Type
string- Motif
^sha256:[0-9a-f]{64}$- Depuis
- 1.7.0
- Rechargement
- à chaud
policies.fragments.*.pathobligatoire
Fichier du fragment (kind: PolicyFragment), relatif au flexway.yaml, dans son répertoire ou en dessous (.. et chemin absolu hors de ce répertoire refusés) ; un fichier ordinaire de 1 Mio au plus. Obligatoire. Relu à chaque rechargement : un fichier absent ou changé sans son empreinte refuse le chargement, et la configuration en cours reste.
- Type
string- Depuis
- 1.7.0
- Rechargement
- à chaud
policies.fragments.*.verify
Réservé à la vérification d'une signature du fragment, qui n'est pas construite dans cette version : déclarée, elle refuse le chargement plutôt que d'être ignorée. L'empreinte seule épingle le fichier.
- Type
object- Depuis
- 1.7.0
- Rechargement
- à chaud
policies.fragments.*.verify.bundle
Réservé : le paquet de signature du fragment. Non construit dans cette version - refusé au chargement.
- Type
string- Depuis
- 1.7.0
- Rechargement
- à chaud
policies.fragments.*.verify.key
Réservé : la clé publique qui vérifie la signature. Non construit dans cette version - refusé au chargement.
- Type
string- Depuis
- 1.7.0
- Rechargement
- à chaud
schema_registry
Le registre de schémas sous lequel sont lues les charges binaires : l'API de Confluent, que servent Confluent, Apicurio, Karapace et Redpanda. Lu, jamais écrit. Absent : un message qui déclare le format filaire du registre est refusé au chargement.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.auth
Authentification de la passerelle au registre : username et password (HTTP Basic, la clé et le secret de Confluent Cloud), ou token - pas les deux. Refusée si url est en http://.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.auth.passwordsecret
Mot de passe par référence, ${VAR} ou file:/chemin, relu à chaque requête ; va avec username.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.auth.tokensecret
Jeton porteur par référence, ${VAR} ou file:/chemin ; exclusif de username et password.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.auth.username
Nom d'utilisateur HTTP Basic ; va avec password.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.circuit_breaker
Coupe-circuit du registre, comme celui d'un amont : ouvert, un message qui a besoin du registre est refusé aussitôt (503), jamais attendu. Actif par défaut.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.circuit_breaker.cooldown
Repos du coupe-circuit ouvert avant un appel d'essai ; défaut 5s.
- Type
string- Défaut
5s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.circuit_breaker.failure_ratio
Part d'échecs qui ouvre le coupe-circuit, dans (0, 1] ; défaut 0.5.
- Type
number- Défaut
0.5- Bornes
- valeur ≥ 0, ≤ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.circuit_breaker.min_requests
Appels minimum dans la fenêtre avant que la part d'échecs compte ; défaut 20.
- Type
integer- Défaut
20- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.circuit_breaker.window
Fenêtre glissante sur laquelle la part d'échecs est mesurée ; défaut 10s.
- Type
string- Défaut
10s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.max_schemas
Schémas gardés en mémoire, par identifiant, compilés une fois chacun ; de 1 à 100000, défaut 1000.
- Type
integer- Défaut
1000- Bornes
- valeur ≥ 1, ≤ 100000
- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.timeout
Délai d'une recherche au registre, qui retient le message qui en a besoin ; plus de 0 et 30s au plus, défaut 2s.
- Type
string- Défaut
2s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.tls
TLS client vers le registre ; seulement avec une url en https://.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.tls.ca_file
Fichier PEM de l'autorité qui vérifie le certificat du serveur ; absent : les autorités du système. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.tls.cert_file
Certificat client PEM présenté au registre ; va avec key_file. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.tls.key_file
Clé privée PEM du certificat client ; va avec cert_file. Le fichier doit exister.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.tls.server_name
Nom attendu dans le certificat du registre, quand il diffère de l'hôte de url.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
schema_registry.urlobligatoire
Adresse de base absolue du registre en http(s)://, sans identifiants, paramètres ni fragment (https://registry.internal:8081) ; obligatoire. En http://, ni tls ni auth.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
server
Comportement de la passerelle face à ses amonts et à l'arrêt, indépendamment de toute opération. Chaque clé a un défaut : une section server: vide est valide.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
server.body
Bornes des corps de réponse que lisent les politiques de corps (transform-body, redact, map-status), pour les seules opérations qui en déclarent.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
server.body.max_bytes
Plus grand corps de réponse lu pour être transformé, taille (1MiB, 512KiB ou un nombre d'octets) ; défaut 1MiB. Au-delà : 502 response_too_large, jamais un corps tronqué ni non transformé.
- Type
integer | string- Défaut
1MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.2.0
- Rechargement
- à chaud
server.body.validate_sample
Part des réponses transformées vérifiées contre le schéma du contrat, entre 0 et 1 ; défaut 0.01. Un écart est compté et journalisé, jamais servi en erreur ; 0 n'en vérifie aucune.
- Type
number- Défaut
0.01- Bornes
- valeur ≥ 0, ≤ 1
- Depuis
- 1.2.0
- Rechargement
- à chaud
server.cacheredémarrage
Bornes du cache de réponses des opérations qui en déclarent un. Ne tient rien tant qu'aucune opération ne déclare de cache. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.2.0
- Rechargement
- redémarrage nécessaire
server.cache.max_bytesredémarrage
Mémoire totale du cache par réplique, taille ; défaut 32MiB. Au-delà, la réponse la moins récemment servie est évincée.
- Type
integer | string- Défaut
32MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.2.0
- Rechargement
- redémarrage nécessaire
server.cache.max_entry_bytesredémarrage
Plus grande réponse gardée, taille ; défaut 1MiB (au plus max_bytes). Une réponse plus grande est relayée, jamais gardée.
- Type
integer | string- Défaut
1MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 1.2.0
- Rechargement
- redémarrage nécessaire
server.countersredémarrage
Partage des débits et des quotas entre répliques par un cache partagé compatible Redis (Redis, Dragonfly ou Valkey), avec réconciliation périodique. Absent : chaque compteur est local à sa réplique, et aucun quota ne peut être déclaré. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.counters.prefixredémarrage
Préfixe des clés de ce déploiement dans le cache partagé : lettres, chiffres et tirets ; défaut flexway. Deux déploiements qui partagent un cache compteraient sinon ensemble.
- Type
string- Défaut
flexway- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.counters.storeobligatoireredémarrage
Adresse du cache partagé : redis://hôte:port ou rediss://, sans mot de passe, ou une référence (${VAR}, file:/chemin) quand elle en porte un. Obligatoire.
- Type
string- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.counters.syncredémarrage
Période de réconciliation avec le cache partagé, entre 100ms et 1m ; défaut 1s. C'est la fenêtre dont une limite partagée peut être dépassée.
- Type
string- Défaut
1s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.in_flightredémarrage
Porte devant le plan de données : requêtes traitées à la fois, attente d'une place, connexions ouvertes ; au-delà, 503 aussitôt. Absente : dérivée de la limite mémoire du conteneur quand il en a une. Lue une seule fois au démarrage.
- Type
object- Depuis
- 1.1.0
- Rechargement
- redémarrage nécessaire
server.in_flight.connectionsredémarrage
Connexions clientes ouvertes à la fois, par écouteur ; au-delà, une nouvelle attend dans la file du noyau. 0 : sans plafond. Absente : dérivée de la limite mémoire (25 % de la mémoire / 32 KiB).
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.1.0
- Rechargement
- redémarrage nécessaire
server.in_flight.maxredémarrage
Requêtes en vol à la fois, flux compris. 0 : sans plafond. Absente : dérivée de la limite mémoire (50 % de la mémoire / 128 KiB, 64 au moins), adaptée à la saturation.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.1.0
- Rechargement
- redémarrage nécessaire
server.in_flight.queueredémarrage
Requêtes qui peuvent attendre une place ; défaut 0 (refus immédiat). Exige wait, et une limite max non nulle.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.1.0
- Rechargement
- redémarrage nécessaire
server.in_flight.waitredémarrage
Attente au plus d'une requête en file, 10s au plus. Exigée avec queue, refusée sans elle.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.1.0
- Rechargement
- redémarrage nécessaire
server.limits
Ce qu'une requête peut faire tenir à la passerelle.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
server.limits.max_body
Plus grand corps de requête lu - il n'est lu que pour être validé contre le contrat ; taille, défaut 1MiB. Au-delà : 413. Un corps seulement relayé n'est jamais retenu, quelle que soit sa taille.
- Type
integer | string- Défaut
1MiB- Bornes
- valeur ≥ 1
- Motif
^\s*[1-9][0-9]*\s*(B|KiB|MiB|GiB)?\s*$- Depuis
- 0.1.0
- Rechargement
- à chaud
server.peer_identity_header
En-tête où un proxy de maillage local écrit l'identité vérifiée du pair (Linkerd : l5d-client-id), crue des seuls pairs de trusted_proxies (obligatoire avec lui). Déclare un maillage ; incompatible avec auth.trusted_headers.
- Type
string- Depuis
- 1.0.0
- Rechargement
- à chaud
server.reloadredémarrage
Comment la passerelle voit une configuration changée. Lu une seule fois au démarrage.
- Type
object- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.reload.intervalredémarrage
Intervalle de relecture de la configuration et de ses contrats, comparés par contenu ; défaut 5s. "0s" : jamais, seul SIGHUP recharge.
- Type
string- Défaut
5s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.sheddingredémarrage
Délestage d'une part du trafic pendant que la passerelle elle-même sature. Absent : rien n'est délesté. Lu une seule fois au démarrage.
- Type
object- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.shedding.targetobligatoireredémarrage
Saturation au-delà de laquelle la passerelle déleste : 99e centile de la latence d'ordonnancement Go (attente d'un processeur par une goroutine prête), entre 1ms et 1s. Les opérations x-flexway-priority: critical ne sont jamais délestées.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.0.0
- Rechargement
- redémarrage nécessaire
server.shutdownredémarrage
Ce qui se passe entre SIGTERM et la sortie. Lu une seule fois au démarrage.
- Type
object- Depuis
- 0.2.0
- Rechargement
- redémarrage nécessaire
server.shutdown.drainredémarrage
Temps laissé aux requêtes et flux en cours pour finir une fois les nouvelles refusées ; défaut 20s. Au-delà, les connexions restantes sont fermées et c'est journalisé.
- Type
string- Défaut
20s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- redémarrage nécessaire
server.shutdown.mqtt_drain_spreadredémarrage
Étale les redirections des appareils de l'écouteur MQTT sur l'arrêt, sans tempête de reconnexions sur les autres répliques ; plafonné à la moitié de drain. De 0s à 10m, défaut 30s.
- Type
string- Défaut
30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- redémarrage nécessaire
server.timeouts
Budgets d'un échange relayé, par couches. Il n'y a volontairement pas de délai global unique.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
server.timeouts.connect
Délai d'établissement d'une connexion vers un amont, poignée de main TLS comprise. Durée (5s, 500ms) ; défaut 5s.
- Type
string- Défaut
5s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
server.timeouts.read
Silence toléré entre deux octets d'une réponse amont ; c'est lui seul qui gouverne un flux. Défaut 60s.
- Type
string- Défaut
1m- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
server.timeouts.total
Budget de l'échange entier, reprises comprises ; une réponse en flux en est exemptée. Défaut 30s. Surchargé par upstreams.*.timeout, puis par x-flexway-timeout.
- Type
string- Défaut
30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
server.tlsredémarrage
La passerelle termine TLS elle-même, sur un écouteur à part, et demande un certificat client, vérifié contre client_ca_file s'il est présenté. Lu une seule fois au démarrage ; les fichiers sont relus à leur rotation.
- Type
object- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.tls.cert_fileobligatoireredémarrage
Chemin du certificat de l'écouteur TLS (PEM). Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.tls.client_ca_fileredémarrage
Chemin de l'autorité (PEM) qui vérifie les certificats clients présentés. Absent : aucun certificat client vérifié.
- Type
string- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.tls.key_fileobligatoireredémarrage
Chemin de la clé privée de l'écouteur TLS (PEM). Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- redémarrage nécessaire
server.trusted_proxies
Pairs (CIDR, par exemple 10.0.0.0/8) dont X-Forwarded-For est cru - l'edge ; venant de tout autre, l'en-tête est ignoré. local désigne les adresses propres du pod (un proxy de maillage). Aucun par défaut.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams
Les amonts, par nom : où les opérations déclarées sont relayées, et les courtiers et cibles webhook du plan asynchrone. Au moins un ; le nom ai est réservé à la surface d'inférence.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.allow_private
Webhook seulement : ouvre les plages d'adresses privées à la garde de connexion (et http://), refusées par défaut. Défaut false.
- Type
boolean- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.amqp1
AMQP 1.0 seulement (protocol: amqp, protocol_version: "1.0") : ce que fait le courtier au-delà du standard.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.amqp1.broker
Courtier AMQP 1.0 : rabbitmq, artemis, solace, servicebus ou generic (défaut). Il dit comment un flux lit un canal sans prendre les messages des autres consommateurs ; servicebus et generic publient et livrent par webhook seulement.
- Type
string- Valeurs admises
rabbitmqartemissolaceservicebusgeneric- Défaut
generic- Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.brokers
Courtiers seulement (kafka, amqp, mqtt, nats), obligatoire : adresses d'amorçage. Kafka : hôte:port ; AMQP et MQTT : URL amqp:// ou amqps://, mqtt:// ou mqtts:// ; NATS : nats:// ou tls://. Jamais d'identifiant dans l'adresse.
- Type
list<string>- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.circuit_breaker
Coupe-circuit de l'amont, toujours actif : il s'ouvre quand trop d'appels échouent, refuse aussitôt pendant le repos, puis laisse passer un appel d'essai. Chaque clé a un défaut.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.circuit_breaker.cooldown
Repos du coupe-circuit ouvert avant l'appel d'essai ; défaut 5s.
- Type
string- Défaut
5s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.circuit_breaker.failure_ratio
Part d'appels en échec qui ouvre le coupe-circuit, dans ]0, 1] ; défaut 0.5.
- Type
number- Défaut
0.5- Bornes
- valeur ≥ 0, ≤ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.circuit_breaker.min_requests
Nombre minimal d'appels dans la fenêtre avant de juger le ratio ; défaut 20.
- Type
integer- Défaut
20- Bornes
- valeur ≥ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.circuit_breaker.window
Fenêtre glissante sur laquelle les échecs sont comptés ; défaut 10s.
- Type
string- Défaut
10s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.max_in_flight
Requêtes relayées à la fois vers cet amont ; au-delà, 503 aussitôt (cloisonnement). 0 : sans plafond. Pour un courtier, borne les publications en attente d'accusé, 1024 par défaut.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.nats
NATS seulement : identité de la passerelle et JetStream. Une seule identité au plus - credentials, nkey_seed ou token, ou sasl PLAIN ; sans aucune, une connexion anonyme n'est admise qu'avec un certificat client ou dans un maillage déclaré.
- Type
object- Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.nats.credentialssecret
Fichier d'identifiants NATS (JWT et graine nkey), par référence (${VAR} ou file:/chemin).
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.nats.domain
Domaine JetStream (super-grappe, nœud feuille), facultatif : un seul jeton, sans point, espace, * ni >. Sans effet avec jetstream: false, donc refusé.
- Type
string- Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.nats.jetstream
Publier et consommer par JetStream (publication accusée par un flux) ; défaut true. false : NATS Core, lu en server-sent events seulement, jamais publié.
- Type
boolean- Défaut
true- Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.nats.nkey_seedsecret
Graine nkey seule, par référence (${VAR} ou file:/chemin).
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.nats.tokensecret
Jeton NATS, par référence ; il est envoyé tel quel, d'où TLS obligatoire (tls ou un courtier tls://).
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.6.0
- Rechargement
- à chaud
upstreams.*.pool
Connexions gardées vers cet amont. Sans objet pour un courtier ou un webhook, qui gardent leurs propres connexions.
- Type
object- Depuis
- 0.2.0
- Rechargement
- à chaud
upstreams.*.pool.idle_timeout
Durée de vie d'une connexion inactive avant sa fermeture ; défaut 90s.
- Type
string- Défaut
1m30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
upstreams.*.pool.max_conns
Connexions ouvertes à la fois vers l'amont ; 0 (défaut) : sans plafond. Un plafond transforme un ralentissement en file à la passerelle plutôt qu'en tempête de connexions.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 0.2.0
- Rechargement
- à chaud
upstreams.*.pool.max_idle
Connexions inactives gardées pour réutilisation ; défaut 100. 0 ou absent : le défaut - désactiver la réutilisation n'est pas offert.
- Type
integer- Défaut
100- Depuis
- 0.2.0
- Rechargement
- à chaud
upstreams.*.protocol
Protocole de l'amont : http (défaut, https:// compris), grpc (HTTP/2, h2c en clair dans un maillage), mcp (serveur MCP fédéré), a2a (agent A2A, token_exchange obligatoire), kafka, amqp, mqtt, nats (courtiers) ou webhook (cible de livraison).
- Type
string- Valeurs admises
httpgrpcmcpa2akafkaamqpmqttnatswebhook- Défaut
http- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.protocol_version
Version du protocole, AMQP et MQTT seulement : MQTT 5 (défaut) ou 3.1.1 ; AMQP 0-9-1 (défaut) ou 1.0. Kafka et NATS négocient leur version : clé refusée.
- Type
string- Valeurs admises
53.1.10-9-11.0- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.retries
Webhook seulement : réessais bornés d'une livraison.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.retries.max
Réessais au plus d'une livraison, de 0 à 20 ; défaut 8.
- Type
integer- Défaut
8- Bornes
- valeur ≥ 0, ≤ 20
- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.retries.max_delay
Délai au plus entre deux tentatives ; défaut 10m.
- Type
string- Défaut
10m- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.sasl
Courtiers seulement : comment la passerelle s'authentifie auprès du courtier - sa propre identité, jamais celle d'un appelant.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.sasl.mechanismobligatoire
Mécanisme SASL : Kafka PLAIN, SCRAM-SHA-256 ou SCRAM-SHA-512 ; AMQP 0-9-1, MQTT et NATS PLAIN ; AMQP 1.0 PLAIN, ANONYMOUS (avec certificat client ou dans un maillage) ou EXTERNAL (le certificat client comme identité). PLAIN seulement sur TLS.
- Type
string- Valeurs admises
PLAINSCRAM-SHA-256SCRAM-SHA-512ANONYMOUSEXTERNAL- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.sasl.passwordsecret
Mot de passe, par référence (${VAR} ou file:/chemin). Absent avec ANONYMOUS et EXTERNAL.
- Type
string- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Secret
- une référence,
${VAR}oufile:/chemin, jamais une valeur en clair - Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.sasl.username
Nom d'utilisateur de la passerelle auprès du courtier. Absent avec ANONYMOUS et EXTERNAL.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.secrets
Webhook seulement : secrets de signature (Standard Webhooks), par référence - un seul, ou deux pendant une rotation.
- Type
list<string>- Bornes
- éléments ≤ 2
- Motif
^(\$\{[A-Za-z_][A-Za-z0-9_]*\}|file:/\S+)$- Depuis
- 1.5.0
- Rechargement
- à chaud
upstreams.*.timeout
Budget total d'un échange avec cet amont (3s), jamais un compte de nanosecondes. Surcharge server.timeouts.total, surchargé à son tour par x-flexway-timeout. Pour un courtier : budget d'une publication, accusé compris.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.2.0
- Rechargement
- à chaud
upstreams.*.tls
TLS client vers l'amont hors maillage : autorité, certificat client, nom attendu. Seulement avec une URL https:// (ou un courtier TLS) ; dans un maillage, le sidecar fait le mTLS et l'URL reste http://. Pas de certificat client vers un webhook.
- Type
object- Depuis
- 0.3.0
- Rechargement
- à chaud
upstreams.*.tls.ca_file
Chemin de l'autorité (PEM) qui vérifie le certificat de l'amont. Absent : les autorités du système.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
upstreams.*.tls.cert_file
Chemin du certificat client (PEM) présenté à l'amont ; va avec key_file.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
upstreams.*.tls.key_file
Chemin de la clé privée du certificat client (PEM) ; va avec cert_file.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
upstreams.*.tls.server_name
Nom attendu dans le certificat de l'amont (SNI), quand il diffère de l'hôte de l'URL.
- Type
string- Depuis
- 0.3.0
- Rechargement
- à chaud
upstreams.*.token_exchange
Cet amont reçoit un jeton émis pour lui au nom de l'appelant (RFC 8693), à chaque appel, REST et MCP, jamais celui de l'appelant ni de repli. Exige un client chez l'émetteur de l'appelant. Refusé pour un courtier ou un webhook.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.token_exchange.audienceobligatoire
Audience pour laquelle l'amont attend un jeton (orders-api). Obligatoire.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.token_exchange.scope
Portées qui restreignent le jeton échangé ; vide : laissé au fournisseur.
- Type
list<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
upstreams.*.url
Adresse de l'amont : URL http(s) absolue (http://orders.internal:8080), obligatoire sauf pour un courtier, qui se joint par brokers. Webhook : URL https:// nommée par un hôte, jamais une adresse IP, sans identifiant.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
versionobligatoire
Version du schéma du fichier : 1, seule valeur admise. Obligatoire.
- Type
integer- Valeurs admises
1- Depuis
- 0.1.0
- Rechargement
- à chaud
60 clés
Types de politiques
La config d'une politique déclarée sous policies.definitions suit son type : une rubrique par type, décodée strictement (une clé inconnue est refusée).
policy.cache
Politique de cache de réponses publiques, déclarée sous policies.definitions avec type: cache et attachée par une chaîne ; consultée à la phase request. Ne vaut que pour GET et HEAD ; sa condition when est gardée (par exemple !has(auth.subject)). Un cache authentifié se déclare par l'opération (x-flexway-cache), jamais par une politique.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.cache.scope
Portée du cache : public seulement (défaut). subject est refusé ici : il se déclare dans x-flexway-cache de l'opération.
- Type
string- Valeurs admises
public- Défaut
public- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.cache.ttlobligatoire
Durée de conservation d'une réponse, durée positive (60s) ; obligatoire.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.cors
Politique CORS, déclarée sous policies.definitions avec type: cors, attachée globalement, par hôte, par route ou par opération ; phase request, sans condition when. Fermée par défaut : une origine non listée est refusée.
- Type
object- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.allow_credentials
Autorise les requêtes du navigateur avec identifiants (Access-Control-Allow-Credentials). Défaut false ; refusé avec l'origine *.
- Type
boolean- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.allow_headers
En-têtes de requête autorisés en plus de ceux que l'opération déclare. Vide : la liste blanche de l'opération seule.
- Type
list<string>- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.allow_methods
Méthodes annoncées en réponse au préliminaire. Vide : les méthodes que le contrat déclare pour le chemin.
- Type
list<string>- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.allow_originsobligatoire
Origines autorisées (https://app.example.com), au moins une ; * admet toute origine mais jamais avec allow_credentials.
- Type
list<string>- Bornes
- éléments ≥ 1
- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.expose_headers
En-têtes de réponse que le navigateur laisse lire au script (Access-Control-Expose-Headers).
- Type
list<string>- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.cors.max_age
Durée pendant laquelle le navigateur garde la réponse au préliminaire (Access-Control-Max-Age), durée positive (10m) ; absente : en-tête non envoyé.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.3.0
- Rechargement
- à chaud
policy.external-call
Appel à un service déclaré dont la réponse peut refuser la requête (deny) ou poser des en-têtes (set_headers), rien d'autre ; type: external-call sous policies.definitions, phase request (défaut, avant l'amont) ou response. Délai et on_failure obligatoires, le budget de l'opération est consommé ; une requête simulée n'appelle rien.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.deny
Refus de la requête quand une condition tient sur la réponse du service externe ; when, status et code tous obligatoires. Il faut au moins deny ou set_headers.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.deny.codeobligatoire
Code d'erreur du problème servi, ^[a-z][a-z0-9_]{0,63}$ ; jamais un code propre à la passerelle (forbidden, rate_limited...).
- Type
string- Motif
^[a-z][a-z0-9_]{0,63}$- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.deny.statusobligatoire
Statut du refus : un 4xx enregistré, hors 401, 405, 407 et 416.
- Type
integer- Bornes
- valeur ≥ 400, ≤ 499
- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.deny.whenobligatoire
Condition CEL sur response.status et response.body - la réponse du service externe, jamais celle de l'amont.
- Type
string- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.on_failureobligatoire
Ce qui se passe sans réponse exploitable (délai, erreur, coupe-circuit) : fail-open continue comme si la politique ne s'appliquait pas, fail-closed refuse. Obligatoire, sans défaut.
- Type
string- Valeurs admises
fail-openfail-closed- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.pathobligatoire
Chemin appelé sur l'amont, littéral commençant par /, sans ?, #, {, } ni espace.
- Type
string- Motif
^/[^?#{} ]*$- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.send
Ce que l'appel envoie au service externe ; rien par défaut.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.send.body
Envoie le corps de la requête. Refusé à la phase response, où il est déjà relayé.
- Type
boolean- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.send.headers
En-têtes de la requête préparée pour l'amont à transmettre (en-têtes déclarés, tenant écrit par la passerelle) ; 32 au plus. Jamais un en-tête non déclaré de l'appelant.
- Type
list<string>- Bornes
- éléments ≤ 32
- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.set_headers
En-têtes posés à partir de la réponse externe : nom -> expression CEL sur response ; 32 au plus, valeur de 4 096 octets au plus (au-delà, l'appel a échoué). En-têtes protégés refusés.
- Type
map<string>- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.timeoutobligatoire
Délai de l'appel, durée positive (200ms) ; obligatoire. L'appel consomme aussi le budget de l'opération.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.external-call.upstreamobligatoire
Amont appelé, déclaré dans upstreams, en HTTP et sans token_exchange ; obligatoire.
- Type
string- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.header-inject
Pose ou renomme des en-têtes ; type: header-inject sous policies.definitions, phase request (défaut), response ou error, condition when possible. Les en-têtes protégés (identité, transfert, traçage, saut par saut, flexway-*, en-tête du tenant) sont refusés.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.header-inject.on_missing
Ce que fait un gabarit dont la valeur manque : skip (en-tête non posé), empty (posé vide) ou fail (requête refusée). Obligatoire dès qu'une valeur est une expression ; skip sinon.
- Type
string- Valeurs admises
skipemptyfail- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.header-inject.rename
En-têtes renommés : ancien nom -> nouveau nom, valeurs gardées.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.header-inject.set
En-têtes posés : nom -> valeur, littérale ou gabarit {{ expression CEL }} ({{ auth.claims.plan }}) ; une valeur existante est remplacée. Au moins set ou rename.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.header-remove
Retire des en-têtes ; type: header-remove sous policies.definitions, phase request (défaut), response ou error. Les en-têtes protégés sont refusés.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.header-remove.namesobligatoire
Noms des en-têtes retirés, au moins un.
- Type
list<string>- Bornes
- éléments ≥ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.map-status
Change le statut d'une réponse de l'amont en statut sémantique ; type: map-status sous policies.definitions, phase response. Sa configuration est une liste de 1 à 64 règles { from, to, when, code }, la première qui s'applique gagne ; une règle après une règle sans condition de même from est refusée.
- Type
list<object>- Bornes
- éléments ≥ 1, ≤ 64
- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.map-status.*.code
Code d'erreur du problème servi, seulement quand to est 400 ou plus ; ^[a-z][a-z0-9_]{0,63}$, jamais un code propre à la passerelle.
- Type
string- Motif
^[a-z][a-z0-9_]{0,63}$- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.map-status.*.fromobligatoire
Statut de l'amont visé, de 200 à 599 ; obligatoire.
- Type
integer- Bornes
- valeur ≥ 200, ≤ 599
- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.map-status.*.toobligatoire
Statut servi, obligatoire : 200 ou plus, avec une raison RFC 9110, différent de from, jamais un 3xx ni 204, 205, 206, 304, 401, 405, 407, 416 ou 426.
- Type
integer- Bornes
- valeur ≥ 200, ≤ 599
- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.map-status.*.when
Condition CEL facultative, qui peut lire body, le corps JSON de la réponse.
- Type
string- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.query-inject
Pose des paramètres de requête ; type: query-inject sous policies.definitions, phase request.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.query-inject.on_missing
Ce que fait un gabarit dont la valeur manque : skip, empty ou fail. Obligatoire dès qu'une valeur est une expression ; skip sinon.
- Type
string- Valeurs admises
skipemptyfail- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.query-inject.setobligatoire
Paramètres posés : nom -> valeur, littérale ou gabarit {{ expression CEL }} ; au moins un.
- Type
map<string>- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.query-remove
Retire des paramètres de requête ; type: query-remove sous policies.definitions, phase request.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.query-remove.namesobligatoire
Noms des paramètres retirés, au moins un.
- Type
list<string>- Bornes
- éléments ≥ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.quota
Quota de requêtes d'un tenant sur des fenêtres calendaires UTC (jour, mois) ; type: quota sous policies.definitions, phase request, sans condition. Exige server.counters : compté en mémoire, un quota mensuel repartirait à chaque déploiement. Au-delà : 429 quota_exceeded.
- Type
object- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.quota.key
Ce qui est compté : tenant seulement (défaut).
- Type
string- Valeurs admises
tenant- Défaut
tenant- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.quota.limitsobligatoire
Plafonds par fenêtre : day et/ou month, chacun un entier d'au moins 1 ; au moins une fenêtre.
- Type
map<integer>- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.rate-limit
Seaux à jetons par appelant ; type: rate-limit sous policies.definitions, phase request, sans condition. Une opération prend la classe read (GET, HEAD, OPTIONS) ou write, ou celle de x-flexway-rate-class ; au-delà : 429 rate_limited.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rate-limit.classesobligatoire
Classes de débit par nom (read, write, ou les vôtres), chacune un seau ; au moins une.
- Type
map<object>- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rate-limit.classes.*.burstobligatoire
Taille du seau : requêtes admises d'un coup ; entier d'au moins 1, obligatoire.
- Type
integer- Bornes
- valeur ≥ 1
- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rate-limit.classes.*.rpsobligatoire
Remplissage du seau, en requêtes par seconde ; nombre strictement positif, obligatoire.
- Type
number- Bornes
- valeur > 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rate-limit.classes.*.scope
Remplace scope de la politique pour cette classe : class ou operation.
- Type
string- Valeurs admises
classoperation- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.rate-limit.header
Avec key: header, l'en-tête dont la valeur sert de clé pour un appelant anonyme.
- Type
string- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.rate-limit.key
Ce qu'un seau compte : caller (défaut) - le sujet authentifié, sinon l'adresse du client - ou header - pour un anonyme, la valeur de header, crue seulement d'un pair dont l'identité figure dans trusted. Un sujet authentifié reste la clé dans les deux cas.
- Type
string- Valeurs admises
callerheader- Défaut
caller- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rate-limit.scope
Ce qu'un seau couvre : class (défaut) - un seau par appelant et par classe, partagé par les opérations de la classe - ou operation - un seau par appelant et par opération, la classe en donnant la taille.
- Type
string- Valeurs admises
classoperation- Défaut
class- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.rate-limit.trusted
Avec key: header, les identités de pair vérifiées (par server.peer_identity_header) dont l'en-tête clé est cru ; obligatoire avec key: header.
- Type
list<string>- Depuis
- 1.0.0
- Rechargement
- à chaud
policy.redact
Masque ou retire des champs du corps JSON de la réponse ; type: redact sous policies.definitions, phase response. Exactement un de with ou remove: true.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.redact.fieldsobligatoire
Chemins des champs, commençant par body. (body.card.number), segments [A-Za-z_][A-Za-z0-9_]* ; 1 à 256 chemins, 32 segments au plus, sans doublon.
- Type
list<string>- Bornes
- éléments ≥ 1, ≤ 256
- Motif
^body\.- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.redact.remove
true retire les champs au lieu de les masquer ; jamais avec with.
- Type
boolean- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.redact.with
Valeur qui remplace un champ masqué : une chaîne, un nombre, un booléen ou null ; jamais avec remove: true.
- Type
string | number | boolean | null- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.rewrite-path
Dirige la requête vers un autre chemin de l'amont ; type: rewrite-path sous policies.definitions, phase request.
- Type
object- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.rewrite-path.toobligatoire
Chemin de l'amont, commençant par / ; {param} y prend la valeur d'un paramètre de la route, échappée, jamais le texte brut du chemin reçu.
- Type
string- Motif
^/- Depuis
- 0.1.0
- Rechargement
- à chaud
policy.transform-body
Projection fermée du corps JSON de la réponse : seuls les champs listés sont servis ; type: transform-body sous policies.definitions, phase response. Corps borné par server.body.max_bytes.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.transform-body.on_missingobligatoire
Champ projeté absent de la réponse : fail (réponse refusée) ou omit (champ omis). Obligatoire.
- Type
string- Valeurs admises
failomit- Depuis
- 1.2.0
- Rechargement
- à chaud
policy.transform-body.projectobligatoire
Chemins pointés des champs gardés (id, customer.name), segments [A-Za-z_][A-Za-z0-9_]* ; 1 à 256 chemins, 32 segments au plus.
- Type
list<string>- Bornes
- éléments ≥ 1, ≤ 256
- Depuis
- 1.2.0
- Rechargement
- à chaud
67 clés
Extensions du contrat
Les extensions x-flexway-* qu'un contrat porte (OpenAPI, AsyncAPI, carte d'agent A2A) et l'option gRPC flexway.v1.operation. Liste fermée : une extension x-flexway-* inconnue, pas encore servie ou écrite là où elle n'est pas lue est refusée au chargement.
x-flexway-a2a
Bloc de gouvernance d'un agent A2A, au premier niveau de sa carte déclarée (contracts.a2a), obligatoire ; retiré de la carte publiée. Clés inconnues refusées.
- Type
object- Lu dans
- carte d'agent A2A
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.delegation
Bornes de la chaîne d'agents pour cet agent { max_depth, max_age } : exige agents.delegation et ne peut que les resserrer - une borne plus large est refusée.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.delegation.max_age
Âge maximal depuis l'authentification de la personne, durée positive ; jamais au-delà de agents.delegation.max_age.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.delegation.max_depth
Nombre maximal d'agents dans la chaîne, entier positif ou nul ; jamais au-delà de agents.delegation.max_depth.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.max_streams
Flux ouverts au plus par réplique pour cet agent ; obligatoire et supérieur à 0 si la carte annonce capabilities.streaming.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.max_task_duration
Durée maximale d'une tâche suivie en flux, durée positive (10m) ; obligatoire si la carte annonce capabilities.streaming.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.methods
Classe de débit par méthode A2A (SendMessage, GetTask, CancelTask...), ^[a-z][a-z0-9_-]{0,31}$. Défaut : write pour les envois, CancelTask et la création ou suppression d'une configuration de notification, free pour le reste.
- Type
map<string>- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.signer
Signataire de la carte publiée : pas encore accepté, toute valeur est refusée.
- Type
string- Depuis
- 1.10.0
- Rechargement
- à chaud
x-flexway-a2a.upstreamobligatoire
Amont qui sert l'agent, déclaré dans upstreams avec protocol: a2a (et donc token_exchange) ; obligatoire.
- Type
string- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-a2a.verifyobligatoire
Vérification de la carte de l'amont : none seulement, obligatoire.
- Type
string- Valeurs admises
none- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-ai
Nom de l'option ai de flexway.v1.operation sur une méthode gRPC : la méthode est un modèle mesuré. Refusée dans un contrat OpenAPI ou AsyncAPI.
- Type
object- Lu dans
- méthode gRPC
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-ai.capability
Capacité des séries : model (défaut), vision, embeddings ou chat.
- Type
string- Valeurs admises
modelvisionembeddingschat- Défaut
model- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-ai.price_per_1k
Prix de mille unités, en euros ; positif ou nul.
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-ai.unit
Unité comptée : call (défaut) ou byte (octets de la requête et de la réponse).
- Type
string- Valeurs admises
callbyte- Défaut
call- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-bind
Sur un paramètre de canal AsyncAPI : lie le paramètre à un fait de l'identité vérifiée, jamais lu de la requête - tenant, subject, claim:<nom> (nom de 1 à 64 caractères [A-Za-z0-9_.-]) ou, sur une opération x-flexway-device, cert:<champ> du certificat de l'appareil - cn, serial, fingerprint, ou avec son indice ou[i], o[i], san.dns[i], san.uri[i], san.ip[i], san.email[i]. Obligatoire sur chaque paramètre d'un canal utilisé, qui doit figurer dans l'adresse.
- Type
string- Motif
^(tenant|subject|claim:[A-Za-z0-9_.-]{1,64}|cert:(cn|serial|fingerprint|(ou|o|san\.dns|san\.uri|san\.ip|san\.email)\[[0-9]{1,2}\]))$- Lu dans
- paramètre AsyncAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-cache
Sur une opération OpenAPI GET ou HEAD : cache de réponses propre à l'opération, { ttl, scope }. Refusé sur un flux, un WebSocket, une méthode gRPC, une opération A2A, une porte de courtier, et avec une politique cache nommée par x-flexway-policies.
- Type
object- Lu dans
- opération OpenAPI
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-cache.scope
public (défaut) : partagé, refusé si l'opération exige une identité ; subject : clé tenant et sujet, la seule façon de cacher une réponse authentifiée, refusé sur une opération sans security.
- Type
string- Valeurs admises
publicsubject- Défaut
public- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-cache.ttlobligatoire
Durée de conservation, durée positive (30s) ; obligatoire.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-delegation
Sur une opération OpenAPI : resserre pour elle les bornes de la chaîne d'agents, { max_depth, max_age } ; jamais plus large que agents.delegation, qui s'applique à défaut.
- Type
object- Lu dans
- opération OpenAPI
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-delegation.max_age
Âge maximal depuis l'authentification de la personne, durée positive ; absent : la borne de la configuration.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-delegation.max_depth
Nombre maximal d'agents dans la chaîne, entier positif ou nul (0 refuse tout jeton délégué) ; absent : la borne de la configuration.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-deliver
Sur une opération AsyncAPI receive : livraisons webhook de ses messages, sans appelant - une liste de cibles { upstream, tenant, dead_letter }. Refusé en MQTT 3.1.1 et NATS Core.
- Type
list<object>- Lu dans
- opération AsyncAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-deliver.*.dead_letterobligatoire
Canal de rebut où va un message que la cible n'a pas accepté après les réessais ; obligatoire, sans { } ni joker.
- Type
string- Motif
^[^{}*>+#\s][^{}*>+#]*$- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-deliver.*.tenant
Tenant dont les messages sont livrés, 1 à 128 caractères [A-Za-z0-9_-] ; obligatoire sauf si l'opération est publique.
- Type
string- Motif
^[A-Za-z0-9_-]{1,128}$- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-deliver.*.upstreamobligatoire
Cible, un amont déclaré avec protocol: webhook ; obligatoire.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-device
Sur une opération AsyncAPI : la sert aux appareils sur l'écouteur listeners.mqtt - send : un appareil publie, receive : il s'abonne. true, ou un objet des clés ci-dessous. Exige un amont MQTT (le même pour toutes les opérations d'appareil), une security et un canal aux paramètres liés, le tenant parmi eux ; jamais publique.
- Type
boolean | object- Lu dans
- opération AsyncAPI
- Depuis
- 1.7.0
- Rechargement
- à chaud
x-flexway-device.bytes_per_second
Sur une opération send : surcharge listeners.mqtt.device.bytes_per_second pour elle.
- Type
integer- Bornes
- valeur ≥ 1
- Depuis
- 1.7.0
- Rechargement
- à chaud
x-flexway-device.messages_per_second
Sur une opération send : surcharge listeners.mqtt.device.messages_per_second pour elle.
- Type
number- Bornes
- valeur > 0
- Depuis
- 1.7.0
- Rechargement
- à chaud
x-flexway-device.qos_max
QoS la plus haute sur le canal ; au-delà un PUBLISH est refusé 0x9B et un abonnement accordé à elle. De 0 à 2, défaut 2.
- Type
integer- Défaut
2- Bornes
- valeur ≥ 0, ≤ 2
- Depuis
- 1.7.0
- Rechargement
- à chaud
x-flexway-encrypt
Sur un message AsyncAPI : champs écrits chiffrés par la passerelle sur l'écouteur Kafka - liste non vide de chemins pointés (card.number), sans [, ], * ni espace, sans doublon ni chemin qui en contient un autre. Message JSON (champ de type chaîne déclaré), Avro ou Protobuf ; exige kms.
- Type
list<string>- Bornes
- éléments ≥ 1, ≤ 255
- Motif
^[^.\s\[\]*]+(\.[^.\s\[\]*]+)*$- Lu dans
- message AsyncAPI
- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-kafka-proxy
Sur une opération AsyncAPI : la sert aux clients Kafka natifs de l'écouteur listeners.kafka - send : un client produit, receive : il lit. Exige un amont Kafka, une security et un canal <préfixe>{tenant}.<nom> lié au tenant ; jamais publique.
- Type
object- Lu dans
- opération AsyncAPI
- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-kafka-proxy.admin_scope
Portée qui ouvre l'administration bornée du cluster virtuel ; absente : administration refusée.
- Type
string- Bornes
- longueur ≥ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-kafka-proxy.clusterobligatoire
Nom du cluster virtuel, une étiquette DNS de 1 à 63 caractères [a-z0-9-] ; obligatoire.
- Type
string- Motif
^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-kafka-proxy.decrypt_scope
Sur une opération receive seulement : portée qui reçoit en clair les champs x-flexway-encrypt du message ; sans elle, ils restent chiffrés.
- Type
string- Bornes
- longueur ≥ 1
- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-kafka-proxy.transactions
Sur une opération send seulement : autorise les producteurs transactionnels. Défaut false.
- Type
boolean- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-key
Sur une opération AsyncAPI : pointeur JSON (commençant par /) vers la clé d'ordonnancement dans le message, la clé de l'enregistrement Kafka ; sans effet en MQTT et AMQP.
- Type
string- Motif
^/- Lu dans
- opération AsyncAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-owner
Dans info d'un document OpenAPI ou sur une opération, l'opération l'emporte : équipe qui répond de l'opération, { team, contact }. Affichée au catalogue, jamais lue sur le chemin de la requête.
- Type
object- Lu dans
- bloc info OpenAPI · opération OpenAPI
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-owner.contact
Comment joindre l'équipe - un canal, une liste, une page ; 128 caractères au plus, jamais une personne.
- Type
string- Bornes
- longueur ≤ 128
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-owner.teamobligatoire
Nom de l'équipe, obligatoire, non vide, 128 caractères au plus.
- Type
string- Bornes
- longueur ≥ 1, ≤ 128
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-policies
Sur une opération OpenAPI : son niveau propre de la chaîne global -> hôte -> routes -> opération, une liste de noms de policies.definitions ; !nom retire une politique d'un niveau plus large.
- Type
string | list<string>- Lu dans
- opération OpenAPI
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-priority
Sur une opération OpenAPI : priorité de délestage sous saturation - critical (jamais délestée), normal (défaut) ou sheddable (délestée en premier).
- Type
string- Valeurs admises
criticalnormalsheddable- Défaut
normal- Lu dans
- opération OpenAPI
- Depuis
- 1.0.0
- Rechargement
- à chaud
x-flexway-public
Sur une opération AsyncAPI receive : true laisse quiconque la consommer, anonyme compris - écrit, jamais déduit. Refusé si le canal lie un paramètre ou porte l'attribut tenant, et avec x-flexway-kafka-proxy.
- Type
boolean- Lu dans
- opération AsyncAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-publish
Sur une opération OpenAPI POST : porte HTTP d'une opération AsyncAPI send, { operation, idempotency }. Le corps est publié en CloudEvents et la réponse 202 part après l'accusé du courtier ; jamais avec x-flexway-subscribe, un cache ou une politique de corps, ni pour un appelant anonyme.
- Type
object- Lu dans
- opération OpenAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-publish.idempotency
required refuse une publication sans en-tête Idempotency-Key ; absent : facultatif.
- Type
string- Valeurs admises
required- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-publish.operationobligatoire
Identifiant de l'opération send de contracts.asyncapi, à un seul message, dont le schéma est celui du corps ; obligatoire.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-rate-class
Sur une opération OpenAPI : classe de débit, définie par la politique rate-limit de la chaîne sur chaque hôte ; absente : read ou write selon la méthode.
- Type
string- Lu dans
- opération OpenAPI
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-scopes
Sur une opération OpenAPI : portées ajoutées à chaque alternative à jeton de security (une chaîne ou une liste) ; retire l'alternative anonyme, laisse clés d'API et certificats inchangés. Elle ne peut qu'ajouter.
- Type
string | list<string>- Lu dans
- opération OpenAPI
- Depuis
- 0.3.0
- Rechargement
- à chaud
x-flexway-source
Sur une opération AsyncAPI : attribut CloudEvents source de ce qu'elle publie ; absent : //<hôte de la requête>/<identifiant de l'opération>.
- Type
string- Lu dans
- opération AsyncAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-sparkplug
Sur une opération AsyncAPI servie aux appareils (x-flexway-device) : son rôle dans l'espace de noms Sparkplug B 3.0 - edge_node (canal spBv1.0/{groupe}/+/{nœud}/# : send publie naissances, morts et données, testament NDEATH seulement ; receive reçoit ses commandes), host (canal spBv1.0/{groupe}/# : send publie NCMD et DCMD, chaque alternative à jeton nommant des portées ; receive lit le groupe), state (canal spBv1.0/STATE/{hôte}, l'hôte lié au tenant). Le groupe est toujours lié au tenant. Sans message déclaré, la charge est lue sous le descripteur sparkplug_b.proto embarqué (validation avec x-flexway-validation: full).
- Type
string- Valeurs admises
edge_nodehoststate- Lu dans
- opération AsyncAPI
- Depuis
- 1.7.0
- Rechargement
- à chaud
x-flexway-subscribe
Sur une opération OpenAPI GET : flux des messages du tenant de l'appelant pour une opération AsyncAPI receive, en SSE ou WebSocket. Anonyme seulement si l'opération AsyncAPI est publique ; jamais avec x-flexway-tool, un cache ou une politique de corps.
- Type
object- Lu dans
- opération OpenAPI
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.ack_timeout
Délai d'accusé d'un message WebSocket, durée positive ; défaut 30s.
- Type
string- Défaut
30s- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.buffer
Messages tamponnés par abonné, de 1 à 4 096 ; défaut 64.
- Type
integer- Défaut
64- Bornes
- valeur ≥ 1, ≤ 4096
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.frames
Forme des trames WebSocket : json (défaut) ou binary, qui exige websocket dans transport et un message binaire.
- Type
string- Valeurs admises
jsonbinary- Défaut
json- Depuis
- 1.6.0
- Rechargement
- à chaud
x-flexway-subscribe.history
Messages gardés en mémoire par canal pour une reprise SSE (Last-Event-ID), de 0 à 1 024 ; défaut 64. 0 : aucun historique, reprise refusée.
- Type
integer- Défaut
64- Bornes
- valeur ≥ 0, ≤ 1024
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.max_anonymous_streams
Flux anonymes ouverts au plus, tous appelants confondus, par réplique ; 0 (défaut) : sans plafond propre.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.max_streams
Flux ouverts au plus par appelant et par réplique ; 0 (défaut) : sans plafond propre.
- Type
integer- Bornes
- valeur ≥ 0
- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.operationobligatoire
Identifiant de l'opération receive de contracts.asyncapi ; obligatoire.
- Type
string- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-subscribe.transport
Transports offerts, liste de sse et websocket ; défaut : les deux.
- Type
list<string>- Valeurs admises
ssewebsocket- Défaut
["sse","websocket"]- Depuis
- 1.5.0
- Rechargement
- à chaud
x-flexway-sunset
Dans info d'un document OpenAPI ou sur une opération, l'opération l'emporte : date de retrait, AAAA-MM-JJ. L'opération doit être deprecated: true ; posée dans info, chaque opération sans valeur propre doit l'être.
- Type
string- Motif
^[0-9]{4}-[0-9]{2}-[0-9]{2}$- Lu dans
- bloc info OpenAPI · opération OpenAPI
- Depuis
- 1.2.0
- Rechargement
- à chaud
x-flexway-timeout
Sur une opération OpenAPI : budget total de l'opération, reprises comprises, durée positive (2s, 500ms) ; prime sur upstreams.*.timeout, puis server.timeouts.total.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Lu dans
- opération OpenAPI
- Depuis
- 0.2.0
- Rechargement
- à chaud
x-flexway-tool
Sur une opération OpenAPI : l'offre en outil sur la surface MCP, sous la même décision qu'en REST. true (outil nommé d'après l'operationId), false, ou un objet { name, description, unattended }. Refusé avec x-flexway-subscribe et sur un flux SSE.
- Type
boolean | object- Lu dans
- opération OpenAPI
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-tool.description
Description de l'outil ; défaut : le summary, puis la description de l'opération.
- Type
string- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-tool.name
Nom de l'outil, ^[A-Za-z0-9_.-]{1,128}$, unique par hôte ; défaut : l'operationId.
- Type
string- Motif
^[A-Za-z0-9_.-]{1,128}$- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-tool.unattended
false réserve l'outil aux agents qu'une personne surveille ; défaut true.
- Type
boolean- Défaut
true- Depuis
- 1.0.0
- Rechargement
- à chaud
x-flexway-upstream
Sur une opération OpenAPI : amont où elle est relayée, déclaré dans upstreams ; absent : default_upstream de l'hôte. Sur une opération AsyncAPI : obligatoire, l'amont courtier (kafka, amqp, mqtt, nats) où elle publie ou consomme.
- Type
string- Lu dans
- opération AsyncAPI · opération OpenAPI
- Depuis
- 0.1.0
- Rechargement
- à chaud
x-flexway-validation
Mode de validation de l'opération. OpenAPI : full, params (le corps est relayé non lu) ou off, prime sur hosts.*.validation. AsyncAPI : full ou off seulement ; défaut full pour un message JSON (où off est refusé), off pour un message binaire.
- Type
string- Valeurs admises
fullparamsoff- Lu dans
- opération AsyncAPI · opération OpenAPI
- Depuis
- 1.0.0
- Rechargement
- à chaud
21 clés
Option gRPC
Dans le .proto, option (flexway.v1.operation) = { ... }; : le pendant, pour une méthode gRPC, des extensions d'une opération OpenAPI.
flexway.v1.operation
Option de méthode gRPC (option (flexway.v1.operation) = { ... }; dans le .proto) : ce que la passerelle doit savoir d'une méthode, l'équivalent des extensions x-flexway-* d'une opération OpenAPI. Lue dans le jeu de descripteurs avec ses imports ; chaque champ est facultatif, l'hôte décide à défaut.
- Type
object- Lu dans
- méthode gRPC
- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.ai
Fait de la méthode un modèle spécialisé mesuré par le plan d'inférence (équivalent de x-flexway-ai) : compté dans le budget en euros du tenant, à l'appel ou à l'octet, sans lire le corps. Exige une section ai et un backend kind: grpc de ai.backends qui nomme l'amont de la méthode.
- Type
object- Depuis
- 1.5.0
- Rechargement
- à chaud
flexway.v1.operation.ai.capability
Capacité dont les séries sont étiquetées : model (défaut), vision, embeddings ou chat.
- Type
string- Valeurs admises
modelvisionembeddingschat- Défaut
model- Depuis
- 1.5.0
- Rechargement
- à chaud
flexway.v1.operation.ai.price_per_1k
Prix de mille unités, en euros ; positif ou nul (0 est un prix).
- Type
number- Bornes
- valeur ≥ 0
- Depuis
- 1.5.0
- Rechargement
- à chaud
flexway.v1.operation.ai.unit
Unité comptée : call (défaut), une unité par appel ; byte, une par octet de la requête et de la réponse.
- Type
string- Valeurs admises
callbyte- Défaut
call- Depuis
- 1.5.0
- Rechargement
- à chaud
flexway.v1.operation.metadata
Métadonnées de requête autorisées vers l'amont, en plus de celles de gRPC : fermé par défaut, une métadonnée non listée ne passe pas.
- Type
list<string>- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.owner
Équipe qui répond de la méthode (équivalent de x-flexway-owner) : affichée au catalogue de la console, jamais lue sur le chemin de la requête.
- Type
object- Depuis
- 1.2.0
- Rechargement
- à chaud
flexway.v1.operation.owner.contact
Comment joindre l'équipe - un canal, une liste, une page ; 128 caractères au plus. Jamais une personne : tout lecteur du catalogue le voit.
- Type
string- Bornes
- longueur ≤ 128
- Depuis
- 1.2.0
- Rechargement
- à chaud
flexway.v1.operation.owner.teamobligatoire
Nom de l'équipe, obligatoire dès que owner est écrit ; non vide, 128 caractères au plus.
- Type
string- Bornes
- longueur ≥ 1, ≤ 128
- Depuis
- 1.2.0
- Rechargement
- à chaud
flexway.v1.operation.policies
Niveau propre de la méthode dans la chaîne de politiques (équivalent de x-flexway-policies) : noms de policies.definitions ; !nom retire une politique apportée par un niveau plus large.
- Type
list<string>- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.priority
Priorité de délestage : critical (jamais délestée), normal (défaut) ou sheddable (délestée en premier).
- Type
string- Valeurs admises
criticalnormalsheddable- Défaut
normal- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.rate_class
Classe de débit de la méthode (équivalent de x-flexway-rate-class), définie par la politique rate-limit de la chaîne. Vide : read pour une méthode sans effet de bord ou liée en GET, write sinon.
- Type
string- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security
Alternatives d'accès, dont une seule suffit - comme la liste security d'OpenAPI. Vide : aucune identité exigée.
- Type
list<object>- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security.*.anonymous
Alternative vide : aucune identité exigée. Prime sur les autres champs de l'alternative.
- Type
boolean- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security.*.api_key
Une clé d'API liée à la méthode (Authorization: ApiKey ...) satisfait cette alternative ; portées et rôles y sont ignorés.
- Type
boolean- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security.*.mutual_tls
Un certificat client lié à la méthode satisfait cette alternative ; portées et rôles y sont ignorés.
- Type
boolean- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security.*.roles
Rôles qu'un jeton doit tous porter, lus par la claim roles_claim de son émetteur.
- Type
list<string>- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.security.*.scopes
Portées qu'un jeton doit toutes porter.
- Type
list<string>- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.sunset
Date de retrait de la méthode, AAAA-MM-JJ (équivalent de x-flexway-sunset). Seulement sur une méthode marquée option deprecated = true; : refusée au chargement sinon.
- Type
string- Motif
^[0-9]{4}-[0-9]{2}-[0-9]{2}$- Depuis
- 1.2.0
- Rechargement
- à chaud
flexway.v1.operation.timeout
Budget total d'un appel, durée positive (3s) ; vide : celui de l'amont.
- Type
string- Motif
^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$- Depuis
- 1.1.0
- Rechargement
- à chaud
flexway.v1.operation.upstream
Amont qui sert la méthode, déclaré dans upstreams ; vide : l'amont par défaut de l'hôte.
- Type
string- Depuis
- 1.1.0
- Rechargement
- à chaud