{"version":3,"sources":["jsdelivr-header.js","/npm/yrexpert-js@0.0.189/lib/yrexpert-js.js"],"names":[],"mappings":"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","file":"/npm/yrexpert-js@0.0.189/lib/yrexpert-js.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/yrexpert-js@0.0.189/lib/yrexpert-js.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\r\n\r\n!----------------------------------------------------------------------------!\r\n!                                                                            !\r\n! YRexpert : (Your Yrelay) Système Expert sous Mumps GT.M et GNU/Linux       !\r\n! Copyright (C) 2001-2015 by Hamid LOUAKED (HL).                             !\r\n!                                                                            !\r\n!----------------------------------------------------------------------------!\r\n\r\n*/\r\n\r\nvar build = require('./build');\r\nvar sessions = require('ewd-session');\r\nvar beatryxRobot = require('./beatryxRobot');\r\nvar runRPC = require('yrexpert-rpc/lib/proto/runRPC');\r\nvar fs = require('fs');\r\nvar os = require('os');\r\n\r\n/**\r\n * Module yrexpert-js.\r\n * @module lib/yrexpert-js\r\n */\r\n\r\n/** Fonction yrexpert-js. */\r\nmodule.exports = {\r\n\r\n  /** Initialisation. */\r\n  init: function() {\r\n    var types = [\r\n      'qoper8-stats',\r\n      'qoper8-getStats',\r\n      'getMasterProcessDetails',\r\n      'getWorkerDetails',\r\n      'getPoolSize'\r\n    ];\r\n    if (this.dontLog) this.dontLog(types);\r\n  },\r\n\r\n  /** Services autorisés. */\r\n  servicesAllowed: {\r\n    'ewd-react-tools': true\r\n  },\r\n\r\n  /** Gestionnaire d'évènemments. */\r\n  handlers: {\r\n\r\n    /**\r\n     * Exécuter le RPC [RPCUSR ETABLIR CONNEXION].\r\n     * @constructor\r\n     * @param {object} messageObj - Message : [ac, vc].\r\n     * @param {number} session - Session.\r\n     * @param {string} send - Send.\r\n     * @param {object} finished - Message de retour de la fonction.\r\n     */\r\n    loginRpc: function(messageObj, session, send, finished) {\r\n\r\n      if (session.authenticated) {\r\n        finished({error: 'Vous êtes déjà connectés à yrexpert-js'});\r\n        return;\r\n      }\r\n\r\n      var accessCode = messageObj.params.ac;\r\n      var verifyCode = messageObj.params.vc;\r\n      //console.log(\"-----messageObj.params.ac: \" + JSON.stringify(messageObj.params.ac));\r\n      //console.log(\"-----messageObj.params.vc: \" + JSON.stringify(messageObj.params.vc));\r\n\r\n      if (accessCode === '') {\r\n        finished({error: \"Vous devez entrer un code d'accès\"});\r\n        return;\r\n      }\r\n      if (verifyCode === '') {\r\n        finished({error: 'Vous devez saisir un code de validation'});\r\n        return;\r\n      }\r\n\r\n      if (!this.db.symbolTable) this.db.symbolTable = sessions.symbolTable(this.db);\r\n\r\n      var params = {\r\n        rpcName: 'RPCUSR ETABLIR CONNEXION'\r\n      };\r\n\r\n      // N'enregistrez pas encore la table des symboles!\r\n      var response = runRPC.call(this, params, session, false);\r\n      //console.log(\"-----response: \" + JSON.stringify(response));\r\n  \r\n      params = {\r\n        rpcName: 'RPCUSR VERIFIER CODE',\r\n        rpcArgs: [{\r\n          type: 'LITERAL',\r\n          value: accessCode + ';' + verifyCode\r\n        }]\r\n      };\r\n\r\n      var response = runRPC.call(this, params, session, false);\r\n      console.log('login response: ' + JSON.stringify(response));\r\n      var values = response.value;\r\n      var duz = values[0];\r\n      var err = values[3];\r\n      //console.log(\"-----err: \" + JSON.stringify(err));\r\n      if (duz.toString() === '0' && err !== '') {\r\n        finished({error: err});\r\n      }\r\n      else {\r\n        // Connecté avec succès\r\n        // Enregistrer la table des symboles à la session ...\r\n        ok = this.db.symbolTable.save(session);\r\n\r\n        // Nettoyer le processus de back-end Cache / GT.M:\r\n        ok = this.db.symbolTable.clear();\r\n\r\n        // ** important ! Signaler l'utilisateur comme authentifié pour empêcher l'accès non autorisé aux RPC par un utilisateur avant de se connecter\r\n        session.authenticated = true;\r\n\r\n        // Réponse de retour\r\n        var greeting = values[7];\r\n        var pieces = greeting.split(' ');\r\n        pieces = pieces.splice(2, pieces.length);\r\n        var displayName = pieces.join(' ');\r\n\r\n        var results = {\r\n          displayName: displayName,\r\n          greeting: greeting,\r\n          lastSignon: values[8],\r\n          messages: values.splice(8, values.length)\r\n        };\r\n        // Notez que nous ne renvoyons pas le DUZ!\r\n        //finished(results);\r\n        session.timeout = 20 * 60;\r\n        session.authenticated = true;\r\n        finished({ok: true});    \r\n      }\r\n    },\r\n\r\n    getToken: function(messageObj, session, send, finished) {\r\n      //console.log(\"-----getToken: \" + JSON.stringify(messageObj));\r\n      finished(messageObj);    \r\n    },\r\n\r\n    /**\r\n     * Exécuter le RPC [RPCBDD EXECUTER COMMANDE SET].\r\n     * @constructor\r\n     * @param {object} messageObj - Message : [qui, rep, ind, att, val, ice].\r\n     * @param {number} session - Session.\r\n     * @param {string} send - Send.\r\n     * @param {object} finished - Message de retour de la fonction.\r\n     */\r\n    setRPCBDDC: function(messageObj, session, send, finished) {\r\n\r\n      var partition = messageObj.params.qui;\r\n      var repertoire = messageObj.params.rep;\r\n      var individu = messageObj.params.ind;\r\n      var attribut = messageObj.params.att;\r\n      var valeur = messageObj.params.val;\r\n      var indice = messageObj.params.ice;\r\n      //console.log(\"-----messageObj.params.qui: \" + JSON.stringify(messageObj.params.qui));\r\n      //console.log(\"-----messageObj.params.rep: \" + JSON.stringify(messageObj.params.rep));\r\n\r\n      if (partition === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'une base de données (partition utilisateur)\"});\r\n        return;\r\n      }\r\n      if (repertoire === '') {\r\n        finished({error: \"Vous devez indiquer le non d'un répertoire (repertoire)\"});\r\n        return;\r\n      }\r\n      if (individu === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'un individu (individu)\"});\r\n        return;\r\n      }\r\n      if (attribut === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'un attribut (attribut)\"});\r\n        return;\r\n      }\r\n      if (valeur === '') {\r\n        finished({error: \"Vous devez indiquer une valeur pour l'attribut (valeur)\"});\r\n        return;\r\n      }\r\n      if (indice === '') {\r\n        finished({error: \"Vous devez indiquer un indice pour l'attribut (indice)\"});\r\n        return;\r\n      }\r\n\r\n      if (!this.db.symbolTable) this.db.symbolTable = sessions.symbolTable(this.db);\r\n\r\n      params = {\r\n        rpcName: 'RPCBDD EXECUTER COMMANDE SET',\r\n        rpcArgs: [\r\n          {type: 'LITERAL', value: partition}, \r\n          {type: 'LITERAL', value: repertoire}, \r\n          {type: 'LITERAL', value: individu}, \r\n          {type: 'LITERAL', value: attribut}, \r\n          {type: 'LITERAL', value: valeur}, \r\n          {type: 'LITERAL', value: indice} \r\n        ],\r\n      };\r\n\r\n      var response = runRPC.call(this, params, session, false);\r\n      var value = response.value;\r\n      //console.log(\"-----value: \" + JSON.stringify(value));\r\n      if (value !== 1) {\r\n        finished({error: value});\r\n      }\r\n      else {\r\n        // Attribut mofifié avec succès\r\n        // Enregistrer la table des symboles à la session ...\r\n        ok = this.db.symbolTable.save(session);\r\n\r\n        // Nettoyer le processus de back-end Cache / GT.M:\r\n        ok = this.db.symbolTable.clear();\r\n\r\n        // Réponse de retour\r\n        var message = value;\r\n\r\n        var results = {\r\n          message: message\r\n        };\r\n        finished({ok: true});    \r\n      }\r\n    },\r\n\r\n    /**\r\n     * Exécuter le RPC [RPCBDD EXECUTER COMMANDE READ].\r\n     * @constructor\r\n     * @param {object} messageObj - Message : [qui, rep, ind, att, ice].\r\n     * @param {number} session - Session.\r\n     * @param {string} send - Send.\r\n     * @param {object} finished - Message de retour de la fonction.\r\n     */\r\n    readRPCBDDC: function(messageObj, session, send, finished) {\r\n\r\n      var partition = messageObj.params.qui;\r\n      var repertoire = messageObj.params.rep;\r\n      var individu = messageObj.params.ind;\r\n      var attribut = messageObj.params.att;\r\n      var indice = messageObj.params.ice;\r\n      //console.log(\"-----messageObj.params.qui: \" + JSON.stringify(messageObj.params.qui));\r\n      //console.log(\"-----messageObj.params.rep: \" + JSON.stringify(messageObj.params.rep));\r\n\r\n      if (partition === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'une base de données (partition utilisateur)\"});\r\n        return;\r\n      }\r\n      if (repertoire === '') {\r\n        finished({error: \"Vous devez indiquer le non d'un répertoire (repertoire)\"});\r\n        return;\r\n      }\r\n      if (individu === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'un individu (individu)\"});\r\n        return;\r\n      }\r\n      if (attribut === '') {\r\n        finished({error: \"Vous devez indiquer le nom d'un attribut (attribut)\"});\r\n        return;\r\n      }\r\n      if (indice === '') {\r\n        finished({error: \"Vous devez indiquer un indice pour l'attribut (indice)\"});\r\n        return;\r\n      }\r\n\r\n      if (!this.db.symbolTable) this.db.symbolTable = sessions.symbolTable(this.db);\r\n\r\n      params = {\r\n        rpcName: 'RPCBDD EXECUTER COMMANDE READ',\r\n        rpcArgs: [\r\n          {type: 'LITERAL', value: partition}, \r\n          {type: 'LITERAL', value: repertoire}, \r\n          {type: 'LITERAL', value: individu}, \r\n          {type: 'LITERAL', value: attribut}, \r\n          {type: 'LITERAL', value: indice} \r\n        ],\r\n      };\r\n\r\n      var response = runRPC.call(this, params, session, false);\r\n      console.log(\"-----response: \" + JSON.stringify(response));\r\n\r\n      if (response.value === undefined) {\r\n        finished({error: \"Aucune valeur trouvée pour \" + partition + \" \" + repertoire + \" \" + individu + \" \" + attribut + \" \" + indice});\r\n      }\r\n      else {\r\n        // Attribut mofifié avec succès\r\n        // Enregistrer la table des symboles à la session ...\r\n        ok = this.db.symbolTable.save(session);\r\n\r\n        // Nettoyer le processus de back-end Cache / GT.M:\r\n        ok = this.db.symbolTable.clear();\r\n\r\n        // Réponse de retour\r\n        finished({value: response.value});    \r\n      }\r\n    },\r\n\r\n    /**\r\n     * Se déplacer sur une partition.\r\n     * @constructor\r\n     * @param {object} messageObj - Message.\r\n     * @param {number} session - Session.\r\n     * @param {string} send - Send.\r\n     * @param {object} finished - Message de retour de la fonction.\r\n     */\r\n    cdNameSpace: function(messageObj, session, send, finished) {\r\n      var fn = {};\r\n      var path = '/home/' + process.env['instance'] + '/partitions/' + messageObj.params.namespace.toLowerCase() + '/globals/';\r\n      if (messageObj.params.namespace != '') {\r\n        if (fs.existsSync(path + messageObj.params.namespace.toUpperCase() + '.gld')) {\r\n          var fn = this.db.function({function: 'ZGBLDIR^%GTM', arguments: [messageObj.params.namespace.toUpperCase()]});\r\n        }\r\n      }\r\n      finished(fn);    \r\n    },\r\n\r\n    /**\r\n     * Obtenir la liste des noms des partitions installées.\r\n     * @constructor\r\n     * @param {object} messageObj - Message.\r\n     * @param {number} session - Session.\r\n     * @param {string} send - Send.\r\n     * @param {object} finished - Liste des noms des partitions installées sous la forme [\"DMO\", \"YXP\"].\r\n     */\r\n    getNameSpace: function(messageObj, session, send, finished) {\r\n      var path = '/home/' + process.env['instance'] + '/partitions/';\r\n      fs.readdir(path, function(err, items) {\r\n        if (err) {\r\n          finished(err);\r\n        }\r\n        finished(items);\r\n      });\r\n    },\r\n\r\n    getQui: function(messageObj, session, send, finished) {\r\n      var node = {\r\n        global: 'QUI',\r\n        subscripts: []\r\n      };\r\n      var result = this.db.get(node);\r\n      //console.log(\"-----getQui: \" + JSON.stringify(result));\r\n      finished({qui: result.data});\r\n    },\r\n\r\n    setQui: function(messageObj, session, send, finished) {\r\n      if (messageObj.params.partition && messageObj.params.partition !== '') {\r\n        var node = {\r\n          global: 'QUI',\r\n          subscripts: [],\r\n          data: messageObj.params.partition\r\n        };\r\n        var result = this.db.set(node);\r\n        //console.log(\"-----setQui: \" + JSON.stringify(result.data));\r\n        finished({ok: true});    \r\n      }\r\n      else {\r\n        finished({error: 'Partition non valide'});\r\n      }\r\n    },\r\n\r\n    /* A supprimer */\r\n    login: function(messageObj, session, send, finished) {\r\n\r\n      if (messageObj.params.password === this.userDefined.config.managementPassword) {\r\n        session.timeout = 20 * 60;\r\n        session.authenticated = true;\r\n        finished({ok: true});    \r\n      }\r\n      else {\r\n        finished({error: 'Invalid login attempt'});\r\n      }\r\n      return;\r\n    },\r\n\r\n    getServerName: function(messageObj, session, send, finished) {\r\n      var serverName = '';\r\n      if (this.userDefined.config && this.userDefined.config.serverName) serverName = this.userDefined.config.serverName;\r\n      finished({serverName: serverName});\r\n    },\r\n\r\n    getBuildDetails: function(messageObj, session, send, finished) {\r\n      var node = {\r\n        global: 'INCONNE',\r\n        subscripts: ['VERSION']\r\n      };\r\n      var rep = this.db.get(node);\r\n      if (session.authenticated) {\r\n        var buildDetails = {\r\n          nodejsBuild: process.version,\r\n          dbInterface: this.db.version(),\r\n          qoper8Build: this.build,\r\n          docStoreBuild: this.documentStore.build,\r\n          xpressBuild: this.xpress.build,\r\n          yrexpertmVersion: rep.data,\r\n          yrexpertjsBuild: build\r\n        };\r\n        //console.log(\"-----buildDetails: \" + JSON.stringify(buildDetails));\r\n        if (this.userDefined.config && this.userDefined.config.qxBuild) buildDetails.qxBuild = this.userDefined.config.qxBuild;\r\n        finished(buildDetails);\r\n      }\r\n      else {\r\n        finished({error: 'Non authentifié'});\r\n      }\r\n    },\r\n\r\n    getMasterProcessDetails: function(messageObj, session, send, finished) {\r\n      if (session.authenticated) {\r\n        //var details = {};\r\n        //if (this.userDefined.config && this.userDefined.config.masterProcessPid) details.pid = this.userDefined.config.masterProcessPid;\r\n        //finished(details);\r\n        finished({ok: true});\r\n      }\r\n      else {\r\n        finished({error: 'Non authentifié'});\r\n      }\r\n    },\r\n\r\n    stopMasterProcess: function(messageObj, session, send, finished) {\r\n      if (session.authenticated) {\r\n        send({displayButton: true});\r\n        finished({closeSocket: true});\r\n      }\r\n      else {\r\n        finished({error: 'Non authentifié'});\r\n      }\r\n    },\r\n\r\n    getWorkerDetails: function(messageObj, session, send, finished) {\r\n      if (session.authenticated) {\r\n        finished({ok: true});\r\n      }\r\n      else {\r\n        finished({error: 'Non authentifié'});\r\n      }\r\n    },\r\n\r\n    stopWorkerProcess: function(messageObj, session, send, finished) {\r\n      finished({pid: messageObj.params.pid});\r\n    },\r\n\r\n    setPoolSize: function(messageObj, session, send, finished) {\r\n      finished({poolSize: messageObj.params.poolSize});\r\n    },\r\n\r\n    getPoolSize: function(messageObj, session, send, finished) {\r\n      finished({ok: true});\r\n    },\r\n\r\n    getGlobalDirectory: function(messageObj, session, send, finished) {\r\n      var dir = this.db.global_directory();\r\n      finished(dir);\r\n    },\r\n\r\n    getNextSubscripts: function(messageObj, session, send, finished) {\r\n      var subscripts = messageObj.params.path.split('.');\r\n      var global = subscripts.shift();\r\n      var glo = new this.documentStore.DocumentNode(global, subscripts);\r\n      var data = {};\r\n      glo.forEachChild(function(name, node) {\r\n        if (node.hasChildren) {\r\n          data[name] = messageObj.params.expandText\r\n\t }\r\n\t else data[name] = node.value;\r\n      });\r\n      finished(data);\r\n    },\r\n\r\n    getSessions: function(messageObj, session, send, finished) {\r\n      var activeSessions = this.sessions.active();\r\n      var sessions = [];\r\n      var disabled;\r\n      activeSessions.forEach(function(ewdSession) {\r\n        disabled = false;\r\n        if (ewdSession.id.toString() === session.id.toString()) disabled = true;\r\n        sessions.push({\r\n          id: ewdSession.id,\r\n          token: ewdSession.token,\r\n          application: ewdSession.application,\r\n          expiry: ewdSession.expiryTime,\r\n          disabled: disabled\r\n        });\r\n      });\r\n      finished(sessions);\r\n    },\r\n\r\n    stopSession: function(messageObj, session, send, finished) {\r\n      var ewdSession = this.sessions.byToken(messageObj.params.token);\r\n      if (ewdSession) ewdSession.delete();\r\n      finished({ok: true});\r\n    },\r\n\r\n    showSession: function(messageObj, session, send, finished) {\r\n      var token = messageObj.params.token;\r\n      var ewdSession = this.sessions.byToken(token);\r\n      if (ewdSession) {\r\n        var data = {};\r\n        var expandText = ' -->';\r\n        ewdSession.data.forEachChild(function(name, childNode) {\r\n          data[name] = expandText;\r\n          if (childNode.hasValue) data[name] = childNode.value;\r\n          if (name === 'ewd_symbolTable') data[name] = 'Données de table de symboles mumps';\r\n        });\r\n        finished({\r\n          token: token,\r\n          id: ewdSession.id,\r\n          data: data\r\n        });\r\n      }\r\n      else {\r\n        finished({\r\n          token: token,\r\n          error: 'La session n existe plus'\r\n        });\r\n      }\r\n    },\r\n\r\n    getSessionSubscripts: function(messageObj, session, send, finished) {\r\n      var subs = messageObj.params.path.split('.');\r\n      var token = messageObj.params.token;\r\n      var ewdSession = this.sessions.byToken(token);\r\n      if (ewdSession) {\r\n        var documentName = ewdSession.documentName;\r\n        var subscripts = ewdSession.data._node.subscripts.concat(subs);\r\n        var doc = new this.documentStore.DocumentNode(documentName, subscripts);\r\n        var data = {};\r\n        doc.forEachChild(function(name, childNode) {\r\n          data[name] = messageObj.params.expandText;\r\n          if (childNode.hasValue) data[name] = childNode.value;\r\n        });\r\n        finished({\r\n          data: data\r\n        });\r\n      }\r\n      else {\r\n        finished({error: 'La session n existe plus'});\r\n      }\r\n    },\r\n\r\n\r\n\r\n    getBeatryxRobot: function(messageObj, beatryx, send, finished) {\r\n      console.log(\"-----this.beatryxRobot: \" + JSON.stringify(this.beatryxRobot));\r\n      var beatryxRobot = [];\r\n      beatryxRobot.push({\r\n        id: 123456789,\r\n        token: \"ewdSession.token\",\r\n        application: \"Raison sociale\",\r\n        expiry: \"31/12/2017\",\r\n        disabled: true\r\n      });\r\n      finished(beatryxRobot);\r\n/**\r\n      console.log(\"-----messageObj: \" + JSON.stringify(messageObj));\r\n      console.log(\"-----beatryx: \" + JSON.stringify(beatryx));\r\n      console.log(\"-----this.beatryxRobot: \" + JSON.stringify(this.beatryxRobot));\r\n      console.log(\"-----this.beatryxRobot.active(): \" + JSON.stringify(this.beatryxRobot.active()));\r\n      var activeBeatryxRobot = this.beatryxRobot.active();\r\n      var beatryxRobot = [];\r\n      var disabled;\r\n      activeBeatryxRobot.forEach(function(ewdSession) {\r\n        disabled = false;\r\n        if (ewdSession.id.toString() === session.id.toString()) disabled = true;\r\n        beatryxRobot.push({\r\n          id: ewdSession.id,\r\n          token: ewdSession.token,\r\n          application: ewdSession.application,\r\n          expiry: ewdSession.expiryTime,\r\n          disabled: disabled\r\n        });\r\n      });\r\n      finished(beatryxRobot);\r\n*/\r\n    },\r\n\r\n    stopBeatryx: function(messageObj, beatryx, send, finished) {\r\n      var ewdSession = this.beatryxRobot.byToken(messageObj.params.token);\r\n      if (ewdSession) ewdSession.delete();\r\n      finished({ok: true});\r\n    },\r\n\r\n    showBeatryx: function(messageObj, beatryx, send, finished) {\r\n      var token = messageObj.params.token;\r\n      var ewdSession = this.beatryxRobot.byToken(token);\r\n      if (ewdSession) {\r\n        var data = {};\r\n        var expandText = ' -->';\r\n        ewdSession.data.forEachChild(function(name, childNode) {\r\n          data[name] = expandText;\r\n          if (childNode.hasValue) data[name] = childNode.value;\r\n          if (name === 'ewd_symbolTable') data[name] = 'Données de table de symboles mumps';\r\n        });\r\n        finished({\r\n          token: token,\r\n          id: ewdSession.id,\r\n          data: data\r\n        });\r\n      }\r\n      else {\r\n        finished({\r\n          token: token,\r\n          error: 'La session n existe plus'\r\n        });\r\n      }\r\n    },\r\n\r\n    getBeatryxSubscripts: function(messageObj, beatryx, send, finished) {\r\n      var subs = messageObj.params.path.split('.');\r\n      var token = messageObj.params.token;\r\n      var ewdSession = this.beatryxRobot.byToken(token);\r\n      if (ewdSession) {\r\n        var documentName = ewdSession.documentName;\r\n        var subscripts = ewdSession.data._node.subscripts.concat(subs);\r\n        var doc = new this.documentStore.DocumentNode(documentName, subscripts);\r\n        var data = {};\r\n        doc.forEachChild(function(name, childNode) {\r\n          data[name] = messageObj.params.expandText;\r\n          if (childNode.hasValue) data[name] = childNode.value;\r\n        });\r\n        finished({\r\n          data: data\r\n        });\r\n      }\r\n      else {\r\n        finished({error: 'La session n existe plus'});\r\n      }\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  },\r\n  workerResponseHandlers: {\r\n    // Permettre l'interception par le processus maître d'augmenter/traiter la demande après l'authentification dans le worker\r\n    getMasterProcessDetails: function(message) {\r\n      var stats = this.getStats();\r\n      return {\r\n        pid: process.pid,\r\n        startTime: new Date(this.startTime).toLocaleString(),\r\n        upTime: stats.uptime,\r\n        memory: stats.memory\r\n      }\r\n    },\r\n\r\n    getWorkerDetails: function(message, send) {\r\n      // utiliser la fonction de gestionnaire spécial pour obtenir des statistiques pour master et les workers\r\n      var that = this;\r\n      this.handleStats(function(messageObj) {\r\n        var resultObj = {\r\n          type: 'getWorkerDetails',\r\n          results: messageObj.worker\r\n        };\r\n        send(resultObj);\r\n      });\r\n      return;\r\n    },\r\n\r\n    stopMasterProcess: function(message) {\r\n\r\n      if (message.displayButton) return message ;\r\n\r\n      // retarder légèrement pour permettre l'envoi de la réponse au navigateur\r\n      var that = this;\r\n      setTimeout(function() {\r\n        that.stop();\r\n      }, 2000);\r\n      //return {disconnect: true, error: 'EWD AppRunner a été arrêté'};\r\n      return {ok: true};\r\n    },\r\n\r\n    stopWorkerProcess: function(message) {\r\n      this.stopWorker(message.pid);\r\n      return {pid: message.pid};\r\n    },\r\n\r\n    getPoolSize: function(message) {\r\n      return {poolSize: this.worker.poolSize};\r\n    },\r\n\r\n    setPoolSize: function(message) {\r\n      this.setWorkerPoolSize(message.poolSize);\r\n      return {ok: true};\r\n    }\r\n\r\n  }\r\n\r\n};\r\n"]}