Source: plateform/Swym/3dswym_api.js

import { _httpCallAuthenticated } from "../main/3dexperience_api";

/**
 * @description La fonction `_3DSwym_get_Token` récupère le token du 3DSwym et effectue des actions supplémentaires si nécessaire. Obligatoire pour chaque appel d'API du Swym.
 * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
 * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
 * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
 * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque les
 * informations de version seront récupérées avec succès. Il prend un argument, `tokenInfo`, qui est la
 * réponse contenant les informations de version. Le token est aussi envoyé dans une nouvelle propriété : `credentials.token`
 * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
 * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini.
 */
export async function _3DSwym_get_Token(
  credentials,
  onDone = undefined,
  onError = undefined
) {
  const url = credentials._3DSwym + "/api/index/tk";

  return _httpCallAuthenticated(url, {
    onComplete(response, headers, xhr) {
      const tokenInfo = JSON.parse(response);

      if (onDone) {
        onDone(tokenInfo);
        return (credentials["token"] = tokenInfo?.result?.ServerToken);
      }
    },

    onFailure(response) {
      if (onError) onError(response);
    },
  });
}

/**
 * La fonction `_3DSwym_getAllNews` récupère toutes les actualités d'une plateforme 3DExperience en
 * utilisant les informations d'identification fournies.
 * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
 * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
 * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
 * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la
 * requête sera terminée avec succès. Il prend deux arguments : « réponse » et « en-têtes ». L'argument
 * `response` contient les données de réponse du serveur et l'argument `headers` contient les en-têtes
 * de réponse.
 * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
 * erreur lors de l'exécution de la fonction `_3DSwym_getAllNews`. Il prend deux paramètres : « réponse
 * » et « en-têtes ». Le paramètre `response` contient les données de réponse à l'erreur et le
 */
export function _3DSwym_getAllNews(
  credentials,
  onDone = undefined,
  onError = undefined
) {
  // ! Attention beaucoup d'infos à trier et checker
  // voir aussi les possibilités des params

  const url = `${credentials._3DSwym}/api/exalead/whatsnew`;
  const data = {
    params: {
      community_id: null,
      hash_key: null,
      legacyFormat: false,
      nresults: 1,
      query: "#all",
      start: 0,
    },
  };
  _3DSwym_get_Token(credentials, (token) => {
    _httpCallAuthenticated(url, {
      method: "POST",
      headers: {
        "X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
        "Content-type": "application/json;charset=UTF-8",
        Accept: "application/json",
      },
      data: JSON.stringify(data),
      type: "json",
      onComplete(response, headers) {
        if (onDone) onDone(response, headers);
      },
      onFailure(response, headers) {
        if (onError) onError(response, headers);
      },
    });
  });
}

/**
 * La fonction `_3DSwym_getFamiliarPeople` récupère une liste de personnes familières en fonction du
 * profil de l'utilisateur actuel.
 * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier
 * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».
 * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)
 * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel
 * d'API réussit et que les données sont récupérées. Il faut deux arguments : `myContacts` et
 * `response`. `myContacts` est un tableau d'objets contenant le login et le nom complet des personnes
 * familières. `réponse
 * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une
 * erreur lors de l'exécution de la fonction `_3DSwym_getFamiliarPeople`. Il prend deux paramètres : «
 * réponse » et « en-têtes ». Le paramètre `response` contient la réponse d'erreur du serveur
 */
export function _3DSwym_getFamiliarPeople(
  credentials,
  onDone = undefined,
  onError = undefined
) {
  const url = `${credentials._3DSwym}/api/Recommendation/getpeoplefamiliartocurrentuser`;
  const _data = {
    params: {
      idsToFilterArr: [],
      mode: "offline",
      limit: 30,
      itemType: "User",
      maxNbOfCommonElements: "5",
    },
  };

  _3DSwym_get_Token(credentials, (token) => {
    _httpCallAuthenticated(url, {
      method: "POST",
      headers: {
        "X-DS-SWYM-CSRFTOKEN": token.result.ServerToken,
        "Content-type": "application/json;charset=UTF-8",
        Accept: "application/json",
      },
      data: JSON.stringify(_data),
      type: "json",
      onComplete(response, headers) {
        const myContacts = response.result.hits.map((contact) => {
          return { login: contact.login, fullName: contact.name };
        });

        if (onDone) onDone(myContacts, response);
      },
      onFailure(response, headers) {
        if (onError) onError(response, headers);
      },
    });
  });
}