@beam3_dev/api_module 0.0.348 → 0.0.349
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/wb3Api.js +223 -145
- package/dist/wb3Api.js.map +1 -1
- package/dist/wb3Api.umd.cjs +7 -7
- package/dist/wb3Api.umd.cjs.map +1 -1
- package/package.json +1 -1
package/dist/wb3Api.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wb3Api.umd.cjs","sources":["../src/lib/api/index.js","../src/lib/gouv/colors.js","../src/lib/gouv/gouv_api.js","../src/lib/utils/chunks.js","../src/lib/utils/updateEvent.js","../src/lib/plateform/main/3dexperience_api.js","../src/lib/plateform/Compass/index.js","../src/lib/plateform/main/3dcompass_api.js","../src/lib/plateform/Usersgroup/index.js","../src/lib/plateform/main/getCSRFToken.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../src/lib/plateform/main/3dspace_api.js","../src/lib/plateform/main/getCTX.js","../src/lib/plateform/main/getDataFrom3DSpace.js","../src/lib/plateform/main/getDownloadDocument.js","../src/lib/plateform/main/pushDataIn3DSpace.js","../src/lib/plateform/main/loadDatas.js","../src/lib/plateform/Tag/index.js","../src/lib/plateform/Swym/3dswym_api.js","../src/lib/plateform/Swym/communauty/index.js","../src/lib/plateform/Swym/idea/index.js","../src/lib/plateform/Swym/user/index.js","../src/lib/plateform/Swym/comment/index.js","../src/lib/plateform/main/iterop_apiv2.js","../src/lib/add/index.js","../src/lib/plateform/Search/index.js"],"sourcesContent":["import { v4 as uuid } from \"uuid\";\r\n/**\r\n * @description La fonction UUID génère un UUID (Universally Unique Identifier) aléatoire.\r\n * @returns La fonction UUID renvoie un UUID (Universally Unique Identifier) généré aléatoirement à l'aide de la fonction uuid.\r\n *\r\n */\r\nexport function UUID() {\r\n return uuid();\r\n}\r\n","// pour les charts Piveteau\r\nexport const couleurs = {\r\n b3M3Yellow: \"#FFB300\",\r\n b3AboutageBlue: \"#42A5F5\",\r\n b3UsinageGreen: \"#689F38\",\r\n b3PanneauOrange: \"#ff8000\",\r\n b3M350percent: \"#fafa6e\",\r\n b3M380percent: \"#aae479\",\r\n b3M390percent: \"#64c987\",\r\n b3M3100percent: \"#23aa8f\",\r\n b3M3105percent: \"#00898a\",\r\n b3M3110percent: \"#176877\",\r\n b3M3120percent: \"#2a4858\",\r\n b3Aboutage50percent: \"#fafa6e\",\r\n b3Aboutage80percent: \"#aae479\",\r\n b3Aboutage90percent: \"#64c987\",\r\n b3Aboutage100percent: \"#23aa8f\",\r\n b3Aboutage105percent: \"#00898a\",\r\n b3Aboutage110percent: \"#176877\",\r\n b3Aboutage120percent: \"#2a4858\",\r\n b3Warning: \"#FF0000\",\r\n b3Edit1: \"#AD1457\",\r\n b3Edit2: \"#F4511E\",\r\n b3Edit3: \"#009688\",\r\n b3Edit4: \"#D50000\",\r\n b3Edit5: \"#039BE5\",\r\n b3Edit6: \"#9E69AF\",\r\n b3Edit7: \"#A79B8E\",\r\n b3Edit8: \"#616161\",\r\n b3Edit9: \"#795548\",\r\n};\r\n","import { DateTime } from \"luxon\";\r\nimport { couleurs } from \"./colors\";\r\n/**\r\n * Cette fonction récupère une liste de communes en fonction d'un code postal donné à l'aide d'une API\r\n * d'IGN France.\r\n * @param {String} cp - Le paramètre `cp` est une chaîne représentant un code postal français. Il est converti\r\n * en entier à l'aide de `parseInt()` avant d'être utilisé dans la requête API.\r\n * @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et\r\n * renvoie une réponse. Il prend les données de réponse comme argument et peut être utilisé pour gérer\r\n * les données dans la fonction appelante.\r\n * @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de la requête de récupération. Il permet une gestion personnalisée des erreurs et peut\r\n * être utilisé pour afficher des messages d'erreur ou effectuer d'autres actions en réponse à une\r\n * erreur.\r\n */\r\nexport async function getCommunes(cp, onDone = undefined, onError = undefined) {\r\n const codePostal = parseInt(cp);\r\n await fetch(\r\n \"https://apicarto.ign.fr/api/codes-postaux/communes/\" + codePostal,\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (onDone) onDone(json);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n console.error(\"Erreur : \" + error);\r\n });\r\n}\r\n\r\n/**\r\n * Il s'agit d'une fonction JavaScript qui utilise l'API-adresse.data.gouv.fr pour rechercher des\r\n * adresses à partir d'une requête et renvoie les résultats au format JSON.\r\n * @param { String } query - L'adresse ou la requête d'emplacement à rechercher dans l'API.\r\n * @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et\r\n * renvoie une réponse. Il prend la réponse JSON comme paramètre.\r\n * @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de l'appel de l'API. C'est un paramètre optionnel qui peut être passé à la fonction\r\n * `findAdresse`. S'il est fourni, il recevra l'objet d'erreur comme argument.\r\n */\r\nexport async function findAdresse(\r\n query,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n // https://api-adresse.data.gouv.fr/search/?q=\r\n query = encodeURIComponent(query);\r\n await fetch(\r\n \"https://api-adresse.data.gouv.fr/search/?q=\" + query + \"&limit=15\",\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (onDone) onDone(json);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n console.error(\"Erreur : \" + error);\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getDataFromGouvFr` récupère les données de l'API du gouvernement français pour les\r\n * jours fériés et les formate dans une structure de données spécifique.\r\n * @param events - Le paramètre `events` est un tableau d'objets représentant des événements. (store.loadedEvents)\r\n * @param colors - Le paramètre `colors` est un objets représentant des couleurs. (Piveteau)\r\n * @returns les données formatées, qui incluent les événements récupérés depuis le point de terminaison\r\n * API \"https://calendrier.api.gouv.fr/jours-feries/metropole/\". Les événements sont formatés dans une\r\n * structure spécifique et renvoyés sous forme d'objet.\r\n */\r\nexport async function getDataFromGouvFr(events, colors = couleurs) {\r\n let year = DateTime.now().year;\r\n const loadedEvents = events;\r\n const sortedData = [];\r\n\r\n const formatData = (json) => {\r\n for (let date in json) sortedData.push({ date, comment: json[date] });\r\n };\r\n\r\n for (let i = year; i <= year + 1; i++) {\r\n await fetch(\r\n \"https://calendrier.api.gouv.fr/jours-feries/metropole/\" + i + \".json\",\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n formatData(json);\r\n })\r\n .catch((error) => console.error(\"Erreur : \" + error));\r\n }\r\n\r\n const formatedData = () => {\r\n const data =\r\n loadedEvents.length === 0\r\n ? {\r\n events: [],\r\n }\r\n : loadedEvents;\r\n for (let each of sortedData) {\r\n const index = data.events.findIndex(\r\n (event) =>\r\n event.start === DateTime.fromISO(each.date).toISODate() &&\r\n event.name === \"Férié : \" + each.comment,\r\n );\r\n\r\n if (index === -1)\r\n data.events.push({\r\n name: \"Férié : \" + each.comment,\r\n start: DateTime.fromISO(each.date).toISODate(),\r\n end: DateTime.fromISO(each.date).toISODate(),\r\n color: colors.b3BusinnessDays,\r\n timed: false,\r\n });\r\n }\r\n return data;\r\n };\r\n\r\n return formatedData();\r\n}\r\n","/**\r\n * @description `chunkArray` Divise un tableau en plus petits blocs et appelle une fonction fournie sur chaque bloc.\r\n *\r\n * @param {Object} obj - Un objet contenant le tableau à diviser, la taille de chaque bloc,et la fonction à appeler sur chaque bloc.\r\n * @param {Array} obj.credentials - les données de base pour la fonction à appeler sur chaque bloc.(space, token...)\r\n * @param {Array} obj.myArray - Le tableau à diviser.\r\n * @param {number} obj.chunk - La taille voulue de chaque bloc.\r\n * @param {Function} obj.fn_to_call - La fonction à appeler sur chaque bloc.\r\n * @return {void} Cette fonction ne renvoie rien.\r\n */\r\nexport function chunkArray(obj, getResponse, getError) {\r\n const { credentials, myArray, chunk, fn_to_call } = obj;\r\n\r\n const chunks = [];\r\n for (let i = 0; i < myArray.length; i += chunk) {\r\n const arrayChunks = myArray.slice(i, i + chunk);\r\n chunks.push(arrayChunks);\r\n }\r\n\r\n loopingChunk(\r\n { credentials, chunks, initLoop: 0, fn: fn_to_call },\r\n (rep) => {\r\n if (getResponse) getResponse(rep);\r\n },\r\n (err) => {\r\n if (getError) getError(err);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description `loopingChunk` Exécute une boucle sur un tableau de chunks, en appelant une fonction fournie sur chaque chunk.\r\n *\r\n * @param {Object} obj - Un objet contenant le tableau de chunks, l'index de démarrage de la boucle et la fonction à appeler sur chaque chunk.\r\n * @param {Array} obj.credentials - les données de base pour la fonction à appeler.\r\n * @param {Array} obj.chunks - Le tableau de chunks sur lequel effectuer la boucle.\r\n * @param {number} obj.initLoop - L'index de démarrage de la boucle.\r\n * @param {Function} obj.fn - La fonction à appeler sur chaque chunk. La fonction doit prendre trois arguments : le chunk actuel, une fonction de rappel, et deux fonctions de rappel facultatives pour gérer les réponses de succès et d'erreur.\r\n * @return {void} Cette fonction ne renvoie rien.\r\n */\r\nfunction loopingChunk(obj, onDone, onError) {\r\n const { credentials, chunks, initLoop, fn } = obj;\r\n const loop = (i) => {\r\n fn(\r\n credentials,\r\n chunks[i],\r\n () => {\r\n i++;\r\n if (i < chunks.length) {\r\n loop(i);\r\n }\r\n },\r\n (response) => {\r\n if (onDone) {\r\n onDone(response);\r\n }\r\n },\r\n (error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n );\r\n };\r\n loop(initLoop);\r\n}\r\n","/**\r\n * @description La fonction `updateEvent` met à jour un tableau d'événements en ajoutant ou en supprimant un\r\n * événement en fonction d'une condition donnée.\r\n * @param {Array} events - (store.loadedEvents)Une panoplie d'événements. Chaque événement est un objet avec des propriétés telles que uuid, start, end, etc.\r\n *\r\n * @param {Object} data - Le paramètre `data` est un objet qui représente l'événement à mettre à jour.\r\n * @param {String}[data.uuid] - L'identifiant unique de l'événement.\r\n * @param {Boolean} [add=true] - Le paramètre \"add\" est une valeur booléenne qui détermine s'il faut ajouter ou\r\n * mettre à jour un événement dans le tableau des événements. Si add est vrai, la fonction ajoutera\r\n * l'événement au tableau s'il n'existe pas déjà. Si add est faux, la fonction mettra à jour\r\n * l'événement existant dans le tableau\r\n * @returns le tableau `db` (store.loadedEvents) mis à jour.\r\n */\r\nexport async function updateEvent(events, data, add = true) {\r\n const index = events.events.findIndex((val) => val.uuid === data.uuid);\r\n\r\n if (index === -1) {\r\n events.events.push(data);\r\n } else {\r\n if (add) events.events[index] = data;\r\n else events.events.splice(index, 1);\r\n }\r\n\r\n if (events.length > 0) events.sort((a, b) => a.start - b.start);\r\n\r\n return events;\r\n}\r\n","import { widget, requirejs } from \"@widget-lab/3ddashboard-utils\";\r\n\r\n/**\r\n * @description Cette fonction effectue un appel HTTP authentifié à l'aide de la bibliothèque WAFData en de la plateforme.\r\n * @param {String} url - L'URL du point de terminaison de l'API que la fonction appellera.\r\n * @param {object} options - Le paramètre `options` est un objet qui contient diverses options pour la requête\r\n * HTTP, telles que la méthode de requête (GET, POST, etc.), les en-têtes, le corps, etc. Ces options\r\n * sont généralement transmises à l'API `fetch` ou `XMLHttpRequest` pour effectuer la requête HTTP\r\n * réelle.\r\n */\r\nexport function _httpCallAuthenticated(url, options) {\r\n requirejs([\"DS/WAFData/WAFData\"], (WAFData) => {\r\n WAFData.authenticatedRequest(url, options);\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction définit un élément comme étant déplaçable et transmet des données et une fonction de\r\n * rappel à exécuter lorsque le glissement commence (drag and drop).\r\n * @param elem - L'élément HTML qui doit être rendu déplaçable.\r\n * @param strData - strData est une chaîne qui représente les données associées à l'élément déplaçable.\r\n * Ces données sont accessibles lors des opérations de glisser-déposer pour fournir des informations\r\n * supplémentaires sur l'élément déplacé.\r\n * @param onDrag - onDrag est une fonction de rappel qui sera exécutée au début de l'opération de\r\n * glissement. Il peut être utilisé pour effectuer toutes les actions nécessaires avant le début de\r\n * l'opération de glissement, telles que la configuration des données à transférer ou la mise à jour de\r\n * l'apparence de l'élément déplaçable.\r\n */\r\nexport function _setDraggable(elem, strData, onDrag) {\r\n requirejs([\"DS/DataDragAndDrop/DataDragAndDrop\"], (DataDragAndDrop) => {\r\n DataDragAndDrop.draggable(elem, {\r\n data: strData,\r\n start: onDrag,\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction configure un proxy de navigateur de balises avec des balises spécifiées et un événement de filtre facultatif.\r\n *\r\n * @param tags - Le paramètre tags est un tableau de chaînes représentant les balises qui seront\r\n * utilisées pour filtrer les sujets dans le widget TagNavigatorProxy.\r\n * @param [onTaggerFilter] - Le paramètre onTaggerFilter est une fonction de rappel qui sera exécutée\r\n * lorsque l'utilisateur filtrera les sujets dans le tagger. Il recevra les sujets filtrés en argument.\r\n */\r\nexport function _setupTagger(tags, onTaggerFilter = undefined) {\r\n requirejs([\"DS/TagNavigatorProxy/TagNavigatorProxy\"], (TagNavigatorProxy) => {\r\n let taggerProxy;\r\n if (taggerProxy === undefined) {\r\n taggerProxy = TagNavigatorProxy.createProxy({\r\n widgetId: widget.id,\r\n filteringMode: \"WithFilteringServices\",\r\n });\r\n\r\n if (onTaggerFilter !== undefined)\r\n taggerProxy.addEvent(\"onFilterSubjectsChange\", onTaggerFilter);\r\n }\r\n taggerProxy.setSubjectsTags(tags);\r\n });\r\n}\r\n\r\n/**\r\n * Cette fonction définit un élément comme pouvant être déposé à l'aide de la bibliothèque\r\n * DataDragAndDrop.\r\n * @param elem - L'élément HTML qui doit être rendu déposable.\r\n * @param drop - Le paramètre `drop` est une fonction qui sera appelée lorsqu'un élément déplaçable est\r\n * déposé sur l'élément déplaçable. Il prend généralement l'élément supprimé comme argument et exécute\r\n * une action basée sur celui-ci.\r\n */\r\nexport function _setDroppable(elem, drop) {\r\n requirejs([\"DS/DataDragAndDrop/DataDragAndDrop\"], (DataDragAndDrop) => {\r\n DataDragAndDrop.droppable(elem, {\r\n drop,\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction asynchrone obtient les services de la plateforme à l'aide de la bibliothèque i3DXCompassServices et appelle les fonctions onComplete ou onFailure en fonction du résultat.\r\n *\r\n * @param platformId - ID de la plate-forme pour laquelle les services sont demandés. Si aucun ID de\r\n * plate-forme n'est fourni, la fonction tentera de récupérer l'ID à partir d'une valeur de widget. Si\r\n * aucun ID n'est trouvé, il sera défini sur `undefined`.\r\n * @param onComplete - Une fonction de rappel qui sera exécutée lorsque les services de la plateforme\r\n * seront récupérés avec succès. Il prend les services de plateforme récupérés comme argument.\r\n * @param onFailure - Le paramètre onFailure est une fonction de rappel qui sera exécutée en cas\r\n * d'erreur ou d'échec dans l'exécution de la fonction getPlatformServices. Il permet de gérer les\r\n * erreurs et de fournir un retour d'information approprié à l'utilisateur.\r\n */\r\nexport async function _getPlatformServices(\r\n platformId,\r\n onComplete = undefined,\r\n onFailure = undefined\r\n) {\r\n await requirejs(\r\n [\"DS/i3DXCompassServices/i3DXCompassServices\"],\r\n (i3DXCompassServices) => {\r\n if (!platformId || platformId === \"\") {\r\n platformId = widget.getValue(\"PlatFormInstanceId\");\r\n }\r\n if (!platformId || platformId === \"\") {\r\n platformId = undefined;\r\n }\r\n if (onComplete) {\r\n onComplete(\r\n i3DXCompassServices.getPlatformServices({\r\n platformId,\r\n onComplete,\r\n onFailure,\r\n })\r\n );\r\n }\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description\r\n * La fonction `_getPlateformInfos` récupère les informations sur la plateforme à l'aide du module\r\n * PlatformAPI et renvoie les informations dans un objet.\r\n * @returns un objet appelé \"retourAPI\" qui contient les propriétés suivantes :\r\n * - {String} tenant, Le tenant de la plateforme sur lequel on travaille.\r\n * - {Object} user, L'utilisateur connecté à la plateforme...\r\n * - {ArrayOfObject} appsConfiguration, liste d'app auquel on accès.\r\n * - {String} appConf\r\n *\r\n */\r\nexport function _getPlateformInfos() {\r\n let retourAPI = {};\r\n\r\n requirejs([\"DS/PlatformAPI/PlatformAPI\"], (plAPI) => {\r\n const tenant = plAPI.getTenant();\r\n const user = plAPI.getUser();\r\n const appsConfiguration = plAPI.getAllApplicationConfigurations();\r\n const appConf = plAPI.getApplicationConfiguration(\r\n \"com.3ds.wp.passport.cors\"\r\n );\r\n retourAPI = {\r\n tenant,\r\n user,\r\n appsConfiguration,\r\n appConf,\r\n };\r\n });\r\n return retourAPI;\r\n}\r\n\r\nexport function _getLoginTicket(credentials) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1-apps.3dexperience.3ds.com/enovia/resources/AppsMngt/api/v1/services?tenant=${credentials.tenant}&cors=true&xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse =\r\n typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"platforms\" in oResponse) {\r\n const listServiceUrl = oResponse.platforms.find(\r\n (platform) => platform.id === credentials.tenant.toUpperCase()\r\n );\r\n if (onDone && listServiceUrl) onDone(listServiceUrl);\r\n else if (onError)\r\n onError(\"_getLoginTicket return listServiceUrl = undefined\");\r\n } else {\r\n if (onError) onError(\"_getLoginTicket return oResponse = undefined\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\nexport function _getMe(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1.iam.3dexperience.3ds.com/api/authenticated/user/me?xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse =\r\n typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"fields\" in oResponse) {\r\n if (onDone) onDone(oResponse.fields);\r\n } else {\r\n if (onError) onError(\"_getMe return not find properties fields\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(\"_getMe return error\",response);\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function _getServiceUrl(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant.toLowerCase()}-eu1-compass.3dexperience.3ds.com/enovia/resources/AppsMngt/api/v1/services?platform=${credentials.tenant.toUpperCase()}&cors=true&xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse = typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"platforms\" in oResponse) {\r\n const listServiceUrl = oResponse.platforms.find(platform => platform.id === credentials.tenant.toUpperCase());\r\n if (onDone && listServiceUrl) onDone(listServiceUrl);\r\n else if (onError) onError(\"_getServiceUrl return listServiceUrl = undefined\");\r\n } else {\r\n if (onError) onError(\"_getServiceUrl return oResponse = undefined\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function _getServiceUrl_3DPassport(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1-registry.3dexperience.3ds.com/api/v1/platform/service/instance?serviceId=3dpassport&platformId=${credentials.tenant}`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse = JSON.parse(response);\r\n if (Array.isArray(oResponse) && oResponse.length > 0) {\r\n const urlServicePassport = `${oResponse[0].services[0].url}`;\r\n if (onDone) onDone(urlServicePassport);\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function _Registry_getServicesUrl(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const urlService = `https://eu1-registry.3dexperience.3ds.com/api/v1/platform/instance?id=${credentials.tenant.toLowerCase()}`;\r\n _httpCallAuthenticated(urlService, {\r\n type:\"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n/**\r\n * @description La fonction `compass_getListAdditionalApps` effectue une requête HTTP GET authentifiée pour\r\n * récupérer une liste d'applications supplémentaires en fonction des informations d'identification\r\n * fournies.\r\n * @param {Object} credentials Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes : space, token\r\n * @property {String} space - (_3DCompass)L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @property {String} tenant - le tenant courant (ex: R1132100968447)\r\n * @param onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * d'API réussit et que les données de réponse sont formatées. Il prend deux arguments :\r\n * `formatedInfos` et `info`. `formatedInfos` est un tableau d'objets contenant le nom et l'identifiant\r\n * de chaque application,\r\n * @param onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il prend un paramètre, « info », qui est un objet contenant des\r\n * informations sur l'erreur.\r\n */\r\n\r\nexport function compass_getListAdditionalApps(credentials, onDone, onError) {\r\n const URL = {\r\n base: `${credentials.space}`,\r\n uri: \"/resources/AppsMngt/api/custom/applications\",\r\n option: `?filter=${credentials.tenant}`, // facultatif\r\n };\r\n const url = `${URL.base}${URL.uri}${URL.option}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n const formatedInfos = info.data.map((app) => {\r\n const name = app.attributes.name;\r\n const id = app.id;\r\n return { name, id };\r\n });\r\n\r\n if (onDone) onDone(formatedInfos, info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api.js\";\r\n\r\n/**\r\n * @description La fonction `_AppMngt_get_users` effectue un appel HTTP authentifié pour récupérer une liste\r\n * d'utilisateurs d'une plateforme spécifiée.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex:1132100968447)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API sera terminé avec succès. Il prend un argument, « info », qui correspond aux données de réponse\r\n * de l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini. S'il est fourni, il sera\r\n * appelé avec l'objet de réponse comme argument.\r\n */\r\nexport function _AppMngt_get_users(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n let url = `${credentials.space}/resources/AppsMngt/user?platform=${credentials.tenant}&limit=-1`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n console.log(\"_AppMngt_get_users => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_AppMngt_get_info_user` effectue un appel HTTP authentifié pour récupérer des\r\n * informations sur un utilisateur à partir d'une plateforme spécifique.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} id - Le paramètre `id` est l'identifiant unique de l'utilisateur pour lequel vous souhaitez\r\n * récupérer des informations.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête sera terminée avec succès. Il prend un argument, «info», qui correspond aux données de réponse du serveur.\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini. S'il est fourni, il sera\r\n * appelé avec le paramètre `response`, qui contient la réponse d'erreur du serveur.\r\n */\r\nexport function _AppMngt_get_info_user(\r\n credentials,\r\n id,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n let url = `${credentials.space}/resources/AppsMngt/user?platform=${credentials.tenant}&id=${id}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n //console.log(\"_AppMngt_get_info_user => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n\r\n//LINK - https://media.3ds.com/support/documentation/developer/Cloud/en/English/CAAi3DXUGREST/UsersGroup_v1.htm#\r\n//!SECTION, Pour faire des modification de UG il faut être OWNER\r\n\r\n// URI de test sur le tenant PIVETEAU_TEST:\r\nconst _uri = \"uuid:3fcb61f2-6417-476d-8a9c-a16fb888771e\";\r\n\r\nconst topHeader = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n};\r\n\r\n/**\r\n * @description La fonction `createUserGroups` crée un nouveau groupe d'utilisateurs avec les détails et les membres\r\n * spécifiés. Attention, l'indexation du UserGroup met du temps.\r\n\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {Object} credentials.currentUser.email - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * \r\n * @param {Object} datas - Les informations du groupe d'utilisateurs.\r\n * @param {String} datas.title - Le titre du groupe d'utilisateurs. Entre 3 et 128 caractères, obligatoire.\r\n * @param {String} datas.description - La description du groupe d'utilisateurs. 512 caractères max.\r\n * @param {Array} datas.members - Un tableau d'emails des membres du groupe d'utilisateurs. 100 max email par groupe.\r\n * @param {String} datas.sharing - Le droit de partage du groupe d'utilisateurs. owner/manager/viewer\r\n * @param {String} datas.visibility - La visibilité du groupe d'utilisateurs. public/private\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'appel d'API réussit et que les\r\n * groupes d'utilisateurs sont créés. Il recevra les données de réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `createUserGroups`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function createUserGroups(\r\n credentials,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, currentUser } = credentials;\r\n const URL = {\r\n URIUGr: \"/3drdfpersist/resources/v1/usersgroup\",\r\n };\r\n const url = `${space}${URL.URIUGr}`;\r\n\r\n const templateData = {\r\n groups: [\r\n {\r\n title: datas.title,\r\n description: datas.description,\r\n members: datas.members || [currentUser.email, \"samuel.mureau@beam3.fr\"],\r\n pending_members: [],\r\n sharing: datas.sharing,\r\n visibility: datas.visibility,\r\n },\r\n ],\r\n };\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify(templateData),\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n console.log(err);\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getComplementUG` effectue une requête GET vers un URI spécifié avec les informations\r\n * d'authentification et renvoie la réponse.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {String} [uri] - Le paramètre `uri` est l'identifiant de la ressource dont vous souhaitez récupérer le\r\n * complément. (ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getComplementUG`. Il vous permet de gérer et de traiter\r\n * les informations d'erreur.\r\n */\r\nexport function getComplementUG(\r\n credentials,\r\n uri,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const baseURL = space;\r\n const URI = `/3drdfpersist/v1/resources/${uri}`;\r\n const OPTs = `?$mask=dsaccess:Mask.GroupUI.Properties&tenant=dstenant:${tenant}`;\r\n const URL = `${baseURL}${URI}${OPTs}`;\r\n\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = {\r\n method: \"GET\",\r\n headers: headers,\r\n };\r\n\r\n _httpCallAuthenticated(URL, {\r\n opts,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getUsersGroupRules` effectue une requête HTTP GET pour récupérer une liste de\r\n * responsabilités de groupe pour un groupe d'utilisateurs.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il faut un argument, qui correspond aux données de réponse\r\n * analysées au format JSON.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUsersGroupRules`. C'est un paramètre facultatif, donc\r\n * s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n */\r\nexport function getUsersGroupRules(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { _usersgroup, tenant } = credentials;\r\n const baseURL = _usersgroup;\r\n const URI =\r\n \"/3drdfpersist/resources/v1/option-sets/dsusergroup:ListOfGroupResponsibilities/options\";\r\n const OPTS = `?tenant=dstenant:${tenant}`;\r\n const OPTsH = {\r\n method: \"GET\",\r\n Accept: \"application/json,*/*,test/javascript\",\r\n };\r\n const URL = `${baseURL}${URI}${OPTS}`;\r\n\r\n _httpCallAuthenticated(URL, {\r\n OPTsH,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"function\"] = \"getUsersGroupRules()\";\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « getUserGroupsList » récupère une liste de groupes d'utilisateurs d'un serveur en\r\n * utilisant les informations d'identification fournies et appelle la fonction de rappel « onDone »\r\n * avec la réponse.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {String} credentials._usersgroup - l'url de la plateforme concernant les usergroups (comme le credentials.space).\r\n * @param {Number} credentials.numMax - nombre maximum de groupes d'utilisateurs par page, par défaut 50.\r\n * @param {Object} credentials.currentUser.email - Le paramètre `currentUser` est un objet qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`)\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsList`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function getUserGroupsList(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { _usersgroup, currentUser, numMax } = credentials;\r\n\r\n if (!numMax) numMax = 50;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n const opt = \"?select=uri,title,owner,members\";\r\n const opt2 = `&top=${numMax}`; // max à 100\r\n const url = `${_usersgroup}${URI}${opt}${opt2}`;\r\n const header = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = { method: \"GET\", headers: header };\r\n try {\r\n _httpCallAuthenticated(url, {\r\n opts,\r\n onComplete(response) {\r\n const repUG = JSON.parse(response);\r\n const reponse = {};\r\n const UG = repUG.groups.filter((element) => {\r\n return element.uri.startsWith(\"uuid:\");\r\n });\r\n\r\n if (currentUser && Object.keys(currentUser).length > 0) {\r\n const iamOwner = UG.filter((element) => {\r\n return element.owner === currentUser.email;\r\n });\r\n const iamMember = UG.filter((element) => {\r\n return element.members.includes(currentUser.email);\r\n });\r\n const iam = iamOwner.concat(iamMember);\r\n reponse[\"iam\"] = iam;\r\n reponse[\"UG\"] = UG;\r\n reponse[\"iamMember\"] = iamMember;\r\n\r\n getUsersGroupRules(\r\n credentials,\r\n (rules) => {\r\n reponse[\"rules\"] = rules;\r\n if (onDone) onDone(reponse);\r\n },\r\n (err) => {\r\n err.function += \", getUserGroupsList()\";\r\n\r\n if (onError) onError(err);\r\n },\r\n );\r\n }\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"function\"] = \"getUserGroupsList()\";\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n const infoError = {\r\n infoError: error,\r\n fonction: \"getUserGroupsList()\",\r\n catch: new Error(\"Erreur sur la fonction getUserGroupsList()\", {\r\n cause: error,\r\n }),\r\n };\r\n onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getUserGroupsByURIList` est utilisée pour récupérer\r\n * la liste des groupes d'utilisateurs en fonction d'une liste d'uri fournie.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification\r\n * requises pour authentifier la demande. Il inclut généralement des propriétés\r\n * telles que `token`, `space`, `tenant` et `ctx`.\r\n * @param {String} credentials._usersgroup - L'URL du serveur 3DExperience sur lequel l'API est déployée.\r\n * @param {String} credentials.list_uris - Un tableau d'objet qui représente les uris des groupes d'utilisateurs que vous souhaitez récupérer.\r\n * @example [{uri:'uuid:8cedf28e-88e7-48e6-96fe-077z55bc07f3'}, {uri:'uuid:8cedf288-889z-4806-96fe-0z78z5bc07f3'}]\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Elle reçoit la réponse en paramètre.\r\n * @param {Function} [onError] - Une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsByURIList`. Elle reçoit\r\n * un objet en paramètre qui contient des informations sur l'erreur.\r\n */\r\nexport function getUserGroupsByURIList(credentials, onDone, onError) {\r\n const { _usersgroup, list_uris } = credentials;\r\n\r\n if (!list_uris || list_uris.length === 0) {\r\n onError({ msg: \"getUserGroupsByURIList: lists_uri is empty or undefined\" });\r\n return;\r\n }\r\n\r\n const URLElements = {\r\n baseUrl: _usersgroup,\r\n uri: \"/3drdfpersist/resources/v1/usersgroup/groups\",\r\n opt: \"?select=uri,title,owner,members\",\r\n };\r\n\r\n const url = `${URLElements.baseUrl}${URLElements.uri}${URLElements.opt}`;\r\n\r\n const options = {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify({ groups: list_uris }),\r\n };\r\n /*\r\nex :\r\ngroups:[\r\n{uri:'uuid:351d1s61s616ds1vdsvgsv'}, {uri:'uuid:351d1s61s616ds1vdsvgsv'}\r\n]\r\n*/\r\n\r\n try {\r\n _httpCallAuthenticated(url, {\r\n ...options,\r\n onComplete(response) {\r\n if (onDone) {\r\n onDone(JSON.parse(response));\r\n }\r\n },\r\n onFailure(err, h) {\r\n const infoError = {\r\n sendOptions: options,\r\n error: new Error(`Erreur sur la fonction getUserGroupsByURIList()`, {\r\n cause: err,\r\n }),\r\n msg: h,\r\n fonction: \"getUserGroupsByURIList()\",\r\n };\r\n if (onError) onError(infoError);\r\n },\r\n });\r\n } catch (error) {\r\n const infoError = {\r\n sendOptions: options,\r\n infoError: error,\r\n fonction: \"getUserGroupsByURIList()\",\r\n error: new Error(\"Erreur sur la fonction getUserGroupsByURIList()\", {\r\n cause: error,\r\n }),\r\n };\r\n if (onError) onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getUserGroupsByEmailList` est utilisée pour récupérer\r\n * les groupes d'utilisateurs qui ont un utilisateur avec une adresse email\r\n * correspondante.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification\r\n * requises pour authentifier la demande. Il inclut généralement des propriétés\r\n * telles que `token`, `space`, `tenant` et `ctx`.\r\n * @param {String} credentials._usersgroup - L'URL du serveur 3DExperience sur lequel l'API est déployée.\r\n * @param {String[]} credentials.list_emails - Un tableau de String qui représente les\r\n * adresses email des utilisateurs que vous souhaitez récupérer.\r\n * @example [\"user1@domain.com\", \"user2@domain.com\"]\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Elle reçoit la réponse en paramètre.\r\n * @param {Function} [onError] - Une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsByEmailList`. Elle reçoit\r\n * un objet en paramètre qui contient des informations sur l'erreur.\r\n */\r\nexport function getUserGroupsByEmailList(credentials, onDone, onError) {\r\n const { _usersgroup, list_emails } = credentials;\r\n if (!list_emails || list_emails.length === 0) {\r\n onError({\r\n msg: \"getUserGroupsByEmailList: lists_email is empty or undefined\",\r\n });\r\n return;\r\n }\r\n const URLElements = {\r\n baseUrl: _usersgroup,\r\n uri: \"/3drdfpersist/resources/v1/usersgroup/users/locate\",\r\n opt: \"?person_ident=email\",\r\n };\r\n\r\n const url = `${URLElements.baseUrl}${URLElements.uri}${URLElements.opt}`;\r\n const options = {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify({ users: list_emails }),\r\n };\r\n try {\r\n _httpCallAuthenticated(url, {\r\n ...options,\r\n onComplete(response) {\r\n if (onDone) {\r\n const parseResp = JSON.parse(response);\r\n onDone({ groupes: parseResp.users[0].groups, reponse: parseResp });\r\n }\r\n },\r\n onFailure(err, h) {\r\n const infoError = {\r\n sendOptions: options,\r\n error: new Error(\r\n `Erreur sur la fonction getUserGroupsByEmailList()`,\r\n {\r\n cause: err,\r\n },\r\n ),\r\n msg: h,\r\n fonction: \"getUserGroupsByEmailList()\",\r\n };\r\n if (onError) onError(infoError);\r\n },\r\n });\r\n } catch (error) {\r\n const infoError = {\r\n sendOptions: options,\r\n infoError: error,\r\n fonction: \"getUserGroupsByEmailList()\",\r\n error: new Error(\"Erreur sur la fonction getUserGroupsByEmailList()\", {\r\n cause: error,\r\n }),\r\n };\r\n if (onError) onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction deleteUserGroups est utilisée pour supprimer des groupes d'utilisateurs à l'aide des\r\n * informations d'identification et de l'URI fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} [uri] - Le paramètre `uri` est l'identifiant du groupe d'utilisateurs que vous souhaitez\r\n * supprimer. Il est utilisé pour construire l'URL de la requête DELETE.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n */\r\n\r\nexport function deleteUserGroups(credentials, uri) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n const url = `${space}${URI}/${uri}`;\r\n\r\n const opts = {\r\n method: \"DELETE\",\r\n };\r\n _httpCallAuthenticated(url, opts);\r\n}\r\n\r\n/**\r\n * @description La fonction `patchUserGroups` est utilisée pour mettre à jour les groupes d'utilisateurs en envoyant\r\n * une requête PATCH à un URI spécifié avec les données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * que vous souhaitez corriger. Il est utilisé pour construire l'URL de la requête PATCH.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {ArrayOfObjects} datas - Le paramètre `datas` est un tableau d'objets qui spécifient les modifications à\r\n * apporter aux groupes d'utilisateurs.(ex: datas[0].op, datas[0].field, datas[0].value)\r\n * @param {String} datas[0].op - l'opération à réaliser. (ex: \"add\", \"remove\", \"replace\")\r\n * @param {String} datas[0].field - Ce sur quoi agir (ex: members[], title, description, owner, visibility)\r\n * @param {StringOrArray} datas[0].value - La nouvelle valeur impactée. Si ce sont des membres value sera un Tableau de String.\r\n \r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la requête PATCH sera terminée\r\n * avec succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `patchUserGroups`. Il vous permet de gérer toutes les\r\n * erreurs qui se produisent et d’effectuer toute gestion ou journalisation des erreurs nécessaire.\r\n */\r\nexport function patchUserGroups(\r\n credentials,\r\n uri,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const URL = {\r\n URITI: \"/3drdfpersist/resources/v1/template-instances\",\r\n URIUGr: \"/3drdfpersist/resources/v1/usersgroup\",\r\n nextURICh: \"/characteristics\",\r\n nextURIGr: \"/group\",\r\n nexURImem: \"/members\",\r\n OPTsTI: `?$mask=dsaccess:Mask.GroupUI.Properties`,\r\n OPTsTenant: `tenant=dstenant:${tenant}`,\r\n };\r\n\r\n // Le format des datas est obligatoire : [{}]\r\n // op : add, replace, remove\r\n // field : members[], pending_members[], title, description, owner, visibility\r\n // value : string ou array\r\n\r\n const dataMembers = datas;\r\n // [\r\n // {\r\n // op: \"add\",\r\n // field: \"members\",\r\n // value: [\"samuel.mureau@beam3.fr\"],\r\n // },\r\n // {\r\n // op: \"replace\",\r\n // field: \"title\",\r\n // value: \"BEAM³ R&D - DEV\",\r\n // },\r\n // ];\r\n\r\n const baseURL = `${space}${URL.URIUGr}/${uri}`; // route de base pour le PATCH (DOC)\r\n\r\n const dataMembersSTR = JSON.stringify(dataMembers);\r\n\r\n _httpCallAuthenticated(baseURL, {\r\n headers: topHeader,\r\n method: \"PATCH\",\r\n data: dataMembersSTR,\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n//ANCHOR - CONTROL (Gestion des propriétaires du groupe)\r\n\r\n/**\r\n * @description La fonction `patchUserGroupsControl` est utilisée pour mettre à jour le contrôle des groupes\r\n * d'utilisateurs en envoyant une requête PATCH à un URI spécifié avec les informations\r\n * d'identification et les données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * que vous souhaitez corriger. Il est utilisé pour construire l'URL de la requête PATCH.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {ArrayOfObject} _datas - Le paramètre `datas` est un tableau d'objets qui contient les informations\r\n * nécessaires pour patcher le contrôle des groupes d'utilisateurs. (ex : datas[0].op, datas[0].value)\r\n * @param {String} op - L'opération de correctif. Il peut être 'add', 'replace', 'remove'.\r\n * @param {Object} value -\r\n * @param {Array} value.agents - Un tableau d’utilisateurs. Le 1er index doit être à vide. (ex : [\"\",\"Bob.Dylan@beam3.fr\"]). 100 utilisateurs maximums.\r\n * @param {Array} value.responsibilities - Un tableau de responsibilités. (ex: [\"dsaccess:Responsibility.Group.MainOwner\", \"dsaccess:Responsibility.Group.Owner\", \"dsaccess:Responsibility.Group.Viewer\", \"dsaccess:Responsibility.Group.Author\", \"dsaccess:Responsibility.GroupService.Administrator\"])\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de patch sera terminée avec succès. Il faut un argument, qui est la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `patchUserGroupsControl`. Il vous permet de gérer toutes\r\n * les erreurs qui se produisent et d’effectuer toute gestion ou journalisation des erreurs nécessaire.\r\n */\r\nexport function patchUserGroupsControl(\r\n credentials,\r\n uri,\r\n _datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n\r\n const url = `${space}${URI}/${uri}/sharing`;\r\n //liste des responsabilités : [\"dsaccess:Responsibility.Group.MainOwner\", \"dsaccess:Responsibility.Group.Owner\", \"dsaccess:Responsibility.Group.Viewer\", \"dsaccess:Responsibility.Group.Author\", \"dsaccess:Responsibility.GroupService.Administrator\"]\r\n const datas = _datas;\r\n // [\r\n // {\r\n // op: \"add\", // add, replace, remove\r\n // path: \"/sharing\",\r\n // value: {\r\n // agents: [\"\", \"samuel.mureau@beam3.fr\", \"yan.coquoz@beam3.fr\"],\r\n // responsibilities: [\"dsaccess:Responsibility.Group.Owner\"],\r\n // },\r\n // },\r\n // ];\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PATCH\",\r\n headers: topHeader,\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « readUserGroupControl » est utilisée pour récupérer les informations de contrôle de\r\n * groupe d'utilisateurs à partir d'un URI spécifié à l'aide d'une requête HTTP GET.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * pour lequel vous souhaitez récupérer les informations de contrôle. (ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `readUserGroupControl`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function readUserGroupControl(\r\n credentials,\r\n uri,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n\r\n const url = `${space}${URI}/${uri}/sharing`;\r\n\r\n const header = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = {\r\n method: \"GET\",\r\n headers: header,\r\n };\r\n _httpCallAuthenticated(url, {\r\n opts,\r\n onComplete(_rep) {\r\n if (onDone) onDone(JSON.parse(_rep));\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n/**\r\n * @description La fonction `getCSRFToken` est une fonction asynchrone qui récupère un jeton CSRF à partir d'une URL\r\n * spécifiée et appelle le rappel `onDone` avec le jeton en cas de succès, ou le rappel `onError` avec\r\n * une erreur en cas d'échec.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n *\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @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 utilisé pour gérer les erreurs qui se produisent lors de la demande.\r\n *\r\n */\r\nexport async function getCSRFToken(credentials, onDone, onError) {\r\n if (credentials.space) {\r\n const url = `${credentials.space}/resources/v1/application/CSRF`;\r\n _httpCallAuthenticated(url, {\r\n onComplete(response) {\r\n response = JSON.parse(response);\r\n // console.log(\"getCSRFToken() / response => \", response);\r\n if (onDone) onDone(response.csrf);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const infos = { error, headers, xhr };\r\n if (onError) onError(infos);\r\n },\r\n });\r\n }\r\n}\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).filter(Boolean).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","import {\r\n _httpCallAuthenticated,\r\n _getPlatformServices,\r\n _getPlateformInfos,\r\n} from \"./3dexperience_api\";\r\nimport { chunkArray } from \"../../utils/chunks\";\r\nimport { UUID } from \"../../api/index\";\r\nimport { getCSRFToken } from \"./getCSRFToken\";\r\nimport { DateTime } from \"luxon\";\r\n\r\nimport qs from \"querystring\";\r\n\r\n/**\r\n * @description La fonction `_3dSpace_get_docInfo` récupère des informations sur un document dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSapce) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} [docid] - Le paramètre `docid` est l'ID du document pour lequel vous souhaitez récupérer des\r\n * informations. C'est un paramètre obligatoire et doit être fourni.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque les\r\n * informations du document seront récupérées avec succès. Il prend un argument, qui est l'objet\r\n * d'informations du document.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel HTTP. Il prend un paramètre, qui est la réponse d'erreur.\r\n * @returns La fonction ne renvoie explicitement rien.\r\n */\r\nexport async function _3DSpace_get_docInfo(\r\n credentials,\r\n docid = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _3DSpace = credentials.space;\r\n if (docid === undefined) {\r\n console.log(\"Le paramètre docid est obligatoire\");\r\n return;\r\n }\r\n const url = _3DSpace + `/resources/v1/modeler/documents/${docid}`;\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\nexport async function _3DSpace_get_multiDocInfo(\r\n credentials,\r\n docids = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _3DSpace = credentials.space;\r\n if (docids === undefined) {\r\n console.log(\"Le paramètre docids est obligatoire\");\r\n return;\r\n }\r\n // const url = _3DSpace + `/resources/v1/modeler/documents/ids?$fields=revision&$include=!files,!ownerInfo,!originatorInfo,versions`;\r\n\r\n let url =\r\n `${_3DSpace}/resources/v1/modeler/documents/ids` +\r\n \"?$include=!files,!ownerInfo,!originatorInfo,!relOwnerInfo'\";\r\n let data = qs.stringify({\r\n $ids: docids.toString().replace('\"', \"\").replace(\"[\", \"\").replace(\"]\", \"\"),\r\n });\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n data,\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction effectue un appel HTTP authentifié pour récupérer le jeton CSRF pour un document de\r\n * modélisation 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.objID - ID du document pour lequel le jeton CSRF est demandé.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * renvoyées par le serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera exécutée si la requête\r\n * HTTP échoue ou rencontre une erreur. Il prend un argument, qui est la réponse d'erreur.\r\n */\r\nexport function _3DSpace_get_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.objID && credentials.objID !== \"\") {\r\n let url = `${credentials.space}/resources/v1/modeler/documents/${credentials.objID}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n credentials[\"success\"] = true;\r\n credentials[\"token\"] = info?.csrf?.value;\r\n credentials[\"datas\"] = info?.data[0];\r\n if (onDone) {\r\n onDone(credentials);\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n } else {\r\n _3DSpace_csrf(\r\n credentials,\r\n (rep) => {\r\n console.log(\"_3DSpace_get_csrf / _3DSpace_csrf\", rep);\r\n\r\n credentials[\"token\"] = rep;\r\n if (onDone) onDone(credentials);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description Cette fonction JavaScript récupère le TOKEN CSRF d'une application 3DSpace.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSapce) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `_3DSpace_csrf`. Il est utilisé pour gérer et afficher\r\n * les messages d’erreur ou exécuter toute logique de gestion des erreurs nécessaire.\r\n * @returns la valeur du jeton CSRF, qui est obtenue à partir de la réponse de l'appel HTTP.\r\n */\r\nexport function _3DSpace_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.space) {\r\n const url = credentials.space + \"/resources/v1/application/CSRF\";\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info.csrf.value);\r\n },\r\n onFailure(response, headers, xhr) {\r\n if (onError)\r\n onError({\r\n response,\r\n headers,\r\n xhr,\r\n });\r\n },\r\n });\r\n } else {\r\n const msgError = \"ERROR : url du 3DSpace non défini.\";\r\n if (onError) onError(msgError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSpace_get_ticket` récupère un ticket d’accès pour un document\r\n * \r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} credentials.objID - ID du document pour lequel l'URL du fichier est demandée.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'URL du fichier sera récupérée\r\n * avec succès. Il prend un paramètre, qui est l'URL du fichier.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction qui sera appelée s'il y a une erreur lors\r\n * de l'exécution de la fonction. Il s'agit d'un paramètre facultatif et peut être laissé indéfini s'il\r\n * n'est pas nécessaire.\r\n */\r\nexport function _3DSpace_get_ticket(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n let url =\r\n credentials.space +\r\n `/resources/v1/modeler/documents/${credentials.objID}/files/DownloadTicket`;\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n\r\n onComplete(response, headers) {\r\n let info = JSON.parse(response);\r\n\r\n const file_url = info.data[0].dataelements.ticketURL;\r\n\r\n if (onDone) onDone(file_url, headers);\r\n },\r\n\r\n onFailure(response, head) {\r\n console.warn(\"☠️ error => \", response, head);\r\n if (onError) onError(response, head);\r\n },\r\n });\r\n },\r\n (err) => {\r\n console.warn(\"_3DSpace_get_ticket / error => \", err);\r\n if (onError) onError(err);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description Cette fonction envoie une requête PUT à une URL spécifiée avec des en-têtes d'authentification et\r\n * renvoie une URL de fichier en cas de succès.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [docid] - L'ID du document pour lequel le ticket de téléchargement de fichier est demandé.\r\n * @param {String} [csr] - Le paramètre \"csr\" est un jeton CSRF utilisé à des fins d'authentification et de\r\n * sécurité. Il est transmis en tant qu'en-tête dans la requête HTTP à l'URL spécifiée.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * requête HTTP aboutira et que l'URL du fichier sera obtenue. Il prend un argument, qui est l'URL du\r\n * fichier.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être laissé indéfini s'il n'est pas\r\n * nécessaire.\r\n */\r\nexport function _3DSpace_file_url_csr(\r\n credentials,\r\n docid,\r\n csr = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = `${credentials.space}/resources/v1/modeler/documents/${docid}/files/DownloadTicket`;\r\n if (!csr) {\r\n csr = credentials.token;\r\n }\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: csr,\r\n },\r\n\r\n onComplete(response) {\r\n let info = JSON.parse(response);\r\n console.log(\"☠️ info => \", info);\r\n if (info.success === true) {\r\n try {\r\n const file_url = info.data[0].dataelements.ticketURL;\r\n if (onDone) onDone(file_url);\r\n } catch (err) {\r\n if (onError) onError(err);\r\n }\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction met à jour un fichier dans un espace 3D avec les données et le nom de fichier donnés,\r\n * en utilisant la protection CSRF.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [docId] - ID de document du fichier d'espace 3D en cours de mise à jour.\r\n * @param {String} [fileId] - Le paramètre fileid est l'identifiant unique du fichier qui doit être mis à jour.\r\n * @param {String} [data] - Ce paramètre représente les données du fichier qui doivent être mises à jour. Il peut\r\n * se présenter sous la forme d'un format binaire ou texte.\r\n * @param {String} [filename] - Nom du fichier mis à jour.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque\r\n * l'opération de mise à jour du fichier sera terminée avec succès.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera exécutée si une erreur\r\n * survient lors de l'exécution de la fonction `_3dspace_file_update`. Il permet de gérer les erreurs\r\n * de manière personnalisée, plutôt que de s'appuyer sur le comportement de gestion des erreurs par\r\n * défaut.\r\n */\r\nexport function _3DSpace_file_update(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const runFunction = () =>\r\n _3DSpace_file_update_csr(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n credentials.token,\r\n onDone,\r\n onError\r\n );\r\n\r\n if (credentials.token) {\r\n runFunction();\r\n } else {\r\n _3DSpace_get_csrf(\r\n credentials,\r\n docId,\r\n (result) => {\r\n console.log(\r\n \"_3DSpace_file_update | _3DSpace_get_csrf| onDone | result\",\r\n result\r\n );\r\n credentials[\"token\"] = result;\r\n runFunction();\r\n },\r\n () => {\r\n if (onError) onError();\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description Cette fonction met à jour un fichier dans le document du 3DSpace à l'aide d'un jeton CheckinTicket et CSRF.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} docId - ID du document en cours de mise à jour.\r\n * @param {String} fileId - ID du fichier mis à jour dans le document.\r\n * @param {String} data - Les données binaires du fichier en cours de mise à jour.\r\n * @param {String} filename - Nom du fichier mis à jour.\r\n * @param {String} csr - csr signifie Cross-Site Request Forgery token, qui est une mesure de sécurité utilisée\r\n * pour empêcher l'accès non autorisé aux applications Web. Il s'agit d'un jeton unique généré par le\r\n * serveur et envoyé au client, qui est ensuite inclus dans les requêtes ultérieures pour vérifier\r\n * l'authenticité de la requête. Dans cette fonction, le\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * fonction se terminera avec succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et s'il n'est pas fourni, l'erreur sera traitée en\r\n * interne.\r\n */\r\nexport function _3DSpace_file_update_csr(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n csr,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url =\r\n credentials.space +\r\n `/resources/v1/modeler/documents/files/CheckinTicket?tenant=${credentials.tenant.toUpperCase()}&e6w-lang=fr&e6w-timezone=-60&xrequestedwith=xmlhttprequest`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n SecurityContext: encodeURIComponent(\"ctx::\" + credentials.ctx),\r\n //ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data: JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n }),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const csrf = response.csrf;\r\n const info = response.data[0].dataelements;\r\n\r\n const formData = new FormData();\r\n\r\n let blobData;\r\n if (data instanceof Blob) {\r\n blobData = data;\r\n } else {\r\n blobData = new Blob([data], {\r\n type: \"text/plain\",\r\n });\r\n }\r\n\r\n formData.append(info.ticketparamname, info.ticket);\r\n formData.append(\"file_0\", blobData, filename);\r\n\r\n const opts = {};\r\n opts.method = \"POST\";\r\n opts.data = formData;\r\n\r\n opts.onComplete = function (response) {\r\n //Update the FCS file receipt\r\n let tempId = \"temp_\" + Date.now();\r\n let options = {\r\n method: \"PUT\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n },\r\n data: JSON.stringify({\r\n csrf,\r\n data: [\r\n {\r\n relateddata: {\r\n files: [\r\n {\r\n dataelements: {\r\n title: filename,\r\n receipt: response,\r\n },\r\n updateAction: \"REVISE\",\r\n },\r\n ],\r\n },\r\n id: docId,\r\n updateAction: \"NONE\",\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n\r\n let upperTenant = credentials.tenant.toUpperCase();\r\n\r\n _httpCallAuthenticated(\r\n credentials.space +\r\n `/resources/v1/modeler/documents/?$include=versions&tenant=${credentials.tenant.toUpperCase()}&e6w-lang=fr&e6w-timezone=-60&xrequestedwith=xmlhttprequest`,\r\n options\r\n );\r\n // _httpCallAuthenticated(\r\n // credentials.space +\r\n // `/resources/v1/modeler/documents/?$include=versions&tenant=${upperTenant}&e6w-lang=en&e6w-timezone=-120&xrequestedwith=xmlhttprequest`,\r\n // options\r\n // );\r\n };\r\n\r\n opts.onFailure = function (err) {\r\n if (onError) onError(err);\r\n };\r\n\r\n opts.timeout = 0;\r\n\r\n _httpCallAuthenticated(info.ticketURL, opts);\r\n },\r\n });\r\n}\r\n\r\nexport async function _3DSpace_put_docInfo(\r\n credentials,\r\n docId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _space = credentials.space;\r\n const csr = credentials.token;\r\n const ctx = credentials.ctx;\r\n const description = credentials?.description;\r\n const title = credentials?.title;\r\n\r\n if (!docId) {\r\n console.warn(\"Error: docId undefined\");\r\n if (onError) onError(\"Error: docId undefined\");\r\n return;\r\n }\r\n\r\n let url = `${credentials.space}/resources/v1/modeler/documents/${docId}`;\r\n const data = JSON.stringify({\r\n data: [\r\n {\r\n dataelements: {\r\n description,\r\n title,\r\n },\r\n },\r\n ],\r\n });\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data,\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Uploads a file to the 3DSpace platform.\r\n *\r\n * @param {Object} credentials - The credentials object.\r\n * @param {string} credentials.tenant - The tenant name.\r\n * @param {string} credentials.cs_name - The collaboration space name.\r\n * @param {string} [fileName=undefined] - The name of the file to upload.\r\n * @param {Blob} [blobFile=undefined] - The file blob to upload.\r\n * @param {function} [onDone=undefined] - Callback function to execute on successful upload.\r\n * @param {function} [onError=undefined] - Callback function to execute on error.\r\n * @param {function} [onProgress=undefined] - Callback function to execute on upload progress.\r\n * @returns {Promise<void>} - A promise that resolves when the upload is complete.\r\n */\r\nexport async function _3DSpace_Upload_File(\r\n credentials, // { tenant, cs_name }\r\n fileName = undefined,\r\n blobFile = undefined,\r\n onDone = undefined,\r\n onError = undefined,\r\n onProgress = undefined\r\n) {\r\n let { tenant, cs_name } = credentials;\r\n if (!tenant && !cs_name) {\r\n if (onError) onError(\"Credentials undefined\");\r\n return;\r\n }\r\n if (!fileName && !blobFile) {\r\n if (onError) onError(\"Définition du fichier undefined\");\r\n return;\r\n }\r\n //cs_name = encodeURIComponent(cs_name);\r\n const timeStamp = DateTime.now().ts;\r\n\r\n //NOTE - Get Ticket\r\n let url = `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/collabspaces/${encodeURIComponent(\r\n cs_name\r\n )}/ticket?id=${timeStamp}&tenant=${tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n\r\n _httpCallAuthenticated(\r\n `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/session?tenant=${tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`,\r\n {\r\n method: \"GET\",\r\n onComplete(response) {\r\n try {\r\n response = JSON.parse(response);\r\n const { csrftoken, isadmin } = response;\r\n if (csrftoken)\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n //\"x-ds-csrftoken\": csrftoken,\r\n Accept: \"application/json\",\r\n },\r\n\r\n onComplete(response, headers, xhr) {\r\n try {\r\n response = JSON.parse(response);\r\n if (response?.ticket) {\r\n const { ticket, actionurl, jobticket } = response;\r\n\r\n pushFileInFcs(\r\n { dataelements: { ticket, ticketURL: actionurl } },\r\n blobFile,\r\n fileName,\r\n (response) => {\r\n let doc = new DOMParser().parseFromString(\r\n response,\r\n \"text/html\"\r\n );\r\n const receipt = doc.body.firstChild\r\n .querySelector(\"input\")\r\n .getAttributeNode(\"value\").value;\r\n\r\n const urlRelatedFile = `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/collabspaces/${encodeURIComponent(\r\n cs_name\r\n )}/contents?receipt=${encodeURIComponent(receipt)}`;\r\n\r\n let re = /(?:\\.([^.]+))?$/;\r\n let ext = re.exec(fileName)[1];\r\n\r\n const bodyRequest = JSON.stringify({\r\n actions: [],\r\n businessobj: {\r\n description: credentials?.description\r\n ? credentials?.description\r\n : \"\",\r\n file: fileName,\r\n fullnameowner: \"\",\r\n icon: \"\",\r\n maturity: \"\",\r\n modified: \"\",\r\n owner: {},\r\n thumbnail: \"\",\r\n title: ext\r\n ? fileName.split(\".\").slice(0, -1).join(\".\")\r\n : fileName,\r\n type: {},\r\n },\r\n collabspace: cs_name,\r\n });\r\n _httpCallAuthenticated(urlRelatedFile, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json;charset=UTF-8\",\r\n \"X-DS-CSRFTOKEN\": csrftoken,\r\n },\r\n data: bodyRequest,\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n // console.log(\"_3DSpace_Upload_Doc | pushFileInFcs | onComplete\", response);\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n console.warn(\r\n \"_3DSpace_Upload_Doc | pushFileInFcs | onFailure\",\r\n { url: urlRelatedFile, bodyRequest, err }\r\n );\r\n if (onError) onError(err);\r\n },\r\n });\r\n },\r\n (err) => {\r\n console.warn(\"pushFileInFcs\", err);\r\n if (onError) onError(err);\r\n },\r\n (progress) => {\r\n if (onProgress) onProgress({ fileName, progress });\r\n }\r\n );\r\n }\r\n } catch (error) {\r\n if (onError) onError(error);\r\n }\r\n },\r\n onFailure(response) {\r\n console.warn(\"_3DSpace_Upload_Doc | onFailure\");\r\n if (onError) onError(response);\r\n },\r\n });\r\n } catch {\r\n if (onError) onError();\r\n }\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n }\r\n );\r\n}\r\n\r\nexport async function _3DSpace_Update_Doc(\r\n credentials,\r\n objectId,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _space = credentials.space;\r\n const csr = credentials.token;\r\n const ctx = credentials.ctx;\r\n\r\n //TEST de la Typo de Data (si Object, Blod, String)\r\n\r\n _3DSpace_get_docInfo(\r\n credentials,\r\n objectId,\r\n (info) => {\r\n const fileId = info.data[0].relateddata.files[0].id;\r\n const filename = info.data[0].relateddata.files[0].dataelements.title;\r\n\r\n _3DSpace_file_update(\r\n credentials,\r\n objectId,\r\n fileId,\r\n data,\r\n filename,\r\n (result) => {\r\n if (onDone) onDone(result);\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n }\r\n );\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description Cette fonction crée un document dans le 3Dspace à partir des données fournies au format JSON.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token », « space » et « ctx ».(ex: credentials.space, credentials.tenant, credentials.token)\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String}[data] - Le paramètre data correspond aux données JSON qui doivent être chargées dans le 3Dspace.\r\n *\r\n * @param {String}[filename] - Le nom du fichier à créer.\r\n * @param {String}[desc] - desc est un paramètre de chaîne qui représente la description du document en cours de création dans le 3Dspace.\r\n *\r\n * @param {Function}[onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque la requête HTTP sera terminée avec succès. Il prend la réponse comme argument.\r\n *\r\n * @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 _3dSpace_Create_Doc. Il prend l'objet de réponse comme argument.\r\n *\r\n */\r\nexport async function _3DSpace_Create_Doc(\r\n credentials,\r\n data, // data\r\n filename, //ref coclico\r\n descriptionDoc, // ref name\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n checkinTicket(\r\n credentials,\r\n (resultCheckinTicket) => {\r\n if (resultCheckinTicket?.items >= 1) {\r\n resultCheckinTicket.data.forEach((fcs__jobTicket) => {\r\n pushFileInFcs(\r\n fcs__jobTicket,\r\n data,\r\n filename,\r\n (receipt) => {\r\n relatedDocAndFile(\r\n credentials,\r\n receipt,\r\n filename,\r\n descriptionDoc,\r\n (response) => {\r\n if (response?.data.length) {\r\n if (onDone) onDone(response);\r\n } else {\r\n if (onError)\r\n onError({\r\n success: false,\r\n msg: \"Erreur lors de la mise en ralation entre la document et le fichier\",\r\n });\r\n }\r\n },\r\n (err) => console.warn(err)\r\n );\r\n },\r\n (err) => console.warn(err)\r\n );\r\n });\r\n }\r\n },\r\n (err) => console.warn(err)\r\n );\r\n}\r\n\r\nfunction checkinTicket(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials?.space && credentials.token && credentials.ctx) {\r\n let url = `${credentials.space}/resources/v1/modeler/documents/files/CheckinTicket`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n SecurityContext: credentials.ctx,\r\n },\r\n\r\n onComplete(response, headers, xhr) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (error) {\r\n //\r\n }\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n } else {\r\n console.log(\"Error de credentials\", credentials);\r\n }\r\n}\r\n\r\nfunction pushFileInFcs(\r\n fcs__jobTicket,\r\n fileData,\r\n fileName,\r\n onDone = undefined,\r\n onError = undefined,\r\n onProgress = undefined\r\n) {\r\n console.log(\"pushFileInFcs\", { fcs__jobTicket, fileData, fileName });\r\n let formData = new FormData();\r\n if (!(fileData instanceof Blob)) {\r\n fileData = new Blob([fileData], {\r\n type: \"text/plain\",\r\n });\r\n }\r\n formData.append(\"__fcs__jobTicket\", fcs__jobTicket.dataelements.ticket);\r\n formData.append(\"file-name\", fileName);\r\n formData.append(\"file_0\", fileData, fileName);\r\n formData.append(\"file-title\", fileName);\r\n formData.append(\"file-description\", fileName);\r\n\r\n let url = fcs__jobTicket.dataelements.ticketURL;\r\n\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"POST\", url, true);\r\n xhr.upload.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = (event.loaded / event.total) * 100;\r\n if (onProgress) onProgress(percentComplete);\r\n }\r\n };\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n if (onDone) onDone(xhr.responseText.replace(/[\\n\\r]/g, \"\"));\r\n } else {\r\n if (onError) onError(xhr.statusText);\r\n }\r\n };\r\n xhr.onerror = function () {\r\n if (onError) onError(xhr.statusText);\r\n };\r\n xhr.send(formData);\r\n}\r\n\r\nfunction relatedDocAndFile(\r\n credentials,\r\n receipt,\r\n filename,\r\n descriptionDoc = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"relatedDocAndFile\", { credentials, receipt, filename });\r\n const trimExt = (name) =>\r\n name.indexOf(\".\") === -1 ? name : name.split(\".\").slice(0, -1).join(\".\");\r\n let tempId = \"temp_\" + DateTime.now().ts;\r\n let url =\r\n credentials.space +\r\n \"/resources/v1/modeler/documents/?e6w-lang=fr&e6w-timezone=-120&xrequestedwith=xmlhttprequest\";\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n SecurityContext: encodeURIComponent(\"ctx::\") + credentials.ctx,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n csrf: { name: \"ENO_CSRF_TOKEN\", value: credentials.token },\r\n data: [\r\n {\r\n type: \"Document\",\r\n dataelements: {\r\n title: trimExt(filename),\r\n description: descriptionDoc,\r\n },\r\n relateddata: {\r\n files: [\r\n {\r\n dataelements: {\r\n title: filename,\r\n receipt: `${receipt}\\n`,\r\n },\r\n },\r\n ],\r\n },\r\n tempId,\r\n },\r\n ],\r\n }),\r\n onComplete(response) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (error) {\r\n //\r\n }\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction récupère les contextes de sécurité basés sur des paramètres spécifiés à partir d'un\r\n * hôte donné.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n *@param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [cs] - Le titre d'un espace de collaboration.\r\n * @param {String} [role] - Le paramètre de rôle est un paramètre facultatif qui spécifie le rôle de\r\n * l'utilisateur dans l'espace de collaboration. Si fourni, la fonction filtrera les espaces de\r\n * collaboration pour trouver celui où l'utilisateur a le rôle spécifié. S'il n'est pas fourni, la\r\n * fonction utilisera le premier espace de collaboration trouvé.\r\n * @param {String} [organization] - Nom de l'organisation pour laquelle le contexte de sécurité est récupéré.\r\n * @param {Function} [onDone] - La fonction à appeler lorsque le contexte de sécurité a été récupéré avec succès.\r\n * Il prend le contexte comme paramètre.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction de rappel qui est appelée si une erreur se\r\n * produit lors de l'exécution de la fonction. Il prend un argument, qui est le message d'erreur ou\r\n * l'objet.\r\n */\r\nexport function _3DSpace_get_securityContexts(\r\n credentials,\r\n cs = undefined,\r\n role = undefined,\r\n organization = undefined,\r\n onDone = undefined,\r\n onError = undefined,\r\n withPreferredCredentials = false\r\n) {\r\n const url =\r\n `${credentials.space}/resources/modeler/pno/person?` +\r\n \"current=true\" +\r\n \"&select=preferredcredentials\" +\r\n \"&select=collabspaces\";\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n onComplete(response) {\r\n // role.company.cs\r\n const contexts = JSON.parse(response);\r\n let context = \"\";\r\n let finalCs,\r\n finalOrg,\r\n finalRole = undefined;\r\n if (cs) {\r\n let oCS = contexts.collabspaces.find((e) => e.title === cs);\r\n if (oCS) {\r\n finalCs = cs;\r\n let couples = oCS.couples;\r\n couples = couples.filter(\r\n (value, index, self) =>\r\n index ===\r\n self.findIndex(\r\n (t) =>\r\n t.organization.pid === value.organization.pid &&\r\n t.role.pid === value.role.pid\r\n )\r\n );\r\n if (role) {\r\n if (Array.isArray(role)) {\r\n role.forEach((r) => {\r\n if (!finalRole)\r\n couples.forEach((e) => {\r\n if (\r\n r === e.role.name &&\r\n organization === e.organization.title\r\n ) {\r\n finalRole = r;\r\n finalOrg = organization;\r\n } else if (r === e.role.name) {\r\n let defineSingleItem = couples.filter(\r\n (couple) => couple.role.name === r\r\n );\r\n if (defineSingleItem.length === 1) {\r\n finalRole = defineSingleItem[0].role.name;\r\n finalOrg = defineSingleItem[0].organization.title;\r\n } else {\r\n onError(defineSingleItem);\r\n }\r\n }\r\n });\r\n });\r\n } else {\r\n couples.forEach((e) => {\r\n if (\r\n role === e.role.name &&\r\n organization === e.organization.title\r\n ) {\r\n finalRole = role;\r\n finalOrg = organization;\r\n } else if (role === e.role.name) {\r\n let defineSingleItem = couples.filter(\r\n (couple) => couple.role.name === role\r\n );\r\n if (defineSingleItem.length === 1) {\r\n finalRole = defineSingleItem[0].role.name;\r\n finalOrg = defineSingleItem[0].organization.title;\r\n } else {\r\n onError(defineSingleItem);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (finalCs && finalOrg && finalRole) {\r\n context = finalRole + \".\" + finalOrg + \".\" + finalCs;\r\n onDone(context);\r\n // onDone(encodeURI(context));\r\n } else {\r\n if (contexts.preferredcredentials && withPreferredCredentials) {\r\n context =\r\n contexts.preferredcredentials.role.name +\r\n \".\" +\r\n contexts.preferredcredentials.organization.title +\r\n \".\" +\r\n contexts.preferredcredentials.collabspace.title;\r\n onDone(context);\r\n } else {\r\n if (onError) {\r\n context = finalRole + \".\" + finalOrg + \".\" + finalCs;\r\n onError(context);\r\n }\r\n }\r\n }\r\n },\r\n onFailure(err, headers) {\r\n console.warn(\"Erreur de récupération du contexte de sécurité. => \", {\r\n err,\r\n headers,\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dspace_download_doc` est une fonction asynchrone qui télécharge un document à partir d'un espace 3D, avec des rappels facultatifs pour le succès et la gestion des erreurs.\r\n * @param {Object} credentials Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes: space, token\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.objID - Le paramètre objectId est l'identifiant unique du document que vous souhaitez\r\n * télécharger depuis le 3DSpace.\r\n * @param {String} credentials.returnType - \"blob\" - type d'object à retourner.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * téléchargement sera terminé avec succès. Il prend un argument, qui est les données de réponse du\r\n * téléchargement.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dspace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toutes les erreurs qui se produisent.\r\n \r\n * @returns {Promise}\r\n */\r\nexport async function _3DSpace_download_doc(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (!credentials.objID || credentials.objID === \"\") {\r\n console.warn(\r\n \"_3DSpace_download_doc() / Le paramètre objectId est obligatoire\"\r\n );\r\n if (onError)\r\n onError(\r\n \"_3DSpace_download_doc() / Le paramètre objectId est obligatoire\"\r\n );\r\n }\r\n\r\n if (credentials.space === \"\" || !credentials.space) {\r\n console.warn(\r\n \"_3DSpace_download_doc() / Le paramètre space est obligatoire\"\r\n );\r\n if (onError)\r\n onError(\"_3DSpace_download_doc() / Le paramètre space est obligatoire\");\r\n }\r\n if (credentials.token === \"\" || !credentials.token) {\r\n getCSRFToken(\r\n credentials,\r\n (rep) => {\r\n credentials[\"token\"] = rep;\r\n },\r\n (err) => {\r\n console.log(\"☠️ error => \", err);\r\n }\r\n );\r\n // console.warn(\r\n // \"_3DSpace_download_doc() / Le paramètre token est obligatoire\",\r\n // );\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n _3DSpace_get_ticket(\r\n credentials,\r\n (ticketURL) => {\r\n if (credentials?.returnType === \"blob\") {\r\n console.log(\"ticketURL blob\", ticketURL);\r\n fetch(ticketURL)\r\n .then((response) => response.blob())\r\n .then((blob) => {\r\n if (onDone) onDone(blob);\r\n })\r\n .catch((err) => {\r\n if (onError) onError(err);\r\n });\r\n } else {\r\n _httpCallAuthenticated(ticketURL, {\r\n onComplete(response) {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response;\r\n }\r\n\r\n if (onDone && typeof onDone === \"function\") onDone(tryParse);\r\n resolve(tryParse);\r\n },\r\n onFailure(error, headers, xhr) {\r\n if (onError) {\r\n console.log(\"error http\", error);\r\n onError({\r\n msg: JSON.parse(error),\r\n headers,\r\n xhr,\r\n });\r\n reject({\r\n msg: JSON.parse(error),\r\n headers,\r\n xhr,\r\n });\r\n }\r\n },\r\n });\r\n }\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n console.log(\"*_3dspace_download_doc / error file URL *\", error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSpace_download_multidoc` télécharge plusieurs documents à partir d'un espace 3D en\r\n * utilisant un token et des objectID donnés.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification dans une fonction interne(_3DSpace_get_downloadTicket_multidoc). Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} [credentials.token] - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n\r\n * @param {String} [objectIds] - Un tableau d'ID d'objet qui doivent être téléchargés à partir du 3DSpace.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de téléchargement sera terminé avec succès. Il faut un argument, qui est le résultat du\r\n * processus de téléchargement.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur pendant le processus de téléchargement. Il vous permet de gérer les erreurs qui surviennent\r\n * lors du téléchargement.\r\n\r\n */\r\nexport async function _3DSpace_download_multidoc(\r\n credentials,\r\n objectIds,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (\r\n typeof objectIds !== \"undefined\" &&\r\n Array.isArray(objectIds) &&\r\n objectIds?.length > 0\r\n ) {\r\n const datas = {\r\n credentials,\r\n myArray: objectIds,\r\n chunk: 80,\r\n fn_to_call: _3DSpace_get_downloadTicket_multidoc,\r\n };\r\n\r\n chunkArray(datas, (rep) => {\r\n if (onDone) onDone(rep);\r\n });\r\n } else {\r\n console.warn(\r\n \"La liste d'objects dans la fonction _3DSpace_download_multidoc est vide ou non défini.\"\r\n );\r\n if (onError)\r\n onError(\r\n \"La liste d'objects dans la fonction _3DSpace_download_multidoc est vide ou non défini.\"\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dspace_get_downloadTicket_multidoc` permet de récupérer un ticket de téléchargement\r\n * de plusieurs documents dans un espace 3D.\r\n * @param {Object} [credentials] - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} [credentials.token] - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} [objectIds] - Tableau d'ID d'objet pour lesquels le ticket de téléchargement doit être généré.\r\n * @param {Function} [onNext] - Une fonction de rappel qui sera appelée après chaque demande de ticket de\r\n * téléchargement réussie pour chaque objectId.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de téléchargement de chaque objet sera terminé avec succès. Il lui sera transmis un objet\r\n * contenant « objectId », « fileName » et « data » du fichier téléchargé.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction. Il est facultatif et peut être utilisé pour gérer les\r\n * erreurs qui surviennent.\r\n */\r\nexport function _3DSpace_get_downloadTicket_multidoc(\r\n credentials,\r\n objectIds,\r\n onNext = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const compilData = [];\r\n objectIds.forEach((objectId) => {\r\n compilData.push({\r\n id: objectId,\r\n });\r\n });\r\n let data = JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n data: compilData,\r\n });\r\n\r\n const url = `${credentials.space}/resources/v1/modeler/documents/DownloadTicket?tenant=${credentials.tenant}&e6w-lang=fr&e6w-timezone=-120`;\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n data,\r\n type: \"json\",\r\n onComplete(response) {\r\n const datas = response.data;\r\n if (response.success === true) {\r\n if (onNext) onNext();\r\n datas.forEach((data) => {\r\n try {\r\n const fileName = data.dataelements.fileName;\r\n const fileUrl = data.dataelements.ticketURL;\r\n\r\n _httpCallAuthenticated(fileUrl, {\r\n onComplete: (response, headers) => {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response.blob();\r\n }\r\n if (onDone)\r\n onDone({\r\n objectId: data.id,\r\n headers,\r\n fileName,\r\n data: tryParse,\r\n });\r\n },\r\n onFailure: (error) => {\r\n console.log(\"error http\", error);\r\n },\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n if (onError) onError(err);\r\n }\r\n });\r\n }\r\n },\r\n onFailure(response) {\r\n console.log(response);\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n// MATURITY\r\n/**\r\n * @description Cette fonction JavaScript récupère les prochains états possibles pour un objet donné dans un espace\r\n * 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre `objectId` est l'identifiant de l'objet dont vous souhaitez récupérer\r\n * les prochains états. Il est utilisé pour spécifier l'objet pour lequel vous souhaitez obtenir les\r\n * états suivants dans l'espace 3D.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la demande sera terminée avec\r\n * succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction. Il s'agit d'un paramètre facultatif, donc s'il n'est pas\r\n * fourni, il sera par défaut «non défini».\r\n * @return {Promise}\r\n */\r\nexport function _3DSpace_lifecycle_getNextStates(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/modeler/dslc/maturity/getNextStates`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n id: objectId,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n/**\r\n * @description Cette fonction permet de changer l'état d'un objet dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant de l'objet dont l'état doit être modifié.\r\n * Il s'agit d'un identifiant unique qui représente un objet spécifique dans le système.\r\n * @param {Function} [nextState] - Le paramètre `nextState` est l'état souhaité vers lequel vous souhaitez modifier\r\n * l'objet. Il représente l'état suivant du cycle de vie de l'objet.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération de changement d'état\r\n * sera terminée avec succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dspace_lifecyle_changeState`. C'est un paramètre\r\n * facultatif, donc s'il n'est pas fourni, la fonction ne fera rien en cas de problème.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_changeState(\r\n credentials,\r\n objectId,\r\n nextState,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/modeler/dslc/maturity/changeState`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n id: objectId,\r\n nextState,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n// RESERVATION\r\n//TODO -\r\nfunction _3DSpace_lifecyle_reserve(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n//TODO -\r\nfunction _3DSpace_lifecyle_unreserve(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n// SHARING\r\n//TODO -\r\nfunction _3DSpace_lifecyle_getSharing(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n//TODO -\r\nfunction _3DSpace_lifecyle_setSharing(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n// VERSIONING\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_getGraph` récupère un graphique du cycle de vie d'un objet spatial\r\n * 3D à l'aide des informations d'identification et de l'ID d'objet fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier la demande.\r\n * Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant de l'objet pour lequel vous souhaitez\r\n * récupérer le graphique. Il est utilisé pour spécifier l'objet pour lequel vous souhaitez obtenir le\r\n * graphique de version.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la récupération du graphique sera\r\n * réussie. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_getGraph`. C'est un paramètre\r\n * facultatif, donc s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_getGraph(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // A VALIDER\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/dslc/versiongraph?withThumbnail=0&withIsLastVersion=0&withAttributes=0&withCopyFrom=0&tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n graphRequests: [\r\n {\r\n id: objectId,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n// REVISION\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_getNextRevision` permet de récupérer la prochaine révision d'un\r\n * document dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre `objectId` est l'identifiant unique de l'objet pour lequel vous\r\n * souhaitez obtenir la prochaine révision. Il est utilisé pour spécifier l'objet qui doit être révisé.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_getNextRevision`. Il s'agit d'un\r\n * paramètre facultatif, donc s'il n'est pas fourni, il sera par défaut «non défini».\r\n * @returns Une promesse est renvoyée.\r\n */\r\nexport function _3DSpace_lifecycle_getNextRevision(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/lifecycle/revise/prepare_revise_maskattributes?tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n \"attribute[PLMReference.V_versionComment]\": null,\r\n physicalid: objectId,\r\n type: \"Document\",\r\n tenant: credentials.tenant,\r\n objectId,\r\n policy: \"Document Release\",\r\n availableSemantic: [\"E\", \"LAST\", \"NEW\", \"DUP\"],\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_changeRevision` est utilisée pour changer la révision d'un objet\r\n * dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId représente l'identifiant unique de l'objet dans l'espace 3D.\r\n * Il est utilisé pour spécifier quelle révision de l'objet doit être modifiée.\r\n * @param {Function} nextRevision - Le paramètre `nextRevision` est le numéro de révision qui sera attribué à\r\n * l'objet après le changement de révision.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_changeRevision`. Il vous permet de\r\n * gérer toutes les erreurs qui se produisent et d’effectuer toute gestion ou journalisation des\r\n * erreurs nécessaire.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_changeRevision(\r\n credentials,\r\n objectId,\r\n nextRevision,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/lifecycle/revise/major?tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n physicalid: objectId,\r\n proposedRevision: nextRevision,\r\n modifiedAttributes: {\r\n revision: nextRevision,\r\n },\r\n },\r\n ],\r\n folderid: null,\r\n notificationTimeout: 600,\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n\r\nexport function _3DSpace_get_currentSecurityContext(credentials) {\r\n return new Promise((resolve, reject) => {\r\n const url = `${\r\n credentials.space\r\n }/resources/pno/person/getsecuritycontext&tenant=${credentials.tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n\r\n let options = {\r\n method: \"GET\",\r\n onComplete(response) {\r\n resolve(response);\r\n },\r\n onFailure(response) {\r\n reject(response);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n\r\nexport function _3DSpace_lifecycle_getRevisions(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise(async (resolve, reject) => {\r\n const { tenant, ctx, space } = credentials;\r\n if (!tenant || !ctx || !space) {\r\n reject({ error: \"Erreur de credentials\", tenant, ctx, space });\r\n }\r\n const url = `${\r\n credentials.space\r\n }/resources/v1/dslc/versiongraph?withThumbnail=0&withIsLastVersion=1&withAttributes=1&withCopyFrom=1&tenant=${credentials.tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n let SecurityContext;\r\n await _3DSpace_get_currentSecurityContext(credentials).then(\r\n (result) => (SecurityContext = result?.SecurityContext)\r\n );\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + SecurityContext,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n graphRequests: [\r\n {\r\n id: objectId,\r\n attributes: [\"revision\", \"policy\"],\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n resolve(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n reject(response);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n// SECTION: BOOKMARKS\r\n\r\nexport function getBookmarksRoot(\r\n credentials,\r\n) {\r\n return new Promise((resolve, reject) => {\r\n\r\n\r\n const store = mainStore();\r\n \r\n const { _fedSearch, currentTenant, ctx } = credentials;\r\n if(!ctx) reject({success:false, msg:\"getBookmarksRoot: ctx is missing in credentials\"});\r\n if(!_fedSearch) reject({success:false, msg:\"getBookmarksRoot: _fedSearch is missing in credentials\"});\r\n if(!currentTenant) reject({success:false, msg:\"getBookmarksRoot: currentTenant is missing in credentials\"});\r\n const URL = {\r\n base: _fedSearch,\r\n uri: \"/federated/search\",\r\n opt: `?tenant=${currentTenant}`,\r\n };\r\n \r\n const formatedDatas = {\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"physicalid\",\r\n \"mxid\",\r\n \"ds6w:type\",\r\n \"ds6w:identifier\",\r\n \"ds6w:classification\",\r\n \"icon_2ddefaultthb.subtype\",\r\n \"ds6w:reservedBy\",\r\n \"relcount\",\r\n \"taxonomies\",\r\n \"ParentBk\",\r\n \"owner\",\r\n \"ds6wg:revision\",\r\n \"ds6w:reserved\",\r\n \"ds6w:description\",\r\n \"ds6w:modified\",\r\n \"ds6w:created\",\r\n \"ds6w:responsible\",\r\n \"ds6w:status\",\r\n \"ds6w:policy\",\r\n \"ds6w:organizationResponsible\",\r\n \"ds6w:project\",\r\n ],\r\n label: `Folder_read_getRoots_${new Date().getTime()}`,\r\n with_synthesis: \"false\",\r\n order_by: \"asc\",\r\n order_field: \"ds6w:label\",\r\n start: 0,\r\n nresults: 1000,\r\n select_file: [\"icon\", \"thumbnail_2d\"],\r\n query: 'flattenedtaxonomies:\"types/Workspace\"',\r\n locale: \"fr\",\r\n tenant: currentTenant,\r\n source: [\"3dspace\"],\r\n indexmode: \"true\",\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: `ctx::${ctx}`,\r\n },\r\n },\r\n };\r\n \r\n const url = `${URL.base}${URL.uri}${URL.opt}`;\r\n \r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"content-Type\": \"application/json\",\r\n SecurityContext: `ctx::${ctx}`,\r\n },\r\n data: JSON.stringify(formatedDatas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n \r\n const bksRoots = info.results.map((bks) => {\r\n const obj = { id: bks.attributes[0].value };\r\n bks.attributes.forEach((attr) => {\r\n if (attr.name === \"ds6w:label\") obj[\"name\"] = attr.value;\r\n });\r\n return obj;\r\n });\r\n resolve(bksRoots);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const info = {};\r\n info[\"error\"] = error;\r\n info[\"headers\"] = headers;\r\n info[\"xhr\"] = xhr;\r\n reject(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\nexport function _3DSpace_bookmark_getSubSignets(credentials, objIdBookmark) {\r\n return new Promise((resolve, reject) => {\r\n // const store = mainStore();\r\n\r\n const url = `${\r\n credentials.space\r\n }/resources/v1/FolderManagement/Folder/${objIdBookmark}/folderTree?tenant=${credentials.tenant.toUpperCase()}`;\r\n const body = {\r\n expandList: \"\",\r\n isRoot: \"\",\r\n isPersonalFolder: false,\r\n Read: true,\r\n nresults: 200,\r\n sortOrder: \"asc\",\r\n sortMode: \"ds6w:label\",\r\n nextStart: 0,\r\n refine: \"\",\r\n };\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"content-Type\": \"application/json\",\r\n SecurityContext: `ctx::${credentials.ctx}`,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n // console.log(\"response: =>\", response.folders);\r\n const info = response;\r\n console.log(\"getListBkEnfant | réponse => \", info);\r\n\r\n resolve(info);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const info = {};\r\n info[\"error\"] = error;\r\n info[\"headers\"] = headers;\r\n info[\"xhr\"] = xhr;\r\n if (onError) {\r\n onError(info);\r\n console.log(\"Coucou dans enfant\");\r\n throw new Error(\"Coucou dans enfant\", { cause: error });\r\n }\r\n },\r\n });\r\n });\r\n}\r\n\r\n// ANCHOR: _3dspace_bookmark_getChildren\r\n// TODO : A finir , manque la FN _3dspace_get_multiDocInfo()\r\nexport function _3DSpace_bookmark_getItems(credentials, objIdBookmark) {\r\n return new Promise((resolve, reject) => {\r\n // const store = mainStore();\r\n\r\n const url = `${credentials.space}/resources/v1/modeler/dsbks/dsbks:Bookmark/${objIdBookmark}?$mask=dsbks:BksMask.Items`;\r\n _httpCallAuthenticated(url, {\r\n headers: {\r\n SecurityContext: `ctx::${credentials.ctx}`,\r\n },\r\n onComplete: (response) => {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response;\r\n }\r\n resolve(tryParse);\r\n },\r\n onFailure(response) {\r\n reject(response);\r\n },\r\n });\r\n });\r\n}\r\nexport function _3DSpace_bookmark_newWorkspace(\r\n credentials,\r\n parentId,\r\n title,\r\n description,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n const url = `${credentials.space}/resources/v1/modeler/dsbks/dsbks:Bookmark`;\r\n let item = {\r\n attributes: {\r\n title,\r\n description,\r\n inheritedAccess: \"no\",\r\n },\r\n };\r\n let bodyRequest = {\r\n items: [],\r\n };\r\n if (parentId) bodyRequest[\"parentId\"] = parentId;\r\n bodyRequest.items.push(item);\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n SecurityContext: credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data: JSON.stringify(bodyRequest),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n/**\r\n * @description `_3DSpace_bookmark_addSubsciptions`\r\n * @param {Object} credentials\r\n * @param {String} objectId\r\n * @param {String} personList \"<uuid:5ca25b8e-98d0-46c3-ac43-3faa83c4295a>\"\r\n * @param {Array} eventsList \"NXFolderCreated,NXFolderDeleted,NXContentAdded,NXContentRemoved\"\r\n * @param {Function} onDone\r\n * @param {Function} onError\r\n * @returns {Promise}\r\n */\r\nexport function _3DSpace_bookmark_addSubsciptions(\r\n credentials,\r\n objectId,\r\n personList,\r\n eventsList,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"credentials\", credentials);\r\n return new Promise((result) => {\r\n const url = `${credentials.space}/resources/v1/modeler/subscriptions/createPushSubscription?xrequestedwith=xmlhttprequest`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n data: [\r\n {\r\n type: \"Workspace\",\r\n cestamp: \"businessobject\",\r\n relId: objectId,\r\n id: objectId,\r\n dataelements: {\r\n personList,\r\n eventsList,\r\n },\r\n tenant: credentials.tenant,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n });\r\n}\r\n\r\n//!SECTION\r\n\r\n// module.exports = {\r\n\r\n// _3DSpace_bookmark_getChildren,\r\n// };\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n\r\n/**\r\n * @description La fonction `getAllContextSecurity` effectue une requête HTTP GET authentifiée pour récupérer toutes\r\n * les ressources de sécurité du contexte.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier la demande.\r\n * Il inclut généralement des propriétés telles qu'ici « space » et « tenant ».(ex: credentials.space, credentials.tenant).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la requête HTTP sera terminée avec\r\n * succès. Il prend deux paramètres: \"rep\" (la réponse JSON analysée) et \"headers\" (les en-têtes de\r\n * réponse).\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il faut trois arguments : « réponse », « en-têtes » et « xhr ».\r\n * L'argument `response` contient le corps de la réponse d'erreur, l'argument `headers` contient les en-têtes de réponse,\r\n *\r\n */\r\nexport function getAllContextSecurity(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const URL = {\r\n base: `${credentials.space}`,\r\n uri: \"/resources/bps/cspaces\",\r\n optTenant: `tenant=${credentials.tenant}`,\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}?${URL.optTenant}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json,text/javascript,*/*\",\r\n \"Content-Type\": \"application/ds-json\",\r\n },\r\n onComplete(response, headers) {\r\n const rep = JSON.parse(response);\r\n\r\n if (onDone) onDone(rep, headers);\r\n },\r\n onFailure(response, headers, xhr) {\r\n if (onError) onError({ response, headers, xhr });\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\nimport { _3DSpace_get_ticket } from \"./3dspace_api\";\r\n/**\r\n * @description La fonction `getDataFrom3DSpace` récupère les données d'un espace 3D en utilisant les informations\r\n * d'identification fournies et les préférences du widget, et appelle le rappel `onDone` avec la\r\n * réponse ou le rappel `onError` avec toutes les erreurs rencontrées.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token » et « space ».(ex: credentials.token, credentials.space, credentials.tenant, credentials.ctx)\r\n * @property space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @property token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n *\r\n * @param widgetPreference - Le paramètre `widgetPreference` est un objet qui contient les préférences\r\n * du widget. Il peut inclure des propriétés telles que la taille, la couleur, la position du widget ou\r\n * toute autre personnalisation spécifique au widget.\r\n * @param onDone - Une fonction de rappel qui sera appelée lorsque la récupération des données sera\r\n * réussie. Il prend la réponse comme paramètre.\r\n * @param onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getDataFrom3DSpace`. Il est utilisé pour gérer et traiter\r\n * les erreurs qui surviennent.\r\n */\r\nexport function getDataFrom3DSpace(\r\n credentials,\r\n widgetPreference,\r\n onDone,\r\n onError,\r\n) {\r\n _3DSpace_get_ticket(\r\n credentials.space,\r\n widgetPreference,\r\n (response) => {\r\n _httpCallAuthenticated(response, {\r\n header: { ENO_CSRF_TOKEN: credentials.token },\r\n onComplete: (response) => {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure: (error) => {\r\n console.log(\"error http\", error);\r\n if (onError) onError(error);\r\n },\r\n });\r\n },\r\n (error) => {\r\n console.log(\"error file URL\", error);\r\n if (onError) onError(error);\r\n },\r\n );\r\n}\r\n","import { _3DSpace_get_ticket } from \"./3dspace_api\";\r\nimport { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n/**\r\n * @description La fonction `getDownloadDocument` est une fonction asynchrone qui récupère un document à télécharger\r\n * à partir d'un espace et d'un ID de document spécifiés.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @param {String} docId - L'ID du document du fichier que vous souhaitez télécharger.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée une fois le\r\n * téléchargement terminé et réussi. Les données de réponse seront transmises comme argument. Il prend trois arguments : « reponse », « headers » et « xhr ».\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur pendant le processus de téléchargement. Il prend trois arguments : « error », « headers » et « xhr ».\r\n *\r\n * @returns un objet Promesse.\r\n */\r\nexport async function getDownloadDocument(\r\n credentials,\r\n docId,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n return new Promise((result) => {\r\n //TODO - a test ? manque l'URL\r\n _3DSpace_get_ticket(credentials, docId, (reponse) => {\r\n _httpCallAuthenticated(reponse, {\r\n onComplete: (reponse, headers, xhr) => {\r\n result(JSON.parse(reponse));\r\n if (onDone) onDone(JSON.parse(reponse), headers, xhr);\r\n return result;\r\n },\r\n onFailure: (error, headers, xhr) => {\r\n if (onError) onError(error, headers, xhr);\r\n console.log(error, headers?.errormsg);\r\n },\r\n });\r\n });\r\n });\r\n}\r\n","import { _3DSpace_get_csrf, _3DSpace_file_update } from \"./3dspace_api\";\r\n\r\n/**\r\n * @description La fonction « pushDataIn3DSpace » est utilisée pour pousser les données dans le 3DSpace à l'aide\r\n * des informations d'identification et de l'ID d'objet fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification dans une fonction interne(_3DSpace_get_downloadTicket_multidoc). Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} [credentials.space] - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace :(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia) , 3DSwym, 3DCompass...)\r\n \r\n * @param {Object} dataBase - Le paramètre `dataBase` est un objet qui contient les données que vous souhaitez\r\n * transférer dans l'espace 3D. Il sera converti au format JSON et enregistré sous forme de fichier\r\n * dans l'espace 3D.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant unique de l'objet dans l'espace 3D où les\r\n * données seront poussées.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque les\r\n * données seront correctement poussées vers l'espace 3D. Il faut un argument, qui est le résultat de\r\n * l'opération.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `pushDataIn3DSpace`. Il vous permet de gérer et de\r\n * répondre à toute erreur pouvant survenir.\r\n */\r\nexport function pushDataIn3DSpace(\r\n credentials,\r\n dataBase,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const jsonFile = new Blob([JSON.stringify(dataBase)], { type: \"text/plain\" });\r\n\r\n credentials = { ...credentials, objID: objectId };\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (data) => {\r\n console.log(\"_3DSpace_get_csrf | onDone | data\", data);\r\n const fileId = data.datas.relateddata.files[0].id;\r\n const fileName = data.datas.relateddata.files[0].dataelements.title;\r\n\r\n _3DSpace_file_update(\r\n credentials,\r\n objectId,\r\n fileId,\r\n jsonFile,\r\n fileName,\r\n (result) => {\r\n if (onDone) onDone(result);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n }\r\n );\r\n },\r\n (error) => {\r\n console.log(\"En cas d'erreur nous avons :\", error);\r\n alert(\"Erreur lors de la sauvegarde, Veuillez réessayez\");\r\n if (onError) onError(error);\r\n }\r\n );\r\n}\r\n","import {\r\n _3DSpace_download_doc,\r\n _3DSpace_download_multidoc,\r\n _3DSpace_get_csrf,\r\n _3DSpace_csrf,\r\n} from \"./3dspace_api\";\r\n\r\nlet listObjectId, datas;\r\n\r\nconst mixedDatas = [];\r\n\r\n/**\r\n * @description La fonction `get_3DSpace_csrf` récupère un jeton CSRF du 3DSpace en utilisant les informations d'identification fournies.(Anciennement loadDatas()) avec ou sans objID\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici' « objID », « space ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.objID - Le paramètre objID correspond à un object ID contant les objets Id des bases de données)(se base sur un tenant).\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `get_3DSpace_csrf`. C'est un paramètre facultatif, donc\r\n * s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n */\r\nexport async function get_3DSpace_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n if (credentials.objID && credentials.objID !== \"\") {\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (response) => {\r\n if (onDone) onDone(response);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n } else if (credentials.objID === null || credentials.objID === \"\") {\r\n _3DSpace_csrf(\r\n credentials,\r\n (rep) => {\r\n const msg = \"Pas d'objID, ou invalide\";\r\n const info = { rep, msg };\r\n if (onDone) onDone(info);\r\n },\r\n (err) => {\r\n const msg = \"Pas d'objID et erreur sur le Space\";\r\n const infos = { msg, err };\r\n if (onError) onError(infos);\r\n },\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getDatasByTenant` est une fonction asynchrone qui télécharge une liste de documents à partir du 3DSpace à l'aide des informations d'identification fournies (un ObjectId) et appelle le rappel `onDone`\r\n * avec les données téléchargées ou le rappel `onError` avec une erreur le cas échéant. (anciennement getDocuments())\r\n\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token) (get_3DSpace_csrf())\r\n * @param {String} credentials.objID - object Id contenant une liste d'object IDs.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque les\r\n * données seront téléchargées avec succès. Il faut un argument, qui correspond aux données\r\n * téléchargées.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `_3DSpace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toute erreur pouvant survenir.\r\n */\r\nexport async function getDatasByTenant(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n console.log(\"getDatasByTenant (getDocuments)\", credentials);\r\n\r\n await _3DSpace_download_doc(\r\n credentials,\r\n (data) => {\r\n const _datas = {};\r\n _datas[\"obj\"] = data;\r\n console.log(\"getDatasByTenant (getDocuments) _datas\", _datas);\r\n onDone && onDone?.(_datas);\r\n\r\n // getDatasFrom3DSpace(\r\n // credentials,\r\n // (reponse) => {\r\n\r\n // _datas[\"datas\"] = reponse;\r\n\r\n // if (onDone) onDone(_datas);\r\n // },\r\n // (err) => {\r\n // if (onError) onError(err);\r\n // },\r\n // );\r\n },\r\n (err) => {\r\n onError && onError?.(err);\r\n },\r\n );\r\n}\r\n\r\n/**\r\n * @description La fonction `getDatasFrom3DSpace` récupère les données d'un espace 3D en utilisant les informations\r\n * d'identification fournies et appelle le rappel `onDone` avec les données récupérées ou le rappel\r\n * `onError` avec une erreur le cas échéant.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {ArrayOfObject} credentials.objIds - Tableau d'objets des objets Id des bases de données et leur nom.(ex: credentials.objIds=[{objID:\"xxx\",name:\"xxx\"},{objID:\"xxx\",name:\"xxx\"}] ) (name disponible dans le module :\r\n * - dbClients,\r\n * - dbCatalogs,\r\n * - dbProjets )\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque toutes\r\n * les données auront été téléchargées avec succès depuis l'espace 3D. Il faut un argument, qui est un\r\n * tableau d’objets. Chaque objet du tableau représente un document téléchargé et possède deux\r\n * propriétés: le nom du document\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function getDatasFrom3DSpace(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const bbds = [];\r\n if (\r\n !credentials.objIds &&\r\n !Array.isArray(credentials.objIds) &&\r\n credentials.objIds.length === 0\r\n ) {\r\n console.warn(\"la liste est vide ou n'est pas un tableau\");\r\n return;\r\n }\r\n credentials.objIds.forEach((obj, i) => {\r\n _3DSpace_download_doc(\r\n credentials,\r\n obj.objID,\r\n (data) => {\r\n bbds.push({ [obj.name]: data });\r\n if (obj.name === \"dbProjets\") {\r\n listObjectId = data.affaires.map((aff) => {\r\n return aff.objectID;\r\n });\r\n dataMixing(credentials, datas);\r\n }\r\n if (i === credentials.objIds.length - 1) {\r\n if (onDone) onDone(bbds);\r\n\r\n delete credentials.objIds;\r\n delete credentials.datas;\r\n }\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `dataMixing` prend en compte les informations d'identification, les données et les\r\n * rappels facultatifs, télécharge les données à partir d'un espace 3D, les mélange avec les données\r\n * d'entrée et renvoie les données mélangées.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n@param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param _datas - Le paramètre `_datas` est un tableau d'objets ID d'Affaires\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de mélange des données sera terminé avec succès. Il prend un argument, `mixedDatas`, qui\r\n * est un tableau contenant les données mixtes.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée en cas\r\n * d'erreur lors du processus de mélange des données. Il faut un argument, qui est l'objet d'erreur.\r\n */\r\nexport function dataMixing(\r\n credentials,\r\n _datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n _3DSpace_download_multidoc(\r\n credentials,\r\n listObjectId,\r\n (result) => {\r\n const copyData = [..._datas];\r\n copyData.find((e) => e.objectID === result.objectId)[\"data\"] =\r\n result.data;\r\n datas = copyData;\r\n\r\n mixedDatas.push(result.data);\r\n if (onDone) onDone(mixedDatas);\r\n },\r\n (err) => {\r\n if (onError) onError(err), console.log(err);\r\n },\r\n );\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\nimport { _3DSpace_get_docInfo } from \"../main/3dspace_api\";\r\nimport { UUID } from \"../../api/index\";\r\n\r\n// LINK - https://media.3ds.com/support/documentation/developer/Cloud/en/English/CAA3DSpaceREST/CAA6WRestServicePrinciples.htm\r\n// Doc de test sur tenant BEAM3 PROD\r\nconst objIDTEST = \"B70C12CDAE0415006579A93200061A14\";\r\n// Doc de test sur tenant Pivetau TEST\r\nconst objIDTEST2 = \"FA35FB9B177A28006580190400193C20\";\r\nconst objIDTEST3 = \"FA35FB9B177A280065800EA0000F599C\";\r\n\r\nconst sourcesSearching = [\r\n \"swym\",\r\n \"3dspace\",\r\n \"drive\",\r\n \"usersgroup\",\r\n \"3dplan\",\r\n \"dashboard\",\r\n];\r\n\r\nconst listPredicates = {\r\n how: \"ds6w:how\",\r\n what: \"ds6w:what\",\r\n when: \"ds6w:when\",\r\n where: \"ds6w:where\",\r\n who: \"ds6w:who\",\r\n why: \"ds6w:why\",\r\n};\r\nconst objToTag = {\r\n objId: objIDTEST3,\r\n pred: \"who\",\r\n order_by: \"desc\",\r\n tag: \"testTag\",\r\n};\r\n\r\n/**\r\n * @description La fonction `addTagToDoc` est utilisée pour ajouter une balise à un document dans un espace 3D en\r\n * utilisant les informations d'identification et les informations sur l'objet fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {Object} credentials.currentUser.username - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`), une chaîne de caractère contenant le nom d'utilisateur.\r\n *\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Object} obj - Le paramètre `obj` est un objet qui contient les propriétés suivantes :\r\n * @param {String} obj.info.name - L'identifiant de l'objet que vous souhaitez marquer. (ex: B70C12CDAE0415006579A93200061A14)\r\n * @param {String} obj.pred - La propriété de l'objet que vous souhaitez marquer. (ex: how, what, when, where, who, why)\r\n * @param {String} obj.tag - Le tag que vous souhaitez ajouter à l'objet.\r\n * @param {String} obj.order_by - L'ordre de la balise que vous souhaitez ajouter à l'objet. (ex: asc, desc)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de marquage sera terminée avec succès. La réponse du serveur lui sera transmise en\r\n * argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `addTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n * @example credentials={space: \"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\", currentUser: { username: \"Yan\" }, tenant: \"R1132100968447\"}\r\n * @example obj={objId: \"B70C12CDAE0415006579A93200061A14\", pred: \"what\", tag: \"testTag\"}\r\n *\r\n */\r\nexport function addTagToDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const { objId, pred, tag } = obj;\r\n\r\n const URL = {\r\n uri: \"/resources/6w/tags\",\r\n otpCTX: \"SecurityContext=preferred\",\r\n optTenant: `tenant=${tenant}`,\r\n };\r\n const url = `${space}${URL.uri}?${URL.otpCTX}&${URL.optTenant}`;\r\n const dataTest = {\r\n tag: [\r\n {\r\n subject: [\r\n {\r\n uri: `pid://${objId}`,\r\n },\r\n ],\r\n predicate: listPredicates[pred],\r\n object: {\r\n literal: tag,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(dataTest),\r\n onComplete(response) {\r\n const resp = JSON.parse(response);\r\n const info = {};\r\n setTimeout(() => {\r\n _3DSpace_get_docInfo(\r\n credentials,\r\n objId,\r\n (rep) => {\r\n const docName = rep.data[0].dataelements.title;\r\n const docExt =\r\n rep.data[0].dataelements.fileExtension !== undefined\r\n ? rep.data[0].dataelements.fileExtension\r\n : \"\";\r\n const createBy =\r\n rep.data[0].relateddata.ownerInfo[0].dataelements.name;\r\n info[\"name\"] = docName;\r\n info[\"ext\"] = docExt;\r\n info[\"createBy\"] = createBy;\r\n obj.info = { ...info };\r\n getActualTagsOnDoc(\r\n credentials,\r\n obj,\r\n (rep) => {\r\n if (onDone) onDone(rep);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n },\r\n (response, headers) => {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n );\r\n }, 2000);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n/**\r\n * @description La fonction `getActualTagsOnDoc` récupère les balises réelles d'un document en utilisant les\r\n * informations d'identification et les informations sur l'objet fournies. Appeler depuis `addTagToDoc()`\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Object} credentials.currentUser.username - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * @param {Object} credentials.ctx - L'ID du contexte de travail.\r\n * @param obj - Le paramètre `obj` est un objet qui contient des informations sur le document. Il\r\n * possède les propriétés suivantes :\r\n * @param {String} obj.info.name - Le nom du document.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de marquage sera terminée avec succès. La réponse du serveur lui sera transmise en\r\n * argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `addTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function getActualTagsOnDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n // const nomFichier = \"beam_cube_TEST_BDD\";\r\n console.log(\"obj \", obj);\r\n const nomFichier = obj.info.name;\r\n const URL = {\r\n baseUrl: `https://${credentials.tenant.toLowerCase()}-eu1-fedsearch.3dexperience.3ds.com`,\r\n uri: \"/federated/search\",\r\n };\r\n const url = `${URL.baseUrl}${URL.uri}`;\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const uuid = UUID();\r\n const dataPattern = {\r\n with_indexing_date: true,\r\n with_synthesis: true,\r\n with_nls: false,\r\n label: `3DSearch-${credentials.currentUser.username}-AjoutDeTagBeam-${uuid}`,\r\n locale: \"fr\",\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"ds6w:type\",\r\n \"ds6w:description\",\r\n \"ds6w:identifier\",\r\n \"ds6w:modified\",\r\n \"ds6w:created\",\r\n \"ds6wg:revision\",\r\n \"ds6w:status\",\r\n \"ds6w:responsible\",\r\n \"owner\",\r\n \"ds6w:responsibleUid\",\r\n \"ds6wg:filesize\",\r\n \"ds6w:project\",\r\n \"ds6w:dataSource\",\r\n \"ds6w:community\",\r\n \"ds6w:originator\",\r\n \"dsgeo:referential\",\r\n \"ds6w:lastModifiedBy\",\r\n \"ds6w:repository\",\r\n \"dcterms:title\",\r\n \"dcterms:description\",\r\n \"ds6w:containerUid\",\r\n ],\r\n with_synthesis_hierarchical: true,\r\n select_file: [\"icon\", \"thumbnail_2d\"],\r\n query: nomFichier,\r\n specific_source_parameter: {\r\n \"3dspace\": {\r\n additional_query:\r\n ' AND NOT (owner:\"ENOVIA_CLOUD\" OR owner:\"Service Creator\" OR owner:\"Corporate\" OR owner:\"User Agent\" OR owner:\"SLMInstallerAdmin\" OR owner:\"Creator\" OR owner:\"VPLMAdminUser\") AND (ds6w_58_islastrevisionperstate:true OR NOT listoffields:ds6w_58_islastrevisionperstate)',\r\n },\r\n drive: {\r\n additional_query:\r\n ' AND NOT ([flattenedtaxonomies]:\"types/DriveNode\" AND ( [current]:\"Trashed\" OR [policy]:\"Drive File Iteration\") )',\r\n },\r\n },\r\n select_exclude_synthesis: [\"ds6w:what/ds6w:topic\"],\r\n order_by: objToTag.order_by,\r\n order_field: \"relevance\",\r\n select_snippets: [\r\n \"ds6w:snippet\",\r\n \"ds6w:label:snippet\",\r\n \"ds6w:responsible:snippet\",\r\n \"ds6w:community:snippet\",\r\n \"swym:message_text:snippet\",\r\n ],\r\n nresults: 40,\r\n start: \"0\",\r\n source: sourcesSearching,\r\n tenant: credentials.tenant,\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: credentials.ctx,\r\n },\r\n },\r\n };\r\n console.log(\"dataPattern => \", dataPattern);\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: JSON.stringify(dataPattern),\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n onDone(info);\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n console.log(\"Erreur de recuperation d'id du doc et des tags\", err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `removeTagToDoc` est utilisée pour supprimer une balise spécifique d'un document en\r\n * utilisant les informations d'identification et les informations sur l'objet fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n *\r\n * @param {Object} obj - Le paramètre `obj` est un objet qui contient les propriétés suivantes :\r\n * @param {String} obj.objId - L'identifiant unique de l'objet pour lequel vous souhaitez supprimer la balise.\r\n * @param {String} obj.pred - L'identifiant de la relation entre l'objet et la balise. (ex: how, what, when, where, who, why).\r\n * @param {String} obj.tag - Le nom du tag à supprimer.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * suppression de la balise du document sera terminée avec succès. Il faut un argument, qui est la\r\n * réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `removeTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function removeTagToDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { objId, pred, tag } = obj;\r\n\r\n const URL = {\r\n uri: \"/resources/6w/tags\",\r\n otpCTX: \"SecurityContext=preferred\",\r\n optTenant: `tenant=${credentials.tenant}`,\r\n };\r\n const url = `${credentials.space}${URL.uri}?${URL.otpCTX}&${URL.optTenant}`;\r\n const dataTest = {\r\n tag: [\r\n {\r\n subject: [\r\n {\r\n uri: `pid://${objId}`,\r\n },\r\n ],\r\n predicate: listPredicates[pred],\r\n object: {\r\n literal: tag,\r\n },\r\n },\r\n ],\r\n };\r\n _httpCallAuthenticated(url, {\r\n method: \"DELETE\",\r\n data: JSON.stringify(dataTest),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n },\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « getInfoDocTags » effectue un appel HTTP pour récupérer des informations sur les\r\n * documents en fonction des informations d'identification et des identifiants de document fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} str - Le paramètre `str` est une chaîne qui représente l'ID du documents pour lesquels\r\n * vous souhaitez récupérer des informations.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getInfoDocTags`. Il vous permet de gérer et de traiter\r\n * les informations d'erreur.\r\n * @returns La fonction ne renvoie explicitement rien.\r\n */\r\nexport function getInfoDocTags(\r\n credentials,\r\n str = \"\",\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n if (str === \"\") return;\r\n\r\n const URL = {\r\n uri: \"/resources/v1/modeler/documents\",\r\n };\r\n\r\n const headers = {\r\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const url = `${space}${URL.uri}`;\r\n\r\n const dataTest = `$include=none,lockerInfo,ownerInfo,originatorInfo,files,ownerInfo,originatorInfo&$fields=none,title,name,typeNLS,collabSpaceTitle,revision,isLatestRevision,files,lockStatus,lockerInfo.name,lockerInfo.firstname,lockerInfo.lastname,owner,ownerInfo.name,ownerInfo.firstname,ownerInfo.lastname,stateNLS,modified,policy,state,organizationTitle,originator,originatorInfo.name,originatorInfo.firstname,originatorInfo.lastname,hasModifyAccess,fileExtension,files.name,files.title,files.revision,files.locker,ownerInfo,ownerInfo.name,ownerInfo.firstname,ownerInfo.lastname,originatorInfo,originatorInfo.name,originatorInfo.firstname,originatorInfo.lastname&$ids=${str}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: dataTest,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, header) {\r\n const info = err;\r\n info[\"msg\"] = header.error;\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n\r\n/**\r\n * @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.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque les\r\n * informations de version seront récupérées avec succès. Il prend un argument, `tokenInfo`, qui est la\r\n * réponse contenant les informations de version. Le token est aussi envoyé dans une nouvelle propriété : `credentials.token`\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini.\r\n */\r\nexport async function _3DSwym_get_Token(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = credentials._3DSwym + \"/api/index/tk\";\r\n\r\n return _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const tokenInfo = JSON.parse(response);\r\n\r\n if (onDone) {\r\n onDone(tokenInfo);\r\n return (credentials[\"token\"] = tokenInfo?.result?.ServerToken);\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * La fonction `_3DSwym_getAllNews` récupère toutes les actualités d'une plateforme 3DExperience en\r\n * utilisant les informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête sera terminée avec succès. Il prend deux arguments : « réponse » et « en-têtes ». L'argument\r\n * `response` contient les données de réponse du serveur et l'argument `headers` contient les en-têtes\r\n * de réponse.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getAllNews`. Il prend deux paramètres : « réponse\r\n * » et « en-têtes ». Le paramètre `response` contient les données de réponse à l'erreur et le\r\n */\r\nexport function _3DSwym_getAllNews(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ! Attention beaucoup d'infos à trier et checker\r\n // voir aussi les possibilités des params\r\n\r\n const url = `${credentials._3DSwym}/api/exalead/whatsnew`;\r\n const data = {\r\n params: {\r\n community_id: null,\r\n hash_key: null,\r\n legacyFormat: false,\r\n nresults: 1,\r\n query: \"#all\",\r\n start: 0,\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(data),\r\n type: \"json\",\r\n onComplete(response, headers) {\r\n if (onDone) onDone(response, headers);\r\n },\r\n onFailure(response, headers) {\r\n if (onError) onError(response, headers);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * La fonction `_3DSwym_getFamiliarPeople` récupère une liste de personnes familières en fonction du\r\n * profil de l'utilisateur actuel.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * d'API réussit et que les données sont récupérées. Il faut deux arguments : `myContacts` et\r\n * `response`. `myContacts` est un tableau d'objets contenant le login et le nom complet des personnes\r\n * familières. `réponse\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getFamiliarPeople`. Il prend deux paramètres : «\r\n * réponse » et « en-têtes ». Le paramètre `response` contient la réponse d'erreur du serveur\r\n */\r\nexport function _3DSwym_getFamiliarPeople(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = `${credentials._3DSwym}/api/Recommendation/getpeoplefamiliartocurrentuser`;\r\n const _data = {\r\n params: {\r\n idsToFilterArr: [],\r\n mode: \"offline\",\r\n limit: 30,\r\n itemType: \"User\",\r\n maxNbOfCommonElements: \"5\",\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(_data),\r\n type: \"json\",\r\n onComplete(response, headers) {\r\n const myContacts = response.result.hits.map((contact) => {\r\n return { login: contact.login, fullName: contact.name };\r\n });\r\n\r\n if (onDone) onDone(myContacts, response);\r\n },\r\n onFailure(response, headers) {\r\n if (onError) onError(response, headers);\r\n },\r\n });\r\n });\r\n}\r\n\r\n\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api\";\r\n\r\n/**\r\n * @description La fonction `_3dSwym_getAllCommunities` récupère une liste de communautés à partir d'une plateforme\r\n * 3D Swym en utilisant les informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 10, mais vous pouvez le changer jusqu'à 128, au delà on change de page.\r\n * @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée une fois l'opération terminée. Il prend la\r\n * liste des communautés comme paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dSwym_getAllCommunities`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function _3DSwym_getAllCommunities(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = {\r\n base: credentials._3DSwym,\r\n uri: \"/api/community/listmycommunities\",\r\n limit: `/limit/${credentials.limit ? credentials.limit : 500}`,\r\n page: `/page/${credentials.page ? credentials.page : \"1\"}`,\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}${URL.limit}${URL.page}`;\r\n const communautes = [];\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n const _communitiesInfo = info.result;\r\n let count = 0;\r\n\r\n _communitiesInfo.forEach((commu) => {\r\n const _communaute = {\r\n description: commu.description,\r\n id: commu.id,\r\n title: commu.title,\r\n owner: commu.owner,\r\n role: commu.role,\r\n access: commu.access,\r\n };\r\n _3DSwym_getMembersCommunity(\r\n credentials,\r\n commu.id,\r\n (data) => {\r\n count++;\r\n _communaute[\"members\"] = data;\r\n communautes.push(_communaute);\r\n if (count === _communitiesInfo.length && onDone) {\r\n onDone(communautes);\r\n }\r\n },\r\n (err) => onError(err)\r\n );\r\n });\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getMembersCommunity` récupère une liste des membres d'une communauté en utilisant les informations d'identification et l'ID de communauté fournis.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 50, mais vous pouvez le changer jusqu'à 128, au delà on change de page.\r\n * @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.\r\n * @param {String} idCommu - L'identifiant de la communauté dont vous souhaitez récupérer les membres. (ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Function} onDone - Une fonction de rappel qui sera appelée lorsque l'appel d'API réussit et renvoie les\r\n * données de réponse. Les données de réponse seront transmises en argument à cette fonction.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getMembersCommunity`. Il est utilisé pour gérer\r\n * toutes les erreurs qui se produisent et fournir une gestion des erreurs ou des messages d'erreur\r\n * appropriés à l'appelant de la fonction.\r\n */\r\nexport function _3DSwym_getMembersCommunity(\r\n credentials,\r\n idCommu,\r\n onDone,\r\n onError\r\n) {\r\n const URL = `${credentials._3DSwym}/api/community/listmembers`;\r\n\r\n const datas = {\r\n params: {\r\n page: credentials.page ? credentials.page : 1,\r\n limit: credentials.limit ? credentials.limit : 50,\r\n community_id: idCommu,\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getIdeaStatusMaturity` récupère le statut et la maturité d'une idée d'une\r\n * communauté 3DExperience à l'aide des informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials._3DSwym - (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...)\r\n * @param {String} credentials.commu_id - L'ID de communauté 3DExperience (ex:\"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête API sera terminée avec succès. Il prend un argument, « info », qui correspond aux données de\r\n * réponse de l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getIdeaStatusMaturity`. Il vous permet de gérer\r\n * et de traiter l'erreur de manière personnalisée.\r\n */\r\nexport function _3DSwym_getIdeaStatusMaturity(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const commuID = \"YXdA5x4DSUKtlAi2wmnyTA\";\r\n if (!credentials.commu_id) credentials.commu_id = commuID;\r\n const URL = `${credentials._3DSwym}/api/v2/communities/${credentials.commu_id}/ideas/statuses`;\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n// TEST\r\nconst contentMSG = {\r\n receipt: [\"c00005701637\"], // Liste des personnes à qui envoyer le message\r\n msg: \"TESTS Beam ³ DEV, Happy new year ! ヾ(⌐■_■)ノ♪\", // Message à envoyer\r\n};\r\n\r\n// CREATION DE MESSAGES DIRECT OU INSTANTANÉ\r\n\r\n/**\r\n * @description La fonction `_3DSwym_buildDirectMessage` permet d'envoyer un message direct à un ou plusieurs utilisateurs dans un espace plateforme 3DExperience.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials._3DSwym - (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...)\r\n * @param {Object} [credentials.currentUser] - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * @param {string} [credentials.currentUser.login] - Le paramètre `login` est l'identifiant d'envois du message\r\n * @param {string} [credentials.currentUser.first_name] - Le paramètre `first_name` est l'identifiant d'envois du message\r\n * @param {string} [credentials.currentUser.last_name] - Le paramètre `last_name` est l'identifiant d'envois du message.\r\n *\r\n * @param {Object} [datas] - Le paramètre `datas` est un objet qui contient les données du messages.\r\n * @param {String} [datas.msg] - Le paramètre `msg` est une chaîne de caractères qui contient le message à envoyer.\r\n *\r\n * @param {Array} [datas.receipt] - La liste des utilisateurs à qui envoyer le message (login). La liste des personnes accessible est générer par la fonction _3DSwym_getFamiliarPeople. (ex: [\"bem3_yan.coquoz\",\"bem_bob_Dylan\"])\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque le message direct sera envoyé avec\r\n * succès. Il prend un argument, qui est un objet contenant des informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_buildDirectMessage`. Il est facultatif et peut\r\n * être indéfini.\r\n */\r\nexport function _3DSwym_buildDirectMessage(\r\n credentials,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { listAllContacts, currentUser, _3DSwym } = credentials;\r\n console.log(\"__listAllContacts\", listAllContacts.hits);\r\n const _URL = `${_3DSwym}/api/directmessages`;\r\n\r\n const _data = {\r\n users: [currentUser.login].concat(datas.receipt),\r\n };\r\n\r\n const MSGData = {\r\n id_msg: \"\",\r\n senderId: credentials.currentUser.login,\r\n senderName: `${credentials.currentUser.first_name} ${credentials.currentUser.last_name}`,\r\n msg: formatedMessage(datas.msg),\r\n };\r\n let otherCommunity = false;\r\n _3DSwym_findCommunityToInstantMSG(\r\n _data.users,\r\n (rep) => {\r\n if (rep !== undefined) {\r\n MSGData[\"id_msg\"] = rep.id;\r\n otherCommunity = true;\r\n _3DSwym_sendMessageData(credentials, MSGData);\r\n }\r\n },\r\n (err) => {\r\n otherCommunity = false;\r\n console.log(\"_3dSwym_findCommunityToInstantMSG callback\", err);\r\n if (onError) onError(err);\r\n MSGData[\"id_msg\"] = \"\";\r\n }\r\n );\r\n\r\n if (otherCommunity === false) {\r\n setTimeout(() => {\r\n if (otherCommunity === false) {\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(_URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(_data),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n info[\"reponse\"] = JSON.parse(xhr.response);\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n MSGData[\"id_msg\"] = info.result.id;\r\n _3DSwym_sendMessageData(credentials, MSGData);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"status\"] = headers.status;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n }\r\n }, 500);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_findCommunityToInstantMSG` est utilisée pour rechercher une communauté dans une\r\n * plateforme 3DExperience pour la messagerie instantanée en fonction des informations d'identification\r\n * et des données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Array} datas - Le paramètre `datas` est un tableau qui contient les données à utiliser pour trouver une communauté pour envoyer un message instantané.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération sera terminée avec succès. Il faut un argument, qui est le résultat de l'opération.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_findCommunityToInstantMSG`. Il est facultatif et\r\n * peut être omis s’il n’est pas nécessaire.\r\n */\r\nexport function _3DSwym_findCommunityToInstantMSG(\r\n credentials,\r\n datas,\r\n onDone,\r\n onError\r\n) {\r\n const URL = `${credentials._3DSwym}/api/directmessages/lite?with_favorites=false`;\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json,text/javascript,*/*\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n const infoSortedByLengths = [];\r\n info.result.forEach((com) => {\r\n com.users = com.users.sort((a, b) => {\r\n return a.login.localeCompare(b.login);\r\n });\r\n if (com.users.length === datas.length) {\r\n infoSortedByLengths.push(com);\r\n }\r\n });\r\n const sortedDatas = datas.sort();\r\n\r\n const _datas = infoSortedByLengths.find((com) => {\r\n const logins = [];\r\n com.users.forEach((user) => {\r\n logins.push(user.login);\r\n });\r\n return JSON.stringify(logins) === JSON.stringify(sortedDatas);\r\n });\r\n\r\n if (onDone && _datas !== undefined) {\r\n onDone(_datas);\r\n } else if (onError || _datas === undefined) {\r\n onError(_datas);\r\n }\r\n },\r\n onFailure(response) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessageLite => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_sendMessageData` envoie un message direct avec les informations\r\n * d'identification et le contenu donnés, et appelle les rappels `onDone` ou `onError` en fonction du\r\n * succès ou de l'échec de la requête.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param content - Le paramètre `content` est un objet qui contient les propriétés suivantes :\r\n * @param {String} content.id_msg - L'identifiant du message à envoyer.\r\n * @param {String} content.senderId - L'identifiant de l'utilisateur qui envoie le message.\r\n * @param {String} content.senderName - Le nom de l'utilisateur qui envoie le message.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'envoi\r\n * du message sera terminé avec succès. Il prend un argument, qui est un objet contenant des\r\n * informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_sendMessageData`. Il vous permet de gérer et de\r\n * traiter les informations d'erreur.\r\n */\r\nexport function _3DSwym_sendMessageData(\r\n credentials,\r\n content,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = {\r\n base: credentials._3DSwym,\r\n uri: \"/api/community\",\r\n id_msg: `${content.id_msg}`,\r\n endUri: \"/instantmessages\",\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}/${URL.id_msg}${URL.endUri}`;\r\n\r\n const datas = {\r\n author: { login: content.senderId, displayName: content.senderName },\r\n accessState: null,\r\n commentUri: null,\r\n comments: null,\r\n endorsements: null,\r\n moderationState: null,\r\n parentCommentUri: null,\r\n richMessage: content.msg,\r\n };\r\n console.log(\"_3dSwym_sendDirectMessageData url \", url);\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = xhr.status;\r\n info[\"response\"] = JSON.parse(xhr.response);\r\n console.log(\"✅ _3dSwym_sendDirectMessageData => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `formatedMessage` renvoie un message formaté avec la date et l'heure actuelles.\r\n * @param {String} message - Le paramètre `message` est une chaîne qui représente le contenu du message que vous souhaitez envoyer.\r\n *\r\n * @returns un message formaté avec la date et l'heure actuelles. Le message est enveloppé dans une balise de paragraphe, suivie d'un saut de ligne et d'une règle horizontale.\r\n * En dessous, il comprend une phrase indiquant quand le message a été envoyé, y compris la date et l'heure.\r\n *\r\n */\r\nfunction formatedMessage(message) {\r\n const _dates = new Date().toLocaleDateString();\r\n const time = new Date().toLocaleTimeString();\r\n return `<p>${message} </p>\r\n <br/>\r\n <hr/>\r\n <p><u>envoyer :</u>Le <b>${_dates} à ${time}</b></p>`;\r\n}\r\n\r\nexport default {\r\n _3DSwym_getAllCommunities,\r\n _3DSwym_getMembersCommunity,\r\n _3DSwym_getIdeaStatusMaturity,\r\n _3DSwym_buildDirectMessage,\r\n _3DSwym_findCommunityToInstantMSG,\r\n _3DSwym_sendMessageData,\r\n};\r\n","import { chunkArray } from \"../../../utils/chunks\";\r\nimport { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api\";\r\n\r\n/*\r\n * @exemple dataTest\r\n */\r\nconst dataTest = {\r\n title: \"TEST DEV COMMUNITY IDEA\", // titre du post\r\n community_id: \"YXdA5x4DSUKtlAi2wmnyTA\", // STATUT PROJETS - Phase commerciale, tenant PIVETEAU TEST\r\n community_title: \"TEST DEV COMMUNITY\", // Possibilité de recherche par titre de la communauté (option)\r\n idee_id: \"THhRI8rlQNWKRxpv3Xqqug\", // id de l'idee qui est créer au post (_3dSwym_postIdea)\r\n};\r\n\r\n/**\r\n * @description La fonction `_3DSwym_postIdeaTemplate` est utilisée pour publier une idée sur une communauté 3DSwym en utilisant les informations d'identification et les données fournies.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {Array} credentials.swymCommunities tableau des communautés issue de la fonction `_3DSwym_getAllCommunities`\r\n * @param {Object} data - Le paramètre `data` est un objet qui contient les propriétés suivantes: `title`, `community_id` et `community_title` Ce dernier est optionnel.\r\n * @param {String} data.title - Le titre de l'idée.\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être publiee.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {String} data.community_title - Le titre de la communauté sur laquelle l'idée doit être publiee.(optionnel, ex: TEST DEV COMMUNITY)\r\n * @param {String} [data.text_html] - Le message HTML de l'idée (Optionnel sur les tenants Piveteau Prod et test)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la fonction `_3DSwym_postIdeaTemplate` terminera avec succès son exécution. Il prend un argument, « info », qui contient les données de réponse de l'appel API.\r\n * @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_postIdeaTemplate`. Il s'agit d'un paramètre facultatif, donc s'il n'est pas fourni, il sera par défaut « non défini ».\r\n *\r\n */\r\nexport function _3DSwym_postIdeaTemplate(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = `${credentials.space}/api/idea/add`;\r\n\r\n const findByID = credentials.swymCommunities.find(\r\n (commu) => commu.id === data.community_id\r\n );\r\n const findByTitle = credentials.swymCommunities.find(\r\n (commu) => commu.title.toLowerCase() === data.community_title.toLowerCase()\r\n );\r\n\r\n const formatedData = {\r\n params: {\r\n title: data.title, // String, le nom de l'affaire\r\n community_id: findByID?.id !== undefined ? findByID.id : findByTitle.id, // String, l'id de la communauté\r\n message: templateAffaireMessage(data.text_html), // STRING => le contenue du message doit être au format HTML\r\n published: 1, // 1 publier, 0 non publier\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n const headers = {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n };\r\n\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: JSON.stringify(formatedData),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n info[\"status\"] = xhr.status;\r\n info[\"response\"] = xhr.response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dswym_postIdea` est utilisée pour publier une idée dans une communauté 3DExperience.\r\n *\r\n * @param {Object} credentials - Le paramètre `credentials` est un objet\r\n * @param {String} credentials.community_id - Le paramètre `credentials.community_id` est un String qui contient l'id de la communauté dans laquelle on souhaite publier l'idée.\r\n * @param {String} credentials.message - Le paramètre `credentials.message` est un String en format HTML.\r\n * @param {String} credentials.title - Le paramètre `credentials.title` est un String qui l'entête de l'idée.\r\n * @param {String} credentials.space - Le paramètre `credentials.space` est la racine du 3DSwym (tenant compris).\r\n * @param {Array} credentials.swymCommunities - Le paramètre `credentials.swymCommunities` est la racine du 3DSwym (tenant compris).\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'idée\r\n * sera publiée avec succès. Il prend un argument, «info», qui contient les données de réponse du\r\n * serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dswym_postIdea`. Il vous permet de gérer toutes les\r\n * erreurs qui surviennent et d'effectuer toutes les actions nécessaires.\r\n */\r\nexport function _3DSwym_postIdea(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = { base: credentials.space, uri: \"/api/idea/add\" };\r\n\r\n if (!Array.isArray(credentials.swymCommunities)) {\r\n const message =\r\n \"☠️ swymCommunities doit être un tableau d'objets de communautés\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n\r\n const findByID = credentials.swymCommunities.findIndex(\r\n (commu) => commu.id === credentials.community_id\r\n );\r\n\r\n if (findByID === -1) {\r\n const message =\r\n \"la communauté n'existe pas dans la liste des communautés du Swym\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n if (credentials.community_id && credentials.community_id === \"\") {\r\n const message =\r\n \"☠️ community_id doit être un String qui contient l'id de la communauté dans laquelle on souhaite publier l'idée.\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n if (credentials.title && credentials.title === \"\") {\r\n const message = \"☠️ title doit être un String.\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n\r\n const body = {\r\n params: {\r\n title: credentials.title, // String, le nom de l'affaire\r\n community_id: credentials.community_id, // String, l'id de la communauté\r\n message: credentials.message, // templateAffaireMessage(), // STRING => le contenu du message doit être au format HTML\r\n published: 1, // 1 publier, 0 brouillon\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n if (!token) {\r\n throw new Error(\r\n `☠️ token n'est pas disponible pour cette requête : ${\r\n URL.base + URL.uri\r\n }`,\r\n {\r\n cause: token,\r\n }\r\n );\r\n }\r\n\r\n const headerOptions = {\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token?.result?.ServerToken,\r\n },\r\n method: \"POST\",\r\n data: JSON.stringify(body),\r\n onComplete(response, headers, xhr) {\r\n const info = { response };\r\n if (typeof info.response === \"string\") {\r\n info[\"response\"] = JSON.parse(info.response);\r\n }\r\n info[\"status\"] = xhr.status;\r\n\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const head = JSON.parse(headers);\r\n const rep = JSON.parse(response);\r\n const ERR = new Error(\r\n `Erreur sur cette requête : ${URL.base + URL.uri}`,\r\n {\r\n cause: { head, rep },\r\n }\r\n );\r\n if (onError) onError(ERR);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(URL.base + URL.uri, headerOptions);\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_deleteIdea` est utilisée pour supprimer une idée dans une communauté 3DExperience en utilisant les informations d'identification et les données fournies.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n \r\n * @param data - Le paramètre `data` est un objet qui contient les propriétés suivantes:\r\n * `community_id` et 'idee_id'\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être supprimée.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {String} data.idee_id - L'ID de l'idée que vous souhaitez supprimer (ex: \"THhRI8rlQNWKRxpv3Xqqug\")\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * suppression de l'idée sera terminée avec succès. Il prend un argument, «info», qui contient des\r\n * informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_deleteIdea`. Il vous permet de gérer et de\r\n * traiter les informations d'erreur.\r\n */\r\nexport function _3DSwym_deleteIdea(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = `${credentials.space}/api/idea/delete`;\r\n const formatedData = {\r\n params: {\r\n community_id: data.community_id,\r\n ideationIds: [data.idee_id],\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token?.result?.ServerToken,\r\n },\r\n data: JSON.stringify(formatedData),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction JavaScript récupère une idée SWYM à l'aide des informations d'identification et de l'ID de publication fournis.\r\n *\r\n * @param {Object} [credentials] - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} [credentials.space] - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n \r\n * @param {String} [credentials.idPost] - L'identifiant de la publication ou de l'idée que vous souhaitez récupérer. Si aucun identifiant n'est fourni, il s'agira par défaut de l'identifiant de l'idée de modèle. (actuellement => Piveteau prod :\"tFtz0G4MR6qNtKgJjNfTog\", Piveteau test :\"Qpv3HN-tTDOsU-7_c5DnDg\").\r\n *\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la requête API sera terminée avec succès. Il prend un argument, « info », qui contient les données de réponse de l'appel API. (info.msg : template récupérer lors de la création d'une Affaire et utiliser dans la fonction `_3DSwym_postIdeaTemplate()`).\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getOneIdea`. Il vous permet de gérer et de\r\n * traiter l'erreur de manière personnalisée.\r\n */\r\nexport function _3DSwym_getOneIdea(\r\n credentials,\r\n\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { _3DSwym, _3DSwym_token } = credentials;\r\n const URL = `${_3DSwym}/api/idea/get`;\r\n if (credentials.idPost === \"\") {\r\n const message =\r\n \"☠️ idPost est vide, vous devez renseigner un identifiant de post\";\r\n throw new Error(`Erreur sur cette requête : ${URL}`, { cause: message });\r\n }\r\n\r\n const datas = {\r\n params: {\r\n id: credentials.idPost,\r\n },\r\n };\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(datas),\r\n\r\n onComplete(response) {\r\n response = typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (onDone) onDone({response});\r\n },\r\n onFailure(response) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description `_3DSwym_editIdea` edit une idée dans 3DSwym.\r\n *\r\n * @param {Object} credentials Objet contenant les informations du besoin de la requête.\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.post_id Id du post à rééditer\r\n * @param {String} credentials.title titre de l'idée\r\n * @param {String} credentials.message Message de l'idée en format HTML (texte balisé)\r\n * @param {String} credentials.status_id Id du status(visible dans les devtools au niveau de l'id du balisage, dans les paramètres de l'id du post)\r\n * @param {String} credentials.status_comment nomination du statut.\r\n * @param {Function} [onDone] [onDone description]\r\n * @param {Function} [onError] [onError description]\r\n *\r\n * @return {Void}\r\n */\r\nexport function _3DSwym_editIdea(credentials, onDone, onError) {\r\n const {\r\n _3DSwym,\r\n _3DSwym_token,\r\n idPost,\r\n title,\r\n community_id,\r\n status_comment,\r\n status_id,\r\n message,\r\n } = credentials;\r\n const URL = {\r\n base: `${_3DSwym}`,\r\n uri: \"/api/idea/edit\",\r\n };\r\n\r\n const body = {\r\n params: {\r\n out: \"false\",\r\n id: idPost,\r\n title: title,\r\n community_id: community_id,\r\n status_comment: status_comment,\r\n status_id: status_id,\r\n message: message,\r\n published: \"1\",\r\n },\r\n };\r\n const headerOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, head, xhr) {\r\n const info = {\r\n response:\r\n typeof response === \"string\" ? JSON.parse(response) : response,\r\n };\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(URL.base + URL.uri, headerOptions);\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getAllListIdeas` récupère toutes les idées SWYM en utilisant les informations d'identification fournies et les paramètres facultatifs.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il possède les propriétés suivantes :\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant.\r\n * @example {tenant:\"R1132100968447\"}.\r\n *\r\n * @param {Object} data - Le paramètre `data` est un objet qui contient des données supplémentaires pour la requête API. Il possède les propriétés suivantes :\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être recherchée.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Number} [data.limit] - (optionnelle) Le nombre d'idées à renvoyer (optionnel, par défaut 100 (100 premières idées))\r\n * @param {Number} [data.page] - (optionnelle) Le numéro de page à renvoyer (optionnel, par défaut 1 (1 page))\r\n * @param {String} [data.search] - (optionnelle) l'élément recherché dans le titre de l'idée.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la requête API sera terminée avec succès.\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getAllListIdeas`. Il est facultatif et peut être\r\n * indéfini.\r\n */\r\nexport function _3DSwym_getAllListIdeas(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { _3DSwym } = credentials;\r\n let { community_id, limit, page, search } = data;\r\n // Pagination\r\n const allIdeas = [];\r\n const startPage = 1; //\r\n\r\n let isEndOfPages = false,\r\n maxPages = 2; // en attendant la premiere requête qui fournis la longueur total du tableau.\r\n\r\n if (!page) page = startPage;\r\n if (!limit) limit = 100;\r\n\r\n const URL = {\r\n uri: \"/api/idea/list\",\r\n comId: `/community_id/${community_id}`,\r\n limit: `/limit/${limit}`,\r\n page: `/page/${page}`,\r\n };\r\n\r\n let url = `${_3DSwym}${URL.uri}${URL.comId}${URL.limit}${URL.page}`;\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n const getAllIdeas = (url) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n\r\n onComplete(response) {\r\n const info = { response: JSON.parse(response) };\r\n\r\n maxPages = Math.ceil(Number(info.response.nb_result) / 100);\r\n\r\n if (response && maxPages >= page) {\r\n page++;\r\n\r\n URL.page = `/page/${page}`;\r\n url = `${_3DSwym}${URL.uri}${URL.comId}${URL.limit}${URL.page}`;\r\n\r\n // En cas de recherche spécifique.\r\n if (!search) {\r\n allIdeas.push(info.response.result);\r\n } else {\r\n const idea = info.response.result.find((idee) =>\r\n idee.title.includes(search)\r\n );\r\n if (idea) {\r\n onDone(idea);\r\n return;\r\n }\r\n }\r\n if (onDone && maxPages < page && !search) {\r\n isEndOfPages = true;\r\n onDone(allIdeas);\r\n return;\r\n }\r\n getAllIdeas(url);\r\n }\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n };\r\n if (isEndOfPages) return;\r\n getAllIdeas(url);\r\n });\r\n}\r\n\r\nfunction templateAffaireMessage(txt) {\r\n // TEMPLATE AFFAIRES\r\n if (!txt || txt === \"\") {\r\n const message = `<h2><u>INFORMATIONS AFFAIRE :</u></h2>\r\n <p><u>|⚠️<em> Merci de respecter l'écriture des tags, en MAJUSCULES, nom complet, pas de caractères</em></u></p>\r\n <p><u><em>|spéciaux, séparation par "_" si besoin !</em></u></p>\r\n <p><strong>Référence client </strong>: <em>\r\n <a data-predicate=\"ds6w:who\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">CLIENT</a> \r\n </em></p>\r\n <p><strong>Référence projet </strong>: <em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">NOM AFFAIRE</a> \r\n <a data-predicate=\"ds6w:where\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VILLE</a> \r\n <a data-predicate=\"ds6w:where\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">DPT</a> \r\n </em></p>\r\n <p>📝 <strong>Base documentaire</strong> : LIEN projet</p>\r\n <p>📝 <strong>Fiche COCLICO</strong> : LIEN projet<em><strong></strong>\r\n </em></p>\r\n <p><br /></p>\r\n <table border=\"1\">\r\n <tbody>\r\n <tr><td><strong>Description projet </strong>:\r\n <br /><br /></td></tr>\r\n </tbody>\r\n </table>\r\n <p><br /></p>\r\n <p><br /></p>\r\n <p><strong>Produit :<em> </em></strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hexapli Usiné</a>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hexapli MP</a>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Lamwood</a>\r\n </em></p>\r\n <p><strong>Type de Bâtiment :</strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Logements</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">BUP</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">ERP</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Plateforme Logistique</a> \r\n </em></p>\r\n <p><strong>Essence :</strong> <em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">DOUGLAS</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">PIN</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">MIXTE</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">EPICEA</a> \r\n </em></p>\r\n <p><strong>Qualité : </strong><em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">NVI</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VI1F</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VI2F</a> \r\n </em><strong></strong></p>\r\n <p><strong>Traitement : </strong><em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">PARKA</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">CT2</a> \r\n </em></p>\r\n <p><strong>Type de Paroi : </strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Murs Intérieurs</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Murs Extérieurs</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Planchers</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Couverture</a> \r\n </em></p>\r\n <p><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Etanchéité Accessible</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Etanchéité Non-Accessible</a> \r\n </em></p>\r\n <p><strong>Hauteur Dernier Plancher :</strong><em><strong> </strong> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hauteur <8m</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">8m< Hauteur <28m</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">28m< Hauteur <50m</a> \r\n </em></p>\r\n <h2><br /></h2>\r\n <h2><u>EQUIPE PIVETEAU :</u></h2>\r\n <table border=\"1\">\r\n <tbody>\r\n <tr><td><strong>Chargé d'Affaires</strong></td><td><br /></td></tr>\r\n <tr><td><strong>Service études de prix</strong></td><td><br /></td></tr>\r\n </tbody></table>\r\n <p>\r\n </p>`;\r\n return message;\r\n } else {\r\n return txt;\r\n }\r\n}\r\n\r\nexport function _3DSwym_ForwardIdea(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { tenant, _3DSwym, _3DSwym_token, community_id, idea_id } = credentials;\r\n if (tenant && _3DSwym && _3DSwym_token && community_id && idea_id) {\r\n const url = `${_3DSwym}/api/idea/forward`;\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify({\r\n community_uri: `swym:prd:${tenant.toUpperCase()}:community:${community_id}`,\r\n content_uri: `swym:prd:${tenant.toUpperCase()}:idea:${idea_id}`,\r\n timeout: 30000,\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n } else {\r\n if (onError)\r\n onError({\r\n status: \"error\",\r\n msg: \"Credentials incomplet !\",\r\n attend: \"tenant, _3DSwym , _3DSwym_token, community_id, idea_id\",\r\n credentials,\r\n });\r\n }\r\n}\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api.js\";\r\n/**\r\n * @description La fonction `_3DSwym_get_currentUser` est utilisée pour récupérer des informations sur l'utilisateur actuel dans une plateforme 3DExperience.\r\n *\r\n * @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 ».\r\n *\r\n * @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...), Attention ici le space prend bien le 3DSwym\r\n *\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API réussit et que les informations utilisateur sont récupérées. Il prend un argument, qui est\r\n * l'objet d'informations utilisateur.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel de l'API. Il prend un paramètre, qui est la réponse d'erreur de l'API.\r\n */\r\nexport function _3DSwym_get_currentUser(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((resolve, reject) => {\r\n // Simulate an asynchronous operation\r\n try {\r\n let CURRENT_USER = undefined;\r\n // if (_3DSwym) {\r\n // const url = credentials._3DSwym + \"/api/user/getcurrent/\";\r\n // _3DSwym_get_Token(credentials, (token) => {\r\n // _httpCallAuthenticated(url, {\r\n // method: \"GET\",\r\n // headers: {\r\n // \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n // },\r\n // onComplete(response, headers, xhr) {\r\n // const info = JSON.parse(response);\r\n // CURRENT_USER = info.result;\r\n // }\r\n // });\r\n // });\r\n // } \r\n if(credentials._3DDashboard) {\r\n const url = credentials._3DDashboard + \"/api/users/current\";\r\n // console.log(\"_3DSwym_get_currentUser | url\", url);\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n onComplete(response, headers, xhr) {\r\n let result = response.replace(/\\\"\\[/g, \"[\").replace(/\\]\\\"/g, \"]\").replace(/\\\"{/g, \"{\").replace(/}\\\"/g, \"}\").replace(/\\\\/g, \"\");\r\n result = result.replace(/\\\"\\[/g, \"[\").replace(/\\]\\\"/g, \"]\").replace(/\\\"{/g, \"{\").replace(/}\\\"/g, \"}\").replace(/\\\\/g, \"\");\r\n // console.log(\"result\", result);\r\n let info = {};\r\n try {\r\n info = JSON.parse(result);\r\n } catch (error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => JSON.Parse()\", error);\r\n }\r\n // console.log(info);\r\n info[\"first_name\"] = info?.firstName ? info.firstName : \"\";\r\n info[\"last_name\"] = info?.lastName ? info.lastName : \"\";\r\n // console.log(\"_3DSwym_get_currentUser | info\", info);\r\n CURRENT_USER = info;\r\n resolve(info);\r\n },\r\n onFailure(error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => _3DDashboard + /api/users/current\", error);\r\n },\r\n });\r\n }\r\n if (CURRENT_USER) {\r\n resolve(CURRENT_USER);\r\n } else {\r\n reject(\"ERROR | _3DSwym_get_currentUser => CURRENT_USER is null\");\r\n }\r\n } catch (error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => \", error);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_get_findUser` est utilisée pour rechercher un utilisateur par son identifiant\r\n * dans un espace 3DSwym en utilisant les informations d'identification fournies.\r\n * @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 ».\r\n *\r\n * @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...)\r\n * @param {String} userLogin - Le paramètre userLogin est le nom de login de l'utilisateur que vous souhaitez\r\n * retrouver dans la plateforme 3DSwym.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API sera terminé avec succès. Il prend un argument, « info », qui correspond aux données de réponse\r\n * renvoyées par l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel de l'API. Il prend un paramètre, qui est la réponse d'erreur de l'API.\r\n */\r\nexport function _3DSwym_get_findUser(\r\n credentials,\r\n userLogin,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = credentials.space + \"/api/user/find/login/\" + userLogin;\r\n _3DSwym_get_Token(\r\n credentials,\r\n (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: { \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n },\r\n onError\r\n );\r\n}\r\n\r\nexport default {\r\n _3DSwym_get_currentUser,\r\n _3DSwym_get_findUser,\r\n};\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\n\r\nexport function _3DSwym_addComment(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const {\r\n _3DSwym,\r\n _3DSwym_token,\r\n subjectUri,\r\n richMessage\r\n } = credentials;\r\n const url = `${_3DSwym}/commentproxy/subjects/${subjectUri}/comments`;\r\n const body = { richMessage };\r\n const headerOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, head, xhr) {\r\n const info = {\r\n response:\r\n typeof response === \"string\" ? JSON.parse(response) : response,\r\n };\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, headerOptions);\r\n}\r\n","import {\r\n _httpCallAuthenticated,\r\n _getServiceUrl_3DPassport,\r\n _getServiceUrl,\r\n} from \"./3dexperience_api\";\r\n\r\nexport function _getServiceUrl_Iterop(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n _getServiceUrl(credentials, (serviceUrls) => {\r\n // console.log(\"serviceUrls\", serviceUrls);\r\n const urlAPIV2Iterop =\r\n serviceUrls.services.find((service) => service.id === \"businessprocess\")\r\n ?.url + \"/api/v2\";\r\n if (onDone) onDone(urlAPIV2Iterop);\r\n return urlAPIV2Iterop;\r\n });\r\n }\r\n}\r\n\r\nexport function _Iterop_Auth_CAS(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // console.log(\"_Iterop_Auth_CAS\");\r\n if (credentials.tenant) {\r\n _getServiceUrl(credentials, (serviceUrls) => {\r\n // console.log(\"serviceUrls\", serviceUrls);\r\n const urlService3DPassport = serviceUrls.services.find(\r\n (service) => service.id === \"3dpassport\"\r\n )?.url;\r\n const urlAPIV2Iterop =\r\n serviceUrls.services.find((service) => service.id === \"businessprocess\")\r\n ?.url + \"/api/v2\";\r\n const urlService = `${urlService3DPassport}/login/?cors=false&service=${urlAPIV2Iterop}/auth/cas`;\r\n\r\n _httpCallAuthenticated(urlService, {\r\n async onComplete(response) {\r\n // console.log(\"response\", response);\r\n const x3ds_service_redirect_url =\r\n typeof response === \"string\"\r\n ? JSON.parse(response)?.x3ds_service_redirect_url\r\n : response?.x3ds_service_redirect_url;\r\n await fetch(x3ds_service_redirect_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then(async (data) => {\r\n if (onDone) onDone(data?.token);\r\n });\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n });\r\n } else {\r\n if (onError) onError(\"No tenant\");\r\n }\r\n}\r\n/**\r\n * @description _Iterop_jwtUser appel sur l'api et demande un Token lié à l'utilisateur et au tenant.\r\n *\r\n * @return {Function} callback retournant la réponse de l'api\r\n */\r\nexport function _Iterop_jwtUser(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const lowerTenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(`https://api.uixhome.fr/${lowerTenant}/iterop/jwtuser`, {\r\n method: \"POST\"\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves all business tables.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - Tenant credentials.\r\n * @param {String} token - token iterop.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_getAllBusinessTables(\r\n credentials,\r\n token,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/repository/data/tables?t=${token}`,\r\n {\r\n method: \"GET\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves data for a specific Business Table.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the Business Table to retrieve data from.\r\n * @param {Function} [onDone] - Callback function to execute upon successful data retrieval.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during retrieval.\r\n */\r\nexport function _Iterop_getOneBusinessTable(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/one/${tableId}?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n/**\r\n * Retrieves rows from a specific Business Table based on the table ID.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the Business Table to retrieve rows from.\r\n * @param {Function} [onDone] - Callback function to execute upon successful retrieval.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during retrieval.\r\n */\r\nexport async function _Iterop_getOneBusinessTableRows(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/rows/${tableId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Access-Control-Allow-Origin\":\"*\"\r\n }\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description `_Iterop_AddOrRemoveRows` Met a jour les lignes d'une table Business.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - credentials.tenant @exemple \"r1132480937497\"\r\n * @param {String} token - token iterop.\r\n * @param {String} tableId - ID of the Business Table.\r\n * @param {String} body - JSON string of the rows to add or remove, e.g. {\"rowsToAdd\": [{\"uuid\": \"...\"}, ...], \"rowsToRemove\": [\"...\", ...]}.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_AddOrRemoveRows(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/patch/rows/${tableId}/?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => {\r\n //console.log(\"_Iterop_AddOrRemoveRows\", response);\r\n return response.json();\r\n })\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error, tableId, body);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description _Iterop_businessTableSearchInRows rows in a Business Table.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - credentials.tenant @exemple \"r1132480937497\"\r\n * @param {String} token - token iterop.\r\n * @param {String} tableId - ID of the Business Table.\r\n * @param {String} columnsName - List of columns to search on, separated by '+'.\r\n * @param {String} body - JSON string of the filters to apply.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n\r\n */\r\nexport async function _Iterop_businessTableSearchInRows(\r\n credentials,\r\n token,\r\n tableId,\r\n columnsName,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // Exemple : columns = uuid+name\r\n // Exemple : body(String) = {\"filters\": [{\"uuid\": \"e56fd041-a9c0-4f1c-91ff-643a826a84d9\",\"isactive\": true}]}\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/search/rows/${tableId}?t=${token}&c=${encodeURIComponent(\r\n columnsName\r\n )}&b=${encodeURIComponent(body)}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n result[\"url\"] = url;\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n tableId,\r\n columns: columnsName,\r\n body,\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description Updates a business table with the provided data.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the table to update.\r\n * @param {String} body - Data to update the table with.\r\n * @param {Function} [onDone] - Callback function to execute upon successful update.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during the update.\r\n */\r\nexport async function _Iterop_updateBusinessTable(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/post/update/${tableId}?t=${token}&b=${encodeURIComponent(\r\n body\r\n )}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n //console.log(\"_Iterop_updateBusinessTable | _Iterop_businessTableSearchInRows | fetch | onDone\", body);\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n url,\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_createBusinessTable(\r\n credentials,\r\n token,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/post/create/?t=${token}&b=${encodeURIComponent(\r\n body\r\n )}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n //console.log(\"_Iterop_updateBusinessTable | _Iterop_businessTableSearchInRows | fetch | onDone\", body);\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n url,\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description Fonction asynchrone, `_Iterop_runProcess` permet de lancer un processus ITEROP\r\n * @param {Object} credentials Informations d'identification du tenant.\r\n * @param {String} credentials.tenant Le tenant.\r\n * @param {String} token Le jeton CSRF.\r\n * @param {String} processKey - le nom du processus ITEROP.\r\n * @param {String} body - le body de la requête, doit être au format String et encodé. @exemple encodeURIComponent(JSON.stringify(body)).\r\n * @return {Function} Callback contenant le message de retour de l'api\r\n */\r\nexport async function _Iterop_runProcess(\r\n credentials,\r\n token,\r\n processKey,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/runtime/processes/${processKey}?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n console.log(\"_Iterop_runProcess : OK\");\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n//SECTION - Table de dépendances\r\n/**\r\n * Récupère toutes les tables de dépendances.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - Tenant credentials.\r\n * @param {String} token - token iterop.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_GetAllDependencyTable(\r\n credentials,\r\n token,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/all/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_GetOneDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"_Iterop_GetOneDependencyTable | Run\");\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/one/${tableId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * (cli) => Create List Items\r\n */\r\nexport async function _Iterop_PatchDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n cli,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/patch/${tableId}/?t=${token}&cli=${cli}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_PutDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/put/${tableId}/?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n//!SECTION\r\n\r\n//SECTION - LISTS\r\n\r\nexport async function _Iterop_GetOneList(\r\n credentials,\r\n token,\r\n listId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/list/one/${listId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n//!SECTION\r\n","/**\r\n * @description Fonction Test permettant de tester l'installation de la librairie\r\n *\r\n * @param {String} _name une simple chaine\r\n *\r\n * @return {String}\r\n */\r\nexport function sayHello(_name) {\r\n const name = \"Hello \" + _name;\r\n console.log(name);\r\n return name;\r\n}\r\n","import {\r\n _httpCallAuthenticated,\r\n _getPlatformServices,\r\n _getPlateformInfos\r\n} from \"../main/3dexperience_api\";\r\nimport {\r\n _3DSpace_csrf,\r\n _3DSpace_get_securityContexts\r\n} from \"../main/3dspace_api\"\r\nimport {\r\n DateTime\r\n} from \"luxon\";\r\n\r\nexport function _3DSearch_usersGroup(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n console.log(\"credentials\", credentials);\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (!credentials.space || credentials.space === \"\") {\r\n const platformeInfo = _getPlateformInfos();\r\n console.log(\"platformeInfo\", platformeInfo);\r\n }\r\n _3DSpace_get_securityContexts(\r\n credentials,\r\n \"Common space\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n },\r\n true\r\n );\r\n const ts = DateTime.now().ts;\r\n\r\n const urlService = `https://${credentials.tenant}-eu1-registry.3dexperience.3ds.com/api/v1/platform/service/instance?serviceId=3dsearch&platformId=${credentials.tenant}`\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n if (Array.isArray(JSON.parse(response))) {\r\n const oResponse = JSON.parse(response);\r\n console.log(\"serviceId=3dsearch\", oResponse);\r\n const urlFedSearch = `${oResponse[0].services[0].url}/search?xrequestedwith=xmlhttprequest`\r\n\r\n _httpCallAuthenticated(urlFedSearch, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n with_indexing_date: true,\r\n with_nls: false,\r\n label: `3DSearch-${ts}`,\r\n locale: \"en\",\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"ds6w:type\",\r\n \"ds6w:description\",\r\n \"ds6w:identifier\",\r\n \"ds6w:responsible\",\r\n \"ds6wg:fullname\"\r\n ],\r\n select_file: [\r\n \"icon\",\r\n \"thumbnail_2d\"\r\n ],\r\n query: \"([ds6w:type]:(Group) AND [ds6w:status]:(Public)) OR (flattenedtaxonomies:\\\"types/Person\\\" AND current:\\\"active\\\")\",\r\n order_by: \"desc\",\r\n order_field: \"relevance\",\r\n nresults: 1000,\r\n start: \"0\",\r\n source: [\r\n \"3dspace\",\r\n \"usersgroup\"\r\n ],\r\n tenant: credentials.tenant,\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: `ctx::${credentials.ctx}`\r\n }\r\n }\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n })\r\n });\r\n}"],"names":["UUID","uuid","couleurs","getCommunes","cp","onDone","onError","codePostal","response","json","error","findAdresse","query","getDataFromGouvFr","events","colors","year","DateTime","loadedEvents","sortedData","formatData","date","i","data","each","event","chunkArray","obj","getResponse","getError","credentials","myArray","chunk","fn_to_call","chunks","arrayChunks","loopingChunk","rep","err","initLoop","fn","loop","updateEvent","add","index","val","a","b","_httpCallAuthenticated","url","options","requirejs","WAFData","_setDraggable","elem","strData","onDrag","DataDragAndDrop","_setupTagger","tags","onTaggerFilter","TagNavigatorProxy","taggerProxy","widget","_setDroppable","drop","_getPlatformServices","platformId","onComplete","onFailure","i3DXCompassServices","_getPlateformInfos","retourAPI","plAPI","tenant","user","appsConfiguration","appConf","_getMe","urlService","oResponse","_getServiceUrl","listServiceUrl","platform","_getServiceUrl_3DPassport","urlServicePassport","_Registry_getServicesUrl","compass_getListAdditionalApps","URL","headers","xhr","info","formatedInfos","app","name","id","_AppMngt_get_users","_AppMngt_get_info_user","topHeader","createUserGroups","datas","space","currentUser","templateData","getComplementUG","uri","baseURL","URI","OPTs","getUsersGroupRules","_usersgroup","OPTS","OPTsH","getUserGroupsList","numMax","opt","opt2","opts","repUG","reponse","UG","element","iamOwner","iamMember","iam","rules","infoError","getUserGroupsByURIList","list_uris","URLElements","h","getUserGroupsByEmailList","list_emails","parseResp","deleteUserGroups","patchUserGroups","dataMembers","dataMembersSTR","patchUserGroupsControl","_datas","readUserGroupControl","_rep","getCSRFToken","hasOwnProperty","prop","decode","qs","sep","eq","regexp","maxKeys","len","x","idx","kstr","vstr","k","v","stringifyPrimitive","encode","ks","querystring","require$$0","require$$1","_3DSpace_get_docInfo","docid","_3DSpace","_3DSpace_get_multiDocInfo","docids","_3DSpace_get_csrf","_3DSpace_csrf","_3DSpace_get_ticket","token","file_url","head","_3DSpace_file_url_csr","csr","_3DSpace_file_update","docId","fileId","filename","runFunction","_3DSpace_file_update_csr","result","csrf","formData","blobData","_3DSpace_put_docInfo","description","title","_3DSpace_Upload_File","fileName","blobFile","onProgress","cs_name","timeStamp","csrftoken","isadmin","ticket","actionurl","jobticket","pushFileInFcs","receipt","urlRelatedFile","ext","bodyRequest","progress","_3DSpace_Update_Doc","objectId","_3DSpace_Create_Doc","descriptionDoc","checkinTicket","resultCheckinTicket","fcs__jobTicket","relatedDocAndFile","fileData","percentComplete","trimExt","tempId","_3DSpace_get_securityContexts","cs","role","organization","withPreferredCredentials","contexts","context","finalCs","finalOrg","finalRole","oCS","e","couples","value","self","t","r","defineSingleItem","couple","_3DSpace_download_doc","resolve","reject","ticketURL","blob","tryParse","_3DSpace_download_multidoc","objectIds","_3DSpace_get_downloadTicket_multidoc","onNext","compilData","fileUrl","_3DSpace_lifecycle_getNextStates","_3DSpace_lifecycle_changeState","nextState","_3DSpace_lifecycle_getGraph","ctx","_3DSpace_lifecycle_getNextRevision","_3DSpace_lifecycle_changeRevision","nextRevision","_3DSpace_get_currentSecurityContext","_3DSpace_lifecycle_getRevisions","SecurityContext","_3DSpace_bookmark_getSubSignets","objIdBookmark","body","_3DSpace_bookmark_getItems","_3DSpace_bookmark_newWorkspace","parentId","item","_3DSpace_bookmark_addSubsciptions","personList","eventsList","getAllContextSecurity","getDataFrom3DSpace","widgetPreference","getDownloadDocument","pushDataIn3DSpace","dataBase","jsonFile","listObjectId","mixedDatas","get_3DSpace_csrf","getDatasByTenant","getDatasFrom3DSpace","bbds","aff","dataMixing","copyData","objIDTEST3","sourcesSearching","listPredicates","objToTag","addTagToDoc","objId","pred","tag","dataTest","docName","docExt","createBy","getActualTagsOnDoc","nomFichier","dataPattern","removeTagToDoc","getInfoDocTags","str","header","_3DSwym_get_Token","tokenInfo","_3DSwym_getAllNews","_3DSwym_getFamiliarPeople","_data","myContacts","contact","_3DSwym_getAllCommunities","communautes","_communitiesInfo","count","commu","_communaute","_3DSwym_getMembersCommunity","idCommu","_3DSwym_getIdeaStatusMaturity","commuID","_3DSwym_buildDirectMessage","listAllContacts","_3DSwym","_URL","MSGData","formatedMessage","otherCommunity","_3DSwym_findCommunityToInstantMSG","_3DSwym_sendMessageData","infoSortedByLengths","com","sortedDatas","logins","content","message","_dates","time","_3DSwym_postIdeaTemplate","findByID","findByTitle","formatedData","templateAffaireMessage","_3DSwym_postIdea","headerOptions","ERR","_3DSwym_deleteIdea","_3DSwym_getOneIdea","_3DSwym_token","_3DSwym_editIdea","idPost","community_id","status_comment","status_id","_3DSwym_getAllListIdeas","limit","page","search","allIdeas","startPage","isEndOfPages","maxPages","getAllIdeas","idea","idee","txt","_3DSwym_ForwardIdea","idea_id","_3DSwym_get_currentUser","CURRENT_USER","_3DSwym_get_findUser","userLogin","_3DSwym_addComment","subjectUri","richMessage","_getServiceUrl_Iterop","serviceUrls","urlAPIV2Iterop","service","_Iterop_Auth_CAS","urlService3DPassport","x3ds_service_redirect_url","_Iterop_jwtUser","lowerTenant","_Iterop_getAllBusinessTables","_Iterop_getOneBusinessTable","tableId","_Iterop_getOneBusinessTableRows","_Iterop_AddOrRemoveRows","_Iterop_businessTableSearchInRows","columnsName","_Iterop_updateBusinessTable","_Iterop_createBusinessTable","_Iterop_runProcess","processKey","_Iterop_GetOneDependencyTable","_Iterop_PatchDependencyTable","cli","_Iterop_PutDependencyTable","_Iterop_GetOneList","listId","sayHello","_name","_3DSearch_usersGroup","platformeInfo","ts","urlFedSearch"],"mappings":"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","x_google_ignoreList":[10,11,12]}
|
|
1
|
+
{"version":3,"file":"wb3Api.umd.cjs","sources":["../src/lib/api/index.js","../src/lib/gouv/colors.js","../src/lib/gouv/gouv_api.js","../src/lib/utils/chunks.js","../src/lib/utils/updateEvent.js","../src/lib/plateform/main/3dexperience_api.js","../src/lib/plateform/Compass/index.js","../src/lib/plateform/main/3dcompass_api.js","../src/lib/plateform/Usersgroup/index.js","../src/lib/plateform/main/getCSRFToken.js","../node_modules/querystring/decode.js","../node_modules/querystring/encode.js","../node_modules/querystring/index.js","../src/lib/plateform/main/3dspace_api.js","../src/lib/plateform/main/getCTX.js","../src/lib/plateform/main/getDataFrom3DSpace.js","../src/lib/plateform/main/getDownloadDocument.js","../src/lib/plateform/main/pushDataIn3DSpace.js","../src/lib/plateform/main/loadDatas.js","../src/lib/plateform/Tag/index.js","../src/lib/plateform/Swym/3dswym_api.js","../src/lib/plateform/Swym/communauty/index.js","../src/lib/plateform/Swym/idea/index.js","../src/lib/plateform/Swym/user/index.js","../src/lib/plateform/Swym/comment/index.js","../src/lib/plateform/main/iterop_apiv2.js","../src/lib/add/index.js","../src/lib/plateform/Search/index.js"],"sourcesContent":["import { v4 as uuid } from \"uuid\";\r\n/**\r\n * @description La fonction UUID génère un UUID (Universally Unique Identifier) aléatoire.\r\n * @returns La fonction UUID renvoie un UUID (Universally Unique Identifier) généré aléatoirement à l'aide de la fonction uuid.\r\n *\r\n */\r\nexport function UUID() {\r\n return uuid();\r\n}\r\n","// pour les charts Piveteau\r\nexport const couleurs = {\r\n b3M3Yellow: \"#FFB300\",\r\n b3AboutageBlue: \"#42A5F5\",\r\n b3UsinageGreen: \"#689F38\",\r\n b3PanneauOrange: \"#ff8000\",\r\n b3M350percent: \"#fafa6e\",\r\n b3M380percent: \"#aae479\",\r\n b3M390percent: \"#64c987\",\r\n b3M3100percent: \"#23aa8f\",\r\n b3M3105percent: \"#00898a\",\r\n b3M3110percent: \"#176877\",\r\n b3M3120percent: \"#2a4858\",\r\n b3Aboutage50percent: \"#fafa6e\",\r\n b3Aboutage80percent: \"#aae479\",\r\n b3Aboutage90percent: \"#64c987\",\r\n b3Aboutage100percent: \"#23aa8f\",\r\n b3Aboutage105percent: \"#00898a\",\r\n b3Aboutage110percent: \"#176877\",\r\n b3Aboutage120percent: \"#2a4858\",\r\n b3Warning: \"#FF0000\",\r\n b3Edit1: \"#AD1457\",\r\n b3Edit2: \"#F4511E\",\r\n b3Edit3: \"#009688\",\r\n b3Edit4: \"#D50000\",\r\n b3Edit5: \"#039BE5\",\r\n b3Edit6: \"#9E69AF\",\r\n b3Edit7: \"#A79B8E\",\r\n b3Edit8: \"#616161\",\r\n b3Edit9: \"#795548\",\r\n};\r\n","import { DateTime } from \"luxon\";\r\nimport { couleurs } from \"./colors\";\r\n/**\r\n * Cette fonction récupère une liste de communes en fonction d'un code postal donné à l'aide d'une API\r\n * d'IGN France.\r\n * @param {String} cp - Le paramètre `cp` est une chaîne représentant un code postal français. Il est converti\r\n * en entier à l'aide de `parseInt()` avant d'être utilisé dans la requête API.\r\n * @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et\r\n * renvoie une réponse. Il prend les données de réponse comme argument et peut être utilisé pour gérer\r\n * les données dans la fonction appelante.\r\n * @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de la requête de récupération. Il permet une gestion personnalisée des erreurs et peut\r\n * être utilisé pour afficher des messages d'erreur ou effectuer d'autres actions en réponse à une\r\n * erreur.\r\n */\r\nexport async function getCommunes(cp, onDone = undefined, onError = undefined) {\r\n const codePostal = parseInt(cp);\r\n await fetch(\r\n \"https://apicarto.ign.fr/api/codes-postaux/communes/\" + codePostal,\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (onDone) onDone(json);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n console.error(\"Erreur : \" + error);\r\n });\r\n}\r\n\r\n/**\r\n * Il s'agit d'une fonction JavaScript qui utilise l'API-adresse.data.gouv.fr pour rechercher des\r\n * adresses à partir d'une requête et renvoie les résultats au format JSON.\r\n * @param { String } query - L'adresse ou la requête d'emplacement à rechercher dans l'API.\r\n * @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et\r\n * renvoie une réponse. Il prend la réponse JSON comme paramètre.\r\n * @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de l'appel de l'API. C'est un paramètre optionnel qui peut être passé à la fonction\r\n * `findAdresse`. S'il est fourni, il recevra l'objet d'erreur comme argument.\r\n */\r\nexport async function findAdresse(\r\n query,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n // https://api-adresse.data.gouv.fr/search/?q=\r\n query = encodeURIComponent(query);\r\n await fetch(\r\n \"https://api-adresse.data.gouv.fr/search/?q=\" + query + \"&limit=15\",\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n if (onDone) onDone(json);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n console.error(\"Erreur : \" + error);\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getDataFromGouvFr` récupère les données de l'API du gouvernement français pour les\r\n * jours fériés et les formate dans une structure de données spécifique.\r\n * @param events - Le paramètre `events` est un tableau d'objets représentant des événements. (store.loadedEvents)\r\n * @param colors - Le paramètre `colors` est un objets représentant des couleurs. (Piveteau)\r\n * @returns les données formatées, qui incluent les événements récupérés depuis le point de terminaison\r\n * API \"https://calendrier.api.gouv.fr/jours-feries/metropole/\". Les événements sont formatés dans une\r\n * structure spécifique et renvoyés sous forme d'objet.\r\n */\r\nexport async function getDataFromGouvFr(events, colors = couleurs) {\r\n let year = DateTime.now().year;\r\n const loadedEvents = events;\r\n const sortedData = [];\r\n\r\n const formatData = (json) => {\r\n for (let date in json) sortedData.push({ date, comment: json[date] });\r\n };\r\n\r\n for (let i = year; i <= year + 1; i++) {\r\n await fetch(\r\n \"https://calendrier.api.gouv.fr/jours-feries/metropole/\" + i + \".json\",\r\n {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json\",\r\n },\r\n },\r\n )\r\n .then((response) => response.json())\r\n .then((json) => {\r\n formatData(json);\r\n })\r\n .catch((error) => console.error(\"Erreur : \" + error));\r\n }\r\n\r\n const formatedData = () => {\r\n const data =\r\n loadedEvents.length === 0\r\n ? {\r\n events: [],\r\n }\r\n : loadedEvents;\r\n for (let each of sortedData) {\r\n const index = data.events.findIndex(\r\n (event) =>\r\n event.start === DateTime.fromISO(each.date).toISODate() &&\r\n event.name === \"Férié : \" + each.comment,\r\n );\r\n\r\n if (index === -1)\r\n data.events.push({\r\n name: \"Férié : \" + each.comment,\r\n start: DateTime.fromISO(each.date).toISODate(),\r\n end: DateTime.fromISO(each.date).toISODate(),\r\n color: colors.b3BusinnessDays,\r\n timed: false,\r\n });\r\n }\r\n return data;\r\n };\r\n\r\n return formatedData();\r\n}\r\n","/**\r\n * @description `chunkArray` Divise un tableau en plus petits blocs et appelle une fonction fournie sur chaque bloc.\r\n *\r\n * @param {Object} obj - Un objet contenant le tableau à diviser, la taille de chaque bloc,et la fonction à appeler sur chaque bloc.\r\n * @param {Array} obj.credentials - les données de base pour la fonction à appeler sur chaque bloc.(space, token...)\r\n * @param {Array} obj.myArray - Le tableau à diviser.\r\n * @param {number} obj.chunk - La taille voulue de chaque bloc.\r\n * @param {Function} obj.fn_to_call - La fonction à appeler sur chaque bloc.\r\n * @return {void} Cette fonction ne renvoie rien.\r\n */\r\nexport function chunkArray(obj, getResponse, getError) {\r\n const { credentials, myArray, chunk, fn_to_call } = obj;\r\n\r\n const chunks = [];\r\n for (let i = 0; i < myArray.length; i += chunk) {\r\n const arrayChunks = myArray.slice(i, i + chunk);\r\n chunks.push(arrayChunks);\r\n }\r\n\r\n loopingChunk(\r\n { credentials, chunks, initLoop: 0, fn: fn_to_call },\r\n (rep) => {\r\n if (getResponse) getResponse(rep);\r\n },\r\n (err) => {\r\n if (getError) getError(err);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description `loopingChunk` Exécute une boucle sur un tableau de chunks, en appelant une fonction fournie sur chaque chunk.\r\n *\r\n * @param {Object} obj - Un objet contenant le tableau de chunks, l'index de démarrage de la boucle et la fonction à appeler sur chaque chunk.\r\n * @param {Array} obj.credentials - les données de base pour la fonction à appeler.\r\n * @param {Array} obj.chunks - Le tableau de chunks sur lequel effectuer la boucle.\r\n * @param {number} obj.initLoop - L'index de démarrage de la boucle.\r\n * @param {Function} obj.fn - La fonction à appeler sur chaque chunk. La fonction doit prendre trois arguments : le chunk actuel, une fonction de rappel, et deux fonctions de rappel facultatives pour gérer les réponses de succès et d'erreur.\r\n * @return {void} Cette fonction ne renvoie rien.\r\n */\r\nfunction loopingChunk(obj, onDone, onError) {\r\n const { credentials, chunks, initLoop, fn } = obj;\r\n const loop = (i) => {\r\n fn(\r\n credentials,\r\n chunks[i],\r\n () => {\r\n i++;\r\n if (i < chunks.length) {\r\n loop(i);\r\n }\r\n },\r\n (response) => {\r\n if (onDone) {\r\n onDone(response);\r\n }\r\n },\r\n (error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n );\r\n };\r\n loop(initLoop);\r\n}\r\n","/**\r\n * @description La fonction `updateEvent` met à jour un tableau d'événements en ajoutant ou en supprimant un\r\n * événement en fonction d'une condition donnée.\r\n * @param {Array} events - (store.loadedEvents)Une panoplie d'événements. Chaque événement est un objet avec des propriétés telles que uuid, start, end, etc.\r\n *\r\n * @param {Object} data - Le paramètre `data` est un objet qui représente l'événement à mettre à jour.\r\n * @param {String}[data.uuid] - L'identifiant unique de l'événement.\r\n * @param {Boolean} [add=true] - Le paramètre \"add\" est une valeur booléenne qui détermine s'il faut ajouter ou\r\n * mettre à jour un événement dans le tableau des événements. Si add est vrai, la fonction ajoutera\r\n * l'événement au tableau s'il n'existe pas déjà. Si add est faux, la fonction mettra à jour\r\n * l'événement existant dans le tableau\r\n * @returns le tableau `db` (store.loadedEvents) mis à jour.\r\n */\r\nexport async function updateEvent(events, data, add = true) {\r\n const index = events.events.findIndex((val) => val.uuid === data.uuid);\r\n\r\n if (index === -1) {\r\n events.events.push(data);\r\n } else {\r\n if (add) events.events[index] = data;\r\n else events.events.splice(index, 1);\r\n }\r\n\r\n if (events.length > 0) events.sort((a, b) => a.start - b.start);\r\n\r\n return events;\r\n}\r\n","import { widget, requirejs } from \"@widget-lab/3ddashboard-utils\";\r\n\r\n/**\r\n * @description Cette fonction effectue un appel HTTP authentifié à l'aide de la bibliothèque WAFData en de la plateforme.\r\n * @param {String} url - L'URL du point de terminaison de l'API que la fonction appellera.\r\n * @param {object} options - Le paramètre `options` est un objet qui contient diverses options pour la requête\r\n * HTTP, telles que la méthode de requête (GET, POST, etc.), les en-têtes, le corps, etc. Ces options\r\n * sont généralement transmises à l'API `fetch` ou `XMLHttpRequest` pour effectuer la requête HTTP\r\n * réelle.\r\n */\r\nexport function _httpCallAuthenticated(url, options) {\r\n requirejs([\"DS/WAFData/WAFData\"], (WAFData) => {\r\n WAFData.authenticatedRequest(url, options);\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction définit un élément comme étant déplaçable et transmet des données et une fonction de\r\n * rappel à exécuter lorsque le glissement commence (drag and drop).\r\n * @param elem - L'élément HTML qui doit être rendu déplaçable.\r\n * @param strData - strData est une chaîne qui représente les données associées à l'élément déplaçable.\r\n * Ces données sont accessibles lors des opérations de glisser-déposer pour fournir des informations\r\n * supplémentaires sur l'élément déplacé.\r\n * @param onDrag - onDrag est une fonction de rappel qui sera exécutée au début de l'opération de\r\n * glissement. Il peut être utilisé pour effectuer toutes les actions nécessaires avant le début de\r\n * l'opération de glissement, telles que la configuration des données à transférer ou la mise à jour de\r\n * l'apparence de l'élément déplaçable.\r\n */\r\nexport function _setDraggable(elem, strData, onDrag) {\r\n requirejs([\"DS/DataDragAndDrop/DataDragAndDrop\"], (DataDragAndDrop) => {\r\n DataDragAndDrop.draggable(elem, {\r\n data: strData,\r\n start: onDrag,\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction configure un proxy de navigateur de balises avec des balises spécifiées et un événement de filtre facultatif.\r\n *\r\n * @param tags - Le paramètre tags est un tableau de chaînes représentant les balises qui seront\r\n * utilisées pour filtrer les sujets dans le widget TagNavigatorProxy.\r\n * @param [onTaggerFilter] - Le paramètre onTaggerFilter est une fonction de rappel qui sera exécutée\r\n * lorsque l'utilisateur filtrera les sujets dans le tagger. Il recevra les sujets filtrés en argument.\r\n */\r\nexport function _setupTagger(tags, onTaggerFilter = undefined) {\r\n requirejs([\"DS/TagNavigatorProxy/TagNavigatorProxy\"], (TagNavigatorProxy) => {\r\n let taggerProxy;\r\n if (taggerProxy === undefined) {\r\n taggerProxy = TagNavigatorProxy.createProxy({\r\n widgetId: widget.id,\r\n filteringMode: \"WithFilteringServices\",\r\n });\r\n\r\n if (onTaggerFilter !== undefined)\r\n taggerProxy.addEvent(\"onFilterSubjectsChange\", onTaggerFilter);\r\n }\r\n taggerProxy.setSubjectsTags(tags);\r\n });\r\n}\r\n\r\n/**\r\n * Cette fonction définit un élément comme pouvant être déposé à l'aide de la bibliothèque\r\n * DataDragAndDrop.\r\n * @param elem - L'élément HTML qui doit être rendu déposable.\r\n * @param drop - Le paramètre `drop` est une fonction qui sera appelée lorsqu'un élément déplaçable est\r\n * déposé sur l'élément déplaçable. Il prend généralement l'élément supprimé comme argument et exécute\r\n * une action basée sur celui-ci.\r\n */\r\nexport function _setDroppable(elem, drop) {\r\n requirejs([\"DS/DataDragAndDrop/DataDragAndDrop\"], (DataDragAndDrop) => {\r\n DataDragAndDrop.droppable(elem, {\r\n drop,\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction asynchrone obtient les services de la plateforme à l'aide de la bibliothèque i3DXCompassServices et appelle les fonctions onComplete ou onFailure en fonction du résultat.\r\n *\r\n * @param platformId - ID de la plate-forme pour laquelle les services sont demandés. Si aucun ID de\r\n * plate-forme n'est fourni, la fonction tentera de récupérer l'ID à partir d'une valeur de widget. Si\r\n * aucun ID n'est trouvé, il sera défini sur `undefined`.\r\n * @param onComplete - Une fonction de rappel qui sera exécutée lorsque les services de la plateforme\r\n * seront récupérés avec succès. Il prend les services de plateforme récupérés comme argument.\r\n * @param onFailure - Le paramètre onFailure est une fonction de rappel qui sera exécutée en cas\r\n * d'erreur ou d'échec dans l'exécution de la fonction getPlatformServices. Il permet de gérer les\r\n * erreurs et de fournir un retour d'information approprié à l'utilisateur.\r\n */\r\nexport async function _getPlatformServices(\r\n platformId,\r\n onComplete = undefined,\r\n onFailure = undefined\r\n) {\r\n await requirejs(\r\n [\"DS/i3DXCompassServices/i3DXCompassServices\"],\r\n (i3DXCompassServices) => {\r\n if (!platformId || platformId === \"\") {\r\n platformId = widget.getValue(\"PlatFormInstanceId\");\r\n }\r\n if (!platformId || platformId === \"\") {\r\n platformId = undefined;\r\n }\r\n if (onComplete) {\r\n onComplete(\r\n i3DXCompassServices.getPlatformServices({\r\n platformId,\r\n onComplete,\r\n onFailure,\r\n })\r\n );\r\n }\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description\r\n * La fonction `_getPlateformInfos` récupère les informations sur la plateforme à l'aide du module\r\n * PlatformAPI et renvoie les informations dans un objet.\r\n * @returns un objet appelé \"retourAPI\" qui contient les propriétés suivantes :\r\n * - {String} tenant, Le tenant de la plateforme sur lequel on travaille.\r\n * - {Object} user, L'utilisateur connecté à la plateforme...\r\n * - {ArrayOfObject} appsConfiguration, liste d'app auquel on accès.\r\n * - {String} appConf\r\n *\r\n */\r\nexport function _getPlateformInfos() {\r\n let retourAPI = {};\r\n\r\n requirejs([\"DS/PlatformAPI/PlatformAPI\"], (plAPI) => {\r\n const tenant = plAPI.getTenant();\r\n const user = plAPI.getUser();\r\n const appsConfiguration = plAPI.getAllApplicationConfigurations();\r\n const appConf = plAPI.getApplicationConfiguration(\r\n \"com.3ds.wp.passport.cors\"\r\n );\r\n retourAPI = {\r\n tenant,\r\n user,\r\n appsConfiguration,\r\n appConf,\r\n };\r\n });\r\n return retourAPI;\r\n}\r\n\r\nexport function _getLoginTicket(credentials) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1-apps.3dexperience.3ds.com/enovia/resources/AppsMngt/api/v1/services?tenant=${credentials.tenant}&cors=true&xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse =\r\n typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"platforms\" in oResponse) {\r\n const listServiceUrl = oResponse.platforms.find(\r\n (platform) => platform.id === credentials.tenant.toUpperCase()\r\n );\r\n if (onDone && listServiceUrl) onDone(listServiceUrl);\r\n else if (onError)\r\n onError(\"_getLoginTicket return listServiceUrl = undefined\");\r\n } else {\r\n if (onError) onError(\"_getLoginTicket return oResponse = undefined\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\nexport function _getMe(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1.iam.3dexperience.3ds.com/api/authenticated/user/me?xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse =\r\n typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"fields\" in oResponse) {\r\n if (onDone) onDone(oResponse.fields);\r\n } else {\r\n if (onError) onError(\"_getMe return not find properties fields\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(\"_getMe return error\",response);\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function _getServiceUrl(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant.toLowerCase()}-eu1-compass.3dexperience.3ds.com/enovia/resources/AppsMngt/api/v1/services?platform=${credentials.tenant.toUpperCase()}&cors=true&xrequestedwith=xmlhttprequest`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse = typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (oResponse && \"platforms\" in oResponse) {\r\n const listServiceUrl = oResponse.platforms.find(platform => platform.id === credentials.tenant.toUpperCase());\r\n if (onDone && listServiceUrl) onDone(listServiceUrl);\r\n else if (onError) onError(\"_getServiceUrl return listServiceUrl = undefined\");\r\n } else {\r\n if (onError) onError(\"_getServiceUrl return oResponse = undefined\");\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function _getServiceUrl_3DPassport(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const urlService = `https://${credentials.tenant}-eu1-registry.3dexperience.3ds.com/api/v1/platform/service/instance?serviceId=3dpassport&platformId=${credentials.tenant}`;\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n const oResponse = JSON.parse(response);\r\n if (Array.isArray(oResponse) && oResponse.length > 0) {\r\n const urlServicePassport = `${oResponse[0].services[0].url}`;\r\n if (onDone) onDone(urlServicePassport);\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function _Registry_getServicesUrl(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const urlService = `https://eu1-registry.3dexperience.3ds.com/api/v1/platform/instance?id=${credentials.tenant.toLowerCase()}`;\r\n _httpCallAuthenticated(urlService, {\r\n type:\"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n }\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n/**\r\n * @description La fonction `compass_getListAdditionalApps` effectue une requête HTTP GET authentifiée pour\r\n * récupérer une liste d'applications supplémentaires en fonction des informations d'identification\r\n * fournies.\r\n * @param {Object} credentials Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes : space, token\r\n * @property {String} space - (_3DCompass)L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @property {String} tenant - le tenant courant (ex: R1132100968447)\r\n * @param onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * d'API réussit et que les données de réponse sont formatées. Il prend deux arguments :\r\n * `formatedInfos` et `info`. `formatedInfos` est un tableau d'objets contenant le nom et l'identifiant\r\n * de chaque application,\r\n * @param onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il prend un paramètre, « info », qui est un objet contenant des\r\n * informations sur l'erreur.\r\n */\r\n\r\nexport function compass_getListAdditionalApps(credentials, onDone, onError) {\r\n const URL = {\r\n base: `${credentials.space}`,\r\n uri: \"/resources/AppsMngt/api/custom/applications\",\r\n option: `?filter=${credentials.tenant}`, // facultatif\r\n };\r\n const url = `${URL.base}${URL.uri}${URL.option}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n const formatedInfos = info.data.map((app) => {\r\n const name = app.attributes.name;\r\n const id = app.id;\r\n return { name, id };\r\n });\r\n\r\n if (onDone) onDone(formatedInfos, info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api.js\";\r\n\r\n/**\r\n * @description La fonction `_AppMngt_get_users` effectue un appel HTTP authentifié pour récupérer une liste\r\n * d'utilisateurs d'une plateforme spécifiée.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex:1132100968447)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API sera terminé avec succès. Il prend un argument, « info », qui correspond aux données de réponse\r\n * de l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini. S'il est fourni, il sera\r\n * appelé avec l'objet de réponse comme argument.\r\n */\r\nexport function _AppMngt_get_users(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n let url = `${credentials.space}/resources/AppsMngt/user?platform=${credentials.tenant}&limit=-1`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n console.log(\"_AppMngt_get_users => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_AppMngt_get_info_user` effectue un appel HTTP authentifié pour récupérer des\r\n * informations sur un utilisateur à partir d'une plateforme spécifique.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} id - Le paramètre `id` est l'identifiant unique de l'utilisateur pour lequel vous souhaitez\r\n * récupérer des informations.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête sera terminée avec succès. Il prend un argument, «info», qui correspond aux données de réponse du serveur.\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini. S'il est fourni, il sera\r\n * appelé avec le paramètre `response`, qui contient la réponse d'erreur du serveur.\r\n */\r\nexport function _AppMngt_get_info_user(\r\n credentials,\r\n id,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n let url = `${credentials.space}/resources/AppsMngt/user?platform=${credentials.tenant}&id=${id}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n //console.log(\"_AppMngt_get_info_user => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n\r\n//LINK - https://media.3ds.com/support/documentation/developer/Cloud/en/English/CAAi3DXUGREST/UsersGroup_v1.htm#\r\n//!SECTION, Pour faire des modification de UG il faut être OWNER\r\n\r\n// URI de test sur le tenant PIVETEAU_TEST:\r\nconst _uri = \"uuid:3fcb61f2-6417-476d-8a9c-a16fb888771e\";\r\n\r\nconst topHeader = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n};\r\n\r\n/**\r\n * @description La fonction `createUserGroups` crée un nouveau groupe d'utilisateurs avec les détails et les membres\r\n * spécifiés. Attention, l'indexation du UserGroup met du temps.\r\n\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {Object} credentials.currentUser.email - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * \r\n * @param {Object} datas - Les informations du groupe d'utilisateurs.\r\n * @param {String} datas.title - Le titre du groupe d'utilisateurs. Entre 3 et 128 caractères, obligatoire.\r\n * @param {String} datas.description - La description du groupe d'utilisateurs. 512 caractères max.\r\n * @param {Array} datas.members - Un tableau d'emails des membres du groupe d'utilisateurs. 100 max email par groupe.\r\n * @param {String} datas.sharing - Le droit de partage du groupe d'utilisateurs. owner/manager/viewer\r\n * @param {String} datas.visibility - La visibilité du groupe d'utilisateurs. public/private\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'appel d'API réussit et que les\r\n * groupes d'utilisateurs sont créés. Il recevra les données de réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `createUserGroups`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function createUserGroups(\r\n credentials,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, currentUser } = credentials;\r\n const URL = {\r\n URIUGr: \"/3drdfpersist/resources/v1/usersgroup\",\r\n };\r\n const url = `${space}${URL.URIUGr}`;\r\n\r\n const templateData = {\r\n groups: [\r\n {\r\n title: datas.title,\r\n description: datas.description,\r\n members: datas.members || [currentUser.email, \"samuel.mureau@beam3.fr\"],\r\n pending_members: [],\r\n sharing: datas.sharing,\r\n visibility: datas.visibility,\r\n },\r\n ],\r\n };\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify(templateData),\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n console.log(err);\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getComplementUG` effectue une requête GET vers un URI spécifié avec les informations\r\n * d'authentification et renvoie la réponse.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {String} [uri] - Le paramètre `uri` est l'identifiant de la ressource dont vous souhaitez récupérer le\r\n * complément. (ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getComplementUG`. Il vous permet de gérer et de traiter\r\n * les informations d'erreur.\r\n */\r\nexport function getComplementUG(\r\n credentials,\r\n uri,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const baseURL = space;\r\n const URI = `/3drdfpersist/v1/resources/${uri}`;\r\n const OPTs = `?$mask=dsaccess:Mask.GroupUI.Properties&tenant=dstenant:${tenant}`;\r\n const URL = `${baseURL}${URI}${OPTs}`;\r\n\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = {\r\n method: \"GET\",\r\n headers: headers,\r\n };\r\n\r\n _httpCallAuthenticated(URL, {\r\n opts,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `getUsersGroupRules` effectue une requête HTTP GET pour récupérer une liste de\r\n * responsabilités de groupe pour un groupe d'utilisateurs.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il faut un argument, qui correspond aux données de réponse\r\n * analysées au format JSON.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUsersGroupRules`. C'est un paramètre facultatif, donc\r\n * s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n */\r\nexport function getUsersGroupRules(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { _usersgroup, tenant } = credentials;\r\n const baseURL = _usersgroup;\r\n const URI =\r\n \"/3drdfpersist/resources/v1/option-sets/dsusergroup:ListOfGroupResponsibilities/options\";\r\n const OPTS = `?tenant=dstenant:${tenant}`;\r\n const OPTsH = {\r\n method: \"GET\",\r\n Accept: \"application/json,*/*,test/javascript\",\r\n };\r\n const URL = `${baseURL}${URI}${OPTS}`;\r\n\r\n _httpCallAuthenticated(URL, {\r\n OPTsH,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"function\"] = \"getUsersGroupRules()\";\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « getUserGroupsList » récupère une liste de groupes d'utilisateurs d'un serveur en\r\n * utilisant les informations d'identification fournies et appelle la fonction de rappel « onDone »\r\n * avec la réponse.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {String} credentials._usersgroup - l'url de la plateforme concernant les usergroups (comme le credentials.space).\r\n * @param {Number} credentials.numMax - nombre maximum de groupes d'utilisateurs par page, par défaut 50.\r\n * @param {Object} credentials.currentUser.email - Le paramètre `currentUser` est un objet qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`)\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsList`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function getUserGroupsList(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { _usersgroup, currentUser, numMax } = credentials;\r\n\r\n if (!numMax) numMax = 50;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n const opt = \"?select=uri,title,owner,members\";\r\n const opt2 = `&top=${numMax}`; // max à 100\r\n const url = `${_usersgroup}${URI}${opt}${opt2}`;\r\n const header = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = { method: \"GET\", headers: header };\r\n try {\r\n _httpCallAuthenticated(url, {\r\n opts,\r\n onComplete(response) {\r\n const repUG = JSON.parse(response);\r\n const reponse = {};\r\n const UG = repUG.groups.filter((element) => {\r\n return element.uri.startsWith(\"uuid:\");\r\n });\r\n\r\n if (currentUser && Object.keys(currentUser).length > 0) {\r\n const iamOwner = UG.filter((element) => {\r\n return element.owner === currentUser.email;\r\n });\r\n const iamMember = UG.filter((element) => {\r\n return element.members.includes(currentUser.email);\r\n });\r\n const iam = iamOwner.concat(iamMember);\r\n reponse[\"iam\"] = iam;\r\n reponse[\"UG\"] = UG;\r\n reponse[\"iamMember\"] = iamMember;\r\n\r\n getUsersGroupRules(\r\n credentials,\r\n (rules) => {\r\n reponse[\"rules\"] = rules;\r\n if (onDone) onDone(reponse);\r\n },\r\n (err) => {\r\n err.function += \", getUserGroupsList()\";\r\n\r\n if (onError) onError(err);\r\n },\r\n );\r\n }\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"function\"] = \"getUserGroupsList()\";\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n const infoError = {\r\n infoError: error,\r\n fonction: \"getUserGroupsList()\",\r\n catch: new Error(\"Erreur sur la fonction getUserGroupsList()\", {\r\n cause: error,\r\n }),\r\n };\r\n onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getUserGroupsByURIList` est utilisée pour récupérer\r\n * la liste des groupes d'utilisateurs en fonction d'une liste d'uri fournie.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification\r\n * requises pour authentifier la demande. Il inclut généralement des propriétés\r\n * telles que `token`, `space`, `tenant` et `ctx`.\r\n * @param {String} credentials._usersgroup - L'URL du serveur 3DExperience sur lequel l'API est déployée.\r\n * @param {String} credentials.list_uris - Un tableau d'objet qui représente les uris des groupes d'utilisateurs que vous souhaitez récupérer.\r\n * @example [{uri:'uuid:8cedf28e-88e7-48e6-96fe-077z55bc07f3'}, {uri:'uuid:8cedf288-889z-4806-96fe-0z78z5bc07f3'}]\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Elle reçoit la réponse en paramètre.\r\n * @param {Function} [onError] - Une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsByURIList`. Elle reçoit\r\n * un objet en paramètre qui contient des informations sur l'erreur.\r\n */\r\nexport function getUserGroupsByURIList(credentials, onDone, onError) {\r\n const { _usersgroup, list_uris } = credentials;\r\n\r\n if (!list_uris || list_uris.length === 0) {\r\n onError({ msg: \"getUserGroupsByURIList: lists_uri is empty or undefined\" });\r\n return;\r\n }\r\n\r\n const URLElements = {\r\n baseUrl: _usersgroup,\r\n uri: \"/3drdfpersist/resources/v1/usersgroup/groups\",\r\n opt: \"?select=uri,title,owner,members\",\r\n };\r\n\r\n const url = `${URLElements.baseUrl}${URLElements.uri}${URLElements.opt}`;\r\n\r\n const options = {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify({ groups: list_uris }),\r\n };\r\n /*\r\nex :\r\ngroups:[\r\n{uri:'uuid:351d1s61s616ds1vdsvgsv'}, {uri:'uuid:351d1s61s616ds1vdsvgsv'}\r\n]\r\n*/\r\n\r\n try {\r\n _httpCallAuthenticated(url, {\r\n ...options,\r\n onComplete(response) {\r\n if (onDone) {\r\n onDone(JSON.parse(response));\r\n }\r\n },\r\n onFailure(err, h) {\r\n const infoError = {\r\n sendOptions: options,\r\n error: new Error(`Erreur sur la fonction getUserGroupsByURIList()`, {\r\n cause: err,\r\n }),\r\n msg: h,\r\n fonction: \"getUserGroupsByURIList()\",\r\n };\r\n if (onError) onError(infoError);\r\n },\r\n });\r\n } catch (error) {\r\n const infoError = {\r\n sendOptions: options,\r\n infoError: error,\r\n fonction: \"getUserGroupsByURIList()\",\r\n error: new Error(\"Erreur sur la fonction getUserGroupsByURIList()\", {\r\n cause: error,\r\n }),\r\n };\r\n if (onError) onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getUserGroupsByEmailList` est utilisée pour récupérer\r\n * les groupes d'utilisateurs qui ont un utilisateur avec une adresse email\r\n * correspondante.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification\r\n * requises pour authentifier la demande. Il inclut généralement des propriétés\r\n * telles que `token`, `space`, `tenant` et `ctx`.\r\n * @param {String} credentials._usersgroup - L'URL du serveur 3DExperience sur lequel l'API est déployée.\r\n * @param {String[]} credentials.list_emails - Un tableau de String qui représente les\r\n * adresses email des utilisateurs que vous souhaitez récupérer.\r\n * @example [\"user1@domain.com\", \"user2@domain.com\"]\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Elle reçoit la réponse en paramètre.\r\n * @param {Function} [onError] - Une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getUserGroupsByEmailList`. Elle reçoit\r\n * un objet en paramètre qui contient des informations sur l'erreur.\r\n */\r\nexport function getUserGroupsByEmailList(credentials, onDone, onError) {\r\n const { _usersgroup, list_emails } = credentials;\r\n if (!list_emails || list_emails.length === 0) {\r\n onError({\r\n msg: \"getUserGroupsByEmailList: lists_email is empty or undefined\",\r\n });\r\n return;\r\n }\r\n const URLElements = {\r\n baseUrl: _usersgroup,\r\n uri: \"/3drdfpersist/resources/v1/usersgroup/users/locate\",\r\n opt: \"?person_ident=email\",\r\n };\r\n\r\n const url = `${URLElements.baseUrl}${URLElements.uri}${URLElements.opt}`;\r\n const options = {\r\n method: \"POST\",\r\n headers: topHeader,\r\n data: JSON.stringify({ users: list_emails }),\r\n };\r\n try {\r\n _httpCallAuthenticated(url, {\r\n ...options,\r\n onComplete(response) {\r\n if (onDone) {\r\n const parseResp = JSON.parse(response);\r\n onDone({ groupes: parseResp.users[0].groups, reponse: parseResp });\r\n }\r\n },\r\n onFailure(err, h) {\r\n const infoError = {\r\n sendOptions: options,\r\n error: new Error(\r\n `Erreur sur la fonction getUserGroupsByEmailList()`,\r\n {\r\n cause: err,\r\n },\r\n ),\r\n msg: h,\r\n fonction: \"getUserGroupsByEmailList()\",\r\n };\r\n if (onError) onError(infoError);\r\n },\r\n });\r\n } catch (error) {\r\n const infoError = {\r\n sendOptions: options,\r\n infoError: error,\r\n fonction: \"getUserGroupsByEmailList()\",\r\n error: new Error(\"Erreur sur la fonction getUserGroupsByEmailList()\", {\r\n cause: error,\r\n }),\r\n };\r\n if (onError) onError(infoError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction deleteUserGroups est utilisée pour supprimer des groupes d'utilisateurs à l'aide des\r\n * informations d'identification et de l'URI fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} [uri] - Le paramètre `uri` est l'identifiant du groupe d'utilisateurs que vous souhaitez\r\n * supprimer. Il est utilisé pour construire l'URL de la requête DELETE.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n */\r\n\r\nexport function deleteUserGroups(credentials, uri) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n const url = `${space}${URI}/${uri}`;\r\n\r\n const opts = {\r\n method: \"DELETE\",\r\n };\r\n _httpCallAuthenticated(url, opts);\r\n}\r\n\r\n/**\r\n * @description La fonction `patchUserGroups` est utilisée pour mettre à jour les groupes d'utilisateurs en envoyant\r\n * une requête PATCH à un URI spécifié avec les données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * que vous souhaitez corriger. Il est utilisé pour construire l'URL de la requête PATCH.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {ArrayOfObjects} datas - Le paramètre `datas` est un tableau d'objets qui spécifient les modifications à\r\n * apporter aux groupes d'utilisateurs.(ex: datas[0].op, datas[0].field, datas[0].value)\r\n * @param {String} datas[0].op - l'opération à réaliser. (ex: \"add\", \"remove\", \"replace\")\r\n * @param {String} datas[0].field - Ce sur quoi agir (ex: members[], title, description, owner, visibility)\r\n * @param {StringOrArray} datas[0].value - La nouvelle valeur impactée. Si ce sont des membres value sera un Tableau de String.\r\n \r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la requête PATCH sera terminée\r\n * avec succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `patchUserGroups`. Il vous permet de gérer toutes les\r\n * erreurs qui se produisent et d’effectuer toute gestion ou journalisation des erreurs nécessaire.\r\n */\r\nexport function patchUserGroups(\r\n credentials,\r\n uri,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const URL = {\r\n URITI: \"/3drdfpersist/resources/v1/template-instances\",\r\n URIUGr: \"/3drdfpersist/resources/v1/usersgroup\",\r\n nextURICh: \"/characteristics\",\r\n nextURIGr: \"/group\",\r\n nexURImem: \"/members\",\r\n OPTsTI: `?$mask=dsaccess:Mask.GroupUI.Properties`,\r\n OPTsTenant: `tenant=dstenant:${tenant}`,\r\n };\r\n\r\n // Le format des datas est obligatoire : [{}]\r\n // op : add, replace, remove\r\n // field : members[], pending_members[], title, description, owner, visibility\r\n // value : string ou array\r\n\r\n const dataMembers = datas;\r\n // [\r\n // {\r\n // op: \"add\",\r\n // field: \"members\",\r\n // value: [\"samuel.mureau@beam3.fr\"],\r\n // },\r\n // {\r\n // op: \"replace\",\r\n // field: \"title\",\r\n // value: \"BEAM³ R&D - DEV\",\r\n // },\r\n // ];\r\n\r\n const baseURL = `${space}${URL.URIUGr}/${uri}`; // route de base pour le PATCH (DOC)\r\n\r\n const dataMembersSTR = JSON.stringify(dataMembers);\r\n\r\n _httpCallAuthenticated(baseURL, {\r\n headers: topHeader,\r\n method: \"PATCH\",\r\n data: dataMembersSTR,\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n//ANCHOR - CONTROL (Gestion des propriétaires du groupe)\r\n\r\n/**\r\n * @description La fonction `patchUserGroupsControl` est utilisée pour mettre à jour le contrôle des groupes\r\n * d'utilisateurs en envoyant une requête PATCH à un URI spécifié avec les informations\r\n * d'identification et les données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * que vous souhaitez corriger. Il est utilisé pour construire l'URL de la requête PATCH.(ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {ArrayOfObject} _datas - Le paramètre `datas` est un tableau d'objets qui contient les informations\r\n * nécessaires pour patcher le contrôle des groupes d'utilisateurs. (ex : datas[0].op, datas[0].value)\r\n * @param {String} op - L'opération de correctif. Il peut être 'add', 'replace', 'remove'.\r\n * @param {Object} value -\r\n * @param {Array} value.agents - Un tableau d’utilisateurs. Le 1er index doit être à vide. (ex : [\"\",\"Bob.Dylan@beam3.fr\"]). 100 utilisateurs maximums.\r\n * @param {Array} value.responsibilities - Un tableau de responsibilités. (ex: [\"dsaccess:Responsibility.Group.MainOwner\", \"dsaccess:Responsibility.Group.Owner\", \"dsaccess:Responsibility.Group.Viewer\", \"dsaccess:Responsibility.Group.Author\", \"dsaccess:Responsibility.GroupService.Administrator\"])\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de patch sera terminée avec succès. Il faut un argument, qui est la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `patchUserGroupsControl`. Il vous permet de gérer toutes\r\n * les erreurs qui se produisent et d’effectuer toute gestion ou journalisation des erreurs nécessaire.\r\n */\r\nexport function patchUserGroupsControl(\r\n credentials,\r\n uri,\r\n _datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n\r\n const url = `${space}${URI}/${uri}/sharing`;\r\n //liste des responsabilités : [\"dsaccess:Responsibility.Group.MainOwner\", \"dsaccess:Responsibility.Group.Owner\", \"dsaccess:Responsibility.Group.Viewer\", \"dsaccess:Responsibility.Group.Author\", \"dsaccess:Responsibility.GroupService.Administrator\"]\r\n const datas = _datas;\r\n // [\r\n // {\r\n // op: \"add\", // add, replace, remove\r\n // path: \"/sharing\",\r\n // value: {\r\n // agents: [\"\", \"samuel.mureau@beam3.fr\", \"yan.coquoz@beam3.fr\"],\r\n // responsibilities: [\"dsaccess:Responsibility.Group.Owner\"],\r\n // },\r\n // },\r\n // ];\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PATCH\",\r\n headers: topHeader,\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « readUserGroupControl » est utilisée pour récupérer les informations de contrôle de\r\n * groupe d'utilisateurs à partir d'un URI spécifié à l'aide d'une requête HTTP GET.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, usersgroup, 3DCompass...)\r\n * @param {String} uri - Le paramètre `uri` est une chaîne qui représente l'identifiant du groupe d'utilisateurs\r\n * pour lequel vous souhaitez récupérer les informations de contrôle. (ex: uuid:dcad14cc-5bcd-45fd-a54d-246b95047d45)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `readUserGroupControl`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function readUserGroupControl(\r\n credentials,\r\n uri,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n const URI = \"/3drdfpersist/resources/v1/usersgroup\";\r\n\r\n const url = `${space}${URI}/${uri}/sharing`;\r\n\r\n const header = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const opts = {\r\n method: \"GET\",\r\n headers: header,\r\n };\r\n _httpCallAuthenticated(url, {\r\n opts,\r\n onComplete(_rep) {\r\n if (onDone) onDone(JSON.parse(_rep));\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n/**\r\n * @description La fonction `getCSRFToken` est une fonction asynchrone qui récupère un jeton CSRF à partir d'une URL\r\n * spécifiée et appelle le rappel `onDone` avec le jeton en cas de succès, ou le rappel `onError` avec\r\n * une erreur en cas d'échec.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n *\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @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 utilisé pour gérer les erreurs qui se produisent lors de la demande.\r\n *\r\n */\r\nexport async function getCSRFToken(credentials, onDone, onError) {\r\n if (credentials.space) {\r\n const url = `${credentials.space}/resources/v1/application/CSRF`;\r\n _httpCallAuthenticated(url, {\r\n onComplete(response) {\r\n response = JSON.parse(response);\r\n // console.log(\"getCSRFToken() / response => \", response);\r\n if (onDone) onDone(response.csrf);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const infos = { error, headers, xhr };\r\n if (onError) onError(infos);\r\n },\r\n });\r\n }\r\n}\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).filter(Boolean).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","import {\r\n _httpCallAuthenticated,\r\n _getPlatformServices,\r\n _getPlateformInfos,\r\n} from \"./3dexperience_api\";\r\nimport { chunkArray } from \"../../utils/chunks\";\r\nimport { UUID } from \"../../api/index\";\r\nimport { getCSRFToken } from \"./getCSRFToken\";\r\nimport { DateTime } from \"luxon\";\r\n\r\nimport qs from \"querystring\";\r\n\r\n/**\r\n * @description La fonction `_3dSpace_get_docInfo` récupère des informations sur un document dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSapce) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} [docid] - Le paramètre `docid` est l'ID du document pour lequel vous souhaitez récupérer des\r\n * informations. C'est un paramètre obligatoire et doit être fourni.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque les\r\n * informations du document seront récupérées avec succès. Il prend un argument, qui est l'objet\r\n * d'informations du document.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel HTTP. Il prend un paramètre, qui est la réponse d'erreur.\r\n * @returns La fonction ne renvoie explicitement rien.\r\n */\r\nexport async function _3DSpace_get_docInfo(\r\n credentials,\r\n docid = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _3DSpace = credentials.space;\r\n if (docid === undefined) {\r\n console.log(\"Le paramètre docid est obligatoire\");\r\n return;\r\n }\r\n const url = _3DSpace + `/resources/v1/modeler/documents/${docid}`;\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\nexport async function _3DSpace_get_multiDocInfo(\r\n credentials,\r\n docids = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _3DSpace = credentials.space;\r\n if (docids === undefined) {\r\n console.log(\"Le paramètre docids est obligatoire\");\r\n return;\r\n }\r\n // const url = _3DSpace + `/resources/v1/modeler/documents/ids?$fields=revision&$include=!files,!ownerInfo,!originatorInfo,versions`;\r\n\r\n let url =\r\n `${_3DSpace}/resources/v1/modeler/documents/ids` +\r\n \"?$include=!files,!ownerInfo,!originatorInfo,!relOwnerInfo'\";\r\n let data = qs.stringify({\r\n $ids: docids.toString().replace('\"', \"\").replace(\"[\", \"\").replace(\"]\", \"\"),\r\n });\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n data,\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction effectue un appel HTTP authentifié pour récupérer le jeton CSRF pour un document de\r\n * modélisation 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.objID - ID du document pour lequel le jeton CSRF est demandé.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * renvoyées par le serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera exécutée si la requête\r\n * HTTP échoue ou rencontre une erreur. Il prend un argument, qui est la réponse d'erreur.\r\n */\r\nexport function _3DSpace_get_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.objID && credentials.objID !== \"\") {\r\n let url = `${credentials.space}/resources/v1/modeler/documents/${credentials.objID}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n credentials[\"success\"] = true;\r\n credentials[\"token\"] = info?.csrf?.value;\r\n credentials[\"datas\"] = info?.data[0];\r\n if (onDone) {\r\n onDone(credentials);\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n } else {\r\n _3DSpace_csrf(\r\n credentials,\r\n (rep) => {\r\n console.log(\"_3DSpace_get_csrf / _3DSpace_csrf\", rep);\r\n\r\n credentials[\"token\"] = rep;\r\n if (onDone) onDone(credentials);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description Cette fonction JavaScript récupère le TOKEN CSRF d'une application 3DSpace.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSapce) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `_3DSpace_csrf`. Il est utilisé pour gérer et afficher\r\n * les messages d’erreur ou exécuter toute logique de gestion des erreurs nécessaire.\r\n * @returns la valeur du jeton CSRF, qui est obtenue à partir de la réponse de l'appel HTTP.\r\n */\r\nexport function _3DSpace_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.space) {\r\n const url = credentials.space + \"/resources/v1/application/CSRF\";\r\n _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info.csrf.value);\r\n },\r\n onFailure(response, headers, xhr) {\r\n if (onError)\r\n onError({\r\n response,\r\n headers,\r\n xhr,\r\n });\r\n },\r\n });\r\n } else {\r\n const msgError = \"ERROR : url du 3DSpace non défini.\";\r\n if (onError) onError(msgError);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSpace_get_ticket` récupère un ticket d’accès pour un document\r\n * \r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} credentials.objID - ID du document pour lequel l'URL du fichier est demandée.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'URL du fichier sera récupérée\r\n * avec succès. Il prend un paramètre, qui est l'URL du fichier.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction qui sera appelée s'il y a une erreur lors\r\n * de l'exécution de la fonction. Il s'agit d'un paramètre facultatif et peut être laissé indéfini s'il\r\n * n'est pas nécessaire.\r\n */\r\nexport function _3DSpace_get_ticket(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n let url =\r\n credentials.space +\r\n `/resources/v1/modeler/documents/${credentials.objID}/files/DownloadTicket`;\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n\r\n onComplete(response, headers) {\r\n let info = JSON.parse(response);\r\n\r\n const file_url = info.data[0].dataelements.ticketURL;\r\n\r\n if (onDone) onDone(file_url, headers);\r\n },\r\n\r\n onFailure(response, head) {\r\n console.warn(\"☠️ error => \", response, head);\r\n if (onError) onError(response, head);\r\n },\r\n });\r\n },\r\n (err) => {\r\n console.warn(\"_3DSpace_get_ticket / error => \", err);\r\n if (onError) onError(err);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description Cette fonction envoie une requête PUT à une URL spécifiée avec des en-têtes d'authentification et\r\n * renvoie une URL de fichier en cas de succès.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [docid] - L'ID du document pour lequel le ticket de téléchargement de fichier est demandé.\r\n * @param {String} [csr] - Le paramètre \"csr\" est un jeton CSRF utilisé à des fins d'authentification et de\r\n * sécurité. Il est transmis en tant qu'en-tête dans la requête HTTP à l'URL spécifiée.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * requête HTTP aboutira et que l'URL du fichier sera obtenue. Il prend un argument, qui est l'URL du\r\n * fichier.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction de rappel qui sera exécutée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être laissé indéfini s'il n'est pas\r\n * nécessaire.\r\n */\r\nexport function _3DSpace_file_url_csr(\r\n credentials,\r\n docid,\r\n csr = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = `${credentials.space}/resources/v1/modeler/documents/${docid}/files/DownloadTicket`;\r\n if (!csr) {\r\n csr = credentials.token;\r\n }\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: csr,\r\n },\r\n\r\n onComplete(response) {\r\n let info = JSON.parse(response);\r\n console.log(\"☠️ info => \", info);\r\n if (info.success === true) {\r\n try {\r\n const file_url = info.data[0].dataelements.ticketURL;\r\n if (onDone) onDone(file_url);\r\n } catch (err) {\r\n if (onError) onError(err);\r\n }\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction met à jour un fichier dans un espace 3D avec les données et le nom de fichier donnés,\r\n * en utilisant la protection CSRF.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [docId] - ID de document du fichier d'espace 3D en cours de mise à jour.\r\n * @param {String} [fileId] - Le paramètre fileid est l'identifiant unique du fichier qui doit être mis à jour.\r\n * @param {String} [data] - Ce paramètre représente les données du fichier qui doivent être mises à jour. Il peut\r\n * se présenter sous la forme d'un format binaire ou texte.\r\n * @param {String} [filename] - Nom du fichier mis à jour.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque\r\n * l'opération de mise à jour du fichier sera terminée avec succès.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera exécutée si une erreur\r\n * survient lors de l'exécution de la fonction `_3dspace_file_update`. Il permet de gérer les erreurs\r\n * de manière personnalisée, plutôt que de s'appuyer sur le comportement de gestion des erreurs par\r\n * défaut.\r\n */\r\nexport function _3DSpace_file_update(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const runFunction = () =>\r\n _3DSpace_file_update_csr(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n credentials.token,\r\n onDone,\r\n onError\r\n );\r\n\r\n if (credentials.token) {\r\n runFunction();\r\n } else {\r\n _3DSpace_get_csrf(\r\n credentials,\r\n docId,\r\n (result) => {\r\n console.log(\r\n \"_3DSpace_file_update | _3DSpace_get_csrf| onDone | result\",\r\n result\r\n );\r\n credentials[\"token\"] = result;\r\n runFunction();\r\n },\r\n () => {\r\n if (onError) onError();\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description Cette fonction met à jour un fichier dans le document du 3DSpace à l'aide d'un jeton CheckinTicket et CSRF.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} docId - ID du document en cours de mise à jour.\r\n * @param {String} fileId - ID du fichier mis à jour dans le document.\r\n * @param {String} data - Les données binaires du fichier en cours de mise à jour.\r\n * @param {String} filename - Nom du fichier mis à jour.\r\n * @param {String} csr - csr signifie Cross-Site Request Forgery token, qui est une mesure de sécurité utilisée\r\n * pour empêcher l'accès non autorisé aux applications Web. Il s'agit d'un jeton unique généré par le\r\n * serveur et envoyé au client, qui est ensuite inclus dans les requêtes ultérieures pour vérifier\r\n * l'authenticité de la requête. Dans cette fonction, le\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera exécutée lorsque la\r\n * fonction se terminera avec succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et s'il n'est pas fourni, l'erreur sera traitée en\r\n * interne.\r\n */\r\nexport function _3DSpace_file_update_csr(\r\n credentials,\r\n docId,\r\n fileId,\r\n data,\r\n filename,\r\n csr,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url =\r\n credentials.space +\r\n `/resources/v1/modeler/documents/files/CheckinTicket?tenant=${credentials.tenant.toUpperCase()}&e6w-lang=fr&e6w-timezone=-60&xrequestedwith=xmlhttprequest`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n SecurityContext: encodeURIComponent(\"ctx::\" + credentials.ctx),\r\n //ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data: JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n }),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const csrf = response.csrf;\r\n const info = response.data[0].dataelements;\r\n\r\n const formData = new FormData();\r\n\r\n let blobData;\r\n if (data instanceof Blob) {\r\n blobData = data;\r\n } else {\r\n blobData = new Blob([data], {\r\n type: \"text/plain\",\r\n });\r\n }\r\n\r\n formData.append(info.ticketparamname, info.ticket);\r\n formData.append(\"file_0\", blobData, filename);\r\n\r\n const opts = {};\r\n opts.method = \"POST\";\r\n opts.data = formData;\r\n\r\n opts.onComplete = function (response) {\r\n //Update the FCS file receipt\r\n let tempId = \"temp_\" + Date.now();\r\n let options = {\r\n method: \"PUT\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n },\r\n data: JSON.stringify({\r\n csrf,\r\n data: [\r\n {\r\n relateddata: {\r\n files: [\r\n {\r\n dataelements: {\r\n title: filename,\r\n receipt: response,\r\n },\r\n updateAction: \"REVISE\",\r\n },\r\n ],\r\n },\r\n id: docId,\r\n updateAction: \"NONE\",\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n\r\n let upperTenant = credentials.tenant.toUpperCase();\r\n\r\n _httpCallAuthenticated(\r\n credentials.space +\r\n `/resources/v1/modeler/documents/?$include=versions&tenant=${credentials.tenant.toUpperCase()}&e6w-lang=fr&e6w-timezone=-60&xrequestedwith=xmlhttprequest`,\r\n options\r\n );\r\n // _httpCallAuthenticated(\r\n // credentials.space +\r\n // `/resources/v1/modeler/documents/?$include=versions&tenant=${upperTenant}&e6w-lang=en&e6w-timezone=-120&xrequestedwith=xmlhttprequest`,\r\n // options\r\n // );\r\n };\r\n\r\n opts.onFailure = function (err) {\r\n if (onError) onError(err);\r\n };\r\n\r\n opts.timeout = 0;\r\n\r\n _httpCallAuthenticated(info.ticketURL, opts);\r\n },\r\n });\r\n}\r\n\r\nexport async function _3DSpace_put_docInfo(\r\n credentials,\r\n docId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _space = credentials.space;\r\n const csr = credentials.token;\r\n const ctx = credentials.ctx;\r\n const description = credentials?.description;\r\n const title = credentials?.title;\r\n\r\n if (!docId) {\r\n console.warn(\"Error: docId undefined\");\r\n if (onError) onError(\"Error: docId undefined\");\r\n return;\r\n }\r\n\r\n let url = `${credentials.space}/resources/v1/modeler/documents/${docId}`;\r\n const data = JSON.stringify({\r\n data: [\r\n {\r\n dataelements: {\r\n description,\r\n title,\r\n },\r\n },\r\n ],\r\n });\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data,\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Uploads a file to the 3DSpace platform.\r\n *\r\n * @param {Object} credentials - The credentials object.\r\n * @param {string} credentials.tenant - The tenant name.\r\n * @param {string} credentials.cs_name - The collaboration space name.\r\n * @param {string} [fileName=undefined] - The name of the file to upload.\r\n * @param {Blob} [blobFile=undefined] - The file blob to upload.\r\n * @param {function} [onDone=undefined] - Callback function to execute on successful upload.\r\n * @param {function} [onError=undefined] - Callback function to execute on error.\r\n * @param {function} [onProgress=undefined] - Callback function to execute on upload progress.\r\n * @returns {Promise<void>} - A promise that resolves when the upload is complete.\r\n */\r\nexport async function _3DSpace_Upload_File(\r\n credentials, // { tenant, cs_name }\r\n fileName = undefined,\r\n blobFile = undefined,\r\n onDone = undefined,\r\n onError = undefined,\r\n onProgress = undefined\r\n) {\r\n let { tenant, cs_name } = credentials;\r\n if (!tenant && !cs_name) {\r\n if (onError) onError(\"Credentials undefined\");\r\n return;\r\n }\r\n if (!fileName && !blobFile) {\r\n if (onError) onError(\"Définition du fichier undefined\");\r\n return;\r\n }\r\n //cs_name = encodeURIComponent(cs_name);\r\n const timeStamp = DateTime.now().ts;\r\n\r\n //NOTE - Get Ticket\r\n let url = `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/collabspaces/${encodeURIComponent(\r\n cs_name\r\n )}/ticket?id=${timeStamp}&tenant=${tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n\r\n _httpCallAuthenticated(\r\n `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/session?tenant=${tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`,\r\n {\r\n method: \"GET\",\r\n onComplete(response) {\r\n try {\r\n response = JSON.parse(response);\r\n const { csrftoken, isadmin } = response;\r\n if (csrftoken)\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n //\"x-ds-csrftoken\": csrftoken,\r\n Accept: \"application/json\",\r\n },\r\n\r\n onComplete(response, headers, xhr) {\r\n try {\r\n response = JSON.parse(response);\r\n if (response?.ticket) {\r\n const { ticket, actionurl, jobticket } = response;\r\n\r\n pushFileInFcs(\r\n { dataelements: { ticket, ticketURL: actionurl } },\r\n blobFile,\r\n fileName,\r\n (response) => {\r\n let doc = new DOMParser().parseFromString(\r\n response,\r\n \"text/html\"\r\n );\r\n const receipt = doc.body.firstChild\r\n .querySelector(\"input\")\r\n .getAttributeNode(\"value\").value;\r\n\r\n const urlRelatedFile = `https://${tenant.toLowerCase()}-eu1-space.3dexperience.3ds.com/enovia/resources/enocsmrest/collabspaces/${encodeURIComponent(\r\n cs_name\r\n )}/contents?receipt=${encodeURIComponent(receipt)}`;\r\n\r\n let re = /(?:\\.([^.]+))?$/;\r\n let ext = re.exec(fileName)[1];\r\n\r\n const bodyRequest = JSON.stringify({\r\n actions: [],\r\n businessobj: {\r\n description: credentials?.description\r\n ? credentials?.description\r\n : \"\",\r\n file: fileName,\r\n fullnameowner: \"\",\r\n icon: \"\",\r\n maturity: \"\",\r\n modified: \"\",\r\n owner: {},\r\n thumbnail: \"\",\r\n title: ext\r\n ? fileName.split(\".\").slice(0, -1).join(\".\")\r\n : fileName,\r\n type: {},\r\n },\r\n collabspace: cs_name,\r\n });\r\n _httpCallAuthenticated(urlRelatedFile, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json;charset=UTF-8\",\r\n \"X-DS-CSRFTOKEN\": csrftoken,\r\n },\r\n data: bodyRequest,\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n // console.log(\"_3DSpace_Upload_Doc | pushFileInFcs | onComplete\", response);\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n console.warn(\r\n \"_3DSpace_Upload_Doc | pushFileInFcs | onFailure\",\r\n { url: urlRelatedFile, bodyRequest, err }\r\n );\r\n if (onError) onError(err);\r\n },\r\n });\r\n },\r\n (err) => {\r\n console.warn(\"pushFileInFcs\", err);\r\n if (onError) onError(err);\r\n },\r\n (progress) => {\r\n if (onProgress) onProgress({ fileName, progress });\r\n }\r\n );\r\n }\r\n } catch (error) {\r\n if (onError) onError(error);\r\n }\r\n },\r\n onFailure(response) {\r\n console.warn(\"_3DSpace_Upload_Doc | onFailure\");\r\n if (onError) onError(response);\r\n },\r\n });\r\n } catch {\r\n if (onError) onError();\r\n }\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n }\r\n );\r\n}\r\n\r\nexport async function _3DSpace_Update_Doc(\r\n credentials,\r\n objectId,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const _space = credentials.space;\r\n const csr = credentials.token;\r\n const ctx = credentials.ctx;\r\n\r\n //TEST de la Typo de Data (si Object, Blod, String)\r\n\r\n _3DSpace_get_docInfo(\r\n credentials,\r\n objectId,\r\n (info) => {\r\n const fileId = info.data[0].relateddata.files[0].id;\r\n const filename = info.data[0].relateddata.files[0].dataelements.title;\r\n\r\n _3DSpace_file_update(\r\n credentials,\r\n objectId,\r\n fileId,\r\n data,\r\n filename,\r\n (result) => {\r\n if (onDone) onDone(result);\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n }\r\n );\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * @description Cette fonction crée un document dans le 3Dspace à partir des données fournies au format JSON.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token », « space » et « ctx ».(ex: credentials.space, credentials.tenant, credentials.token)\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String}[data] - Le paramètre data correspond aux données JSON qui doivent être chargées dans le 3Dspace.\r\n *\r\n * @param {String}[filename] - Le nom du fichier à créer.\r\n * @param {String}[desc] - desc est un paramètre de chaîne qui représente la description du document en cours de création dans le 3Dspace.\r\n *\r\n * @param {Function}[onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque la requête HTTP sera terminée avec succès. Il prend la réponse comme argument.\r\n *\r\n * @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 _3dSpace_Create_Doc. Il prend l'objet de réponse comme argument.\r\n *\r\n */\r\nexport async function _3DSpace_Create_Doc(\r\n credentials,\r\n data, // data\r\n filename, //ref coclico\r\n descriptionDoc, // ref name\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n checkinTicket(\r\n credentials,\r\n (resultCheckinTicket) => {\r\n if (resultCheckinTicket?.items >= 1) {\r\n resultCheckinTicket.data.forEach((fcs__jobTicket) => {\r\n pushFileInFcs(\r\n fcs__jobTicket,\r\n data,\r\n filename,\r\n (receipt) => {\r\n relatedDocAndFile(\r\n credentials,\r\n receipt,\r\n filename,\r\n descriptionDoc,\r\n (response) => {\r\n if (response?.data.length) {\r\n if (onDone) onDone(response);\r\n } else {\r\n if (onError)\r\n onError({\r\n success: false,\r\n msg: \"Erreur lors de la mise en ralation entre la document et le fichier\",\r\n });\r\n }\r\n },\r\n (err) => console.warn(err)\r\n );\r\n },\r\n (err) => console.warn(err)\r\n );\r\n });\r\n }\r\n },\r\n (err) => console.warn(err)\r\n );\r\n}\r\n\r\nfunction checkinTicket(credentials, onDone = undefined, onError = undefined) {\r\n if (credentials?.space && credentials.token && credentials.ctx) {\r\n let url = `${credentials.space}/resources/v1/modeler/documents/files/CheckinTicket`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n SecurityContext: credentials.ctx,\r\n },\r\n\r\n onComplete(response, headers, xhr) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (error) {\r\n //\r\n }\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n } else {\r\n console.log(\"Error de credentials\", credentials);\r\n }\r\n}\r\n\r\nfunction pushFileInFcs(\r\n fcs__jobTicket,\r\n fileData,\r\n fileName,\r\n onDone = undefined,\r\n onError = undefined,\r\n onProgress = undefined\r\n) {\r\n console.log(\"pushFileInFcs\", { fcs__jobTicket, fileData, fileName });\r\n let formData = new FormData();\r\n if (!(fileData instanceof Blob)) {\r\n fileData = new Blob([fileData], {\r\n type: \"text/plain\",\r\n });\r\n }\r\n formData.append(\"__fcs__jobTicket\", fcs__jobTicket.dataelements.ticket);\r\n formData.append(\"file-name\", fileName);\r\n formData.append(\"file_0\", fileData, fileName);\r\n formData.append(\"file-title\", fileName);\r\n formData.append(\"file-description\", fileName);\r\n\r\n let url = fcs__jobTicket.dataelements.ticketURL;\r\n\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"POST\", url, true);\r\n xhr.upload.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = (event.loaded / event.total) * 100;\r\n if (onProgress) onProgress(percentComplete);\r\n }\r\n };\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n if (onDone) onDone(xhr.responseText.replace(/[\\n\\r]/g, \"\"));\r\n } else {\r\n if (onError) onError(xhr.statusText);\r\n }\r\n };\r\n xhr.onerror = function () {\r\n if (onError) onError(xhr.statusText);\r\n };\r\n xhr.send(formData);\r\n}\r\n\r\nfunction relatedDocAndFile(\r\n credentials,\r\n receipt,\r\n filename,\r\n descriptionDoc = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"relatedDocAndFile\", { credentials, receipt, filename });\r\n const trimExt = (name) =>\r\n name.indexOf(\".\") === -1 ? name : name.split(\".\").slice(0, -1).join(\".\");\r\n let tempId = \"temp_\" + DateTime.now().ts;\r\n let url =\r\n credentials.space +\r\n \"/resources/v1/modeler/documents/?e6w-lang=fr&e6w-timezone=-120&xrequestedwith=xmlhttprequest\";\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n ENO_CSRF_TOKEN: credentials.token,\r\n SecurityContext: encodeURIComponent(\"ctx::\") + credentials.ctx,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n csrf: { name: \"ENO_CSRF_TOKEN\", value: credentials.token },\r\n data: [\r\n {\r\n type: \"Document\",\r\n dataelements: {\r\n title: trimExt(filename),\r\n description: descriptionDoc,\r\n },\r\n relateddata: {\r\n files: [\r\n {\r\n dataelements: {\r\n title: filename,\r\n receipt: `${receipt}\\n`,\r\n },\r\n },\r\n ],\r\n },\r\n tempId,\r\n },\r\n ],\r\n }),\r\n onComplete(response) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (error) {\r\n //\r\n }\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err) {\r\n if (onError) onError(err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction récupère les contextes de sécurité basés sur des paramètres spécifiés à partir d'un\r\n * hôte donné.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n *@param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} [cs] - Le titre d'un espace de collaboration.\r\n * @param {String} [role] - Le paramètre de rôle est un paramètre facultatif qui spécifie le rôle de\r\n * l'utilisateur dans l'espace de collaboration. Si fourni, la fonction filtrera les espaces de\r\n * collaboration pour trouver celui où l'utilisateur a le rôle spécifié. S'il n'est pas fourni, la\r\n * fonction utilisera le premier espace de collaboration trouvé.\r\n * @param {String} [organization] - Nom de l'organisation pour laquelle le contexte de sécurité est récupéré.\r\n * @param {Function} [onDone] - La fonction à appeler lorsque le contexte de sécurité a été récupéré avec succès.\r\n * Il prend le contexte comme paramètre.\r\n * @param {Function} [onError] - Le paramètre onError est une fonction de rappel qui est appelée si une erreur se\r\n * produit lors de l'exécution de la fonction. Il prend un argument, qui est le message d'erreur ou\r\n * l'objet.\r\n */\r\nexport function _3DSpace_get_securityContexts(\r\n credentials,\r\n cs = undefined,\r\n role = undefined,\r\n organization = undefined,\r\n onDone = undefined,\r\n onError = undefined,\r\n withPreferredCredentials = false\r\n) {\r\n const url =\r\n `${credentials.space}/resources/modeler/pno/person?` +\r\n \"current=true\" +\r\n \"&select=preferredcredentials\" +\r\n \"&select=collabspaces\";\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n onComplete(response) {\r\n // role.company.cs\r\n const contexts = JSON.parse(response);\r\n let context = \"\";\r\n let finalCs,\r\n finalOrg,\r\n finalRole = undefined;\r\n if (cs) {\r\n let oCS = contexts.collabspaces.find((e) => e.title === cs);\r\n if (oCS) {\r\n finalCs = cs;\r\n let couples = oCS.couples;\r\n couples = couples.filter(\r\n (value, index, self) =>\r\n index ===\r\n self.findIndex(\r\n (t) =>\r\n t.organization.pid === value.organization.pid &&\r\n t.role.pid === value.role.pid\r\n )\r\n );\r\n if (role) {\r\n if (Array.isArray(role)) {\r\n role.forEach((r) => {\r\n if (!finalRole)\r\n couples.forEach((e) => {\r\n if (\r\n r === e.role.name &&\r\n organization === e.organization.title\r\n ) {\r\n finalRole = r;\r\n finalOrg = organization;\r\n } else if (r === e.role.name) {\r\n let defineSingleItem = couples.filter(\r\n (couple) => couple.role.name === r\r\n );\r\n if (defineSingleItem.length === 1) {\r\n finalRole = defineSingleItem[0].role.name;\r\n finalOrg = defineSingleItem[0].organization.title;\r\n } else {\r\n onError(defineSingleItem);\r\n }\r\n }\r\n });\r\n });\r\n } else {\r\n couples.forEach((e) => {\r\n if (\r\n role === e.role.name &&\r\n organization === e.organization.title\r\n ) {\r\n finalRole = role;\r\n finalOrg = organization;\r\n } else if (role === e.role.name) {\r\n let defineSingleItem = couples.filter(\r\n (couple) => couple.role.name === role\r\n );\r\n if (defineSingleItem.length === 1) {\r\n finalRole = defineSingleItem[0].role.name;\r\n finalOrg = defineSingleItem[0].organization.title;\r\n } else {\r\n onError(defineSingleItem);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (finalCs && finalOrg && finalRole) {\r\n context = finalRole + \".\" + finalOrg + \".\" + finalCs;\r\n onDone(context);\r\n // onDone(encodeURI(context));\r\n } else {\r\n if (contexts.preferredcredentials && withPreferredCredentials) {\r\n context =\r\n contexts.preferredcredentials.role.name +\r\n \".\" +\r\n contexts.preferredcredentials.organization.title +\r\n \".\" +\r\n contexts.preferredcredentials.collabspace.title;\r\n onDone(context);\r\n } else {\r\n if (onError) {\r\n context = finalRole + \".\" + finalOrg + \".\" + finalCs;\r\n onError(context);\r\n }\r\n }\r\n }\r\n },\r\n onFailure(err, headers) {\r\n console.warn(\"Erreur de récupération du contexte de sécurité. => \", {\r\n err,\r\n headers,\r\n });\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dspace_download_doc` est une fonction asynchrone qui télécharge un document à partir d'un espace 3D, avec des rappels facultatifs pour le succès et la gestion des erreurs.\r\n * @param {Object} credentials Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes: space, token\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.objID - Le paramètre objectId est l'identifiant unique du document que vous souhaitez\r\n * télécharger depuis le 3DSpace.\r\n * @param {String} credentials.returnType - \"blob\" - type d'object à retourner.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * téléchargement sera terminé avec succès. Il prend un argument, qui est les données de réponse du\r\n * téléchargement.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dspace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toutes les erreurs qui se produisent.\r\n \r\n * @returns {Promise}\r\n */\r\nexport async function _3DSpace_download_doc(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (!credentials.objID || credentials.objID === \"\") {\r\n console.warn(\r\n \"_3DSpace_download_doc() / Le paramètre objectId est obligatoire\"\r\n );\r\n if (onError)\r\n onError(\r\n \"_3DSpace_download_doc() / Le paramètre objectId est obligatoire\"\r\n );\r\n }\r\n\r\n if (credentials.space === \"\" || !credentials.space) {\r\n console.warn(\r\n \"_3DSpace_download_doc() / Le paramètre space est obligatoire\"\r\n );\r\n if (onError)\r\n onError(\"_3DSpace_download_doc() / Le paramètre space est obligatoire\");\r\n }\r\n if (credentials.token === \"\" || !credentials.token) {\r\n getCSRFToken(\r\n credentials,\r\n (rep) => {\r\n credentials[\"token\"] = rep;\r\n },\r\n (err) => {\r\n console.log(\"☠️ error => \", err);\r\n }\r\n );\r\n // console.warn(\r\n // \"_3DSpace_download_doc() / Le paramètre token est obligatoire\",\r\n // );\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n _3DSpace_get_ticket(\r\n credentials,\r\n (ticketURL) => {\r\n if (credentials?.returnType === \"blob\") {\r\n console.log(\"ticketURL blob\", ticketURL);\r\n fetch(ticketURL)\r\n .then((response) => response.blob())\r\n .then((blob) => {\r\n if (onDone) onDone(blob);\r\n })\r\n .catch((err) => {\r\n if (onError) onError(err);\r\n });\r\n } else {\r\n _httpCallAuthenticated(ticketURL, {\r\n onComplete(response) {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response;\r\n }\r\n\r\n if (onDone && typeof onDone === \"function\") onDone(tryParse);\r\n resolve(tryParse);\r\n },\r\n onFailure(error, headers, xhr) {\r\n if (onError) {\r\n console.log(\"error http\", error);\r\n onError({\r\n msg: JSON.parse(error),\r\n headers,\r\n xhr,\r\n });\r\n reject({\r\n msg: JSON.parse(error),\r\n headers,\r\n xhr,\r\n });\r\n }\r\n },\r\n });\r\n }\r\n },\r\n (error) => {\r\n if (onError) onError(error);\r\n console.log(\"*_3dspace_download_doc / error file URL *\", error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSpace_download_multidoc` télécharge plusieurs documents à partir d'un espace 3D en\r\n * utilisant un token et des objectID donnés.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification dans une fonction interne(_3DSpace_get_downloadTicket_multidoc). Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} [credentials.token] - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n\r\n * @param {String} [objectIds] - Un tableau d'ID d'objet qui doivent être téléchargés à partir du 3DSpace.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de téléchargement sera terminé avec succès. Il faut un argument, qui est le résultat du\r\n * processus de téléchargement.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur pendant le processus de téléchargement. Il vous permet de gérer les erreurs qui surviennent\r\n * lors du téléchargement.\r\n\r\n */\r\nexport async function _3DSpace_download_multidoc(\r\n credentials,\r\n objectIds,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (\r\n typeof objectIds !== \"undefined\" &&\r\n Array.isArray(objectIds) &&\r\n objectIds?.length > 0\r\n ) {\r\n const datas = {\r\n credentials,\r\n myArray: objectIds,\r\n chunk: 80,\r\n fn_to_call: _3DSpace_get_downloadTicket_multidoc,\r\n };\r\n\r\n chunkArray(datas, (rep) => {\r\n if (onDone) onDone(rep);\r\n });\r\n } else {\r\n console.warn(\r\n \"La liste d'objects dans la fonction _3DSpace_download_multidoc est vide ou non défini.\"\r\n );\r\n if (onError)\r\n onError(\r\n \"La liste d'objects dans la fonction _3DSpace_download_multidoc est vide ou non défini.\"\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dspace_get_downloadTicket_multidoc` permet de récupérer un ticket de téléchargement\r\n * de plusieurs documents dans un espace 3D.\r\n * @param {Object} [credentials] - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification. Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} [credentials.token] - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} [objectIds] - Tableau d'ID d'objet pour lesquels le ticket de téléchargement doit être généré.\r\n * @param {Function} [onNext] - Une fonction de rappel qui sera appelée après chaque demande de ticket de\r\n * téléchargement réussie pour chaque objectId.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de téléchargement de chaque objet sera terminé avec succès. Il lui sera transmis un objet\r\n * contenant « objectId », « fileName » et « data » du fichier téléchargé.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction. Il est facultatif et peut être utilisé pour gérer les\r\n * erreurs qui surviennent.\r\n */\r\nexport function _3DSpace_get_downloadTicket_multidoc(\r\n credentials,\r\n objectIds,\r\n onNext = undefined,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const compilData = [];\r\n objectIds.forEach((objectId) => {\r\n compilData.push({\r\n id: objectId,\r\n });\r\n });\r\n let data = JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n data: compilData,\r\n });\r\n\r\n const url = `${credentials.space}/resources/v1/modeler/documents/DownloadTicket?tenant=${credentials.tenant}&e6w-lang=fr&e6w-timezone=-120`;\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n data,\r\n type: \"json\",\r\n onComplete(response) {\r\n const datas = response.data;\r\n if (response.success === true) {\r\n if (onNext) onNext();\r\n datas.forEach((data) => {\r\n try {\r\n const fileName = data.dataelements.fileName;\r\n const fileUrl = data.dataelements.ticketURL;\r\n\r\n _httpCallAuthenticated(fileUrl, {\r\n onComplete: (response, headers) => {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response.blob();\r\n }\r\n if (onDone)\r\n onDone({\r\n objectId: data.id,\r\n headers,\r\n fileName,\r\n data: tryParse,\r\n });\r\n },\r\n onFailure: (error) => {\r\n console.log(\"error http\", error);\r\n },\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n if (onError) onError(err);\r\n }\r\n });\r\n }\r\n },\r\n onFailure(response) {\r\n console.log(response);\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n// MATURITY\r\n/**\r\n * @description Cette fonction JavaScript récupère les prochains états possibles pour un objet donné dans un espace\r\n * 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre `objectId` est l'identifiant de l'objet dont vous souhaitez récupérer\r\n * les prochains états. Il est utilisé pour spécifier l'objet pour lequel vous souhaitez obtenir les\r\n * états suivants dans l'espace 3D.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la demande sera terminée avec\r\n * succès. Il recevra la réponse en paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction. Il s'agit d'un paramètre facultatif, donc s'il n'est pas\r\n * fourni, il sera par défaut «non défini».\r\n * @return {Promise}\r\n */\r\nexport function _3DSpace_lifecycle_getNextStates(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/modeler/dslc/maturity/getNextStates`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n id: objectId,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n/**\r\n * @description Cette fonction permet de changer l'état d'un objet dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant de l'objet dont l'état doit être modifié.\r\n * Il s'agit d'un identifiant unique qui représente un objet spécifique dans le système.\r\n * @param {Function} [nextState] - Le paramètre `nextState` est l'état souhaité vers lequel vous souhaitez modifier\r\n * l'objet. Il représente l'état suivant du cycle de vie de l'objet.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération de changement d'état\r\n * sera terminée avec succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dspace_lifecyle_changeState`. C'est un paramètre\r\n * facultatif, donc s'il n'est pas fourni, la fonction ne fera rien en cas de problème.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_changeState(\r\n credentials,\r\n objectId,\r\n nextState,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/modeler/dslc/maturity/changeState`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n id: objectId,\r\n nextState,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n// RESERVATION\r\n//TODO -\r\nfunction _3DSpace_lifecyle_reserve(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n//TODO -\r\nfunction _3DSpace_lifecyle_unreserve(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n// SHARING\r\n//TODO -\r\nfunction _3DSpace_lifecyle_getSharing(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n//TODO -\r\nfunction _3DSpace_lifecyle_setSharing(\r\n host,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ...\r\n}\r\n// VERSIONING\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_getGraph` récupère un graphique du cycle de vie d'un objet spatial\r\n * 3D à l'aide des informations d'identification et de l'ID d'objet fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier la demande.\r\n * Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant de l'objet pour lequel vous souhaitez\r\n * récupérer le graphique. Il est utilisé pour spécifier l'objet pour lequel vous souhaitez obtenir le\r\n * graphique de version.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la récupération du graphique sera\r\n * réussie. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_getGraph`. C'est un paramètre\r\n * facultatif, donc s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_getGraph(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // A VALIDER\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/v1/dslc/versiongraph?withThumbnail=0&withIsLastVersion=0&withAttributes=0&withCopyFrom=0&tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n graphRequests: [\r\n {\r\n id: objectId,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n// REVISION\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_getNextRevision` permet de récupérer la prochaine révision d'un\r\n * document dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre `objectId` est l'identifiant unique de l'objet pour lequel vous\r\n * souhaitez obtenir la prochaine révision. Il est utilisé pour spécifier l'objet qui doit être révisé.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_getNextRevision`. Il s'agit d'un\r\n * paramètre facultatif, donc s'il n'est pas fourni, il sera par défaut «non défini».\r\n * @returns Une promesse est renvoyée.\r\n */\r\nexport function _3DSpace_lifecycle_getNextRevision(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/lifecycle/revise/prepare_revise_maskattributes?tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n SecurityContext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n \"attribute[PLMReference.V_versionComment]\": null,\r\n physicalid: objectId,\r\n type: \"Document\",\r\n tenant: credentials.tenant,\r\n objectId,\r\n policy: \"Document Release\",\r\n availableSemantic: [\"E\", \"LAST\", \"NEW\", \"DUP\"],\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n/**\r\n * @description La fonction `_3DSpace_lifecycle_changeRevision` est utilisée pour changer la révision d'un objet\r\n * dans un espace 3D.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {String} credentials.ctx - L'ID du contexte de travail.\r\n * @param {String} objectId - Le paramètre objectId représente l'identifiant unique de l'objet dans l'espace 3D.\r\n * Il est utilisé pour spécifier quelle révision de l'objet doit être modifiée.\r\n * @param {Function} nextRevision - Le paramètre `nextRevision` est le numéro de révision qui sera attribué à\r\n * l'objet après le changement de révision.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque l'opération sera terminée avec\r\n * succès. Il prend la réponse comme argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_lifecycle_changeRevision`. Il vous permet de\r\n * gérer toutes les erreurs qui se produisent et d’effectuer toute gestion ou journalisation des\r\n * erreurs nécessaire.\r\n * @returns une promesse.\r\n */\r\nexport function _3DSpace_lifecycle_changeRevision(\r\n credentials,\r\n objectId,\r\n nextRevision,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (objectId !== undefined && objectId !== \"\" && objectId !== null) {\r\n const url = `${credentials.space}/resources/lifecycle/revise/major?tenant=${credentials.tenant}`;\r\n\r\n _3DSpace_get_securityContexts(\r\n credentials.space,\r\n \"ESPACE COMMUN\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n }\r\n );\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n data: [\r\n {\r\n physicalid: objectId,\r\n proposedRevision: nextRevision,\r\n modifiedAttributes: {\r\n revision: nextRevision,\r\n },\r\n },\r\n ],\r\n folderid: null,\r\n notificationTimeout: 600,\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n }\r\n });\r\n}\r\n\r\nexport function _3DSpace_get_currentSecurityContext(credentials) {\r\n return new Promise((resolve, reject) => {\r\n const url = `${\r\n credentials.space\r\n }/resources/pno/person/getsecuritycontext&tenant=${credentials.tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n\r\n let options = {\r\n method: \"GET\",\r\n onComplete(response) {\r\n resolve(response);\r\n },\r\n onFailure(response) {\r\n reject(response);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n\r\nexport function _3DSpace_lifecycle_getRevisions(\r\n credentials,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise(async (resolve, reject) => {\r\n const { tenant, ctx, space } = credentials;\r\n if (!tenant || !ctx || !space) {\r\n reject({ error: \"Erreur de credentials\", tenant, ctx, space });\r\n }\r\n const url = `${\r\n credentials.space\r\n }/resources/v1/dslc/versiongraph?withThumbnail=0&withIsLastVersion=1&withAttributes=1&withCopyFrom=1&tenant=${credentials.tenant.toUpperCase()}&xrequestedwith=xmlhttprequest`;\r\n let SecurityContext;\r\n await _3DSpace_get_currentSecurityContext(credentials).then(\r\n (result) => (SecurityContext = result?.SecurityContext)\r\n );\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n securitycontext: \"ctx::\" + SecurityContext,\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n graphRequests: [\r\n {\r\n id: objectId,\r\n attributes: [\"revision\", \"policy\"],\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n resolve(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n reject(response);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n// SECTION: BOOKMARKS\r\n\r\nexport function _3DSpace_getBookmarksRoot(\r\n credentials,\r\n) {\r\n return new Promise((resolve, reject) => {\r\n\r\n\r\n const store = mainStore();\r\n \r\n const { _fedSearch, currentTenant, ctx } = credentials;\r\n if(!ctx) reject({success:false, msg:\"getBookmarksRoot: ctx is missing in credentials\"});\r\n if(!_fedSearch) reject({success:false, msg:\"getBookmarksRoot: _fedSearch is missing in credentials\"});\r\n if(!currentTenant) reject({success:false, msg:\"getBookmarksRoot: currentTenant is missing in credentials\"});\r\n const URL = {\r\n base: _fedSearch,\r\n uri: \"/federated/search\",\r\n opt: `?tenant=${currentTenant}`,\r\n };\r\n \r\n const formatedDatas = {\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"physicalid\",\r\n \"mxid\",\r\n \"ds6w:type\",\r\n \"ds6w:identifier\",\r\n \"ds6w:classification\",\r\n \"icon_2ddefaultthb.subtype\",\r\n \"ds6w:reservedBy\",\r\n \"relcount\",\r\n \"taxonomies\",\r\n \"ParentBk\",\r\n \"owner\",\r\n \"ds6wg:revision\",\r\n \"ds6w:reserved\",\r\n \"ds6w:description\",\r\n \"ds6w:modified\",\r\n \"ds6w:created\",\r\n \"ds6w:responsible\",\r\n \"ds6w:status\",\r\n \"ds6w:policy\",\r\n \"ds6w:organizationResponsible\",\r\n \"ds6w:project\",\r\n ],\r\n label: `Folder_read_getRoots_${new Date().getTime()}`,\r\n with_synthesis: \"false\",\r\n order_by: \"asc\",\r\n order_field: \"ds6w:label\",\r\n start: 0,\r\n nresults: 1000,\r\n select_file: [\"icon\", \"thumbnail_2d\"],\r\n query: 'flattenedtaxonomies:\"types/Workspace\"',\r\n locale: \"fr\",\r\n tenant: currentTenant,\r\n source: [\"3dspace\"],\r\n indexmode: \"true\",\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: `ctx::${ctx}`,\r\n },\r\n },\r\n };\r\n \r\n const url = `${URL.base}${URL.uri}${URL.opt}`;\r\n \r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"content-Type\": \"application/json\",\r\n SecurityContext: `ctx::${ctx}`,\r\n },\r\n data: JSON.stringify(formatedDatas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n \r\n const bksRoots = info.results.map((bks) => {\r\n const obj = { id: bks.attributes[0].value };\r\n bks.attributes.forEach((attr) => {\r\n if (attr.name === \"ds6w:label\") obj[\"name\"] = attr.value;\r\n });\r\n return obj;\r\n });\r\n resolve(bksRoots);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const info = {};\r\n info[\"error\"] = error;\r\n info[\"headers\"] = headers;\r\n info[\"xhr\"] = xhr;\r\n reject(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\nexport function _3DSpace_bookmark_getSubSignets(credentials, objIdBookmark) {\r\n return new Promise((resolve, reject) => {\r\n // const store = mainStore();\r\n\r\n const url = `${\r\n credentials.space\r\n }/resources/v1/FolderManagement/Folder/${objIdBookmark}/folderTree?tenant=${credentials.tenant.toUpperCase()}`;\r\n const body = {\r\n expandList: \"\",\r\n isRoot: \"\",\r\n isPersonalFolder: false,\r\n Read: true,\r\n nresults: 200,\r\n sortOrder: \"asc\",\r\n sortMode: \"ds6w:label\",\r\n nextStart: 0,\r\n refine: \"\",\r\n };\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"content-Type\": \"application/json\",\r\n SecurityContext: `ctx::${credentials.ctx}`,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n // console.log(\"response: =>\", response.folders);\r\n const info = response;\r\n console.log(\"getListBkEnfant | réponse => \", info);\r\n\r\n resolve(info);\r\n },\r\n onFailure(error, headers, xhr) {\r\n const info = {};\r\n info[\"error\"] = error;\r\n info[\"headers\"] = headers;\r\n info[\"xhr\"] = xhr;\r\n if (onError) {\r\n onError(info);\r\n console.log(\"Coucou dans enfant\");\r\n throw new Error(\"Coucou dans enfant\", { cause: error });\r\n }\r\n },\r\n });\r\n });\r\n}\r\n\r\n// ANCHOR: _3dspace_bookmark_getChildren\r\n// TODO : A finir , manque la FN _3dspace_get_multiDocInfo()\r\nexport function _3DSpace_bookmark_getItems(credentials, objIdBookmark) {\r\n return new Promise((resolve, reject) => {\r\n // const store = mainStore();\r\n\r\n const url = `${credentials.space}/resources/v1/modeler/dsbks/dsbks:Bookmark/${objIdBookmark}?$mask=dsbks:BksMask.Items`;\r\n _httpCallAuthenticated(url, {\r\n headers: {\r\n SecurityContext: `ctx::${credentials.ctx}`,\r\n },\r\n onComplete: (response) => {\r\n let tryParse;\r\n try {\r\n tryParse = JSON.parse(response);\r\n } catch (error) {\r\n tryParse = response;\r\n }\r\n resolve(tryParse);\r\n },\r\n onFailure(response) {\r\n reject(response);\r\n },\r\n });\r\n });\r\n}\r\nexport function _3DSpace_bookmark_newWorkspace(\r\n credentials,\r\n parentId,\r\n title,\r\n description,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((result) => {\r\n const url = `${credentials.space}/resources/v1/modeler/dsbks/dsbks:Bookmark`;\r\n let item = {\r\n attributes: {\r\n title,\r\n description,\r\n inheritedAccess: \"no\",\r\n },\r\n };\r\n let bodyRequest = {\r\n items: [],\r\n };\r\n if (parentId) bodyRequest[\"parentId\"] = parentId;\r\n bodyRequest.items.push(item);\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n SecurityContext: credentials.ctx,\r\n ENO_CSRF_TOKEN: credentials.token,\r\n },\r\n data: JSON.stringify(bodyRequest),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, options);\r\n });\r\n}\r\n/**\r\n * @description `_3DSpace_bookmark_addSubsciptions`\r\n * @param {Object} credentials\r\n * @param {String} objectId\r\n * @param {String} personList \"<uuid:5ca25b8e-98d0-46c3-ac43-3faa83c4295a>\"\r\n * @param {Array} eventsList \"NXFolderCreated,NXFolderDeleted,NXContentAdded,NXContentRemoved\"\r\n * @param {Function} onDone\r\n * @param {Function} onError\r\n * @returns {Promise}\r\n */\r\nexport function _3DSpace_bookmark_addSubsciptions(\r\n credentials,\r\n objectId,\r\n personList,\r\n eventsList,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"credentials\", credentials);\r\n return new Promise((result) => {\r\n const url = `${credentials.space}/resources/v1/modeler/subscriptions/createPushSubscription?xrequestedwith=xmlhttprequest`;\r\n\r\n let options = {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n csrf: {\r\n name: \"ENO_CSRF_TOKEN\",\r\n value: credentials.token,\r\n },\r\n data: [\r\n {\r\n type: \"Workspace\",\r\n cestamp: \"businessobject\",\r\n relId: objectId,\r\n id: objectId,\r\n dataelements: {\r\n personList,\r\n eventsList,\r\n },\r\n tenant: credentials.tenant,\r\n },\r\n ],\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n });\r\n}\r\n\r\n//!SECTION\r\n\r\n// module.exports = {\r\n\r\n// _3DSpace_bookmark_getChildren,\r\n// };\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n\r\n/**\r\n * @description La fonction `getAllContextSecurity` effectue une requête HTTP GET authentifiée pour récupérer toutes\r\n * les ressources de sécurité du contexte.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier la demande.\r\n * Il inclut généralement des propriétés telles qu'ici « space » et « tenant ».(ex: credentials.space, credentials.tenant).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque la requête HTTP sera terminée avec\r\n * succès. Il prend deux paramètres: \"rep\" (la réponse JSON analysée) et \"headers\" (les en-têtes de\r\n * réponse).\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il faut trois arguments : « réponse », « en-têtes » et « xhr ».\r\n * L'argument `response` contient le corps de la réponse d'erreur, l'argument `headers` contient les en-têtes de réponse,\r\n *\r\n */\r\nexport function getAllContextSecurity(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const URL = {\r\n base: `${credentials.space}`,\r\n uri: \"/resources/bps/cspaces\",\r\n optTenant: `tenant=${credentials.tenant}`,\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}?${URL.optTenant}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json,text/javascript,*/*\",\r\n \"Content-Type\": \"application/ds-json\",\r\n },\r\n onComplete(response, headers) {\r\n const rep = JSON.parse(response);\r\n\r\n if (onDone) onDone(rep, headers);\r\n },\r\n onFailure(response, headers, xhr) {\r\n if (onError) onError({ response, headers, xhr });\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"./3dexperience_api\";\r\nimport { _3DSpace_get_ticket } from \"./3dspace_api\";\r\n/**\r\n * @description La fonction `getDataFrom3DSpace` récupère les données d'un espace 3D en utilisant les informations\r\n * d'identification fournies et les préférences du widget, et appelle le rappel `onDone` avec la\r\n * réponse ou le rappel `onError` avec toutes les erreurs rencontrées.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token » et « space ».(ex: credentials.token, credentials.space, credentials.tenant, credentials.ctx)\r\n * @property space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @property token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n *\r\n * @param widgetPreference - Le paramètre `widgetPreference` est un objet qui contient les préférences\r\n * du widget. Il peut inclure des propriétés telles que la taille, la couleur, la position du widget ou\r\n * toute autre personnalisation spécifique au widget.\r\n * @param onDone - Une fonction de rappel qui sera appelée lorsque la récupération des données sera\r\n * réussie. Il prend la réponse comme paramètre.\r\n * @param onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getDataFrom3DSpace`. Il est utilisé pour gérer et traiter\r\n * les erreurs qui surviennent.\r\n */\r\nexport function getDataFrom3DSpace(\r\n credentials,\r\n widgetPreference,\r\n onDone,\r\n onError,\r\n) {\r\n _3DSpace_get_ticket(\r\n credentials.space,\r\n widgetPreference,\r\n (response) => {\r\n _httpCallAuthenticated(response, {\r\n header: { ENO_CSRF_TOKEN: credentials.token },\r\n onComplete: (response) => {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure: (error) => {\r\n console.log(\"error http\", error);\r\n if (onError) onError(error);\r\n },\r\n });\r\n },\r\n (error) => {\r\n console.log(\"error file URL\", error);\r\n if (onError) onError(error);\r\n },\r\n );\r\n}\r\n","import { _3DSpace_get_ticket } from \"./3dspace_api\";\r\nimport { _httpCallAuthenticated } from \"./3dexperience_api\";\r\n/**\r\n * @description La fonction `getDownloadDocument` est une fonction asynchrone qui récupère un document à télécharger\r\n * à partir d'un espace et d'un ID de document spécifiés.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace, 3DSwym, 3DCompass...)\r\n * @param {String} docId - L'ID du document du fichier que vous souhaitez télécharger.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée une fois le\r\n * téléchargement terminé et réussi. Les données de réponse seront transmises comme argument. Il prend trois arguments : « reponse », « headers » et « xhr ».\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur pendant le processus de téléchargement. Il prend trois arguments : « error », « headers » et « xhr ».\r\n *\r\n * @returns un objet Promesse.\r\n */\r\nexport async function getDownloadDocument(\r\n credentials,\r\n docId,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n return new Promise((result) => {\r\n //TODO - a test ? manque l'URL\r\n _3DSpace_get_ticket(credentials, docId, (reponse) => {\r\n _httpCallAuthenticated(reponse, {\r\n onComplete: (reponse, headers, xhr) => {\r\n result(JSON.parse(reponse));\r\n if (onDone) onDone(JSON.parse(reponse), headers, xhr);\r\n return result;\r\n },\r\n onFailure: (error, headers, xhr) => {\r\n if (onError) onError(error, headers, xhr);\r\n console.log(error, headers?.errormsg);\r\n },\r\n });\r\n });\r\n });\r\n}\r\n","import { _3DSpace_get_csrf, _3DSpace_file_update } from \"./3dspace_api\";\r\n\r\n/**\r\n * @description La fonction « pushDataIn3DSpace » est utilisée pour pousser les données dans le 3DSpace à l'aide\r\n * des informations d'identification et de l'ID d'objet fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification nécessaires à\r\n * l'authentification dans une fonction interne(_3DSpace_get_downloadTicket_multidoc). Il doit avoir les propriétés suivantes: space, token, tenant\r\n * @param {String} [credentials.space] - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace :(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia) , 3DSwym, 3DCompass...)\r\n \r\n * @param {Object} dataBase - Le paramètre `dataBase` est un objet qui contient les données que vous souhaitez\r\n * transférer dans l'espace 3D. Il sera converti au format JSON et enregistré sous forme de fichier\r\n * dans l'espace 3D.\r\n * @param {String} objectId - Le paramètre objectId est l'identifiant unique de l'objet dans l'espace 3D où les\r\n * données seront poussées.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque les\r\n * données seront correctement poussées vers l'espace 3D. Il faut un argument, qui est le résultat de\r\n * l'opération.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `pushDataIn3DSpace`. Il vous permet de gérer et de\r\n * répondre à toute erreur pouvant survenir.\r\n */\r\nexport function pushDataIn3DSpace(\r\n credentials,\r\n dataBase,\r\n objectId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const jsonFile = new Blob([JSON.stringify(dataBase)], { type: \"text/plain\" });\r\n\r\n credentials = { ...credentials, objID: objectId };\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (data) => {\r\n console.log(\"_3DSpace_get_csrf | onDone | data\", data);\r\n const fileId = data.datas.relateddata.files[0].id;\r\n const fileName = data.datas.relateddata.files[0].dataelements.title;\r\n\r\n _3DSpace_file_update(\r\n credentials,\r\n objectId,\r\n fileId,\r\n jsonFile,\r\n fileName,\r\n (result) => {\r\n if (onDone) onDone(result);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n }\r\n );\r\n },\r\n (error) => {\r\n console.log(\"En cas d'erreur nous avons :\", error);\r\n alert(\"Erreur lors de la sauvegarde, Veuillez réessayez\");\r\n if (onError) onError(error);\r\n }\r\n );\r\n}\r\n","import {\r\n _3DSpace_download_doc,\r\n _3DSpace_download_multidoc,\r\n _3DSpace_get_csrf,\r\n _3DSpace_csrf,\r\n} from \"./3dspace_api\";\r\n\r\nlet listObjectId, datas;\r\n\r\nconst mixedDatas = [];\r\n\r\n/**\r\n * @description La fonction `get_3DSpace_csrf` récupère un jeton CSRF du 3DSpace en utilisant les informations d'identification fournies.(Anciennement loadDatas()) avec ou sans objID\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici' « objID », « space ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.objID - Le paramètre objID correspond à un object ID contant les objets Id des bases de données)(se base sur un tenant).\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le jeton\r\n * CSRF sera récupéré avec succès. Il faut un argument, qui est la valeur du jeton CSRF.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `get_3DSpace_csrf`. C'est un paramètre facultatif, donc\r\n * s'il n'est pas fourni, la fonction ne fera rien en cas d'erreur.\r\n */\r\nexport async function get_3DSpace_csrf(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n if (credentials.objID && credentials.objID !== \"\") {\r\n _3DSpace_get_csrf(\r\n credentials,\r\n (response) => {\r\n if (onDone) onDone(response);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n } else if (credentials.objID === null || credentials.objID === \"\") {\r\n _3DSpace_csrf(\r\n credentials,\r\n (rep) => {\r\n const msg = \"Pas d'objID, ou invalide\";\r\n const info = { rep, msg };\r\n if (onDone) onDone(info);\r\n },\r\n (err) => {\r\n const msg = \"Pas d'objID et erreur sur le Space\";\r\n const infos = { msg, err };\r\n if (onError) onError(infos);\r\n },\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `getDatasByTenant` est une fonction asynchrone qui télécharge une liste de documents à partir du 3DSpace à l'aide des informations d'identification fournies (un ObjectId) et appelle le rappel `onDone`\r\n * avec les données téléchargées ou le rappel `onError` avec une erreur le cas échéant. (anciennement getDocuments())\r\n\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token) (get_3DSpace_csrf())\r\n * @param {String} credentials.objID - object Id contenant une liste d'object IDs.\r\n * @param {Function} [onDone] - Le paramètre onDone est une fonction de rappel qui sera appelée lorsque les\r\n * données seront téléchargées avec succès. Il faut un argument, qui correspond aux données\r\n * téléchargées.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée si une erreur\r\n * survient lors de l'exécution de la fonction `_3DSpace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toute erreur pouvant survenir.\r\n */\r\nexport async function getDatasByTenant(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n console.log(\"getDatasByTenant (getDocuments)\", credentials);\r\n\r\n await _3DSpace_download_doc(\r\n credentials,\r\n (data) => {\r\n const _datas = {};\r\n _datas[\"obj\"] = data;\r\n console.log(\"getDatasByTenant (getDocuments) _datas\", _datas);\r\n onDone && onDone?.(_datas);\r\n\r\n // getDatasFrom3DSpace(\r\n // credentials,\r\n // (reponse) => {\r\n\r\n // _datas[\"datas\"] = reponse;\r\n\r\n // if (onDone) onDone(_datas);\r\n // },\r\n // (err) => {\r\n // if (onError) onError(err);\r\n // },\r\n // );\r\n },\r\n (err) => {\r\n onError && onError?.(err);\r\n },\r\n );\r\n}\r\n\r\n/**\r\n * @description La fonction `getDatasFrom3DSpace` récupère les données d'un espace 3D en utilisant les informations\r\n * d'identification fournies et appelle le rappel `onDone` avec les données récupérées ou le rappel\r\n * `onError` avec une erreur le cas échéant.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant\r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param {ArrayOfObject} credentials.objIds - Tableau d'objets des objets Id des bases de données et leur nom.(ex: credentials.objIds=[{objID:\"xxx\",name:\"xxx\"},{objID:\"xxx\",name:\"xxx\"}] ) (name disponible dans le module :\r\n * - dbClients,\r\n * - dbCatalogs,\r\n * - dbProjets )\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque toutes\r\n * les données auront été téléchargées avec succès depuis l'espace 3D. Il faut un argument, qui est un\r\n * tableau d’objets. Chaque objet du tableau représente un document téléchargé et possède deux\r\n * propriétés: le nom du document\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSpace_download_doc`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function getDatasFrom3DSpace(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const bbds = [];\r\n if (\r\n !credentials.objIds &&\r\n !Array.isArray(credentials.objIds) &&\r\n credentials.objIds.length === 0\r\n ) {\r\n console.warn(\"la liste est vide ou n'est pas un tableau\");\r\n return;\r\n }\r\n credentials.objIds.forEach((obj, i) => {\r\n _3DSpace_download_doc(\r\n credentials,\r\n obj.objID,\r\n (data) => {\r\n bbds.push({ [obj.name]: data });\r\n if (obj.name === \"dbProjets\") {\r\n listObjectId = data.affaires.map((aff) => {\r\n return aff.objectID;\r\n });\r\n dataMixing(credentials, datas);\r\n }\r\n if (i === credentials.objIds.length - 1) {\r\n if (onDone) onDone(bbds);\r\n\r\n delete credentials.objIds;\r\n delete credentials.datas;\r\n }\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `dataMixing` prend en compte les informations d'identification, les données et les\r\n * rappels facultatifs, télécharge les données à partir d'un espace 3D, les mélange avec les données\r\n * d'entrée et renvoie les données mélangées.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles qu'ici « token » et « space ».(ex: credentials.space, credentials.tenant, credentials.token...).\r\n@param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant \r\n * @example {tenant:\"R1132100968447\"}\r\n * @param {String} credentials.token - Le paramètre token est le jeton CSRF. (headers ex: ENO_CSRF_TOKEN:token)\r\n * @param _datas - Le paramètre `_datas` est un tableau d'objets ID d'Affaires\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque le\r\n * processus de mélange des données sera terminé avec succès. Il prend un argument, `mixedDatas`, qui\r\n * est un tableau contenant les données mixtes.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée en cas\r\n * d'erreur lors du processus de mélange des données. Il faut un argument, qui est l'objet d'erreur.\r\n */\r\nexport function dataMixing(\r\n credentials,\r\n _datas,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n _3DSpace_download_multidoc(\r\n credentials,\r\n listObjectId,\r\n (result) => {\r\n const copyData = [..._datas];\r\n copyData.find((e) => e.objectID === result.objectId)[\"data\"] =\r\n result.data;\r\n datas = copyData;\r\n\r\n mixedDatas.push(result.data);\r\n if (onDone) onDone(mixedDatas);\r\n },\r\n (err) => {\r\n if (onError) onError(err), console.log(err);\r\n },\r\n );\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\nimport { _3DSpace_get_docInfo } from \"../main/3dspace_api\";\r\nimport { UUID } from \"../../api/index\";\r\n\r\n// LINK - https://media.3ds.com/support/documentation/developer/Cloud/en/English/CAA3DSpaceREST/CAA6WRestServicePrinciples.htm\r\n// Doc de test sur tenant BEAM3 PROD\r\nconst objIDTEST = \"B70C12CDAE0415006579A93200061A14\";\r\n// Doc de test sur tenant Pivetau TEST\r\nconst objIDTEST2 = \"FA35FB9B177A28006580190400193C20\";\r\nconst objIDTEST3 = \"FA35FB9B177A280065800EA0000F599C\";\r\n\r\nconst sourcesSearching = [\r\n \"swym\",\r\n \"3dspace\",\r\n \"drive\",\r\n \"usersgroup\",\r\n \"3dplan\",\r\n \"dashboard\",\r\n];\r\n\r\nconst listPredicates = {\r\n how: \"ds6w:how\",\r\n what: \"ds6w:what\",\r\n when: \"ds6w:when\",\r\n where: \"ds6w:where\",\r\n who: \"ds6w:who\",\r\n why: \"ds6w:why\",\r\n};\r\nconst objToTag = {\r\n objId: objIDTEST3,\r\n pred: \"who\",\r\n order_by: \"desc\",\r\n tag: \"testTag\",\r\n};\r\n\r\n/**\r\n * @description La fonction `addTagToDoc` est utilisée pour ajouter une balise à un document dans un espace 3D en\r\n * utilisant les informations d'identification et les informations sur l'objet fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {Object} credentials.currentUser.username - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`), une chaîne de caractère contenant le nom d'utilisateur.\r\n *\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Object} obj - Le paramètre `obj` est un objet qui contient les propriétés suivantes :\r\n * @param {String} obj.info.name - L'identifiant de l'objet que vous souhaitez marquer. (ex: B70C12CDAE0415006579A93200061A14)\r\n * @param {String} obj.pred - La propriété de l'objet que vous souhaitez marquer. (ex: how, what, when, where, who, why)\r\n * @param {String} obj.tag - Le tag que vous souhaitez ajouter à l'objet.\r\n * @param {String} obj.order_by - L'ordre de la balise que vous souhaitez ajouter à l'objet. (ex: asc, desc)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de marquage sera terminée avec succès. La réponse du serveur lui sera transmise en\r\n * argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `addTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n * @example credentials={space: \"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\", currentUser: { username: \"Yan\" }, tenant: \"R1132100968447\"}\r\n * @example obj={objId: \"B70C12CDAE0415006579A93200061A14\", pred: \"what\", tag: \"testTag\"}\r\n *\r\n */\r\nexport function addTagToDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space, tenant } = credentials;\r\n const { objId, pred, tag } = obj;\r\n\r\n const URL = {\r\n uri: \"/resources/6w/tags\",\r\n otpCTX: \"SecurityContext=preferred\",\r\n optTenant: `tenant=${tenant}`,\r\n };\r\n const url = `${space}${URL.uri}?${URL.otpCTX}&${URL.optTenant}`;\r\n const dataTest = {\r\n tag: [\r\n {\r\n subject: [\r\n {\r\n uri: `pid://${objId}`,\r\n },\r\n ],\r\n predicate: listPredicates[pred],\r\n object: {\r\n literal: tag,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"PUT\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(dataTest),\r\n onComplete(response) {\r\n const resp = JSON.parse(response);\r\n const info = {};\r\n setTimeout(() => {\r\n _3DSpace_get_docInfo(\r\n credentials,\r\n objId,\r\n (rep) => {\r\n const docName = rep.data[0].dataelements.title;\r\n const docExt =\r\n rep.data[0].dataelements.fileExtension !== undefined\r\n ? rep.data[0].dataelements.fileExtension\r\n : \"\";\r\n const createBy =\r\n rep.data[0].relateddata.ownerInfo[0].dataelements.name;\r\n info[\"name\"] = docName;\r\n info[\"ext\"] = docExt;\r\n info[\"createBy\"] = createBy;\r\n obj.info = { ...info };\r\n getActualTagsOnDoc(\r\n credentials,\r\n obj,\r\n (rep) => {\r\n if (onDone) onDone(rep);\r\n },\r\n (err) => {\r\n if (onError) onError(err);\r\n },\r\n );\r\n },\r\n (response, headers) => {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n );\r\n }, 2000);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n/**\r\n * @description La fonction `getActualTagsOnDoc` récupère les balises réelles d'un document en utilisant les\r\n * informations d'identification et les informations sur l'objet fournies. Appeler depuis `addTagToDoc()`\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n * @param {Object} credentials.currentUser.username - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * @param {Object} credentials.ctx - L'ID du contexte de travail.\r\n * @param obj - Le paramètre `obj` est un objet qui contient des informations sur le document. Il\r\n * possède les propriétés suivantes :\r\n * @param {String} obj.info.name - Le nom du document.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération de marquage sera terminée avec succès. La réponse du serveur lui sera transmise en\r\n * argument.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `addTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function getActualTagsOnDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n // const nomFichier = \"beam_cube_TEST_BDD\";\r\n console.log(\"obj \", obj);\r\n const nomFichier = obj.info.name;\r\n const URL = {\r\n baseUrl: `https://${credentials.tenant.toLowerCase()}-eu1-fedsearch.3dexperience.3ds.com`,\r\n uri: \"/federated/search\",\r\n };\r\n const url = `${URL.baseUrl}${URL.uri}`;\r\n const headers = {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const uuid = UUID();\r\n const dataPattern = {\r\n with_indexing_date: true,\r\n with_synthesis: true,\r\n with_nls: false,\r\n label: `3DSearch-${credentials.currentUser.username}-AjoutDeTagBeam-${uuid}`,\r\n locale: \"fr\",\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"ds6w:type\",\r\n \"ds6w:description\",\r\n \"ds6w:identifier\",\r\n \"ds6w:modified\",\r\n \"ds6w:created\",\r\n \"ds6wg:revision\",\r\n \"ds6w:status\",\r\n \"ds6w:responsible\",\r\n \"owner\",\r\n \"ds6w:responsibleUid\",\r\n \"ds6wg:filesize\",\r\n \"ds6w:project\",\r\n \"ds6w:dataSource\",\r\n \"ds6w:community\",\r\n \"ds6w:originator\",\r\n \"dsgeo:referential\",\r\n \"ds6w:lastModifiedBy\",\r\n \"ds6w:repository\",\r\n \"dcterms:title\",\r\n \"dcterms:description\",\r\n \"ds6w:containerUid\",\r\n ],\r\n with_synthesis_hierarchical: true,\r\n select_file: [\"icon\", \"thumbnail_2d\"],\r\n query: nomFichier,\r\n specific_source_parameter: {\r\n \"3dspace\": {\r\n additional_query:\r\n ' AND NOT (owner:\"ENOVIA_CLOUD\" OR owner:\"Service Creator\" OR owner:\"Corporate\" OR owner:\"User Agent\" OR owner:\"SLMInstallerAdmin\" OR owner:\"Creator\" OR owner:\"VPLMAdminUser\") AND (ds6w_58_islastrevisionperstate:true OR NOT listoffields:ds6w_58_islastrevisionperstate)',\r\n },\r\n drive: {\r\n additional_query:\r\n ' AND NOT ([flattenedtaxonomies]:\"types/DriveNode\" AND ( [current]:\"Trashed\" OR [policy]:\"Drive File Iteration\") )',\r\n },\r\n },\r\n select_exclude_synthesis: [\"ds6w:what/ds6w:topic\"],\r\n order_by: objToTag.order_by,\r\n order_field: \"relevance\",\r\n select_snippets: [\r\n \"ds6w:snippet\",\r\n \"ds6w:label:snippet\",\r\n \"ds6w:responsible:snippet\",\r\n \"ds6w:community:snippet\",\r\n \"swym:message_text:snippet\",\r\n ],\r\n nresults: 40,\r\n start: \"0\",\r\n source: sourcesSearching,\r\n tenant: credentials.tenant,\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: credentials.ctx,\r\n },\r\n },\r\n };\r\n console.log(\"dataPattern => \", dataPattern);\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: JSON.stringify(dataPattern),\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n onDone(info);\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n console.log(\"Erreur de recuperation d'id du doc et des tags\", err);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `removeTagToDoc` est utilisée pour supprimer une balise spécifique d'un document en\r\n * utilisant les informations d'identification et les informations sur l'objet fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} credentials.tenant - L'identifiant du tenant sur lequel l'API est déployée.(ex: R1132100968447)\r\n *\r\n * @param {Object} obj - Le paramètre `obj` est un objet qui contient les propriétés suivantes :\r\n * @param {String} obj.objId - L'identifiant unique de l'objet pour lequel vous souhaitez supprimer la balise.\r\n * @param {String} obj.pred - L'identifiant de la relation entre l'objet et la balise. (ex: how, what, when, where, who, why).\r\n * @param {String} obj.tag - Le nom du tag à supprimer.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * suppression de la balise du document sera terminée avec succès. Il faut un argument, qui est la\r\n * réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `removeTagToDoc`. Il vous permet de gérer et de traiter\r\n * l'erreur de manière personnalisée.\r\n */\r\nexport function removeTagToDoc(\r\n credentials,\r\n obj,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { objId, pred, tag } = obj;\r\n\r\n const URL = {\r\n uri: \"/resources/6w/tags\",\r\n otpCTX: \"SecurityContext=preferred\",\r\n optTenant: `tenant=${credentials.tenant}`,\r\n };\r\n const url = `${credentials.space}${URL.uri}?${URL.otpCTX}&${URL.optTenant}`;\r\n const dataTest = {\r\n tag: [\r\n {\r\n subject: [\r\n {\r\n uri: `pid://${objId}`,\r\n },\r\n ],\r\n predicate: listPredicates[pred],\r\n object: {\r\n literal: tag,\r\n },\r\n },\r\n ],\r\n };\r\n _httpCallAuthenticated(url, {\r\n method: \"DELETE\",\r\n data: JSON.stringify(dataTest),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n },\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(err, headers) {\r\n const info = err;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction « getInfoDocTags » effectue un appel HTTP pour récupérer des informations sur les\r\n * documents en fonction des informations d'identification et des identifiants de document fournis.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSpace) L'URL du serveur sur lequel l'API est déployée.(ex: 3DSpace =>(https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia), 3DSwym, 3DCompass...)\r\n * @param {String} str - Le paramètre `str` est une chaîne qui représente l'ID du documents pour lesquels\r\n * vous souhaitez récupérer des informations.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête HTTP sera terminée avec succès. Il prend un argument, qui correspond aux données de réponse\r\n * de la requête.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `getInfoDocTags`. Il vous permet de gérer et de traiter\r\n * les informations d'erreur.\r\n * @returns La fonction ne renvoie explicitement rien.\r\n */\r\nexport function getInfoDocTags(\r\n credentials,\r\n str = \"\",\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n const { space } = credentials;\r\n if (str === \"\") return;\r\n\r\n const URL = {\r\n uri: \"/resources/v1/modeler/documents\",\r\n };\r\n\r\n const headers = {\r\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\r\n Accept: \"application/json,text/javascript,*/*\",\r\n };\r\n const url = `${space}${URL.uri}`;\r\n\r\n const dataTest = `$include=none,lockerInfo,ownerInfo,originatorInfo,files,ownerInfo,originatorInfo&$fields=none,title,name,typeNLS,collabSpaceTitle,revision,isLatestRevision,files,lockStatus,lockerInfo.name,lockerInfo.firstname,lockerInfo.lastname,owner,ownerInfo.name,ownerInfo.firstname,ownerInfo.lastname,stateNLS,modified,policy,state,organizationTitle,originator,originatorInfo.name,originatorInfo.firstname,originatorInfo.lastname,hasModifyAccess,fileExtension,files.name,files.title,files.revision,files.locker,ownerInfo,ownerInfo.name,ownerInfo.firstname,ownerInfo.lastname,originatorInfo,originatorInfo.name,originatorInfo.firstname,originatorInfo.lastname&$ids=${str}`;\r\n\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: dataTest,\r\n onComplete(response) {\r\n if (onDone) onDone(JSON.parse(response));\r\n },\r\n onFailure(err, header) {\r\n const info = err;\r\n info[\"msg\"] = header.error;\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n","import { _httpCallAuthenticated } from \"../main/3dexperience_api\";\r\n\r\n/**\r\n * @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.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque les\r\n * informations de version seront récupérées avec succès. Il prend un argument, `tokenInfo`, qui est la\r\n * réponse contenant les informations de version. Le token est aussi envoyé dans une nouvelle propriété : `credentials.token`\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de la requête HTTP. Il est facultatif et peut être indéfini.\r\n */\r\nexport async function _3DSwym_get_Token(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = credentials._3DSwym + \"/api/index/tk\";\r\n\r\n return _httpCallAuthenticated(url, {\r\n onComplete(response, headers, xhr) {\r\n const tokenInfo = JSON.parse(response);\r\n\r\n if (onDone) {\r\n onDone(tokenInfo);\r\n return (credentials[\"token\"] = tokenInfo?.result?.ServerToken);\r\n }\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * La fonction `_3DSwym_getAllNews` récupère toutes les actualités d'une plateforme 3DExperience en\r\n * utilisant les informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête sera terminée avec succès. Il prend deux arguments : « réponse » et « en-têtes ». L'argument\r\n * `response` contient les données de réponse du serveur et l'argument `headers` contient les en-têtes\r\n * de réponse.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getAllNews`. Il prend deux paramètres : « réponse\r\n * » et « en-têtes ». Le paramètre `response` contient les données de réponse à l'erreur et le\r\n */\r\nexport function _3DSwym_getAllNews(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // ! Attention beaucoup d'infos à trier et checker\r\n // voir aussi les possibilités des params\r\n\r\n const url = `${credentials._3DSwym}/api/exalead/whatsnew`;\r\n const data = {\r\n params: {\r\n community_id: null,\r\n hash_key: null,\r\n legacyFormat: false,\r\n nresults: 1,\r\n query: \"#all\",\r\n start: 0,\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(data),\r\n type: \"json\",\r\n onComplete(response, headers) {\r\n if (onDone) onDone(response, headers);\r\n },\r\n onFailure(response, headers) {\r\n if (onError) onError(response, headers);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * La fonction `_3DSwym_getFamiliarPeople` récupère une liste de personnes familières en fonction du\r\n * profil de l'utilisateur actuel.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * d'API réussit et que les données sont récupérées. Il faut deux arguments : `myContacts` et\r\n * `response`. `myContacts` est un tableau d'objets contenant le login et le nom complet des personnes\r\n * familières. `réponse\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getFamiliarPeople`. Il prend deux paramètres : «\r\n * réponse » et « en-têtes ». Le paramètre `response` contient la réponse d'erreur du serveur\r\n */\r\nexport function _3DSwym_getFamiliarPeople(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = `${credentials._3DSwym}/api/Recommendation/getpeoplefamiliartocurrentuser`;\r\n const _data = {\r\n params: {\r\n idsToFilterArr: [],\r\n mode: \"offline\",\r\n limit: 30,\r\n itemType: \"User\",\r\n maxNbOfCommonElements: \"5\",\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n },\r\n data: JSON.stringify(_data),\r\n type: \"json\",\r\n onComplete(response, headers) {\r\n const myContacts = response.result.hits.map((contact) => {\r\n return { login: contact.login, fullName: contact.name };\r\n });\r\n\r\n if (onDone) onDone(myContacts, response);\r\n },\r\n onFailure(response, headers) {\r\n if (onError) onError(response, headers);\r\n },\r\n });\r\n });\r\n}\r\n\r\n\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api\";\r\n\r\n/**\r\n * @description La fonction `_3dSwym_getAllCommunities` récupère une liste de communautés à partir d'une plateforme\r\n * 3D Swym en utilisant les informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 10, mais vous pouvez le changer jusqu'à 128, au delà on change de page.\r\n * @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée une fois l'opération terminée. Il prend la\r\n * liste des communautés comme paramètre.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dSwym_getAllCommunities`. Il vous permet de gérer et de\r\n * répondre à toute erreur qui se produit.\r\n */\r\nexport function _3DSwym_getAllCommunities(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = {\r\n base: credentials._3DSwym,\r\n uri: \"/api/community/listmycommunities\",\r\n limit: `/limit/${credentials.limit ? credentials.limit : 500}`,\r\n page: `/page/${credentials.page ? credentials.page : \"1\"}`,\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}${URL.limit}${URL.page}`;\r\n const communautes = [];\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n const _communitiesInfo = info.result;\r\n let count = 0;\r\n\r\n _communitiesInfo.forEach((commu) => {\r\n const _communaute = {\r\n description: commu.description,\r\n id: commu.id,\r\n title: commu.title,\r\n owner: commu.owner,\r\n role: commu.role,\r\n access: commu.access,\r\n };\r\n _3DSwym_getMembersCommunity(\r\n credentials,\r\n commu.id,\r\n (data) => {\r\n count++;\r\n _communaute[\"members\"] = data;\r\n communautes.push(_communaute);\r\n if (count === _communitiesInfo.length && onDone) {\r\n onDone(communautes);\r\n }\r\n },\r\n (err) => onError(err)\r\n );\r\n });\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getMembersCommunity` récupère une liste des membres d'une communauté en utilisant les informations d'identification et l'ID de communauté fournis.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Number} credentials.limit - Le paramètre `limit` est un nombre entier qui indique le nombre maximum de communautés à recevoir. Par défaut, il est de 50, mais vous pouvez le changer jusqu'à 128, au delà on change de page.\r\n * @param {Number} credentials.page - Le paramètre `page` est un nombre entier qui indique la page courante. Par défaut, il est à 1.\r\n * @param {String} idCommu - L'identifiant de la communauté dont vous souhaitez récupérer les membres. (ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Function} onDone - Une fonction de rappel qui sera appelée lorsque l'appel d'API réussit et renvoie les\r\n * données de réponse. Les données de réponse seront transmises en argument à cette fonction.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getMembersCommunity`. Il est utilisé pour gérer\r\n * toutes les erreurs qui se produisent et fournir une gestion des erreurs ou des messages d'erreur\r\n * appropriés à l'appelant de la fonction.\r\n */\r\nexport function _3DSwym_getMembersCommunity(\r\n credentials,\r\n idCommu,\r\n onDone,\r\n onError\r\n) {\r\n const URL = `${credentials._3DSwym}/api/community/listmembers`;\r\n\r\n const datas = {\r\n params: {\r\n page: credentials.page ? credentials.page : 1,\r\n limit: credentials.limit ? credentials.limit : 50,\r\n community_id: idCommu,\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getIdeaStatusMaturity` récupère le statut et la maturité d'une idée d'une\r\n * communauté 3DExperience à l'aide des informations d'identification fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials._3DSwym - (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...)\r\n * @param {String} credentials.commu_id - L'ID de communauté 3DExperience (ex:\"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * requête API sera terminée avec succès. Il prend un argument, « info », qui correspond aux données de\r\n * réponse de l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getIdeaStatusMaturity`. Il vous permet de gérer\r\n * et de traiter l'erreur de manière personnalisée.\r\n */\r\nexport function _3DSwym_getIdeaStatusMaturity(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const commuID = \"YXdA5x4DSUKtlAi2wmnyTA\";\r\n if (!credentials.commu_id) credentials.commu_id = commuID;\r\n const URL = `${credentials._3DSwym}/api/v2/communities/${credentials.commu_id}/ideas/statuses`;\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n// TEST\r\nconst contentMSG = {\r\n receipt: [\"c00005701637\"], // Liste des personnes à qui envoyer le message\r\n msg: \"TESTS Beam ³ DEV, Happy new year ! ヾ(⌐■_■)ノ♪\", // Message à envoyer\r\n};\r\n\r\n// CREATION DE MESSAGES DIRECT OU INSTANTANÉ\r\n\r\n/**\r\n * @description La fonction `_3DSwym_buildDirectMessage` permet d'envoyer un message direct à un ou plusieurs utilisateurs dans un espace plateforme 3DExperience.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials._3DSwym - (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...)\r\n * @param {Object} [credentials.currentUser] - Le paramètre `currentUser` est un qui contient les informations de l'utilisateur qui envoie le message(appeler depuis la fonction `_3DSwym_get_currentuser`).\r\n * @param {string} [credentials.currentUser.login] - Le paramètre `login` est l'identifiant d'envois du message\r\n * @param {string} [credentials.currentUser.first_name] - Le paramètre `first_name` est l'identifiant d'envois du message\r\n * @param {string} [credentials.currentUser.last_name] - Le paramètre `last_name` est l'identifiant d'envois du message.\r\n *\r\n * @param {Object} [datas] - Le paramètre `datas` est un objet qui contient les données du messages.\r\n * @param {String} [datas.msg] - Le paramètre `msg` est une chaîne de caractères qui contient le message à envoyer.\r\n *\r\n * @param {Array} [datas.receipt] - La liste des utilisateurs à qui envoyer le message (login). La liste des personnes accessible est générer par la fonction _3DSwym_getFamiliarPeople. (ex: [\"bem3_yan.coquoz\",\"bem_bob_Dylan\"])\r\n *\r\n * @param {Function} [onDone] - Une fonction de rappel qui sera appelée lorsque le message direct sera envoyé avec\r\n * succès. Il prend un argument, qui est un objet contenant des informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_buildDirectMessage`. Il est facultatif et peut\r\n * être indéfini.\r\n */\r\nexport function _3DSwym_buildDirectMessage(\r\n credentials,\r\n datas,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { listAllContacts, currentUser, _3DSwym } = credentials;\r\n console.log(\"__listAllContacts\", listAllContacts.hits);\r\n const _URL = `${_3DSwym}/api/directmessages`;\r\n\r\n const _data = {\r\n users: [currentUser.login].concat(datas.receipt),\r\n };\r\n\r\n const MSGData = {\r\n id_msg: \"\",\r\n senderId: credentials.currentUser.login,\r\n senderName: `${credentials.currentUser.first_name} ${credentials.currentUser.last_name}`,\r\n msg: formatedMessage(datas.msg),\r\n };\r\n let otherCommunity = false;\r\n _3DSwym_findCommunityToInstantMSG(\r\n _data.users,\r\n (rep) => {\r\n if (rep !== undefined) {\r\n MSGData[\"id_msg\"] = rep.id;\r\n otherCommunity = true;\r\n _3DSwym_sendMessageData(credentials, MSGData);\r\n }\r\n },\r\n (err) => {\r\n otherCommunity = false;\r\n console.log(\"_3dSwym_findCommunityToInstantMSG callback\", err);\r\n if (onError) onError(err);\r\n MSGData[\"id_msg\"] = \"\";\r\n }\r\n );\r\n\r\n if (otherCommunity === false) {\r\n setTimeout(() => {\r\n if (otherCommunity === false) {\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(_URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(_data),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n info[\"reponse\"] = JSON.parse(xhr.response);\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n MSGData[\"id_msg\"] = info.result.id;\r\n _3DSwym_sendMessageData(credentials, MSGData);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"status\"] = headers.status;\r\n\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n }\r\n }, 500);\r\n }\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_findCommunityToInstantMSG` est utilisée pour rechercher une communauté dans une\r\n * plateforme 3DExperience pour la messagerie instantanée en fonction des informations d'identification\r\n * et des données fournies.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param {Array} datas - Le paramètre `datas` est un tableau qui contient les données à utiliser pour trouver une communauté pour envoyer un message instantané.\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque\r\n * l'opération sera terminée avec succès. Il faut un argument, qui est le résultat de l'opération.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_findCommunityToInstantMSG`. Il est facultatif et\r\n * peut être omis s’il n’est pas nécessaire.\r\n */\r\nexport function _3DSwym_findCommunityToInstantMSG(\r\n credentials,\r\n datas,\r\n onDone,\r\n onError\r\n) {\r\n const URL = `${credentials._3DSwym}/api/directmessages/lite?with_favorites=false`;\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"GET\",\r\n headers: {\r\n Accept: \"application/json,text/javascript,*/*\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n onComplete(response) {\r\n const info = JSON.parse(response);\r\n const infoSortedByLengths = [];\r\n info.result.forEach((com) => {\r\n com.users = com.users.sort((a, b) => {\r\n return a.login.localeCompare(b.login);\r\n });\r\n if (com.users.length === datas.length) {\r\n infoSortedByLengths.push(com);\r\n }\r\n });\r\n const sortedDatas = datas.sort();\r\n\r\n const _datas = infoSortedByLengths.find((com) => {\r\n const logins = [];\r\n com.users.forEach((user) => {\r\n logins.push(user.login);\r\n });\r\n return JSON.stringify(logins) === JSON.stringify(sortedDatas);\r\n });\r\n\r\n if (onDone && _datas !== undefined) {\r\n onDone(_datas);\r\n } else if (onError || _datas === undefined) {\r\n onError(_datas);\r\n }\r\n },\r\n onFailure(response) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessageLite => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_sendMessageData` envoie un message direct avec les informations\r\n * d'identification et le contenu donnés, et appelle les rappels `onDone` ou `onError` en fonction du\r\n * succès ou de l'échec de la requête.\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @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...)\r\n * @param content - Le paramètre `content` est un objet qui contient les propriétés suivantes :\r\n * @param {String} content.id_msg - L'identifiant du message à envoyer.\r\n * @param {String} content.senderId - L'identifiant de l'utilisateur qui envoie le message.\r\n * @param {String} content.senderName - Le nom de l'utilisateur qui envoie le message.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'envoi\r\n * du message sera terminé avec succès. Il prend un argument, qui est un objet contenant des\r\n * informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_sendMessageData`. Il vous permet de gérer et de\r\n * traiter les informations d'erreur.\r\n */\r\nexport function _3DSwym_sendMessageData(\r\n credentials,\r\n content,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = {\r\n base: credentials._3DSwym,\r\n uri: \"/api/community\",\r\n id_msg: `${content.id_msg}`,\r\n endUri: \"/instantmessages\",\r\n };\r\n\r\n const url = `${URL.base}${URL.uri}/${URL.id_msg}${URL.endUri}`;\r\n\r\n const datas = {\r\n author: { login: content.senderId, displayName: content.senderName },\r\n accessState: null,\r\n commentUri: null,\r\n comments: null,\r\n endorsements: null,\r\n moderationState: null,\r\n parentCommentUri: null,\r\n richMessage: content.msg,\r\n };\r\n console.log(\"_3dSwym_sendDirectMessageData url \", url);\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n data: JSON.stringify(datas),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = xhr.status;\r\n info[\"response\"] = JSON.parse(xhr.response);\r\n console.log(\"✅ _3dSwym_sendDirectMessageData => \", info);\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"msg\"] = headers.errormsg;\r\n info[\"errCode\"] = headers.errorcode;\r\n console.log(\"❌ sendDirectMessage => \", info);\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `formatedMessage` renvoie un message formaté avec la date et l'heure actuelles.\r\n * @param {String} message - Le paramètre `message` est une chaîne qui représente le contenu du message que vous souhaitez envoyer.\r\n *\r\n * @returns un message formaté avec la date et l'heure actuelles. Le message est enveloppé dans une balise de paragraphe, suivie d'un saut de ligne et d'une règle horizontale.\r\n * En dessous, il comprend une phrase indiquant quand le message a été envoyé, y compris la date et l'heure.\r\n *\r\n */\r\nfunction formatedMessage(message) {\r\n const _dates = new Date().toLocaleDateString();\r\n const time = new Date().toLocaleTimeString();\r\n return `<p>${message} </p>\r\n <br/>\r\n <hr/>\r\n <p><u>envoyer :</u>Le <b>${_dates} à ${time}</b></p>`;\r\n}\r\n\r\nexport default {\r\n _3DSwym_getAllCommunities,\r\n _3DSwym_getMembersCommunity,\r\n _3DSwym_getIdeaStatusMaturity,\r\n _3DSwym_buildDirectMessage,\r\n _3DSwym_findCommunityToInstantMSG,\r\n _3DSwym_sendMessageData,\r\n};\r\n","import { chunkArray } from \"../../../utils/chunks\";\r\nimport { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api\";\r\n\r\n/*\r\n * @exemple dataTest\r\n */\r\nconst dataTest = {\r\n title: \"TEST DEV COMMUNITY IDEA\", // titre du post\r\n community_id: \"YXdA5x4DSUKtlAi2wmnyTA\", // STATUT PROJETS - Phase commerciale, tenant PIVETEAU TEST\r\n community_title: \"TEST DEV COMMUNITY\", // Possibilité de recherche par titre de la communauté (option)\r\n idee_id: \"THhRI8rlQNWKRxpv3Xqqug\", // id de l'idee qui est créer au post (_3dSwym_postIdea)\r\n};\r\n\r\n/**\r\n * @description La fonction `_3DSwym_postIdeaTemplate` est utilisée pour publier une idée sur une communauté 3DSwym en utilisant les informations d'identification et les données fournies.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n\r\n * @param {Array} credentials.swymCommunities tableau des communautés issue de la fonction `_3DSwym_getAllCommunities`\r\n * @param {Object} data - Le paramètre `data` est un objet qui contient les propriétés suivantes: `title`, `community_id` et `community_title` Ce dernier est optionnel.\r\n * @param {String} data.title - Le titre de l'idée.\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être publiee.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {String} data.community_title - Le titre de la communauté sur laquelle l'idée doit être publiee.(optionnel, ex: TEST DEV COMMUNITY)\r\n * @param {String} [data.text_html] - Le message HTML de l'idée (Optionnel sur les tenants Piveteau Prod et test)\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la fonction `_3DSwym_postIdeaTemplate` terminera avec succès son exécution. Il prend un argument, « info », qui contient les données de réponse de l'appel API.\r\n * @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_postIdeaTemplate`. Il s'agit d'un paramètre facultatif, donc s'il n'est pas fourni, il sera par défaut « non défini ».\r\n *\r\n */\r\nexport function _3DSwym_postIdeaTemplate(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = `${credentials.space}/api/idea/add`;\r\n\r\n const findByID = credentials.swymCommunities.find(\r\n (commu) => commu.id === data.community_id\r\n );\r\n const findByTitle = credentials.swymCommunities.find(\r\n (commu) => commu.title.toLowerCase() === data.community_title.toLowerCase()\r\n );\r\n\r\n const formatedData = {\r\n params: {\r\n title: data.title, // String, le nom de l'affaire\r\n community_id: findByID?.id !== undefined ? findByID.id : findByTitle.id, // String, l'id de la communauté\r\n message: templateAffaireMessage(data.text_html), // STRING => le contenue du message doit être au format HTML\r\n published: 1, // 1 publier, 0 non publier\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n const headers = {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n };\r\n\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: headers,\r\n data: JSON.stringify(formatedData),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n info[\"status\"] = xhr.status;\r\n info[\"response\"] = xhr.response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3dswym_postIdea` est utilisée pour publier une idée dans une communauté 3DExperience.\r\n *\r\n * @param {Object} credentials - Le paramètre `credentials` est un objet\r\n * @param {String} credentials.community_id - Le paramètre `credentials.community_id` est un String qui contient l'id de la communauté dans laquelle on souhaite publier l'idée.\r\n * @param {String} credentials.message - Le paramètre `credentials.message` est un String en format HTML.\r\n * @param {String} credentials.title - Le paramètre `credentials.title` est un String qui l'entête de l'idée.\r\n * @param {String} credentials.space - Le paramètre `credentials.space` est la racine du 3DSwym (tenant compris).\r\n * @param {Array} credentials.swymCommunities - Le paramètre `credentials.swymCommunities` est la racine du 3DSwym (tenant compris).\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'idée\r\n * sera publiée avec succès. Il prend un argument, «info», qui contient les données de réponse du\r\n * serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3dswym_postIdea`. Il vous permet de gérer toutes les\r\n * erreurs qui surviennent et d'effectuer toutes les actions nécessaires.\r\n */\r\nexport function _3DSwym_postIdea(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = { base: credentials.space, uri: \"/api/idea/add\" };\r\n\r\n if (!Array.isArray(credentials.swymCommunities)) {\r\n const message =\r\n \"☠️ swymCommunities doit être un tableau d'objets de communautés\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n\r\n const findByID = credentials.swymCommunities.findIndex(\r\n (commu) => commu.id === credentials.community_id\r\n );\r\n\r\n if (findByID === -1) {\r\n const message =\r\n \"la communauté n'existe pas dans la liste des communautés du Swym\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n if (credentials.community_id && credentials.community_id === \"\") {\r\n const message =\r\n \"☠️ community_id doit être un String qui contient l'id de la communauté dans laquelle on souhaite publier l'idée.\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n if (credentials.title && credentials.title === \"\") {\r\n const message = \"☠️ title doit être un String.\";\r\n throw new Error(`Erreur sur cette requête : ${URL.base + URL.uri}`, {\r\n cause: message,\r\n });\r\n }\r\n\r\n const body = {\r\n params: {\r\n title: credentials.title, // String, le nom de l'affaire\r\n community_id: credentials.community_id, // String, l'id de la communauté\r\n message: credentials.message, // templateAffaireMessage(), // STRING => le contenu du message doit être au format HTML\r\n published: 1, // 1 publier, 0 brouillon\r\n },\r\n };\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n if (!token) {\r\n throw new Error(\r\n `☠️ token n'est pas disponible pour cette requête : ${\r\n URL.base + URL.uri\r\n }`,\r\n {\r\n cause: token,\r\n }\r\n );\r\n }\r\n\r\n const headerOptions = {\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token?.result?.ServerToken,\r\n },\r\n method: \"POST\",\r\n data: JSON.stringify(body),\r\n onComplete(response, headers, xhr) {\r\n const info = { response };\r\n if (typeof info.response === \"string\") {\r\n info[\"response\"] = JSON.parse(info.response);\r\n }\r\n info[\"status\"] = xhr.status;\r\n\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const head = JSON.parse(headers);\r\n const rep = JSON.parse(response);\r\n const ERR = new Error(\r\n `Erreur sur cette requête : ${URL.base + URL.uri}`,\r\n {\r\n cause: { head, rep },\r\n }\r\n );\r\n if (onError) onError(ERR);\r\n },\r\n };\r\n\r\n _httpCallAuthenticated(URL.base + URL.uri, headerOptions);\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_deleteIdea` est utilisée pour supprimer une idée dans une communauté 3DExperience en utilisant les informations d'identification et les données fournies.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n \r\n * @param data - Le paramètre `data` est un objet qui contient les propriétés suivantes:\r\n * `community_id` et 'idee_id'\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être supprimée.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {String} data.idee_id - L'ID de l'idée que vous souhaitez supprimer (ex: \"THhRI8rlQNWKRxpv3Xqqug\")\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la\r\n * suppression de l'idée sera terminée avec succès. Il prend un argument, «info», qui contient des\r\n * informations sur la réponse du serveur.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_deleteIdea`. Il vous permet de gérer et de\r\n * traiter les informations d'erreur.\r\n */\r\nexport function _3DSwym_deleteIdea(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const URL = `${credentials.space}/api/idea/delete`;\r\n const formatedData = {\r\n params: {\r\n community_id: data.community_id,\r\n ideationIds: [data.idee_id],\r\n },\r\n };\r\n _3DSwym_get_Token(credentials, (token) => {\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": token?.result?.ServerToken,\r\n },\r\n data: JSON.stringify(formatedData),\r\n type: \"json\",\r\n onComplete(response, headers, xhr) {\r\n const info = response;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response, headers, xhr) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @description Cette fonction JavaScript récupère une idée SWYM à l'aide des informations d'identification et de l'ID de publication fournis.\r\n *\r\n * @param {Object} [credentials] - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il inclut généralement des propriétés telles que « token », « space », « tenant » et « ctx ».\r\n * @param {String} [credentials.space] - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n \r\n * @param {String} [credentials.idPost] - L'identifiant de la publication ou de l'idée que vous souhaitez récupérer. Si aucun identifiant n'est fourni, il s'agira par défaut de l'identifiant de l'idée de modèle. (actuellement => Piveteau prod :\"tFtz0G4MR6qNtKgJjNfTog\", Piveteau test :\"Qpv3HN-tTDOsU-7_c5DnDg\").\r\n *\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la requête API sera terminée avec succès. Il prend un argument, « info », qui contient les données de réponse de l'appel API. (info.msg : template récupérer lors de la création d'une Affaire et utiliser dans la fonction `_3DSwym_postIdeaTemplate()`).\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getOneIdea`. Il vous permet de gérer et de\r\n * traiter l'erreur de manière personnalisée.\r\n */\r\nexport function _3DSwym_getOneIdea(\r\n credentials,\r\n\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { _3DSwym, _3DSwym_token } = credentials;\r\n const URL = `${_3DSwym}/api/idea/get`;\r\n if (credentials.idPost === \"\") {\r\n const message =\r\n \"☠️ idPost est vide, vous devez renseigner un identifiant de post\";\r\n throw new Error(`Erreur sur cette requête : ${URL}`, { cause: message });\r\n }\r\n\r\n const datas = {\r\n params: {\r\n id: credentials.idPost,\r\n },\r\n };\r\n _httpCallAuthenticated(URL, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(datas),\r\n\r\n onComplete(response) {\r\n response = typeof response === \"string\" ? JSON.parse(response) : response;\r\n if (onDone) onDone({response});\r\n },\r\n onFailure(response) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * @description `_3DSwym_editIdea` edit une idée dans 3DSwym.\r\n *\r\n * @param {Object} credentials Objet contenant les informations du besoin de la requête.\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.post_id Id du post à rééditer\r\n * @param {String} credentials.title titre de l'idée\r\n * @param {String} credentials.message Message de l'idée en format HTML (texte balisé)\r\n * @param {String} credentials.status_id Id du status(visible dans les devtools au niveau de l'id du balisage, dans les paramètres de l'id du post)\r\n * @param {String} credentials.status_comment nomination du statut.\r\n * @param {Function} [onDone] [onDone description]\r\n * @param {Function} [onError] [onError description]\r\n *\r\n * @return {Void}\r\n */\r\nexport function _3DSwym_editIdea(credentials, onDone, onError) {\r\n const {\r\n _3DSwym,\r\n _3DSwym_token,\r\n idPost,\r\n title,\r\n community_id,\r\n status_comment,\r\n status_id,\r\n message,\r\n } = credentials;\r\n const URL = {\r\n base: `${_3DSwym}`,\r\n uri: \"/api/idea/edit\",\r\n };\r\n\r\n const body = {\r\n params: {\r\n out: \"false\",\r\n id: idPost,\r\n title: title,\r\n community_id: community_id,\r\n status_comment: status_comment,\r\n status_id: status_id,\r\n message: message,\r\n published: \"1\",\r\n },\r\n };\r\n const headerOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, head, xhr) {\r\n const info = {\r\n response:\r\n typeof response === \"string\" ? JSON.parse(response) : response,\r\n };\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(URL.base + URL.uri, headerOptions);\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_getAllListIdeas` récupère toutes les idées SWYM en utilisant les informations d'identification fournies et les paramètres facultatifs.\r\n *\r\n * @param {Object} credentials - Un objet contenant les informations d'identification requises pour authentifier\r\n * la demande. Il possède les propriétés suivantes :\r\n * @param {String} credentials.space - (3DSwym) L'URL du serveur sur lequel l'API est déployée.(3DSpace, 3DSwym, 3DCompass,...etc)\r\n * @example pour le 3DSpace {space:\"https://r1132100968447-eu1-space.3dexperience.3ds.com/enovia\"}\r\n * @param {String} credentials.tenant - le tenant courant.\r\n * @example {tenant:\"R1132100968447\"}.\r\n *\r\n * @param {Object} data - Le paramètre `data` est un objet qui contient des données supplémentaires pour la requête API. Il possède les propriétés suivantes :\r\n * @param {String} data.community_id - L'ID de la communauté sur laquelle l'idée doit être recherchée.(ex: \"YXdA5x4DSUKtlAi2wmnyTA\")\r\n * @param {Number} [data.limit] - (optionnelle) Le nombre d'idées à renvoyer (optionnel, par défaut 100 (100 premières idées))\r\n * @param {Number} [data.page] - (optionnelle) Le numéro de page à renvoyer (optionnel, par défaut 1 (1 page))\r\n * @param {String} [data.search] - (optionnelle) l'élément recherché dans le titre de l'idée.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque la requête API sera terminée avec succès.\r\n *\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'exécution de la fonction `_3DSwym_getAllListIdeas`. Il est facultatif et peut être\r\n * indéfini.\r\n */\r\nexport function _3DSwym_getAllListIdeas(\r\n credentials,\r\n data,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { _3DSwym } = credentials;\r\n let { community_id, limit, page, search } = data;\r\n // Pagination\r\n const allIdeas = [];\r\n const startPage = 1; //\r\n\r\n let isEndOfPages = false,\r\n maxPages = 2; // en attendant la premiere requête qui fournis la longueur total du tableau.\r\n\r\n if (!page) page = startPage;\r\n if (!limit) limit = 100;\r\n\r\n const URL = {\r\n uri: \"/api/idea/list\",\r\n comId: `/community_id/${community_id}`,\r\n limit: `/limit/${limit}`,\r\n page: `/page/${page}`,\r\n };\r\n\r\n let url = `${_3DSwym}${URL.uri}${URL.comId}${URL.limit}${URL.page}`;\r\n\r\n _3DSwym_get_Token(credentials, (token) => {\r\n const getAllIdeas = (url) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n },\r\n\r\n onComplete(response) {\r\n const info = { response: JSON.parse(response) };\r\n\r\n maxPages = Math.ceil(Number(info.response.nb_result) / 100);\r\n\r\n if (response && maxPages >= page) {\r\n page++;\r\n\r\n URL.page = `/page/${page}`;\r\n url = `${_3DSwym}${URL.uri}${URL.comId}${URL.limit}${URL.page}`;\r\n\r\n // En cas de recherche spécifique.\r\n if (!search) {\r\n allIdeas.push(info.response.result);\r\n } else {\r\n const idea = info.response.result.find((idee) =>\r\n idee.title.includes(search)\r\n );\r\n if (idea) {\r\n onDone(idea);\r\n return;\r\n }\r\n }\r\n if (onDone && maxPages < page && !search) {\r\n isEndOfPages = true;\r\n onDone(allIdeas);\r\n return;\r\n }\r\n getAllIdeas(url);\r\n }\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n };\r\n if (isEndOfPages) return;\r\n getAllIdeas(url);\r\n });\r\n}\r\n\r\nfunction templateAffaireMessage(txt) {\r\n // TEMPLATE AFFAIRES\r\n if (!txt || txt === \"\") {\r\n const message = `<h2><u>INFORMATIONS AFFAIRE :</u></h2>\r\n <p><u>|⚠️<em> Merci de respecter l'écriture des tags, en MAJUSCULES, nom complet, pas de caractères</em></u></p>\r\n <p><u><em>|spéciaux, séparation par "_" si besoin !</em></u></p>\r\n <p><strong>Référence client </strong>: <em>\r\n <a data-predicate=\"ds6w:who\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">CLIENT</a> \r\n </em></p>\r\n <p><strong>Référence projet </strong>: <em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">NOM AFFAIRE</a> \r\n <a data-predicate=\"ds6w:where\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VILLE</a> \r\n <a data-predicate=\"ds6w:where\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">DPT</a> \r\n </em></p>\r\n <p>📝 <strong>Base documentaire</strong> : LIEN projet</p>\r\n <p>📝 <strong>Fiche COCLICO</strong> : LIEN projet<em><strong></strong>\r\n </em></p>\r\n <p><br /></p>\r\n <table border=\"1\">\r\n <tbody>\r\n <tr><td><strong>Description projet </strong>:\r\n <br /><br /></td></tr>\r\n </tbody>\r\n </table>\r\n <p><br /></p>\r\n <p><br /></p>\r\n <p><strong>Produit :<em> </em></strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hexapli Usiné</a>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hexapli MP</a>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Lamwood</a>\r\n </em></p>\r\n <p><strong>Type de Bâtiment :</strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Logements</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">BUP</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">ERP</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Plateforme Logistique</a> \r\n </em></p>\r\n <p><strong>Essence :</strong> <em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">DOUGLAS</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">PIN</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">MIXTE</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">EPICEA</a> \r\n </em></p>\r\n <p><strong>Qualité : </strong><em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">NVI</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VI1F</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">VI2F</a> \r\n </em><strong></strong></p>\r\n <p><strong>Traitement : </strong><em>\r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">PARKA</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">CT2</a> \r\n </em></p>\r\n <p><strong>Type de Paroi : </strong><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Murs Intérieurs</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Murs Extérieurs</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Planchers</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Couverture</a> \r\n </em></p>\r\n <p><em>\r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Etanchéité Accessible</a> \r\n <a data-predicate=\"ds6w:what\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Etanchéité Non-Accessible</a> \r\n </em></p>\r\n <p><strong>Hauteur Dernier Plancher :</strong><em><strong> </strong> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">Hauteur <8m</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">8m< Hauteur <28m</a> \r\n <a data-predicate=\"ds6w:how\" data-type=\"internal\" class=\"s6m-tag-link s6m-link\">28m< Hauteur <50m</a> \r\n </em></p>\r\n <h2><br /></h2>\r\n <h2><u>EQUIPE PIVETEAU :</u></h2>\r\n <table border=\"1\">\r\n <tbody>\r\n <tr><td><strong>Chargé d'Affaires</strong></td><td><br /></td></tr>\r\n <tr><td><strong>Service études de prix</strong></td><td><br /></td></tr>\r\n </tbody></table>\r\n <p>\r\n </p>`;\r\n return message;\r\n } else {\r\n return txt;\r\n }\r\n}\r\n\r\nexport function _3DSwym_ForwardIdea(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const { tenant, _3DSwym, _3DSwym_token, community_id, idea_id } = credentials;\r\n if (tenant && _3DSwym && _3DSwym_token && community_id && idea_id) {\r\n const url = `${_3DSwym}/api/idea/forward`;\r\n _httpCallAuthenticated(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify({\r\n community_uri: `swym:prd:${tenant.toUpperCase()}:community:${community_id}`,\r\n content_uri: `swym:prd:${tenant.toUpperCase()}:idea:${idea_id}`,\r\n timeout: 30000,\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response, headers) {\r\n const info = response;\r\n info[\"status\"] = headers.status;\r\n info[\"response\"] = headers.errormsg;\r\n if (onError) onError(info);\r\n },\r\n });\r\n } else {\r\n if (onError)\r\n onError({\r\n status: \"error\",\r\n msg: \"Credentials incomplet !\",\r\n attend: \"tenant, _3DSwym , _3DSwym_token, community_id, idea_id\",\r\n credentials,\r\n });\r\n }\r\n}\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\nimport { _3DSwym_get_Token } from \"../3dswym_api.js\";\r\n/**\r\n * @description La fonction `_3DSwym_get_currentUser` est utilisée pour récupérer des informations sur l'utilisateur actuel dans une plateforme 3DExperience.\r\n *\r\n * @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 ».\r\n *\r\n * @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...), Attention ici le space prend bien le 3DSwym\r\n *\r\n * @param {Function} onDone - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API réussit et que les informations utilisateur sont récupérées. Il prend un argument, qui est\r\n * l'objet d'informations utilisateur.\r\n * @param {Function} onError - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel de l'API. Il prend un paramètre, qui est la réponse d'erreur de l'API.\r\n */\r\nexport function _3DSwym_get_currentUser(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n return new Promise((resolve, reject) => {\r\n // Simulate an asynchronous operation\r\n try {\r\n let CURRENT_USER = undefined;\r\n // if (_3DSwym) {\r\n // const url = credentials._3DSwym + \"/api/user/getcurrent/\";\r\n // _3DSwym_get_Token(credentials, (token) => {\r\n // _httpCallAuthenticated(url, {\r\n // method: \"GET\",\r\n // headers: {\r\n // \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken,\r\n // },\r\n // onComplete(response, headers, xhr) {\r\n // const info = JSON.parse(response);\r\n // CURRENT_USER = info.result;\r\n // }\r\n // });\r\n // });\r\n // } \r\n if(credentials._3DDashboard) {\r\n const url = credentials._3DDashboard + \"/api/users/current\";\r\n // console.log(\"_3DSwym_get_currentUser | url\", url);\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n onComplete(response, headers, xhr) {\r\n let result = response.replace(/\\\"\\[/g, \"[\").replace(/\\]\\\"/g, \"]\").replace(/\\\"{/g, \"{\").replace(/}\\\"/g, \"}\").replace(/\\\\/g, \"\");\r\n result = result.replace(/\\\"\\[/g, \"[\").replace(/\\]\\\"/g, \"]\").replace(/\\\"{/g, \"{\").replace(/}\\\"/g, \"}\").replace(/\\\\/g, \"\");\r\n // console.log(\"result\", result);\r\n let info = {};\r\n try {\r\n info = JSON.parse(result);\r\n } catch (error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => JSON.Parse()\", error);\r\n }\r\n // console.log(info);\r\n info[\"first_name\"] = info?.firstName ? info.firstName : \"\";\r\n info[\"last_name\"] = info?.lastName ? info.lastName : \"\";\r\n // console.log(\"_3DSwym_get_currentUser | info\", info);\r\n CURRENT_USER = info;\r\n resolve(info);\r\n },\r\n onFailure(error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => _3DDashboard + /api/users/current\", error);\r\n },\r\n });\r\n }\r\n if (CURRENT_USER) {\r\n resolve(CURRENT_USER);\r\n } else {\r\n reject(\"ERROR | _3DSwym_get_currentUser => CURRENT_USER is null\");\r\n }\r\n } catch (error) {\r\n reject(\"ERROR | _3DSwym_get_currentUser => \", error);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * @description La fonction `_3DSwym_get_findUser` est utilisée pour rechercher un utilisateur par son identifiant\r\n * dans un espace 3DSwym en utilisant les informations d'identification fournies.\r\n * @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 ».\r\n *\r\n * @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...)\r\n * @param {String} userLogin - Le paramètre userLogin est le nom de login de l'utilisateur que vous souhaitez\r\n * retrouver dans la plateforme 3DSwym.\r\n * @param {Function} [onDone] - Le paramètre `onDone` est une fonction de rappel qui sera appelée lorsque l'appel\r\n * API sera terminé avec succès. Il prend un argument, « info », qui correspond aux données de réponse\r\n * renvoyées par l'API.\r\n * @param {Function} [onError] - Le paramètre `onError` est une fonction de rappel qui sera appelée s'il y a une\r\n * erreur lors de l'appel de l'API. Il prend un paramètre, qui est la réponse d'erreur de l'API.\r\n */\r\nexport function _3DSwym_get_findUser(\r\n credentials,\r\n userLogin,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const url = credentials.space + \"/api/user/find/login/\" + userLogin;\r\n _3DSwym_get_Token(\r\n credentials,\r\n (token) => {\r\n _httpCallAuthenticated(url, {\r\n method: \"GET\",\r\n headers: { \"X-DS-SWYM-CSRFTOKEN\": token.result.ServerToken },\r\n onComplete(response, headers, xhr) {\r\n const info = JSON.parse(response);\r\n\r\n if (onDone) onDone(info);\r\n },\r\n\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n },\r\n onError\r\n );\r\n}\r\n\r\nexport default {\r\n _3DSwym_get_currentUser,\r\n _3DSwym_get_findUser,\r\n};\r\n","import { _httpCallAuthenticated } from \"../../main/3dexperience_api\";\r\n\r\nexport function _3DSwym_addComment(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n const {\r\n _3DSwym,\r\n _3DSwym_token,\r\n subjectUri,\r\n richMessage\r\n } = credentials;\r\n const url = `${_3DSwym}/commentproxy/subjects/${subjectUri}/comments`;\r\n const body = { richMessage };\r\n const headerOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-type\": \"application/json;charset=UTF-8\",\r\n Accept: \"application/json\",\r\n \"X-DS-SWYM-CSRFTOKEN\": _3DSwym_token,\r\n },\r\n data: JSON.stringify(body),\r\n type: \"json\",\r\n onComplete(response, head, xhr) {\r\n const info = {\r\n response:\r\n typeof response === \"string\" ? JSON.parse(response) : response,\r\n };\r\n info[\"status\"] = xhr.status;\r\n if (onDone) onDone(info);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n };\r\n _httpCallAuthenticated(url, headerOptions);\r\n}\r\n","import {\r\n _httpCallAuthenticated,\r\n _getServiceUrl_3DPassport,\r\n _getServiceUrl,\r\n} from \"./3dexperience_api\";\r\n\r\nexport function _getServiceUrl_Iterop(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n _getServiceUrl(credentials, (serviceUrls) => {\r\n // console.log(\"serviceUrls\", serviceUrls);\r\n const urlAPIV2Iterop =\r\n serviceUrls.services.find((service) => service.id === \"businessprocess\")\r\n ?.url + \"/api/v2\";\r\n if (onDone) onDone(urlAPIV2Iterop);\r\n return urlAPIV2Iterop;\r\n });\r\n }\r\n}\r\n\r\nexport function _Iterop_Auth_CAS(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // console.log(\"_Iterop_Auth_CAS\");\r\n if (credentials.tenant) {\r\n _getServiceUrl(credentials, (serviceUrls) => {\r\n // console.log(\"serviceUrls\", serviceUrls);\r\n const urlService3DPassport = serviceUrls.services.find(\r\n (service) => service.id === \"3dpassport\"\r\n )?.url;\r\n const urlAPIV2Iterop =\r\n serviceUrls.services.find((service) => service.id === \"businessprocess\")\r\n ?.url + \"/api/v2\";\r\n const urlService = `${urlService3DPassport}/login/?cors=false&service=${urlAPIV2Iterop}/auth/cas`;\r\n\r\n _httpCallAuthenticated(urlService, {\r\n async onComplete(response) {\r\n // console.log(\"response\", response);\r\n const x3ds_service_redirect_url =\r\n typeof response === \"string\"\r\n ? JSON.parse(response)?.x3ds_service_redirect_url\r\n : response?.x3ds_service_redirect_url;\r\n await fetch(x3ds_service_redirect_url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then(async (data) => {\r\n if (onDone) onDone(data?.token);\r\n });\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n });\r\n } else {\r\n if (onError) onError(\"No tenant\");\r\n }\r\n}\r\n/**\r\n * @description _Iterop_jwtUser appel sur l'api et demande un Token lié à l'utilisateur et au tenant.\r\n *\r\n * @return {Function} callback retournant la réponse de l'api\r\n */\r\nexport function _Iterop_jwtUser(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const lowerTenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(`https://api.uixhome.fr/${lowerTenant}/iterop/jwtuser`, {\r\n method: \"POST\"\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves all business tables.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - Tenant credentials.\r\n * @param {String} token - token iterop.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_getAllBusinessTables(\r\n credentials,\r\n token,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/repository/data/tables?t=${token}`,\r\n {\r\n method: \"GET\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves data for a specific Business Table.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the Business Table to retrieve data from.\r\n * @param {Function} [onDone] - Callback function to execute upon successful data retrieval.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during retrieval.\r\n */\r\nexport function _Iterop_getOneBusinessTable(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/one/${tableId}?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n/**\r\n * Retrieves rows from a specific Business Table based on the table ID.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the Business Table to retrieve rows from.\r\n * @param {Function} [onDone] - Callback function to execute upon successful retrieval.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during retrieval.\r\n */\r\nexport async function _Iterop_getOneBusinessTableRows(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/rows/${tableId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Access-Control-Allow-Origin\":\"*\"\r\n }\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description `_Iterop_AddOrRemoveRows` Met a jour les lignes d'une table Business.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - credentials.tenant @exemple \"r1132480937497\"\r\n * @param {String} token - token iterop.\r\n * @param {String} tableId - ID of the Business Table.\r\n * @param {String} body - JSON string of the rows to add or remove, e.g. {\"rowsToAdd\": [{\"uuid\": \"...\"}, ...], \"rowsToRemove\": [\"...\", ...]}.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_AddOrRemoveRows(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/businesstable/patch/rows/${tableId}/?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => {\r\n //console.log(\"_Iterop_AddOrRemoveRows\", response);\r\n return response.json();\r\n })\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error, tableId, body);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description _Iterop_businessTableSearchInRows rows in a Business Table.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - credentials.tenant @exemple \"r1132480937497\"\r\n * @param {String} token - token iterop.\r\n * @param {String} tableId - ID of the Business Table.\r\n * @param {String} columnsName - List of columns to search on, separated by '+'.\r\n * @param {String} body - JSON string of the filters to apply.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n\r\n */\r\nexport async function _Iterop_businessTableSearchInRows(\r\n credentials,\r\n token,\r\n tableId,\r\n columnsName,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n // Exemple : columns = uuid+name\r\n // Exemple : body(String) = {\"filters\": [{\"uuid\": \"e56fd041-a9c0-4f1c-91ff-643a826a84d9\",\"isactive\": true}]}\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/search/rows/${tableId}?t=${token}&c=${encodeURIComponent(\r\n columnsName\r\n )}&b=${encodeURIComponent(body)}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n result[\"url\"] = url;\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n tableId,\r\n columns: columnsName,\r\n body,\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description Updates a business table with the provided data.\r\n *\r\n * @param {Object} credentials - Credentials for authentication.\r\n * @param {String} token - CSRF token for authentication.\r\n * @param {String} tableId - ID of the table to update.\r\n * @param {String} body - Data to update the table with.\r\n * @param {Function} [onDone] - Callback function to execute upon successful update.\r\n * @param {Function} [onError] - Callback function to execute if an error occurs during the update.\r\n */\r\nexport async function _Iterop_updateBusinessTable(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/post/update/${tableId}?t=${token}&b=${encodeURIComponent(\r\n body\r\n )}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n //console.log(\"_Iterop_updateBusinessTable | _Iterop_businessTableSearchInRows | fetch | onDone\", body);\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n url,\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_createBusinessTable(\r\n credentials,\r\n token,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const url = `https://api.uixhome.fr/${credentials.tenant.toLowerCase()}/iterop/businesstable/post/create/?t=${token}&b=${encodeURIComponent(\r\n body\r\n )}`;\r\n fetch(url, {\r\n method: \"POST\",\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n //console.log(\"_Iterop_updateBusinessTable | _Iterop_businessTableSearchInRows | fetch | onDone\", body);\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError)\r\n onError({\r\n error,\r\n url,\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * @description Fonction asynchrone, `_Iterop_runProcess` permet de lancer un processus ITEROP\r\n * @param {Object} credentials Informations d'identification du tenant.\r\n * @param {String} credentials.tenant Le tenant.\r\n * @param {String} token Le jeton CSRF.\r\n * @param {String} processKey - le nom du processus ITEROP.\r\n * @param {String} body - le body de la requête, doit être au format String et encodé. @exemple encodeURIComponent(JSON.stringify(body)).\r\n * @return {Function} Callback contenant le message de retour de l'api\r\n */\r\nexport async function _Iterop_runProcess(\r\n credentials,\r\n token,\r\n processKey,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/runtime/processes/${processKey}?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n console.log(\"_Iterop_runProcess : OK\");\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n//SECTION - Table de dépendances\r\n/**\r\n * Récupère toutes les tables de dépendances.\r\n *\r\n * @param {Object} credentials - credentials.\r\n * @param {String} credentials.tenant - Tenant credentials.\r\n * @param {String} token - token iterop.\r\n * @param {Function} [onDone] - Callback function for successful response.\r\n * @param {Function} [onError] - Callback function for error response.\r\n * @return {Promise} Resolves with the result of the API call.\r\n */\r\nexport async function _Iterop_GetAllDependencyTable(\r\n credentials,\r\n token,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/all/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_GetOneDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n console.log(\"_Iterop_GetOneDependencyTable | Run\");\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/one/${tableId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * (cli) => Create List Items\r\n */\r\nexport async function _Iterop_PatchDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n cli,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/patch/${tableId}/?t=${token}&cli=${cli}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n\r\nexport async function _Iterop_PutDependencyTable(\r\n credentials,\r\n token,\r\n tableId,\r\n body,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/dependencytable/put/${tableId}/?t=${token}&b=${body}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n//!SECTION\r\n\r\n//SECTION - LISTS\r\n\r\nexport async function _Iterop_GetOneList(\r\n credentials,\r\n token,\r\n listId,\r\n onDone = undefined,\r\n onError = undefined\r\n) {\r\n if (credentials.tenant) {\r\n const tenant = credentials.tenant.toLowerCase();\r\n fetch(\r\n `https://api.uixhome.fr/${tenant}/iterop/list/one/${listId}/?t=${token}`,\r\n {\r\n method: \"POST\",\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n if (onDone) onDone(result);\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n }\r\n}\r\n//!SECTION\r\n","/**\r\n * @description Fonction Test permettant de tester l'installation de la librairie\r\n *\r\n * @param {String} _name une simple chaine\r\n *\r\n * @return {String}\r\n */\r\nexport function sayHello(_name) {\r\n const name = \"Hello \" + _name;\r\n console.log(name);\r\n return name;\r\n}\r\n","import {\r\n _httpCallAuthenticated,\r\n _getPlatformServices,\r\n _getPlateformInfos\r\n} from \"../main/3dexperience_api\";\r\nimport {\r\n _3DSpace_csrf,\r\n _3DSpace_get_securityContexts\r\n} from \"../main/3dspace_api\"\r\nimport {\r\n DateTime\r\n} from \"luxon\";\r\n\r\nexport function _3DSearch_usersGroup(\r\n credentials,\r\n onDone = undefined,\r\n onError = undefined,\r\n) {\r\n console.log(\"credentials\", credentials);\r\n return new Promise((result) => {\r\n if (credentials.token === \"\") {\r\n _3DSpace_csrf(credentials);\r\n }\r\n if (!credentials.space || credentials.space === \"\") {\r\n const platformeInfo = _getPlateformInfos();\r\n console.log(\"platformeInfo\", platformeInfo);\r\n }\r\n _3DSpace_get_securityContexts(\r\n credentials,\r\n \"Common space\",\r\n [\"VPLMProjectLeader\", \"VPLMCreator\"],\r\n undefined,\r\n (ctx) => (credentials[\"ctx\"] = ctx),\r\n (err) => {\r\n console.log(\"onError =>\", err);\r\n },\r\n true\r\n );\r\n const ts = DateTime.now().ts;\r\n\r\n const urlService = `https://${credentials.tenant}-eu1-registry.3dexperience.3ds.com/api/v1/platform/service/instance?serviceId=3dsearch&platformId=${credentials.tenant}`\r\n _httpCallAuthenticated(urlService, {\r\n onComplete(response) {\r\n if (Array.isArray(JSON.parse(response))) {\r\n const oResponse = JSON.parse(response);\r\n console.log(\"serviceId=3dsearch\", oResponse);\r\n const urlFedSearch = `${oResponse[0].services[0].url}/search?xrequestedwith=xmlhttprequest`\r\n\r\n _httpCallAuthenticated(urlFedSearch, {\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n data: JSON.stringify({\r\n with_indexing_date: true,\r\n with_nls: false,\r\n label: `3DSearch-${ts}`,\r\n locale: \"en\",\r\n select_predicate: [\r\n \"ds6w:label\",\r\n \"ds6w:type\",\r\n \"ds6w:description\",\r\n \"ds6w:identifier\",\r\n \"ds6w:responsible\",\r\n \"ds6wg:fullname\"\r\n ],\r\n select_file: [\r\n \"icon\",\r\n \"thumbnail_2d\"\r\n ],\r\n query: \"([ds6w:type]:(Group) AND [ds6w:status]:(Public)) OR (flattenedtaxonomies:\\\"types/Person\\\" AND current:\\\"active\\\")\",\r\n order_by: \"desc\",\r\n order_field: \"relevance\",\r\n nresults: 1000,\r\n start: \"0\",\r\n source: [\r\n \"3dspace\",\r\n \"usersgroup\"\r\n ],\r\n tenant: credentials.tenant,\r\n login: {\r\n \"3dspace\": {\r\n SecurityContext: `ctx::${credentials.ctx}`\r\n }\r\n }\r\n }),\r\n type: \"json\",\r\n onComplete(response) {\r\n if (onDone) onDone(response);\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n });\r\n\r\n }\r\n },\r\n onFailure(response) {\r\n if (onError) onError(response);\r\n },\r\n })\r\n });\r\n}"],"names":["UUID","uuid","couleurs","getCommunes","cp","onDone","onError","codePostal","response","json","error","findAdresse","query","getDataFromGouvFr","events","colors","year","DateTime","loadedEvents","sortedData","formatData","date","i","data","each","event","chunkArray","obj","getResponse","getError","credentials","myArray","chunk","fn_to_call","chunks","arrayChunks","loopingChunk","rep","err","initLoop","fn","loop","updateEvent","add","index","val","a","b","_httpCallAuthenticated","url","options","requirejs","WAFData","_setDraggable","elem","strData","onDrag","DataDragAndDrop","_setupTagger","tags","onTaggerFilter","TagNavigatorProxy","taggerProxy","widget","_setDroppable","drop","_getPlatformServices","platformId","onComplete","onFailure","i3DXCompassServices","_getPlateformInfos","retourAPI","plAPI","tenant","user","appsConfiguration","appConf","_getMe","urlService","oResponse","_getServiceUrl","listServiceUrl","platform","_getServiceUrl_3DPassport","urlServicePassport","_Registry_getServicesUrl","compass_getListAdditionalApps","URL","headers","xhr","info","formatedInfos","app","name","id","_AppMngt_get_users","_AppMngt_get_info_user","topHeader","createUserGroups","datas","space","currentUser","templateData","getComplementUG","uri","baseURL","URI","OPTs","getUsersGroupRules","_usersgroup","OPTS","OPTsH","getUserGroupsList","numMax","opt","opt2","opts","repUG","reponse","UG","element","iamOwner","iamMember","iam","rules","infoError","getUserGroupsByURIList","list_uris","URLElements","h","getUserGroupsByEmailList","list_emails","parseResp","deleteUserGroups","patchUserGroups","dataMembers","dataMembersSTR","patchUserGroupsControl","_datas","readUserGroupControl","_rep","getCSRFToken","hasOwnProperty","prop","decode","qs","sep","eq","regexp","maxKeys","len","x","idx","kstr","vstr","k","v","stringifyPrimitive","encode","ks","querystring","require$$0","require$$1","_3DSpace_get_docInfo","docid","_3DSpace","_3DSpace_get_multiDocInfo","docids","_3DSpace_get_csrf","_3DSpace_csrf","_3DSpace_get_ticket","token","file_url","head","_3DSpace_file_url_csr","csr","_3DSpace_file_update","docId","fileId","filename","runFunction","_3DSpace_file_update_csr","result","csrf","formData","blobData","_3DSpace_put_docInfo","description","title","_3DSpace_Upload_File","fileName","blobFile","onProgress","cs_name","timeStamp","csrftoken","isadmin","ticket","actionurl","jobticket","pushFileInFcs","receipt","urlRelatedFile","ext","bodyRequest","progress","_3DSpace_Update_Doc","objectId","_3DSpace_Create_Doc","descriptionDoc","checkinTicket","resultCheckinTicket","fcs__jobTicket","relatedDocAndFile","fileData","percentComplete","trimExt","tempId","_3DSpace_get_securityContexts","cs","role","organization","withPreferredCredentials","contexts","context","finalCs","finalOrg","finalRole","oCS","e","couples","value","self","t","r","defineSingleItem","couple","_3DSpace_download_doc","resolve","reject","ticketURL","blob","tryParse","_3DSpace_download_multidoc","objectIds","_3DSpace_get_downloadTicket_multidoc","onNext","compilData","fileUrl","_3DSpace_lifecycle_getNextStates","_3DSpace_lifecycle_changeState","nextState","_3DSpace_lifecycle_getGraph","ctx","_3DSpace_lifecycle_getNextRevision","_3DSpace_lifecycle_changeRevision","nextRevision","_3DSpace_get_currentSecurityContext","_3DSpace_lifecycle_getRevisions","SecurityContext","_3DSpace_getBookmarksRoot","_fedSearch","currentTenant","formatedDatas","bksRoots","bks","attr","_3DSpace_bookmark_getSubSignets","objIdBookmark","body","_3DSpace_bookmark_getItems","_3DSpace_bookmark_newWorkspace","parentId","item","_3DSpace_bookmark_addSubsciptions","personList","eventsList","getAllContextSecurity","getDataFrom3DSpace","widgetPreference","getDownloadDocument","pushDataIn3DSpace","dataBase","jsonFile","listObjectId","mixedDatas","get_3DSpace_csrf","getDatasByTenant","getDatasFrom3DSpace","bbds","aff","dataMixing","copyData","objIDTEST3","sourcesSearching","listPredicates","objToTag","addTagToDoc","objId","pred","tag","dataTest","docName","docExt","createBy","getActualTagsOnDoc","nomFichier","dataPattern","removeTagToDoc","getInfoDocTags","str","header","_3DSwym_get_Token","tokenInfo","_3DSwym_getAllNews","_3DSwym_getFamiliarPeople","_data","myContacts","contact","_3DSwym_getAllCommunities","communautes","_communitiesInfo","count","commu","_communaute","_3DSwym_getMembersCommunity","idCommu","_3DSwym_getIdeaStatusMaturity","commuID","_3DSwym_buildDirectMessage","listAllContacts","_3DSwym","_URL","MSGData","formatedMessage","otherCommunity","_3DSwym_findCommunityToInstantMSG","_3DSwym_sendMessageData","infoSortedByLengths","com","sortedDatas","logins","content","message","_dates","time","_3DSwym_postIdeaTemplate","findByID","findByTitle","formatedData","templateAffaireMessage","_3DSwym_postIdea","headerOptions","ERR","_3DSwym_deleteIdea","_3DSwym_getOneIdea","_3DSwym_token","_3DSwym_editIdea","idPost","community_id","status_comment","status_id","_3DSwym_getAllListIdeas","limit","page","search","allIdeas","startPage","isEndOfPages","maxPages","getAllIdeas","idea","idee","txt","_3DSwym_ForwardIdea","idea_id","_3DSwym_get_currentUser","CURRENT_USER","_3DSwym_get_findUser","userLogin","_3DSwym_addComment","subjectUri","richMessage","_getServiceUrl_Iterop","serviceUrls","urlAPIV2Iterop","service","_Iterop_Auth_CAS","urlService3DPassport","x3ds_service_redirect_url","_Iterop_jwtUser","lowerTenant","_Iterop_getAllBusinessTables","_Iterop_getOneBusinessTable","tableId","_Iterop_getOneBusinessTableRows","_Iterop_AddOrRemoveRows","_Iterop_businessTableSearchInRows","columnsName","_Iterop_updateBusinessTable","_Iterop_createBusinessTable","_Iterop_runProcess","processKey","_Iterop_GetOneDependencyTable","_Iterop_PatchDependencyTable","cli","_Iterop_PutDependencyTable","_Iterop_GetOneList","listId","sayHello","_name","_3DSearch_usersGroup","platformeInfo","ts","urlFedSearch"],"mappings":"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","x_google_ignoreList":[10,11,12]}
|