> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.fr/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration de l'application (BÊTA)

> Informations de référence pour les options de configuration des applications créées sur la nouvelle plateforme de développement (BÊTA)

<style>
  {`
    .github-link a div,
    .github-link a div p {
      display: inline;
      margin: 0;
      padding: 0;
    }
    .github-link {
      background-color: rgb(255, 255, 255);
      border-radius: 24px;
      box-shadow: rgba(0, 0, 0, 0.25) 0px 2px 4px 0px;
      padding: 5px;
      max-width: 247px;
      display: flex;
      align-items: center;
      margin-bottom: 20px;
    }
    .github-icon {
        display: inline;
        width: 24px;
        margin-right: 8px;
        flex-shrink: 0;
    }
    .table-key, .table-key div, .table-key p {
      margin: 0;
      font-size: 14px;
    }
    `}
</style>

Découvrez ci-dessous des informations de référence sur les fonctionnalités des applications de la plateforme de développement, y compris des définitions de fichiers de configuration, des détails de domaines, etc.

## Structure du projet

* Tous les composants du projet doivent se trouver dans le répertoire `src` spécifié dans le fichier de configuration `hsproject.json` de premier niveau.
* Toutes les fonctionnalités et tous les composants de l'application doivent se trouver dans le répertoire `src/app/`. Dans ce répertoire `app/`, vous définirez des sous-répertoires pour chaque fonctionnalité que vous souhaitez que votre application prenne en charge :
  * Les événements d'application sont configurés dans `app-events/`.
  * Les objets d'application sont définis dans `app-objects/`.
  * Toutes les caractéristiques de la carte sont définies dans `cards/`.
  * Les fonctionnalités de la page Paramètres sont définies dans `settings/`.
  * La télémétrie est configurée dans `telemetry/`.
  * Les abonnements Webhook sont définis dans `webhooks/`.
  * Les actions de workflow personnalisées sont définies dans `workflow-actions/`.
* Dans chaque sous-répertoire d'entités, vous configurerez l'entité à l'aide d'un fichier `*-hsmeta.json`. Vous pouvez préfixer le nom du fichier avec un élément significatif pour votre application (par exemple, `my-app-hsmeta.json`), tant que le fichier se termine par `-hsmeta.json`. Ces fichiers doivent se trouver à la racine de leur dossier respectif (par exemple, `app/my-app-hsmeta.json`, `cards/my-card-hsmeta.json`).

L'exemple de structure de répertoire ci-dessous décrit toutes les fonctionnalités disponibles. Vous trouverez des détails sur la configuration du fichier `app-hsmeta.json` de schéma d'application de niveau supérieur dans la [section schéma d'application](#app-schema) ci-dessous. Une fois que vous êtes prêt à ajouter des fonctionnalités d'application, consultez la section [Ajout de fonctionnalités d'application](#adding-app-features).

```shell theme={null}
my-project-folder/
└── hsproject.json
└── src
    └── app/
        └── app-hsmeta.json/
        └── app-events/
            └── my-event-type-hsmeta.json
        └── cards/
            └── MyCard.jsx
            └── my-app-card-hsmeta.json
            └── package.json
        └── settings/
            └── Settings.tsx
            └── settings-hsmeta.json
            └── package.json
        └── telemetry/
            └── telemetry-hsmeta.json
        └── webhooks/
            └── webhooks-hsmeta.json
        └── workflow-actions/
            └── custom-action-hsmeta.json
```

<Card title="Afficher un exemple sur GitHub" href="https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/tree/main/projects/app-object-getting-started-template" icon="github" horizontal />

L'extension HubSpot Visual Studio Code permet de [vérifier le type](/docs/developer-tooling/local-development/vs-code-extension#validate-hs-meta-json-config-files) de chacune des propriétés dans vos fichiers de configuration `*-hsmeta.json`.

## Spécification des UID

Le champ `uid` est un identifiant unique en interne pour votre application spécifique et doit également être globalement unique dans le projet. Toutes les [fonctionnalités de l'application](#adding-app-features) auront leur propre `uid` défini dans leurs fichiers `*-hsmeta.json` respectifs, qui doivent être différents du `uid` de niveau supérieur que vous choisissez dans le fichier `app-hsmeta.json` de votre application.

## Schéma de l'application

La configuration de premier niveau de votre application est spécifiée dans un fichier de configuration `app-hsmeta.json` du répertoire `app`.

```shell theme={null}
my-project-folder/
└── src
    └── app/
        └── app-hsmeta.json/
```

Voici les options de configuration disponibles pour `app-hsmeta.json`.

```json theme={null}
{
  "uid": "new_developer_platform_app",
  "type": "app",
  "config": {
    "description": "An example to demonstrate how to build an app with developer projects.",
    "name": "my first app",
    "distribution": "marketplace",
    "auth": {
      "type": "oauth",
      "redirectUrls": ["http://localhost:3000/oauth-callback"],
      "requiredScopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"],
      "optionalScopes": [],
      "conditionallyRequiredScopes": []
    },
    "permittedUrls": {
      "fetch": ["https://api.hubapi.com"],
      "iframe": [],
      "img": []
    },
    "support": {
      "supportEmail": "support@example.com",
      "documentationUrl": "https://example.com/docs",
      "supportUrl": "https://example.com/support",
      "supportPhone": "+18005555555"
    }
  }
}
```

<Card title="Afficher un exemple sur GitHub" href="https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-hsmeta.json" icon="github" horizontal />

Chacune des options de configuration est détaillée dans le tableau ci-dessous. Vous trouverez plus de contexte sur [la distribution de votre application](#distribution), la configuration [de l'authentification](#authentication) et la spécification [des domaines](#scopes) dans les sections sous le tableau.

<p className="table-key">
  Les champs marqués par sont <span style={{ color: 'red' }}>\*</span> obligatoires.
</p>

| Champ                                               | Type   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| --------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `uid`<span style={{color:"red"}}>\*</span>          | Chaîne | un identifiant unique interne pour l'application. Doit être globalement unique au sein du projet. Peut être n'importe quelle chaîne jusqu'à 64 caractères. Les caractères peuvent être en majuscules ou en minuscules, et peuvent inclure des chiffres, des tirets bas (`_`), des tirets (`-`) et des points (`.`).                                                                                                                                                                                                                 |
| `type`<span style={{color:"red"}}>\*</span>         | Chaîne | le type de composant. Doit correspondre au nom du dossier parent (`app`).                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `description`<span style={{color:"red"}}>\*</span>  | Chaîne | une description de ce que l'application fait pour l'utilisateur qui l'installe. Peut être n'importe quelle chaîne jusqu'à 8 192 caractères.                                                                                                                                                                                                                                                                                                                                                                                         |
| `name`<span style={{color:"red"}}>\*</span>         | Chaîne | le nom de l'application, qui s'affichera dans HubSpot. Peut être n'importe quelle chaîne jusqu'à 200 caractères. Ne doit pas commencer ou se terminer par un espace.                                                                                                                                                                                                                                                                                                                                                                |
| `distribution`<span style={{color:"red"}}>\*</span> | Chaîne | la méthode de distribution de l'application, qui peut être définie sur l'une des suivantes :<ul><li>`marketplace` : utilisé si vous souhaitez que l'application soit éligible pour être listée dans le marketplace des applications HubSpot.</li><li>`private` : utilisé si vous souhaitez installer votre application uniquement dans un ensemble spécifique de comptes sur la liste d'autorisation ou un seul compte à la fois.</li></ul> <p>Découvrez-en davantage dans la section [Distribution](#distribution) ci-dessous.</p> |
| `auth`<span style={{color:"red"}}>\*</span>         | Objet  | un objet contenant les détails de la méthode d'authentification de l'application. Consultez la [section Authentification](#authentication) ci-dessous pour plus de détails.                                                                                                                                                                                                                                                                                                                                                         |
| `permittedUrls`                                     | Objet  | un tableau contenant les URL que l'application est autorisée à appeler. Les URL doivent utiliser le schéma HTTPS et contenir une [autorité](https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#authority), suivie d'un préfixe de chemin facultatif si nécessaire.                                                                                                                                                                                                                    |
| `supportEmail`                                      | Chaîne | une adresse e-mail valide que les utilisateurs peuvent contacter pour obtenir de l'aide.                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `documentationUrl`                                  | Chaîne | l'URL externe vers laquelle les utilisateurs peuvent accéder pour obtenir de la documentation utile. Doit utiliser HTTPS.                                                                                                                                                                                                                                                                                                                                                                                                           |
| `supportUrl`                                        | Chaîne | l'URL externe vers laquelle les utilisateurs peuvent accéder pour obtenir une assistance supplémentaire. Doit utiliser HTTPS.                                                                                                                                                                                                                                                                                                                                                                                                       |
| `supportPhone`                                      | Chaîne | le numéro de téléphone que les utilisateurs peuvent contacter pour obtenir de l'aide. Doit commencer par un signe plus (`+`).                                                                                                                                                                                                                                                                                                                                                                                                       |

### Distribution

Le champ `distribution` dans le schéma de votre application vous permet de configurer la manière dont vous souhaitez distribuer votre application :

* Si vous prévoyez de lister votre application sur le [marketplace des applications de HubSpot](https://ecosystem.hubspot.com/marketplace/apps), définissez le champ `distribution` sur `"marketplace"`. Un exemple de schéma d'application pour cette option se trouve [ici](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/public-app-getting-started-template/src/app/app-hsmeta.json). Si vous choisissez cette option, assurez-vous de définir dans `type` avec la propriété `auth` sur `oauth`, comme indiqué dans la section [Authentification](#authentication) ci-dessous.
* Si vous souhaitez autoriser l'installation de votre application sur un ensemble spécifique de comptes ajoutés à la liste d'autorisation ou si vous souhaitez limiter l'installation à un seul compte à la fois, définissez `distribution` sur `"private"`. Veillez à définir le `type` dans la propriété `auth` en conséquence :
  * Si vous souhaitez installer votre application dans plusieurs comptes sur la base [d'une liste d'inclusion que vous configurez dans les paramètres de votre projet](/docs/apps/developer-platform/build-apps/manage-apps-in-hubspot#manage-authentication-for-your-app), définissez l'authentification `type` sur `oauth`. Consultez l'exemple de schéma d'application pour cette option [ici](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-oauth-getting-started-template/src/app/app-hsmeta.json).
  * Pour limiter l'installation à un seul compte, soit le même que celui que vous utilisez pour le développement, soit un autre compte auquel l'utilisateur installateur a accès, définissez l'authentification `type` sur `static`. Un exemple de schéma d'application pour l'authentification statique est disponible [ici](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-static-getting-started-template/src/app/app-hsmeta.json).

### Authentification

L'authentification pour votre application est configurée via la propriété `auth` dans le schéma de votre application. Vous pouvez spécifier les exigences en matière de domaine de votre application, les URL de redirection et le type d'authentification.

<p className="table-key">
  Les champs marqués par sont <span style={{ color: 'red' }}>\*</span> obligatoires.
</p>

| Champ                                                 | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`<span style={{color:"red"}}>\*</span>           | Chaîne  | le type d'authentification, qui peut être défini comme l'un des élèments suivants : <ul><li>`oauth` : autoriser l'installation via OAuth, soit pour un ensemble spécifique de comptes sur la liste d'inclusion, soit pour le lister dans le marketplace des applications HubSpot.</li><li>`static` : limitez l'installation de votre application à un seul compte auquel l'utilisateur qui l'installe a accès. </li></ul> |
| `redirectUrls`<span style={{color:"red"}}>\*</span>   | Tableau | une liste des URL vers lesquelles le processus OAuth est autorisé à rediriger. Chaque application doit avoir au moins une URL de redirection d'authentification et doit utiliser HTTPS. La seule exception est `http://localhost`, qui est autorisée pour les tests.                                                                                                                                                      |
| `requiredScopes`<span style={{color:"red"}}>\*</span> | Tableau | une liste des domaines requis de votre application. Chaque application doit inclure au moins un domaine et l'utilisateur qui a procédé à l'installation doit accorder ces domaines pour installer l'application avec succès. [Découvrez-en davantage sur les domaines ci-dessous](#scopes).                                                                                                                               |
| `optionalScopes`                                      | Tableau | une liste des domaines facultatifs de votre application. Ces domaines peuvent être exclus de l'autorisation lors de l'installation si le compte ou l'utilisateur qui installe l'application ne dispose pas des autorisations appropriées. Dans ce cas, le domaine ne sera pas inclus dans le jeton d'actualisation ou le jeton d'accès qui en résulte. [Découvrez-en davantage sur les domaines ci-dessous](#scopes).     |
| `conditionallyRequiredScopes`                         | Tableau | une liste des domaines requis uniquement lorsqu'ils sont inclus dans le paramètre de requête `scope` de l'URL d'installation. [Découvrez-en davantage sur les domaines ci-dessous](#scopes).                                                                                                                                                                                                                              |

### Périmètres d'accès

Dans le champ `auth` d'un fichier de configuration d'application, vous pouvez indiquer trois [types de domaines](/docs/apps/legacy-apps/public-apps/overview#scope-types) : les domaines requis, les domaines conditionnellement requis et les domaines facultatifs.

Au minimum, votre application doit inclure le domaine `read` pour permettre aux clients d'accéder au type d'objet CRM associé.

```json theme={null}
"auth": {
      "type" : "oauth",
      "redirectUrls": ["http://localhost:3000/oauth-callback"],
      "requiredScopes": [
        "crm.objects.contacts.read",
        "crm.objects.contacts.write"
      ],
      "optionalScopes": [],
      "conditionallyRequiredScopes": []
    },

```

Pour obtenir une liste complète des domaines disponibles, consultez la [référence des domaines](/docs/apps/legacy-apps/authentication/scopes).

## Ajout de fonctionnalités de l'application

Pour configurer les fonctionnalités de l'application telles que les abonnements webhook, les actions de workflow personnalisées et les cartes d'application, consultez les guides ci-dessous pour plus de détails sur l'ajout des fichiers `*-hsmeta.json` associés à votre projet :

* [Créer une carte d'application](/docs/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card)
* [Définir des événements d'application](/docs/apps/developer-platform/add-features/app-events/overview)
* [Créer des objets d'application](/docs/apps/developer-platform/add-features/app-objects/quickstart-guide-to-app-objects)
* [Créer un composant de paramètres](/docs/apps/developer-platform/add-features/ui-extensibility/create-a-settings-component)
* [Configurer une action de workflow personnalisée](/docs/apps/developer-platform/add-features/custom-workflow-actions)
* [Configurer un abonnement au webhook](/docs/apps/developer-platform/add-features/configure-webhooks)
* [Ajouter des données de télémétrie](/docs/apps/developer-platform/add-features/add-telemetry)
