# JavaScript - Nœud de workflow | Docs - nodulz

Source: https://nodulz.com/fr/docs/nodes/code

Language: fr

Exécuter du JavaScript dans une sandbox locale ou un conteneur Docker ou Podman.

## Utilisation et spécificités

Le mode sandbox exécute JavaScript localement avec timeout, hôtes autorisés et identifiants de secrets sélectionnés. Le mode Docker utilise source et executionTarget. Une sandbox ne fournit pas tous les accès d’un conteneur.

Type technique : `code`. Runtime : `nodulz`.

## Identifiants et prérequis

Aucun identifiant externe dédié n’est défini par ce nœud. Les sources distantes ou la cible d’exécution peuvent néanmoins nécessiter leurs propres accès.

Consultez le [guide des identifiants](/docs/credentials) si une source distante ou une cible d’exécution nécessite un accès.

## Paramètres

Les noms ci-dessous correspondent aux clés techniques. Les valeurs par défaut ne constituent pas une configuration prête à exécuter : renseignez les champs requis par votre opération. Les chemins contenant [] décrivent les éléments d’une liste ; certains champs dépendent du mode sélectionné.

| Paramètre | Type | Par défaut | Valeurs / limites |
| --- | --- | --- | --- |
| `files` | `record` | - | - |
| `directories` | `array` | - | -; max 100 |
| `dependencies` | `array` | `[]` | -; max 16 |
| `libraryIds` | `array` | - | -; max 100 |
| `executionMode` | `literal` | `"sandbox"` | `sandbox`, `docker` |
| `code` | `string` | `"const name = input.name ?? \"world\";\nreturn { message: `Hello ${name}`, nodeKeys: Object.keys(nodes) };"` | - |
| `timeoutMs` | `number` | `10000` | -; ≥ 100, ≤ 120000 |
| `allowedHosts` | `array` | `[]` | - |
| `secretCredentialIds` | `array` | `[]` | - |
| `source` | `union` | - | - |
| `source.files` | `record` | - | - |
| `source.directories` | `array` | - | -; max 100 |
| `source.kind` | `literal` | - | `inline`, `git`, `workspace` |
| `source.script` | `string` | - | - |
| `source.dependencies` | `array` | - | - |
| `source.repo` | `string` | - | -; min 1 |
| `source.branch` | `string` | `"main"` | -; min 1 |
| `source.scriptPath` | `string` | - | -; min 1 |
| `source.credentialId` | `string` | - | - |
| `source.installRoot` | `string` | - | - |
| `source.installCommand` | `string` | - | - |
| `source.workingDir` | `string` | - | - |
| `image` | `string` | - | - |
| `workspaceSource` | `union` | - | - |
| `workspaceSource.kind` | `literal` | - | `upstream`, `node` |
| `workspaceSource.key` | `string` | - | -; min 1 |
| `executionTarget` | `union` | `{"kind":"host"}` | - |
| `executionTarget.kind` | `literal` | `"host"` | `aws_ecs`, `aws_lambda`, `gcp_job`, `gcp_function`, `azure_container`, `azure_function`, `scaleway_job`, `scaleway_function`, `scaleway_container`, `digitalocean_function`, `host`, `remote_server`, `kube`, `swarm` |
| `executionTarget.credentialId` | `string` | - | -; min 1, max 512 |
| `executionTarget.storageCredentialId` | `string` | - | -; min 1, max 512 |
| `executionTarget.bucket` | `string` | - | - |
| `executionTarget.region` | `string` | - | `fr-par`, `nl-ams`, `pl-waw`; max 64 |
| `executionTarget.cluster` | `string` | - | -; min 1, max 512 |
| `executionTarget.taskDefinition` | `string` | - | -; min 1, max 512 |
| `executionTarget.containerName` | `string` | - | -; max 100 |
| `executionTarget.subnets` | `array` | - | -; min 1, max 16 |
| `executionTarget.securityGroups` | `array` | `[]` | -; max 5 |
| `executionTarget.assignPublicIp` | `boolean` | `false` | - |
| `executionTarget.functionName` | `string` | - | -; min 1, max 256 |
| `executionTarget.project` | `string` | - | -; max 100 |
| `executionTarget.jobName` | `string` | - | -; max 100 |
| `executionTarget.endpoint` | `string` | - | -; max 512 |
| `executionTarget.subscriptionId` | `string` | - | - |
| `executionTarget.resourceGroup` | `string` | - | -; max 90 |
| `executionTarget.functionApp` | `string` | - | -; max 100 |
| `executionTarget.jobId` | `string` | - | - |
| `executionTarget.functionId` | `string` | - | - |
| `executionTarget.containerId` | `string` | - | - |
| `executionTarget.namespaceId` | `string` | - | - |
| `executionTarget.serverId` | `string` | - | -; min 1 |
| `executionTarget.provider` | `enum` | - | `aws`, `gcp`, `scaleway`, `ovh`, `azure`, `digitalocean`, `hetzner` |
| `executionTarget.clusterId` | `string` | - | -; min 1 |
| `executionTarget.namespace` | `string` | - | - |

## Aide de configuration

| Réglage | Rôle et conseils |
| --- | --- |
| `executionMode`<br>Mode d’exécution | Chaque mode conserve son script et ses réglages. La sandbox exécute un corps de fonction ou un module run(context), avec accès réseau limité aux hôtes autorisés. Le mode Conteneur ou cloud exécute un module exportant run(context) via le provider choisi : Docker/Podman local, serveur SSH, conteneur managé ou fonction cloud (Lambda, par exemple). Les dépendances, fichiers et accès réseau dépendent du runtime du provider ; la liste des hôtes de la sandbox ne s’y applique pas. |
| `dependencies`<br>Dépendances | Paquets npm publics via esm.sh, un par ligne avec une version exacte (ex. lodash-es@4.17.21). Importez le nom du paquet ou utilisez await import(). Seuls les modules JavaScript compatibles sont disponibles : pas de modules natifs, de fichiers ni d’API Node. Le téléchargement initial compte dans le délai maximal ; les sources sont ensuite mises en cache. |
| `timeoutMs`<br>Délai maximum | Au-delà, le nœud échoue, y compris pendant un fetch ou un sleep. |
| `allowedHosts`<br>Hôtes autorisés pour fetch | Un par ligne : api.example.com, *.example.com pour les sous-domaines, ou * pour tout hôte public. Vide : fetch est désactivé. Les adresses privées et internes sont toujours refusées. |
| `secretCredentialIds`<br>Secrets | Connexions de type Secrets dont les variables sont lisibles dans secrets et process.env. Leurs valeurs sont masquées dans les journaux. |

## Configuration initiale

Exemple de configuration initiale du catalogue, à adapter avant exécution. Les secrets doivent rester dans les identifiants.

```json
{
  "executionMode": "sandbox",
  "code": "const name = input.name ?? \"world\";\nreturn { message: `Hello ${name}`, nodeKeys: Object.keys(nodes) };",
  "timeoutMs": 10000,
  "allowedHosts": [],
  "secretCredentialIds": []
}
```

## Vérification

Testez le nœud avec des données représentatives. Contrôlez sa sortie dans l’inspecteur et les logs, puis utilisez le mapping de l’éditeur pour les champs des nœuds suivants. Un test de déclencheur avec payload simulé ne valide pas la livraison du service externe.

Voir aussi : [Expressions et données](/docs/expressions), [Exécutions](/docs/executions), [Catalogue des nœuds](/docs/nodes).

## Pour aller plus loin

- [Fonctionnalités - nodulz](https://nodulz.com/fr/product/overview)
- [Catalogue des nœuds - nodulz](https://nodulz.com/fr/product/catalog)
- [Serveur MCP - nodulz](https://nodulz.com/fr/product/mcp)
- [Tarifs - nodulz](https://nodulz.com/fr/pricing)
- [Cas d’usage et automatisations - nodulz](https://nodulz.com/fr/use-cases)
- [Choisissez ce que vos workflows peuvent faire. - nodulz](https://nodulz.com/fr/compare)
- [Documentation - nodulz](https://nodulz.com/fr/docs)
