Aller au contenu
CADCAMFUN
Docs

Documentation

Services applicatifs

Itinéraires d'intégration de bureau, opérations de projet suivies, notifications et enregistrements d'abonnement push.

Traduit automatiquement de l'anglais. Voir l'original en anglais

Playground

Envoyez ces demandes à votre propre sidecar en cours d’exécution. Les valeurs restent dans ce navigateur.

Non connecté
Comment ça marche

Le sidecar écoute sur un port de bouclage choisi au démarrage et l'imprime dans son ready doubler; utilisez cette URL et le CADCAMFUN_TOKEN ça a commencé avec. Les demandes vont directement de cette page à cette adresse.

Le sidecar envoie les en-têtes CORS uniquement aux origines Tauri et à http://localhost ou http://127.0.0.1 sur n'importe quel port. À partir des documents hébergés, le navigateur bloque la réponse, exécutez donc les documents localement (bun run dev dans packages/web) pour utiliser le terrain de jeu, ou copiez la requête sous forme curl. Pour expérimenter sans toucher aux données réelles, démarrez le sidecar avec CADCAMFUN_DATA_DIR pointé vers un répertoire jetable — voir la procédure pas à pas de l'API.

Opérations

10 endpoints dans le misc groupe, généré à partir du propre sidecar Document OpenAPI. Les opérations protégées prennent Authorization: Bearer $CADCAMFUN_TOKEN; voir authentification. Le comportement et les limites sont en place le guide du sous-système.

poste /api/push-subscription misc.pushSubscribe
supprimer /api/push-subscription misc.pushUnsubscribe
poste /api/app-control/notify misc.notify
poste /api/desktop/auth/signin misc.desktopSignin
obtenir /api/desktop/projects misc.desktopProjects
poste /api/desktop/projects misc.desktopCreateProject
obtenir /api/desktop/user/by-email misc.desktopUserByEmail
obtenir /api/projects/tracked/{id} misc.trackedGet
mettre /api/projects/tracked/{id} misc.trackedUpdate
supprimer /api/projects/tracked/{id} misc.trackedRemove
Opérations des services d'application en 3D Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
Un bloc par opération (10), empilé par section de ressources de cette page et coloré par méthode : vert GET, orange POST, bleu PUT, violet PATCH, rouge DELETE. Généré à partir du document OpenAPI au moment de la construction.

/api/push-subscription

poste /api/push-subscription # misc.pushSubscribe

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  endpoint?: string | null
  keys?: {
    p256dh?: string | null
    auth?: string | null
  } | null
}
Réponses
200 objet application/json
{
  success: true
  id: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
misc.pushSubscribe
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscPushSubscribeInput
const result = await client.misc.pushSubscribe({
  endpoint: "",
  keys: {}
})
curl
POST /api/push-abonnement
curl --request POST "${CADCAMFUN_URL}/api/push-subscription" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le
supprimer /api/push-subscription # misc.pushUnsubscribe

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  endpoint?: string | null
}
Réponses
200 objet application/json
{
  success: true
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
misc.pushUnsubscribe
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscPushUnsubscribeInput
const result = await client.misc.pushUnsubscribe({
  endpoint: ""
})
curl
SUPPRIMER /api/push-subscription
curl --request DELETE "${CADCAMFUN_URL}/api/push-subscription" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/app-control/notify

poste /api/app-control/notify # misc.notify

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  userId?: string | null
  message?: unknown | null
}
Réponses
200 objet application/json
{
  success: true
  message: string
}
400 NotifyBadRequestEncoded application/json
NotifyBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 NotifyInternalEncoded application/json
NotifyInternalEncoded
Exemple de SDK
misc.notify
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscNotifyInput
const result = await client.misc.notify({
  userId: "",
  message: null
})
curl
POST /api/app-control/notifier
curl --request POST "${CADCAMFUN_URL}/api/app-control/notify" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/desktop/auth

poste /api/desktop/auth/signin # misc.desktopSignin

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  email?: string | null
  password?: string | null
  deviceId?: string | null
  platform?: string | null
}
Réponses
200 objet application/json
{
  success: true
  token: string
  user: {
    id: string
    name: string | null
    email: string | null
    image: string | null
  }
  syncData: {
    lastSync: string
    version: string
  }
}
400 DesktopBadRequestEncoded application/json
DesktopBadRequestEncoded
401 BureauUnauthorizedEncoded | Non autoriséEncoded application/json
DesktopUnauthorizedEncoded | UnauthorizedEncoded
500 DesktopInternalEncoded application/json
DesktopInternalEncoded
Exemple de SDK
misc.desktopSignin
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscDesktopSigninInput
const result = await client.misc.desktopSignin({
  email: "",
  password: "",
  deviceId: "",
  platform: ""
})
curl
POST /api/desktop/auth/signin
curl --request POST "${CADCAMFUN_URL}/api/desktop/auth/signin" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/desktop/projects

obtenir /api/desktop/projects # misc.desktopProjects

Nécessite Authorization: Bearer <token>.

Réponses
200 objet application/json
{
  success: true
  data: Array<{
    id: string
    name: string
    description: string | null
    owner_id: string
    organization_id: string | null
    is_public: boolean
    created_at: string
    updated_at: string
  }>
  message: string
}
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
500 DesktopInternalEncoded application/json
DesktopInternalEncoded
Exemple de réponse capturé · 200
OBTENIR /api/desktop/projets
{
  "success": true,
  "data": [],
  "message": "Retrieved 0 projects"
}
Exemple de SDK
misc.desktopProjects
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// no input
const result = await client.misc.desktopProjects()
curl
OBTENIR /api/desktop/projets
curl --request GET "${CADCAMFUN_URL}/api/desktop/projects" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
poste /api/desktop/projects # misc.desktopCreateProject

Nécessite Authorization: Bearer <token>.

Corps de la requête · requis · application/json
{
  name?: unknown | null
  description?: string | null
  organization_id?: string | null
  is_public?: boolean | null
}
Réponses
201 objet application/json
{
  success: true
  data: {
    id: string
    name: string
    description: string | null
    owner_id: string
    organization_id: string | null
    is_public: boolean
    created_at: string
    updated_at: string
  }
  message: string
}
400 DesktopBadRequestEncoded application/json
DesktopBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
409 DesktopConflictEncoded application/json
DesktopConflictEncoded
500 DesktopInternalEncoded application/json
DesktopInternalEncoded
Exemple de SDK
misc.desktopCreateProject
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscDesktopCreateProjectInput
const result = await client.misc.desktopCreateProject({
  name: null,
  description: "",
  organization_id: "",
  is_public: false
})
curl
POST /api/desktop/projets
curl --request POST "${CADCAMFUN_URL}/api/desktop/projects" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le

/api/desktop/user

obtenir /api/desktop/user/by-email # misc.desktopUserByEmail

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
e-mail requête chaîne | null facultatif
Réponses
200 objet application/json
{
  success: true
  data: {
    id: string
    name: string | null
    email: string | null
    image: string | null
    created_at: string
    updated_at: string
  }
  message: string
}
400 DesktopBadRequestEncoded application/json
DesktopBadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
404 DesktopNotFoundEncoded application/json
DesktopNotFoundEncoded
500 DesktopInternalEncoded application/json
DesktopInternalEncoded
Exemple de réponse capturé · 400
OBTENIR /api/desktop/user/par-e-mail
{
  "_tag": "DesktopBadRequest",
  "success": false,
  "error": "Email parameter is required"
}
Exemple de SDK
misc.desktopUserByEmail
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscDesktopUserByEmailInput
const result = await client.misc.desktopUserByEmail({})
curl
OBTENIR /api/desktop/user/par-e-mail
curl --request GET "${CADCAMFUN_URL}/api/desktop/user/by-email" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

/api/projects/tracked

obtenir /api/projects/tracked/{id} # misc.trackedGet

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Réponses
200 objet application/json
{
  id: string
  name: string
  description: string | null
  createdAt: string
  updatedAt: string
  ownerId: string
  organizationId: string | null
  isPublic: boolean
  owner: {
    id: string
    name: string | null
    email: string | null
  }
  organization: {
    id: string
    name: string
  } | null
  _count: {
    drawings: number | "Infinity" | "-Infinity" | "NaN"
    components: number | "Infinity" | "-Infinity" | "NaN"
  }
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
misc.trackedGet
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscTrackedGetInput
const result = await client.misc.trackedGet({
  id: "<id>"
})
curl
OBTENIR /api/projects/tracked/{id}
curl --request GET "${CADCAMFUN_URL}/api/projects/tracked/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le
mettre /api/projects/tracked/{id} # misc.trackedUpdate

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Corps de la requête · requis · application/json
{
  name?: string | null
  description?: string | null
  organizationId?: string | null
}
Réponses
200 objet application/json
{
  id: string
  name: string
  description: string | null
  createdAt: string
  updatedAt: string
  ownerId: string
  organizationId: string | null
  isPublic: boolean
  owner: {
    id: string
    name: string | null
    email: string | null
  }
  organization: {
    id: string
    name: string
  } | null
  _count: {
    drawings: number | "Infinity" | "-Infinity" | "NaN"
    components: number | "Infinity" | "-Infinity" | "NaN"
  }
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
misc.trackedUpdate
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscTrackedUpdateInput
const result = await client.misc.trackedUpdate({
  id: "<id>",
  name: "",
  description: "",
  organizationId: ""
})
curl
PUT /api/projects/tracked/{id}
curl --request PUT "${CADCAMFUN_URL}/api/projects/tracked/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-binary @request.json
Essayez-le
supprimer /api/projects/tracked/{id} # misc.trackedRemove

Nécessite Authorization: Bearer <token>.

Paramètres
NomDansTaperRequis
identifiant chemin chaîne requis
Réponses
200 objet application/json
{
  message: string
}
400 BadRequestEncoded application/json
BadRequestEncoded
401 UnauthorizedEncoded application/json
UnauthorizedEncoded
403 ForbiddenEncoded application/json
ForbiddenEncoded
404 NotFoundEncoded application/json
NotFoundEncoded
500 InternalErrorEncoded application/json
InternalErrorEncoded
Exemple de SDK
misc.trackedRemove
import { CadCam } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

// MiscTrackedRemoveInput
const result = await client.misc.trackedRemove({
  id: "<id>"
})
curl
SUPPRIMER /api/projects/tracked/{id}
curl --request DELETE "${CADCAMFUN_URL}/api/projects/tracked/<id>" \
  --header "Authorization: Bearer ${CADCAMFUN_TOKEN}"
Essayez-le

Schémas

Schémas nommés accessibles à partir des paramètres, des corps et des réponses de ce groupe. UN ? marque un champ facultatif ; | null marque un champ qui peut être présent avec une valeur nulle.

BadRequestEncoded
{
  _tag: "BadRequest"
  message: string
}
DesktopBadRequestEncoded
{
  _tag: "DesktopBadRequest"
  success: false
  error: string
}
DesktopConflictEncoded
{
  _tag: "DesktopConflict"
  success: false
  error: string
}
DesktopInternalEncoded
{
  _tag: "DesktopInternal"
  success: false
  error: string
}
DesktopNotFoundEncoded
{
  _tag: "DesktopNotFound"
  success: false
  error: string
}
DesktopUnauthorizedEncoded
{
  _tag: "DesktopUnauthorized"
  success: false
  error: string
}
ForbiddenEncoded
{
  _tag: "Forbidden"
  message: string
}
InternalErrorEncoded
{
  _tag: "InternalError"
  message: string
}
NotFoundEncoded
{
  _tag: "NotFound"
  message: string
}
NotifyBadRequestEncoded
{
  _tag: "NotifyBadRequest"
  success: false
  error: string
}
NotifyInternalEncoded
{
  _tag: "NotifyInternal"
  success: false
  error: string
}
UnauthorizedEncoded
{
  _tag: "Unauthorized"
  message: string
}

Appel à ce groupe

Les identifiants d'opération ont la forme misc.<name>. Le SDK Promise généré (@cadcamfun/api/sdk) expose la plupart d'entre eux comme client.<namespace>.<method>(input), où input est un objet plat composé de paramètres de chemin et de champs de corps ; L'exemple de SDK de chaque carte montre l'accesseur exact et le type d'entrée. Les téléchargements en plusieurs parties, les réponses binaires ou JavaScript et les webhooks bruts ne sont pas générés ; ces cartes montrent fetch à la place.

Erreurs du SDK Promise
import { CadCam, ClientError } from "@cadcamfun/api/sdk"

const client = CadCam.make({
  baseUrl: process.env.CADCAMFUN_URL!,
  headers: { authorization: `Bearer ${process.env.CADCAMFUN_TOKEN}` },
})

try {
  await client.projects.list()
} catch (error) {
  if (error instanceof ClientError) {
    // Transport | UnexpectedStatus | UnsupportedContentType | MalformedResponse | SseEventTooLarge
  } else {
    // a declared error body: switch on error._tag
  }
}

Dépannage

SymptômeCause probableRéparer
401 à chaque appelJeton d'un lancement précédent, ou manquant Bearer préfixeEnvoyer Authorization: Bearer <token> avec le jeton avec lequel le sidecar a été démarré.
400 avant que quoi que ce soit se produiseLe corps ou le paramètre ne correspond pas au schémaComparez la charge utile avec le schéma de demande sur la carte.
403 ou 404 sur un enregistrement visible ailleursLe compte intérimaire diffèreEnvoyez le droit x-session-token, ou utilisez le profil local propriétaire de l'enregistrement.
409État conflictuel, tel qu'un nom en double ou un chef de succursale obsolèteRelisez la ressource et réessayez avec les données actuelles.
Essayez, il est écrit "bloqué par CORS"Les documents sont servis à partir d'une origine sans bouclageExécutez la documentation localement ou copiez la demande en tant que curl.
Connexion rejetéeLe sidecar a redémarré sur un nouveau portLire le port du nouveau ready ligne.