> For the complete documentation index, see [llms.txt](https://doc.commandersact.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.commandersact.com/fr/fonctionnalites/destinations/destination-builder/javascript-destination-builder/serverside-js-helpers.md).

# Aides JavaScript server-side

## `decodeURI` <a href="#getalleventdata" id="getalleventdata"></a>

Décode tous les caractères encodés dans l'URI fournie. Renvoie un **chaîne** qui représente l'URI décodée. Renvoie `undefined` lorsqu'on lui fournit une entrée invalide.

**Syntaxe**

```javascript
decodeUri(encoded_uri);
```

**Exemple**

```javascript
const decodeUri = require('decodeUri');

const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
  // ...
}
```

| Paramètre         | Type     | Description                                                                                                                                             |
| ----------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`encoded_uri`** | *chaîne* | Une URI qui a été encodée par [`encodeUri()`](https://developers.google.com/tag-platform/tag-manager/server-side/api#encodeuri) ou par d'autres moyens. |

## `decodeUriComponent` <a href="#decodeuricomponent" id="decodeuricomponent"></a>

Décode tous les caractères encodés dans le composant URI fourni. Renvoie un **chaîne** qui représente le composant URI décodé. Renvoie `undefined` lorsqu'on lui fournit une entrée invalide.

**Syntaxe**

```javascript
decodeUriComponent(encoded_uri_component);
```

**Exemple**

```javascript
const decodeUriComponent = require('decodeUriComponent');

const decodedQuery = decodeUriComponent(data.query);
if (decodedQuery) {
  // ...
}
```

| Paramètre                   | Type     | Description                                                                                                                                                                       |
| --------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`encoded_uri_component`** | *chaîne* | Un composant URI qui a été encodé par [`encodeUriComponent()`](https://developers.google.com/tag-platform/tag-manager/server-side/api#encodeuricomponent) ou par d'autres moyens. |

## `encodeUri` <a href="#getalleventdata" id="getalleventdata"></a>

Renvoie un Uniform Resource Identifier (URI) encodé en échappant les caractères spéciaux. Renvoie un **chaîne** qui représente la chaîne fournie encodée en tant qu'URI.

**Syntaxe**

```javascript
encodeUri(uri);
```

**Exemple**

```javascript
const encodeUri = require('encodeUri');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/' + encodeUri(pathInput));
```

| Paramètre | Type     | Description       |
| --------- | -------- | ----------------- |
| `uri`     | *chaîne* | Une URI complète. |

## `encodeUriComponent` <a href="#encodeuricomponent" id="encodeuricomponent"></a>

Renvoie un Uniform Resource Identifier (URI) encodé en échappant les caractères spéciaux. Renvoie un **chaîne** qui représente la chaîne fournie encodée en tant qu'URI.

**Syntaxe**

```javascript
encodeUriComponent(str);
```

**Exemple**

```javascript
const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/?' + encodeUriComponent(queryInput));
```

| Paramètre | Type     | Description             |
| --------- | -------- | ----------------------- |
| **`str`** | *chaîne* | Un composant d'une URI. |

## `fromBase64` <a href="#frombase64" id="frombase64"></a>

Décode une chaîne encodée en base64. Renvoie `undefined` si l'entrée est invalide.

**Syntaxe**

```javascript
fromBase64(base64EncodedString);
```

**Exemple**

```javascript
const fromBase64 = require('fromBase64');

const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
  // ...
}
```

| Paramètre                 | Type     | Description               |
| ------------------------- | -------- | ------------------------- |
| **`base64EncodedString`** | *chaîne* | Chaîne encodée en base64. |

## `generateRandom` <a href="#generaterandom" id="generaterandom"></a>

Renvoie un **nombre** (entier) dans l'intervalle donné.

**Syntaxe**

```javascript
generateRandom(min, max);
```

**Exemple**

```javascript
const generateRandom = require('generateRandom');

const randomValue = generateRandom(0, 10000000);
```

| Paramètre | Type     | Description                                                |
| --------- | -------- | ---------------------------------------------------------- |
| **`min`** | *nombre* | Valeur minimale potentielle de l'entier renvoyé (incluse). |
| **`max`** | *nombre* | Valeur maximale potentielle de l'entier renvoyé (incluse). |

## `getAllEventData` <a href="#getalleventdata" id="getalleventdata"></a>

Renvoie une copie des données d'événement.

**Syntaxe**

```javascript
getAllEventData();
```

**Exemple d'utilisation**

```javascript
const getAllEventData= require('getAllEventData');
const eventModel = getAllEventData();
JSON.stringify'd. Renvoie un 
const body = {
    crm_id:eventModel.user.id,
    currency:eventModel.currency
};
```

{% hint style="info" %}
Notez que les données d'événement peuvent contenir davantage de propriétés que celles que vous avez envoyées initialement en raison des propriétés système ajoutées automatiquement sur [les événements web](/fr/developpeurs/tracking-and-integrations/tracking/about-events/js-sdk-event-specificity.md) et [les événements app sdk](/fr/developpeurs/tracking-and-integrations/tracking/about-events/mobile-sdk-event-specificity.md#event-specificity-for-mobile-app).
{% endhint %}

**Exemple de données :**

Si vous envoyez cet événement web :

```javascript
cact('trigger', 'search', {
  "search_term": "blue t-shirt",
  "user": {
    "id": "12345",
    "email": "anakin.skywalker@domain.com",
    "consent_categories": ["1","3"]
  }
);
```

Alors la fonction getAllEventData() renverra cet objet :

```json
{
   "event_name": "search",
   "search_term": "blue t-shirt",
   "user": {
      "id": "12345",
      "email": "anakin.skywalker@domain.com",
      "consent_categories": ["1","3"]
   },
   "url": "https://www.mywebsite.com/path1/path2/", //Ajouté automatiquement s'il manque
   "path": "/path1/path2/", //Ajouté automatiquement
   "referrer": "https:///www.google.fr", //Ajouté automatiquement
   "title": "Mon titre de page", //Ajouté automatiquement s'il manque
   "context": {
      "event_id": "202110130000000000", //Ajouté automatiquement
      "generatorVersion": "10.0", //Ajouté automatiquement
      "containerVersion": "3.1", //Ajouté automatiquement
      "event_timestamp": "1639044446636", //Ajouté automatiquement
      "page": { //Ajouté automatiquement
         "title": "Page de recherche", //Ajouté automatiquement
         "url": "https://shop.com/search?q=...", //Ajouté automatiquement
         "lang": "en", //Ajouté automatiquement
         "referrer": "https:///www.google.fr", //Ajouté automatiquement
         "viewport": { //Ajouté automatiquement
            "width": 320, //Ajouté automatiquement
            "height": 568 //Ajouté automatiquement
         }
      },
      "device": { //Ajouté automatiquement
         "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36",//Ajouté automatiquement
         "ip": "102.3.4.56",//Copié automatiquement depuis l'en-tête de la requête
         "lang": "fr",//Ajouté automatiquement
         "cookie": "_fbp=123; _fbc=456; _ga=789",//Ajouté automatiquement
         "timezone": "Europe/Paris"//Ajouté automatiquement
      }
   }
}
```

## `getCookieValues` <a href="#getcookievalues" id="getcookievalues"></a>

Renvoie un tableau contenant les valeurs de tous les cookie portant le nom donné.

**Syntaxe**

```
getCookieValues(name[, noDecode]);
```

**Exemple**

```javascript
const getCookieValues = require('getCookieValues');
const facebook_fbp = getCookieValues('fbp')[0];
if (facebook_fbp ) {  // ...}
```

***

**Paramètres**

| Paramètre      | Type      | Description                                                                                          |
| -------------- | --------- | ---------------------------------------------------------------------------------------------------- |
| **`nom`**      | *chaîne*  | Nom du cookie.                                                                                       |
| **`noDecode`** | *boolean* | Si `true`, les valeurs du cookie ne seront pas décodées avant d'être renvoyées. Par défaut, `false`. |

## `getEventData` <a href="#geteventdata" id="geteventdata"></a>

Renvoie une copie de la valeur au chemin donné dans les données d'événement. Renvoie `undefined` s'il n'y a pas de données d'événement ou s'il n'y a aucune valeur au chemin donné.

**Syntaxe**

```
getEventData(keyPath);
```

**Exemple**

```javascript
const getEventData = require('getEventData');

const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');
```

**Paramètres**

| Paramètre     | Type  | Description                                                                                                                                                                                                                              |
| ------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`keyPath`** | *any* | Le chemin de la clé, où les composants du chemin sont séparés par des points. Les composants du chemin peuvent être des clés dans un objet ou des indices dans un tableau. Si `keyPath` n'est pas une chaîne, il est converti en chaîne. |

## `getRemoteAddress` <a href="#getremoteaddress" id="getremoteaddress"></a>

Renvoie une **chaîne** représentation de l'adresse IP d'où provient la requête, par ex. `62.123.65.780` pour IPv4 ou `2001:0db8:85a3:0:0:8a2e:0370:1234` pour IPv6

**Syntaxe**

```
getRemoteAddress();
```

## `getTimestamp` <a href="#gettimestamp" id="gettimestamp"></a>

**Obsolète.** Préférez [getTimestampMillis](https://developers.google.com/tag-platform/tag-manager/server-side/api#gettimestampmillis).

Renvoie une **nombre** qui représente l'heure actuelle en millisecondes depuis l'époque Unix, telle que renvoyée par `Date.now()`.

**Syntaxe**

```
getTimestamp();
```

## `getTimestampMillis` <a href="#gettimestampmillis" id="gettimestampmillis"></a>

Renvoie une **nombre** qui représente l'heure actuelle en millisecondes depuis l'époque Unix, telle que renvoyée par `Date.now()`.

**Syntaxe**

```
getTimestampMillis();
```

## `getType` <a href="#gettype" id="gettype"></a>

Renvoie une chaîne décrivant le type de la valeur donnée.

| Type d'entrée | Valeur renvoyée |
| ------------- | --------------- |
| *chaîne*      | 'chaîne'        |
| *nombre*      | 'nombre'        |
| *boolean*     | 'booléen'       |
| *null*        | 'null'          |
| *undefined*   | 'undefined'     |
| *Tableau*     | 'tableau'       |
| *Objet*       | 'objet'         |
| *Fonction*    | 'fonction'      |

**Syntaxe**

```
getType(value);
```

**Exemple**

```javascript
const getType = require('getType');

const type = getType(value);
if (type === 'string') {
  // Gère l'entrée de type chaîne.
} else if (type === 'number') {
  // Gère l'entrée numérique.
} else {
  logToConsole('Unsupported input type: ', type);
}
```

**Paramètres**

| Paramètre   | Type  | Description      |
| ----------- | ----- | ---------------- |
| **`value`** | *any* | Valeur d'entrée. |

## `logToConsole` <a href="#logtoconsole" id="logtoconsole"></a>

Journalise son ou ses argument(s) dans la console.

Ces journaux sont visibles dans la console de Destination Builder.

**Exemple**

```
const logToConsole = require('logToConsole');

const product_color= "red";
const product_price= 10;
logToConsole('color is: ', product_color, ' and price is: ', product_price);
```

**Syntaxe**

```
logToConsole(argument1[, argument2, ...]);
```

**Paramètres**

La fonction prend un ou plusieurs arguments, chacun étant converti en chaîne si nécessaire, puis journalisé dans la console.

## `makeInteger` <a href="#makeinteger" id="makeinteger"></a>

Convertit la valeur donnée en un **nombre** (entier).

**Syntaxe**

```
makeInteger(value);
```

**Paramètres**

| Paramètre   | Type                  | Description            |
| ----------- | --------------------- | ---------------------- |
| **`value`** | *n'importe quel type* | La valeur à convertir. |

## `makeNumber` <a href="#makenumber" id="makenumber"></a>

Convertit la valeur donnée en un **nombre**.

**Syntaxe**

```
makeNumber(value);
```

**Paramètres**

| Paramètre   | Type                  | Description            |
| ----------- | --------------------- | ---------------------- |
| **`value`** | *n'importe quel type* | La valeur à convertir. |

## `makeString` <a href="#makestring" id="makestring"></a>

Renvoie la valeur donnée sous forme de **chaîne**.

**Syntaxe**

```
makeString(value);
```

**Paramètres**

| Paramètre   | Type                  | Description            |
| ----------- | --------------------- | ---------------------- |
| **`value`** | *n'importe quel type* | La valeur à convertir. |

## `parseUrl` <a href="#parseurl" id="parseurl"></a>

Renvoie un objet qui contient toutes les parties composantes d'une URL donnée, semblable à `URL` objet.

Cette API renverra `undefined` pour toute URL mal formée. Pour les URL correctement formatées, les champs absents de la chaîne URL auront la valeur d'une chaîne vide, ou dans le cas de `searchParams`, un objet vide.

L'objet renvoyé comportera les champs suivants :

```
{  
    href: string,  
    origin: string, 
    protocol: string,  
    username: string,  
    password: string,  
    host: string,  
    hostname: string,  
    port: string,  
    pathname: string,  
    search: string,  
    searchParams: Object<string, (string|Array)>,  
    hash: string,
}
```

**Syntaxe**

```
parseUrl(url);
```

**Exemple**

```
const parseUrl = require('parseUrl');const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');
```

**Paramètres**

| Paramètre | Type     | Description                       |
| --------- | -------- | --------------------------------- |
| **`URL`** | *chaîne* | L'URL complète qui sera analysée. |

## `sha256` <a href="#sha256" id="sha256"></a>

Calcule le condensé SHA-256 de l'entrée et appelle un callback avec le condensé encodé en base64, sauf si l'objet `options` spécifie un encodage de sortie différent.

Cette signature d'API et ce comportement correspondent à l' [`sha256`](https://developers.google.com/tag-platform/tag-manager/templates/api#sha256) API pour les conteneurs web ; toutefois, les modèles personnalisés dans les conteneurs serveur devraient utiliser la [`sha256Sync`](https://developers.google.com/tag-platform/tag-manager/server-side/api#sha256sync) API pour un code plus simple.

**Syntaxe**

```
sha256(input, onSuccess, options = undefined);
```

**Exemple**

```
const encodeUriComponent = require('encodeUriComponent');const sendHttpGet = require('sendHttpGet');const sha256 = require('sha256');sha256('inputString', (digest) => {  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));});sha256('inputString', (digest) => {  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));}, {outputEncoding: 'hex'});
```

**Paramètres**

| Paramètre       | Type       | Description                                                                                                                                                                                   |
| --------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`input`**     | *chaîne*   | La chaîne à hacher.                                                                                                                                                                           |
| **`onSuccess`** | *fonction* | Appelé avec le condensé résultant, encodé en base64, sauf si le `options` spécifie un encodage de sortie différent.                                                                           |
| **`options`**   | *objet*    | *Facultatif* objet d'options permettant de personnaliser l'encodage de sortie. S'il est spécifié, l'objet doit contenir la clé `outputEncoding` avec comme valeur l'une de `base64` ou `hex`. |

## `sha256Sync` <a href="#sha256sync" id="sha256sync"></a>

Calcule et renvoie le condensé SHA-256 de l'entrée, encodé en base64, sauf si le `options` spécifie un encodage de sortie différent.

**Syntaxe**

```
sha256Sync(input, options = undefined);
```

**Exemple**

```
const encodeUriComponent = require('encodeUriComponent');const sendHttpGet = require('sendHttpGet');const sha256Sync = require('sha256Sync');const digestBase64 = sha256Sync('inputString');const digestHex = sha256Sync('inputString', {outputEncoding: 'hex'});sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestBase64));sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestHex));
```

**Paramètres**

| Paramètre     | Type     | Description                                                                                                                                                                                   |
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`input`**   | *chaîne* | La chaîne à hacher.                                                                                                                                                                           |
| **`options`** | *objet*  | *Facultatif* objet d'options permettant de personnaliser l'encodage de sortie. S'il est spécifié, l'objet doit contenir la clé `outputEncoding` avec comme valeur l'une de `base64` ou `hex`. |

## `signHmac` <a href="#signhmac" id="signhmac"></a>

Génère une signature HMAC pour le payload donné, en utilisant `sha256` et `base64` l'encodage par défaut, sauf si le `options` objet spécifie autre chose. Les objets passés en tant que payload sont automatiquement `JSON.stringify`'és. Renvoie un **chaîne**.

**Syntaxe**

```javascript
signHmac(payload, secret, options = undefined);
```

**Exemple**

```javascript
const signHmac = require('signHmac');

// Signe une chaîne avec les options par défaut (sha256 + base64)
const signature = signHmac('my payload', 'mySecretKey');

// Signature avec un algorithme et un encodage personnalisés
const signatureHex = signHmac('my payload', 'mySecretKey', { alg: 'sha1', outputEncoding: 'hex' });

// Signe un objet (automatiquement JSON.stringify'ê)
const objectSignature = signHmac({ key: 'value' }, 'mySecretKey');
```

**Paramètres**

| Paramètre     | Type             | Description                                                                                                                             |
| ------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **`payload`** | *string\|object* | Les données à signer. Les objets sont automatiquement convertis en chaînes JSON.                                                        |
| **`secret`**  | *chaîne*         | La clé secrète utilisée pour la génération HMAC.                                                                                        |
| **`options`** | *objet*          | *Facultatif* Objet d'options permettant de personnaliser l'algorithme et l'encodage de sortie. Voir les détails des options ci-dessous. |

**Options**

| Propriété            | Type     | Valeur par défaut | Description                                                                                                                                          |
| -------------------- | -------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`alg`**            | *chaîne* | `'sha256'`        | L'algorithme de hachage. Valeurs prises en charge : `'sha256'`, `'sha1'`, `'sha512'`, `'sha384'`, `'md5'` et d'autres algorithmes de digest OpenSSL. |
| **`outputEncoding`** | *chaîne* | `'base64'`        | L'encodage de sortie. Valeurs prises en charge : `'base64'`, `'base64url'`, `'hex'`, `'binary'` (`latin1`).                                          |

## `toBase64` <a href="#tobase64" id="tobase64"></a>

Encode une chaîne en base64.

**Syntaxe**

```
toBase64(input);
```

**Exemple**

```
const toBase64 = require('toBase64');const base64Hello = toBase64('hello');
```

**Paramètres**

| Paramètre   | Type     | Description       |
| ----------- | -------- | ----------------- |
| **`input`** | *chaîne* | Chaîne à encoder. |

## `JSON` <a href="#json" id="json"></a>

Renvoie un objet qui fournit des fonctions JSON.

Le `parse()` La fonction parse analyse une chaîne JSON pour construire la valeur ou l'objet décrit par la chaîne. Si la valeur ne peut pas être analysée (JSON mal formé), la fonction renverra `undefined`. Si la valeur d'entrée n'est pas une chaîne, l'entrée sera convertie en chaîne.

Le `stringify()` La fonction convertit l'entrée en une chaîne JSON. Si la valeur ne peut pas être analysée (par ex. l'objet contient un cycle), la méthode renverra `undefined`.

**Syntaxe**

```
JSON.parse(yourString);
JSON.stringify(yourObject);
```

**Exemple**

```
const JSON = require('JSON');
// La chaîne JSON d'entrée est convertie en objet.
const object = JSON.parse('{"foo":"bar"}');
// L'objet d'entrée est converti en chaîne JSON.
const str = JSON.stringify({foo: 'bar'});
```

***

## `Math` <a href="#math" id="math"></a>

Un objet fournissant `Math` des fonctions.

**Syntaxe**

```
const Math = require('Math');
// Récupère la valeur absolue.
const absolute = Math.abs(-5);
// Arrondit l'entrée à l'entier inférieur le plus proche.
const roundedDown = Math.floor(4.6);
// Arrondit l'entrée à l'entier supérieur le plus proche.
const roundedUp = Math.ceil(2.1);
// Arrondit l'entrée à l'entier le plus proche.
const rounded = Math.round(4.2);
// Renvoie l'argument le plus grand.
const biggest = Math.max(1, 4);
// Renvoie l'argument le plus petit.
const smallest = Math.min(4, 5);
// Renvoie le premier argument élevé à la puissance du deuxième argument.
const powerful = Math.pow(4, 2);
// Renvoie la racine carrée de l'argument.
const unsquared = Math.sqrt(81);
```

**Paramètres**

Les paramètres des fonctions Math sont convertis en nombres.

## `sendHttpGet` <a href="#sendhttpget" id="sendhttpget"></a>

Effectue une requête HTTP GET vers l'URL spécifiée et appelle un callback avec la réponse une fois la requête terminée ou en timeout.

**Syntaxe**

```javascript
sendHttpGet(url[, callback[, options]]);
```

**Exemple**

```javascript
const sendHttpGet = require('sendHttpGet');
// Envoie une requête GET et sélectionne la réponse// en fonction de la réponse du GET 
sendHttpGet('https://example.com/collect', function(statusCode, headers, body) {
    if (statusCode != 200) {yourCallbackFunction();}
}, {
    headers: {key: 'value'},
    timeout: 500
});
```

**Paramètres**

| Paramètre      | Type       | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`URL`**      | *chaîne*   | L'URL de la requête.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **`callback`** | *fonction* | <p>Un callback facultatif à invoquer à la fin de la requête, en cas d'erreur ou de timeout.<br><br>Il est invoqué avec le <strong>code d'état de réponse</strong>, le <strong>en-têtes de réponse</strong>, et le <strong>corps de réponse</strong> (ou undefined s'il n'y avait pas de corps de réponse).<br>Si la requête a échoué (par ex. URL invalide, aucune route vers l'hôte, échec de négociation SSL, etc.), le callback sera invoqué avec un <strong>code d'état de réponse égal à zéro</strong>, <strong>aucun en-tête</strong>, et un <strong>corps undefined</strong>.<br>Si le <code>'timeout'</code> l’option a été définie et la requête a expiré, le callback sera invoqué avec un <strong>code d’état de réponse de -1</strong>, <strong>aucun en-tête</strong>, et un <strong>corps undefined</strong>.</p> |
| **`options`**  | *objet*    | Options de requête facultatives. Les options prises en charge sont **headers**, **timeout**. Des options avancées peuvent être ajoutées dans **extraOptions**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

#### **Options**

* **headers**: En-têtes supplémentaires de la requête représentés sous forme d'objet.
* **timeout**: Le délai d'attente, en millisecondes, avant l'abandon de la requête.
* **extraOptions**: Options avancées (ex. : {strictSSL:true})

## `sendHttpRequest` <a href="#sendhttprequest" id="sendhttprequest"></a>

Effectue une requête HTTP vers l'URL spécifiée et invoque un callback avec la réponse une fois la requête terminée ou expirée.

**Syntaxe**

```
sendHttpRequest(url[, callback[, options[, body]]]);
```

**Exemple**

```javascript
const sendHttpRequest = require('sendHttpRequest');
const body = {
    user_type:'vip',
    account:'123'
};
// Envoie une requête POST 
sendHttpRequest('https://example.com/collect', function(statusCode, headers, body) {
    // votre code de callback...
}, {
    headers: {
        token: '123456789'
    },
    method: 'POST',
    timeout: 1000
},  JSON.stringify(body));
```

**Paramètres**

| Paramètre      | Type       | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| -------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`URL`**      | *chaîne*   | L'URL de la requête.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **`callback`** | *fonction* | <p>Un callback facultatif à invoquer à la fin de la requête, en cas d'erreur ou de timeout.<br><br>Il est invoqué avec le <strong>code d'état de réponse</strong>, le <strong>en-têtes de réponse</strong>, et le <strong>corps de réponse</strong> (ou undefined s'il n'y avait pas de corps de réponse).<br>Si la requête a échoué (par ex. URL invalide, aucune route vers l'hôte, échec de négociation SSL, etc.), le callback sera invoqué avec un <strong>code d'état de réponse égal à zéro</strong>, <strong>aucun en-tête</strong>, et un <strong>corps undefined</strong>.<br>Si l'option 'timeout' a été définie et que la requête a expiré, le callback sera invoqué avec un <strong>code d’état de réponse de -1</strong>, <strong>aucun en-tête</strong>, et un <strong>corps undefined</strong>.</p> |
| **`options`**  | *objet*    | Options de requête facultatives. Les options prises en charge sont : **headers**, **méthode**, et **timeout**. Les clés d'option inconnues sont ignorées. Des options avancées peuvent être ajoutées dans **extraOptions.**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| **`body`**     | *chaîne*   | Corps de requête facultatif.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |

**Options**

* **headers**: En-têtes supplémentaires de la requête.
* **méthode**: La méthode de requête, par défaut 'GET'.
* **timeout**: Le délai d'attente, en millisecondes, avant l'abandon de la requête.
* **extraOptions**: Options avancées (ex. : {strictSSL:true})

## `md5Sync`

Calcule et renvoie le `md5` condensé de l'entrée.

**Syntaxe**

```
md5Sync(input);
```

**Exemple**

```javascript
const md5Sync= require('md5Sync');
const email = {};
email.md5 = md5Sync(user.user_email);
sendHttpGet('https://example.com/collect?e5=' + email.md5);
```

## `templateDataStorage` <a href="#templatedatastorage" id="templatedatastorage"></a>

Le `templateDataStorage` ce helper permet le stockage et la récupération temporaires de données, telles que des API tokens, pendant l'exécution du script. Il est particulièrement utile pour mettre en cache des données réutilisables afin de réduire les appels API redondants. Les données stockées dans `templateDataStorage` persistent sur le serveur exécutant le template. Comme les templates s'exécutent sur plusieurs serveurs, et que chaque serveur peut avoir plusieurs instances, il n'est pas garanti que les données stockées soient accessibles pour toutes les exécutions ultérieures du template.

**Syntaxe**

```javascript
templateDataStorage.setItemCopy(key, value);
templateDataStorage.getItemCopy(key);
templateDataStorage.removeItemCopy(key);
```

**Exemple : gestion des API tokens**

```javascript
const sendHttpRequest = require('sendHttpRequest');
const templateDataStorage = require('templateDataStorage');

const tokenKey = 'apiToken';

function fetchNewToken(callback) {
  sendHttpRequest('https://example.com/api/token', function (status, _, body) {
    if (status === 200) {
      const { accessToken, expiresIn } = JSON.parse(body);
      const tokenData = { token: accessToken, expiry: Date.now() + expiresIn * 1000 };
      templateDataStorage.setItemCopy(tokenKey, tokenData);
      callback(accessToken);
    } else {
      callback(null);
    }
  }, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientId: 'id', clientSecret: 'secret' }) });
}

function sendEvent(eventData) {
  const cachedToken = templateDataStorage.getItemCopy(tokenKey);
  const token = cachedToken && cachedToken.expiry > Date.now() ? cachedToken.token : null;

  sendHttpRequest('https://example.com/api/events', function (status) {
    if (status === 401) {
      fetchNewToken(function (newToken) {
        if (newToken) {
          sendHttpRequest('https://example.com/api/events', () => {}, { method: 'POST', headers: { Authorization: `Bearer ${newToken}` }, body: JSON.stringify(eventData) });
        }
      });
    }
  }, { method: 'POST', headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify(eventData) });
}

sendEvent({ eventName: 'purchase', value: 100 });
```

| Méthode                       | Description                                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------- |
| **`setItemCopy(key, value)`** | Stocke une valeur sous la clé spécifiée. Écrase la valeur si la clé existe déjà.            |
| **`getItemCopy(key)`**        | Récupère la valeur associée à la clé spécifiée. Renvoie `undefined` si la clé n'existe pas. |
| **`removeItemCopy(key)`**     | Supprime la valeur associée à la clé spécifiée.                                             |

| Paramètre   | Type     | Description                                           |
| ----------- | -------- | ----------------------------------------------------- |
| **`clé`**   | *chaîne* | L'identifiant unique des données à stocker/récupérer. |
| **`value`** | *any*    | Les données à stocker (pour `setItemCopy`).           |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.commandersact.com/fr/fonctionnalites/destinations/destination-builder/javascript-destination-builder/serverside-js-helpers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
