Documentation
Référence API
La référence complète des ressources HTTP, l'accès local authentifié, les contrats de streaming et les clients générés à partir de schémas partagés.
Traduit automatiquement de l'anglais. Voir l'original en anglais
Aperçu
Le sidecar est un seul effet HttpApi. Chaque point de terminaison est un typé HttpApiEndpoint avec des corps de requête et de réponse vérifiés par le schéma, donc cette référence, le SDK généré et le serveur en cours d'exécution proviennent de la même déclaration dans packages/api.
Sur 232 chemins et 35 groupes de ressources.
Formes de requête, de réponse et d’erreur, chacune liée aux opérations qui l’utilisent.
Émis par le sidecar à /api/openapi.json; l'instantané dans packages/web est vérifié par bun run check:api-reference.
La vue Web de bureau, le compagnon mobile, le pont IA et les scripts appellent tous ces mêmes itinéraires.
URL de base
Il n’existe pas d’API CADCAMFUN hébergée. Le sidecar fonctionne sur votre machine, se lie 127.0.0.1 sur un port choisi par le système d'exploitation (il écoute sur le port 0), vérifie le sien /api/health, et imprime ensuite seulement une ligne JSON sur la sortie standard. L'URL de base est http://127.0.0.1:<port> de cette ligne.
export CADCAMFUN_TOKEN=dev-token
CADCAMFUN_DATA_DIR=$(mktemp -d) \
CADCAMFUN_MIGRATIONS_DIR=$PWD/packages/db/drizzle \
CADCAMFUN_AI_OFFLINE=true \
bun --no-env-file apps/sidecar/src/main.ts
# stdout: {"event":"ready","port":46709}
export CADCAMFUN_URL=http://127.0.0.1:46709 Le port change à chaque lancement
ready ligne (le shell du bureau fait exactement cela) au lieu de supposer un nombre fixe. Les journaux vont vers stderr donc stdout ne transporte que l'événement prêt ou d'erreur. Authentification
Le contrat déclare un système de sécurité, bearer (HTTP Bearer). 324 opérations sur 325 l'exigent ; seulement GET /api/health est publique.
| Informations d'identification | Envoyé comme | Utilisé par |
|---|---|---|
| Jeton de lancement | Authorization: Bearer <token> | La vue Web du bureau et les scripts locaux ; la valeur de CADCAMFUN_TOKEN. |
| Jeton compagnon | Authorization: Bearer <token> | Un téléphone couplé ; accès plus étroit, voir appariement de compagnon. |
| Session de compte | x-session-token | Sélectionne le compte actif au-dessus du jeton du porteur ; voir identité ci-dessous. |
curl -s "$CADCAMFUN_URL/api/health"
curl -s "$CADCAMFUN_URL/api/projects" -H "Authorization: Bearer $CADCAMFUN_TOKEN" Congrès
- JSON en entrée, JSON en sortie. Les corps sont
application/jsonsauf indication contraire sur une carte : deux téléchargements en plusieurs parties, un webhook de flux d'octets, un bootstrap JavaScript, un téléchargement zip, un fichier de plugin binaire et deux flux d'événements. - Les identifiants d’opération sont en pointillés.
projects.get,vcs.commit: la balise group, un point, le nom de la méthode utilisée par les clients générés. - Les erreurs sont tapées. Les échecs sont déclarés par point de terminaison et portent un
_tag; allumez-le au lieu d’analyser les messages. Dans l'ensemble du contrat, 401 est déclaré sur 269 opérations, 500 sur 264 et 400 sur 206. - Les ancres d’opération sont stables. Chaque carte peut être liée comme
#op-<method>-<path>, par exemple/docs/api/projects#op-get-api-projects-id.
Streaming
| Chemin | Forme | Porte |
|---|---|---|
GET /api/projects/{id}/events | ESS | Modifier les événements pour un projet. |
POST /api/ai/chat/stream | ESS | Sortie de l'assistant telle qu'elle est produite, plus les battements de cœur ; voir Diffusion IA. |
curl -N "$CADCAMFUN_URL/api/projects/$PROJECT_ID/events" \
-H "Authorization: Bearer $CADCAMFUN_TOKEN" Clientèle
@cadcamfun/api/sdk est généré à partir de ce même contrat : chaque identifiant d'opération ci-dessous est une méthode typée sur CadCam.make(...), en prenant une entrée plate des paramètres de chemin et des champs de corps. 259 des 325 opérations sont générées ; chaque carte montre son appel exact.
import { CadCam } from "@cadcamfun/api/sdk"
const client = CadCam.make({
baseUrl: process.env.CADCAMFUN_URL!,
headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})
const projects = await client.projects.list()
const created = await client.projects.create({ name: "Bracket" }) Ressources
325 opérations dans 35 groupes, classées en fonction de ce qu'elles servent.
Cœur
1 endpointsSonde d’intégrité des processus publics avec statut et horodatage.
2 endpointsDisponibilité authentifiée et version de l'application utilisée par les clients natifs.
2 endpointsÉvénements envoyés par le serveur à l'échelle du projet pour les clients en direct.
4 endpointsPréférences et entrées de contexte compatibles JSON avec liste de préfixes et opérations par clé.
2 endpointsOpérations de chargement et de téléchargement avec charge utile et codage de réponse spécifiques au point de terminaison.
Conception
5 endpointsCréez, répertoriez, lisez, mettez à jour et supprimez des projets avec des contrôles d'accès des propriétaires et des organisations.
8 endpointsDessins de projet, composants, parcours d'outils, ressources de bibliothèque et aperçus limités en lecture seule pour les clients compagnons.
7 endpointsDessins de projet et leurs opérations de géométrie, de métadonnées et de mise à jour enregistrées.
5 endpointsComposants de projet réutilisables et leurs données de conception persistantes.
5 endpointsAnalysez la géométrie exacte, exportez STEP et inspectez les relations d'assemblage à partir d'instantanés de scène ou de dessins enregistrés.
8 endpointsEnregistrements de bibliothèque partagés et collections de recherche de composants, de matériaux et d'outils.
Fabrication
9 endpointsProgrammes d'usinage enregistrés, associations de dessins et documents de fabrication portables validés.
2 endpointsListe et création de parcours d'outils à l'échelle du projet avec des enveloppes de réponse spécifiques au point final.
5 endpointsFabrication native, génération de code G basée sur les paramètres, suggestions, analyse et vérification de la relecture.
8 endpointsVersions de parcours d'outils, restauration, découverte de bibliothèques et commentaires de programmes threadés.
21 endpointsEstimations, demandes de calculs, coûts matières, coûts d'exploitation et relevés d'usure des outils.
Ressources
5 endpointsEnregistrements de matériaux, propriétés d'usinage d'application et accès aux ressources.
5 endpointsPièces jointes de stockage de matériaux et importation/exportation JSON pour l’échange de bibliothèques.
5 endpointsEnregistrements de coupe et dimensions utilisés par les flux de travail d'usinage des applications.
7 endpointsDonnées de stockage et collecte d’outils ou importation/exportation par outil.
7 endpointsEnregistrements de configuration de la machine, mises à jour, suppression et clonage.
5 endpointsPièces jointes de stockage de machine et importation/exportation de configuration.
Rallonges
52 endpointsFournisseurs, informations d'identification, conversations, tours de streaming, invocation d'action, jetons de pont, compétences et récupération de session.
22 endpointsValidations, branches, restaurations, révisions, mise en miroir GitHub et répartition des flux de travail compatibles avec Project Git.
16 endpointsRegistre des plugins, installation des packages, configuration, activation/désactivation et ressources du plugin servies.
8 endpointsConfiguration de la connexion MCP CRUD et demandes d'informations sur le serveur.
5 endpointsÉtat de la passerelle de bureau, activation/désactivation, couplage des appareils et révocation des appareils.
Comptes
15 endpointsConnexion au compte, inscription, récupération, vérification, liens magiques, recherche de session et enregistrement du mot de passe.
18 endpointsProfils, ressources de compte, clés API, enregistrements de jetons, mots de passe et suppression de compte.
5 endpointsListes d'organisations et enregistrements d'organisations gérés.
4 endpointsListe des notifications, mises à jour de l'état de lecture, suppression et marquage complet.
15 endpointsInformations d'abonnement, intégration de paiement/portail Stripe, maintenance d'essai et ingestion de webhooks signés.
10 endpointsMétriques d'application, activité récente, requêtes d'utilisation et demandes de suivi.
10 endpointsItinéraires d'intégration de bureau, opérations de projet suivies, notifications et enregistrements d'abonnement push.
1 endpointsSoumettez l’inscription sur la liste d’attente via l’API de l’application locale.
Document OpenAPI
Télécharger /docs/api/openapi.json (l'instantané archivé rendu par ce site) ou récupérez le document en direct à partir d'un sidecar en cours d'exécution à l'adresse /api/openapi.json. Régénérez l'instantané avec bun run generate:api-reference dans packages/web après avoir modifié un point de terminaison.
Contrat et serveur
@cadcamfun/api définit les schémas de demande et de réponse avec Effect HttpApi. Il exporte la racine Api, enregistrements de domaine, erreurs marquées et clients. Les gestionnaires de requêtes, les décisions d'autorisation, les requêtes de base de données et les appels de fournisseur s'exécutent dans le sidecar. L'importation d'un schéma ne démarre pas un serveur.
Le sidecar publie son contrat servi sur GET /api/openapi.json. Utilisez ce document en cours d'exécution pour inspecter les méthodes, les paramètres de chemin, les charges utiles et les codes d'état de l'application à laquelle vous êtes connecté. Le serveur rassemble ses groupes dans apps/sidecar/src/layers.ts; le contrat partagé est assemblé en packages/api/src/index.ts.
Familles de ressources
- Conception: projets, dessins, composants, versions de dessins, importation/exportation d'entités, analyse CAO exacte, exportation STEP et analyse d'assemblage.
- Fabrication: parcours d'outils et versions, commentaires, suggestions de générateurs, analyse, vérification de relecture, tâches de fabrication natives, matériaux, outils, configurations de machines, éléments de bibliothèque et coûts de production.
- Assistant: fournisseurs, informations d'identification, modèles, sessions, tours de streaming, contrôles de session, actions, mémoire de projet, contexte de l'espace de travail et conseils sans état.
- Collaboration: branches, validations, différences, demandes d'extraction, critiques, miroirs GitHub, fichiers et exécutions de workflow, événements en direct et couplage de compagnons.
- Services applicatifs : utilisateurs, authentification, organisations, notifications, fichiers, plugins, facturation, analyses, liste d'attente, configuration MCP et stockage local de valeurs-clés.
Les groupes contractuels conservent leurs formes de réponse spécifiques au point final. Un client doit décoder le schéma de l’opération qu’il appelle au lieu de supposer une seule enveloppe JSON à l’échelle de l’application.
Réponses et échecs
Les erreurs marquées courantes correspondent à HTTP 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 404 (NotFound), 405 (MethodNotAllowed), 409 (Conflict), et 500 (InternalError). Leurs schémas déclarés portent un format lisible par l'homme message. Certains groupes utilisent une enveloppe avec success: false, message, et errors; un petit nombre utilise un error champ.
Les réponses réussies peuvent être un enregistrement, un tableau, une valeur nullable ou une enveloppe. Envelope comprend success, message, et data; EnvelopeOpt rend le message facultatif. Les points de terminaison de création déclarent explicitement 201 le cas échéant. Ne déduisez pas le succès uniquement à partir d'un champ JSON sans vérifier l'état HTTP et le schéma du point de terminaison.
Le décodage du schéma valide l'entrée de transport avant l'exécution du gestionnaire. La validation métier s'exécute toujours dans le service : une demande structurellement valide peut faire référence à un dessin inaccessible, contenir un artefact de fabrication obsolète ou demander une opération de branche conflictuelle.
Utiliser le client partagé
ApiClient.layer prend un baseUrl et candidature token. Il fournit le transport de récupération et le middleware d'autorisation client. Ses méthodes sont directement dérivées de Api, ce client couvre donc également les opérations omises par la génération de code.
import { ApiClient } from "@cadcamfun/api"
import { Effect } from "effect"
const projects = Effect.gen(function* () {
const api = yield* ApiClient
return yield* api.projects.list()
}).pipe(Effect.provide(ApiClient.layer({ baseUrl, token }))) L'URL de base est l'adresse de bouclage du sidecar et le port attribué. Résolvez-le à partir de la connexion du bureau, plutôt que de conserver un port lors des lancements. Gardez les jetons hors des URL et des journaux.
Demandes de conception et de fabrication
Utilisation des opérations du projet /api/projects; les dessins et les parcours d'outils ont leurs propres collections et itinéraires détaillés. POST /api/toolpaths/generate produit du code G, des données de programme analysées, des avertissements et des statistiques à partir des paramètres et de la géométrie du générateur. /suggest, /parse, et /verify exposez des conseils sur les paramètres, l’interprétation du code G et la relecture des stocks. Ces calculs ne créent pas de parcours d'outil enregistré.
POST /api/toolpaths/manufacture accepte un instantané CAO versionné et renvoie un résultat du noyau avec la CN, les affectations d'outils, les données de coupe, les réclamations, les problèmes et un niveau de version. Enregistrez un document résultant séparément via une opération de création ou de mise à jour de parcours d'outil. Voir Configurations pour la validation des preuves pendant la persistance.
POST /api/cad/exact/analyze, /step, et /assembly accepter des éléments explicites ou un identifiant de dessin stocké. La lecture d'un dessin stocké applique les contrôles d'accès aux dessins normaux de l'appelant.
Streaming et récupération
Le flux d'IA transporte des événements typés pour le texte, le raisonnement, les appels et les résultats d'outils, les demandes d'autorisation et de questions, les tentatives, l'état du tour, le contexte et l'achèvement. Les clients doivent consommer les événements de manière incrémentielle et conserver l'identifiant de session. La fin d'une connexion HTTP n'est pas une preuve suffisante de la fin d'un tour de modèle : l'état de la session peut être relu après la reconnexion.
Les schémas d'événements IA sont présents dans packages/api/src/ai-events.ts et packages/ai/src/events.ts. Les événements généraux en direct utilisent le groupe d'événements. Les téléchargements binaires, les réponses d'amorçage du plug-in JavaScript et les corps de webhook bruts signés nécessitent leur propre gestion de transport.
Répertorier les itinéraires que la page utilise dans leurs résultats page et limit paramètres de requête. Pour les configurations de machines, page la valeur par défaut est 1, limit la valeur par défaut est 20 et est limitée à 1–100, et la réponse porte pagination avec page, limit, total, et totalPages (apps/sidecar/src/http/machine-configs.ts). Vérifiez la page de référence de chaque groupe pour connaître les paramètres qu'il déclare réellement.
SDK générés
@cadcamfun/httpapi-codegen reflète les groupes HttpApi dans les métadonnées d'opération et les clients générés. Le générateur d'API écrit un SDK Promise dans packages/api/src/sdk/generated et inciter les clients à packages/api/src/client/generated. Le SDK public Promise est exporté sous @cadcamfun/api/sdk.
bun run --filter @cadcamfun/api generate
bun run --filter @cadcamfun/api generate:check Les deux cibles générées omettent le téléchargement en plusieurs parties du profil, l'installation du plug-in en plusieurs parties, la création de MCP avec plusieurs schémas de réussite, la mise à jour du MCP avec des identifiants en collision, la création de parcours d'outils de projet avec des noms d'entrée en double et la diffusion de fichiers de plug-in avec des en-têtes de flux. La cible Promise omet également les webhooks bruts Stripe, le bootstrap JavaScript du plug-in, le téléchargement de fichiers binaires et les requêtes de génération/suggestion du générateur. Ces omissions sont explicites dans packages/api/scripts/generate-clients.ts; utiliser le client contractuel ou le transport de matières premières approprié pour ces opérations.
Organisation source
groups/ contient des contrats de ressources. La géométrie partagée et les schémas CAM proviennent de @cadcamfun/core; cad-exact.ts, cam-kernel.ts, et cam-program.ts décrire de riches résultats CAO/FAO et des documents portables. client.ts construit le client contractuel, tandis que le script de génération possède les cibles générées et les listes d'omissions.
Règles d'intégration
Réutilisez les schémas de contrat aux limites de transport et conservez les dépendances de base de données dans le sidecar. Présentez un point de terminaison via son contrat, son gestionnaire, son service ou son référentiel et sa couverture HTTP ciblée. Les fichiers générés sont des sorties : éditez leur contrat ou générateur et régénérez-les. Une version de schéma API, une version de fichier portable et une version d'API de plugin décrivent des contrats distincts.
Référence des ressources
325 opérations à travers 232 chemins et 35 groupes de ressources, avec 56 schémas nommés. Chaque page de ressources répertorie ses opérations et affiche les paramètres de chemin/requête/en-tête déclarés, les champs obligatoires et facultatifs, les valeurs nullables, les types de contenu, les statuts de réussite et d'erreur et les schémas complets.
Les données sont émises depuis packages/api/src/index.ts, le même contrat HttpApi composé utilisé par les clients et le sidecar. Les pages décrivent le contrat extrait ; inspecter le serveur en cours d'exécution /api/openapi.json si vous vous connectez à une autre version.
Ressource HTTP
Santé
Sonde d’intégrité des processus publics avec statut et horodatage.
Ressource HTTP
Système
Disponibilité authentifiée et version de l'application utilisée par les clients natifs.
Ressource HTTP
Projets
Créez, répertoriez, lisez, mettez à jour et supprimez des projets avec des contrôles d'accès des propriétaires et des organisations.
Ressource HTTP
Espace de travail
Dessins de projet, composants, parcours d'outils, ressources de bibliothèque et aperçus limités en lecture seule pour les clients compagnons.
Ressource HTTP
Dessins
Dessins de projet et leurs opérations de géométrie, de métadonnées et de mise à jour enregistrées.
Ressource HTTP
Composants
Composants de projet réutilisables et leurs données de conception persistantes.
Ressource HTTP
CAO exacte
Analysez la géométrie exacte, exportez STEP et inspectez les relations d'assemblage à partir d'instantanés de scène ou de dessins enregistrés.
Ressource HTTP
Parcours d'outils
Programmes d'usinage enregistrés, associations de dessins et documents de fabrication portables validés.
Ressource HTTP
Parcours d'outils du projet
Liste et création de parcours d'outils à l'échelle du projet avec des enveloppes de réponse spécifiques au point final.
Ressource HTTP
Usinage
Fabrication native, génération de code G basée sur les paramètres, suggestions, analyse et vérification de la relecture.
Ressource HTTP
Historique du parcours d'outil
Versions de parcours d'outils, restauration, découverte de bibliothèques et commentaires de programmes threadés.
Ressource HTTP
Matériels
Enregistrements de matériaux, propriétés d'usinage d'application et accès aux ressources.
Ressource HTTP
Stockage du matériel
Pièces jointes de stockage de matériaux et importation/exportation JSON pour l’échange de bibliothèques.
Ressource HTTP
Outils
Enregistrements de coupe et dimensions utilisés par les flux de travail d'usinage des applications.
Ressource HTTP
Rangement des outils
Données de stockage et collecte d’outils ou importation/exportation par outil.
Ressource HTTP
Machines
Enregistrements de configuration de la machine, mises à jour, suppression et clonage.
Ressource HTTP
Stockage des machines
Pièces jointes de stockage de machine et importation/exportation de configuration.
Ressource HTTP
Bibliothèque
Enregistrements de bibliothèque partagés et collections de recherche de composants, de matériaux et d'outils.
Ressource HTTP
Coûts de production
Estimations, demandes de calculs, coûts matières, coûts d'exploitation et relevés d'usure des outils.
Ressource HTTP
Sessions et actions d'IA
Fournisseurs, informations d'identification, conversations, tours de streaming, invocation d'action, jetons de pont, compétences et récupération de session.
Ressource HTTP
Historique et flux de travail
Validations, branches, restaurations, révisions, mise en miroir GitHub et répartition des flux de travail compatibles avec Project Git.
Ressource HTTP
Événements du projet
Événements envoyés par le serveur à l'échelle du projet pour les clients en direct.
Ressource HTTP
Appariement de compagnon
État de la passerelle de bureau, activation/désactivation, couplage des appareils et révocation des appareils.
Ressource HTTP
Plugins
Registre des plugins, installation des packages, configuration, activation/désactivation et ressources du plugin servies.
Ressource HTTP
Configuration MCP
Configuration de la connexion MCP CRUD et demandes d'informations sur le serveur.
Ressource HTTP
Fichiers
Opérations de chargement et de téléchargement avec charge utile et codage de réponse spécifiques au point de terminaison.
Ressource HTTP
Stockage clé-valeur
Préférences et entrées de contexte compatibles JSON avec liste de préfixes et opérations par clé.
Ressource HTTP
Organisations
Listes d'organisations et enregistrements d'organisations gérés.
Ressource HTTP
Notifications
Liste des notifications, mises à jour de l'état de lecture, suppression et marquage complet.
Ressource HTTP
Authentification
Connexion au compte, inscription, récupération, vérification, liens magiques, recherche de session et enregistrement du mot de passe.
Ressource HTTP
Utilisateurs
Profils, ressources de compte, clés API, enregistrements de jetons, mots de passe et suppression de compte.
Ressource HTTP
Facturation
Informations d'abonnement, intégration de paiement/portail Stripe, maintenance d'essai et ingestion de webhooks signés.
Ressource HTTP
Analytique
Métriques d'application, activité récente, requêtes d'utilisation et demandes de suivi.
Ressource HTTP
Services applicatifs
Itinéraires d'intégration de bureau, opérations de projet suivies, notifications et enregistrements d'abonnement push.
Ressource HTTP
Liste d'attente
Soumettez l’inscription sur la liste d’attente via l’API de l’application locale.
Télécharger OpenAPI JSON · Suivez les demandes avec des réponses capturées
Conventions de connexion et de demande
L'API est fournie par le sidecar local plutôt que par un point de terminaison hébergé fixe. Tauri obtient son URL de bouclage et son jeton de lancement sélectionnés dynamiquement. Un sidecar démarré manuellement annonce son port dans un événement prêt pour JSON. Un client mobile couplé se connecte via sa passerelle HTTPS configurée.
curl --silent --show-error "$CADCAMFUN_URL/api/projects" \
--header "Authorization: Bearer $CADCAMFUN_TOKEN" Définissez les deux variables à partir de la connexion réelle. Les modèles de requête sur les pages de ressources utilisent délibérément des espaces réservés et des fichiers de charge utile. Les champs de transport facultatifs ne garantissent pas que chaque opération commerciale puisse les omettre : la création d'un projet, par exemple, rejette un nom manquant dans son gestionnaire.
| Convention | Comportement des clients |
|---|---|
| Paramètres du chemin | Remplacez le segment nommé et encodez sa valeur en URL. Traitez un identifiant comme un seul segment. |
| Paramètres de requête | Encodez les valeurs déclarées. La pagination et le filtrage sont par point de terminaison ; il n’existe pas de contrat universel sur la taille des pages. |
| Charge utile JSON | Envoyez l'objet déclaré avec Content-Type: application/json. La présence requise et l’acceptation de null sont indépendantes. |
| Charge utile en plusieurs parties | Créez des parties de formulaire avec le client de téléchargement ou FormData ; laissez le transport choisir sa frontière. |
| Réponse binaire, JavaScript ou flux | Consomme le type de média déclaré. N'appelle pas response.json() sans condition. |
| Erreurs | Vérifiez l'état HTTP et décodez la forme de défaillance déclarée du point de terminaison. Les enveloppes d’erreur diffèrent selon les familles de ressources. |
| Nouvelle tentative d'écriture | Lire l'état après une opération interrompue avant de soumettre à nouveau une mutation. Le contrat ne prévoit pas de mécanisme universel de clé d’idempotence. |
Maintenance de référence générée
packages/web/script/generate-api-reference.mjs lit le contrat composé à l'aide de l'implémentation Effect installée du package API et écrit le JSON de référence. Le travailleur de documentation consomme le contenu généré ; il n'initialise pas le serveur d'applications pour répondre aux demandes de documentation.
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index La couverture des ressources est vérifiée par rapport à chaque opération déclarée. Un groupe nouvellement ajouté doit recevoir des métadonnées et une navigation destinées au lecteur, et une demande ou une réponse modifiée doit être régénérée. Les guides manuscrits expliquent toujours les règles d'autorisation, les effets secondaires, la configuration des services et les limites qu'un schéma HTTP ne peut à lui seul exprimer.
Recettes d'intégration
Commencez par requêtes HTTP capturées pour voir comment la création de projet, la validation métier, le rejet du porteur, les enregistrements associés et la persistance des valeurs-clés réagissent réellement. Utiliser intégration client typée pour reproduire ces opérations avec le SDK Promise ou le client Effect et gérer leurs canaux de défaillance distincts.
| Intégration | Procédure | Etat clé à conserver |
|---|---|---|
| Editeur de projet | Créer, enregistrer et rouvrir un travail | Identité du projet/ressource, données enregistrées, sémantique de mise à jour réelle. |
| Pipeline de fabrication | Générer et conserver un travail natif | Demande capturée, NC/programme exact, demandes de libération, document portable correspondant. |
| Interface utilisateur de l'Assistant | Consommer des événements et récupérer des sessions | Identité du projet/session, autorisations/questions en attente, état d'activation du terminal. |
| Capacité externe | Créer un plugin pris en charge | Manifeste, exportations de modules, octroi de capacités, validation des arguments et résultat de l'outil. |
| Automatisation des examens | Versionner et réviser le travail du projet | Validation/référence, différences structurelles, révisions, flux de travail validé, sorties de contrôle individuelles. |
| Client jumelé | Activer et gérer l'accès aux appareils | Adresse de la passerelle, empreinte digitale du certificat, jeton d'appareil révocable individuellement. |
Ces recettes relient les contrats HTTP au comportement réel du service. Un schéma peut décrire la présence requise, le codage et une forme renvoyée ; son guide lié explique les règles d'accès, les effets de persistance, la récupération prise en charge et les limites qui ne peuvent être déduites de ces seuls types.
Opérations par groupe de ressources
Le contrat déclare actuellement 270 opérations dans 34 groupes, le tout sous un seul bearer Schéma de sécurité HTTP. La seule opération sans sécurité du porteur est l’enquête de santé publique. Le tableau est calculé à partir du document OpenAPI généré : opérations par groupe, méthodes HTTP utilisées, nombre de chemins distincts et un chemin représentatif.
| Groupe | Étiqueter | Opérations | Méthodes | Chemins | Exemple de chemin |
|---|---|---|---|---|---|
| Santé | health | 1 | OBTENIR 1 | 1 | /api/health |
| Système | system | 2 | OBTENIR 2 | 2 | /health |
| Projets | projects | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/projects |
| Dessins | drawings | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/drawings/{id} |
| Composants | components | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/components/{id} |
| CAO exacte | cadExact | 3 | PUBLICATION 3 | 3 | /api/cad/exact/analyze |
| Parcours d'outils | toolpaths | 7 | SUPPRIMER 1, OBTENIR 3, POST 2, PUT 1 | 3 | /api/drawings/{id}/toolpaths |
| Parcours d'outils du projet | projectToolpaths | 2 | OBTENIR 1, POSTER 1 | 1 | /api/projects/{id}/toolpaths |
| Usinage | toolpathGenerator | 5 | PUBLICATION 5 | 5 | /api/toolpaths/generate |
| Historique du parcours d'outil | toolpathExtras | 8 | SUPPRIMER 1, OBTENIR 3, POST 3, PUT 1 | 5 | /api/toolpaths/library |
| Matériels | materials | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/materials |
| Stockage du matériel | materialsStorage | 5 | SUPPRIMER 1, OBTENIR 2, POST 2 | 2 | /api/materials/export-import |
| Outils | tools | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/tools |
| Rangement des outils | toolsStorage | 7 | SUPPRIMER 1, OBTENIR 3, POST 3 | 3 | /api/tools/export-import |
| Machines | machineConfigs | 6 | SUPPRIMER 1, OBTENIR 2, POST 2, PUT 1 | 3 | /api/machine-configs |
| Stockage des machines | machineConfigsStorage | 5 | SUPPRIMER 1, OBTENIR 2, POST 2 | 2 | /api/machine-configs/export-import |
| Bibliothèque | library | 8 | SUPPRIMER 1, OBTENIR 5, POST 1, PUT 1 | 5 | /api/library |
| Coûts de production | production-costs | 21 | SUPPRIMER 4, OBTENIR 8, POST 5, PUT 4 | 9 | /api/production-costs/estimates |
| Sessions et actions d'IA | ai | 34 | SUPPRIMER 3, OBTENIR 8, POST 21, PUT 2 | 32 | /api/ai/actions |
| Historique et flux de travail | vcs | 22 | OBTENIR 10, POST 11, PUT 1 | 19 | /api/projects/{id}/actions/dispatch |
| Événements du projet | events | 1 | OBTENIR 1 | 1 | /api/projects/{id}/events |
| Appariement de compagnon | companion | 5 | SUPPRIMER 1, OBTENIR 1, POST 3 | 5 | /api/companion |
| Plugins | plugins | 16 | DELETE 1, GET 8, PATCH 1, POST 4, PUT 2 | 12 | /api/plugins |
| Configuration MCP | mcp | 8 | SUPPRIMER 2, OBTENIR 2, POST 2, PUT 2 | 3 | /api/mcp/config |
| Fichiers | files | 2 | OBTENIR 1, POSTER 1 | 2 | /api/download |
| Stockage clé-valeur | kv | 4 | SUPPRIMER 1, OBTENIR 2, METTRE 1 | 2 | /api/kv |
| Organisations | organizations | 5 | SUPPRIMER 1, OBTENIR 2, POST 1, PUT 1 | 2 | /api/organizations |
| Notifications | notifications | 4 | SUPPRIMER 1, OBTENIR 1, POST 1, PUT 1 | 3 | /api/notifications |
| Authentification | auth | 12 | OBTENIR 1, POSTER 11 | 12 | /api/auth/forgot-password |
| Utilisateurs | user | 16 | SUPPRIMER 2, OBTENIR 10, POST 2, PUT 2 | 12 | /api/user/api-keys |
| Facturation | billing | 15 | SUPPRIMER 1, OBTENIR 5, POST 8, PUT 1 | 10 | /api/better-auth-stripe/billing-portal |
| Analytique | analytics | 10 | SUPPRIMER 1, OBTENIR 7, POST 2 | 9 | /api/analytics |
| Services applicatifs | misc | 10 | SUPPRIMER 2, OBTENIR 3, POST 4, PUT 1 | 6 | /api/app-control/notify |
| Liste d'attente | waitlist | 1 | PUBLICATION 1 | 1 | /api/waitlist |
Codes de statut dans tout le contrat
Compter chaque réponse déclarée une fois par opération donne cette image de ce qu'un client doit être prêt à décoder :
| Statut | Déclaré le | Corps typique |
|---|---|---|
| 200 | 242 opérations | Ressource, tableau, valeur nullable ou Envelope |
| 201 | 28 opérations | L'enregistrement créé (par exemple POST /api/projects) |
| 204 | 1 opération | Personne |
| 400 | 206 opérations | BadRequest, EnvBadRequest et variantes spécifiques à la famille |
| 401 | 269 opérations | Unauthorized (middleware porteur) |
| 403 | 101 opérations | Forbidden / EnvForbidden |
| 404 | 149 opérations | NotFound / EnvNotFound |
| 405 | 30 opérations | EnvMethodNotAllowed / KeyedMethodNotAllowed |
| 409 | 29 opérations | Conflict / EnvConflict |
| 500 | 264 opérations | InternalError, EnvInternal, KeyedInternal et variantes familiales |
| 501, 503 | 1 opération chacun | Spécifique au point de terminaison |
Chaque erreur est une erreur étiquetée Effect, donc son corps JSON contient toujours un _tag discriminateur à côté de ses champs. Il existe trois familles de corps, héritées des anciens gestionnaires afin que les clients existants continuent de fonctionner :
{ "_tag": "NotFound", "message": "Project not found" } { "_tag": "EnvNotFound", "success": false, "message": "Material not found", "errors": null } { "_tag": "KeyedInternal", "error": "Failed to load components" } Les enveloppes de réussite reflètent l’enveloppe d’erreur : { success: true, message, data }, où data peut être null. Le EnvelopeOpt la variante omet message lorsque le gestionnaire ne l'a pas fourni. Allumer _tag plutôt que sur la présence de message ou error.
Comment une demande est traitée
- Le routeur correspond à la méthode et au chemin. Les itinéraires inconnus n’atteignent jamais un gestionnaire.
- Le middleware porteur compare le jeton en temps constant. Un jeton manquant ou erroné arrête la requête avec 401 avant tout décodage.
- Le chemin, la requête, les en-têtes et le corps sont décodés par rapport aux schémas de l'opération. Les problèmes structurels deviennent 400 sans exécuter de code métier.
- Le gestionnaire résout le compte actif, vérifie la propriété ou l'appartenance à l'organisation (403/404) et exécute le service.
- Le résultat est codé avec le schéma de réussite déclaré, ou l'échec avec son schéma d'erreur et son statut étiquetés.
Réponses qui ne sont pas JSON
| Opération | Type de média | Comment consommer |
|---|---|---|
POST /api/ai/chat/stream | text/event-stream | Lire progressivement ; chaque data: line est un événement assistant typé. |
GET /api/projects/{id}/events | text/event-stream | Événements de projet en direct ; reconnectez-vous et relisez l'état après une chute. |
GET /api/plugins/bootstrap.js | application/javascript | Chargé par l'hôte du plugin, non analysé en JSON. |
GET /api/plugins/serve | application/octet-stream | Octets du fichier plugin. |
GET /api/download | application/zip | Enregistrer sous forme de fichier ; utiliser response.blob() ou diffuser sur le disque. |
Le SDK Promise généré rejette une réponse de streaming dont le type de contenu n'est pas text/event-stream avec ClientError("UnsupportedContentType"), et un seul événement SSE supérieur à 16 Mio avec SseEventTooLarge.
Appeler l'API sans client
type TaggedError = { _tag: string; message?: string; error?: string }
async function call<T>(base: string, token: string, method: string, path: string, body?: unknown): Promise<T> {
const response = await fetch(new URL(path, base), {
method,
headers: {
authorization: `Bearer ${token}`,
...(body === undefined ? {} : { "content-type": "application/json" }),
},
body: body === undefined ? undefined : JSON.stringify(body),
})
if (response.status === 204) return undefined as T
const payload = await response.json()
if (!response.ok) {
const failure = payload as TaggedError
throw new Error(`${response.status} ${failure._tag}: ${failure.message ?? failure.error}`)
}
return payload as T
}
const project = await call<{ id: string; name: string }>(
process.env.CADCAMFUN_URL!, process.env.CADCAMFUN_TOKEN!,
"POST", "/api/projects", { name: "Bracket" },
) Préférez les clients générés dans TypeScript : ils connaissent le statut de réussite de chaque opération et les statuts d'erreur déclarés, et traitent tout le reste comme UnexpectedStatus au lieu de deviner.