@runeya/runeya 1.0.2
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/checkJsFork.js +68 -0
- package/cpuFork.js +38 -0
- package/defaultJsConfig.json +12 -0
- package/node-red-contrib-runeya.tar +0 -0
- package/package.json +92 -0
- package/public/assets/App-BE-jCGXm.css +5 -0
- package/public/assets/App-Bu4vGxO4.js +94 -0
- package/public/assets/CurrentEditor-CICqnVzc.css +1 -0
- package/public/assets/CurrentEditor-yQstAvnQ.js +1 -0
- package/public/assets/Editor-BK8NbiL6.css +1 -0
- package/public/assets/Editor-DjNB5m3y.js +721 -0
- package/public/assets/ImportCreate-BkVY0Snd.js +1 -0
- package/public/assets/ImportCreate-D2Vb-Kah.css +1 -0
- package/public/assets/Init-PS5FZlf7.js +1 -0
- package/public/assets/Jost-100-DnoXZD4d.ttf +0 -0
- package/public/assets/Jost-100-Italic-CafWG5AA.ttf +0 -0
- package/public/assets/Jost-200-BLd_EHgF.ttf +0 -0
- package/public/assets/Jost-200-Italic-BoAOykkc.ttf +0 -0
- package/public/assets/Jost-300-DsRo084O.ttf +0 -0
- package/public/assets/Jost-300-Italic-X5qKFjk_.ttf +0 -0
- package/public/assets/Jost-400-BAmtAEvV.ttf +0 -0
- package/public/assets/Jost-400-Italic-C0d83AVZ.ttf +0 -0
- package/public/assets/Jost-500-B3jpwdrC.ttf +0 -0
- package/public/assets/Jost-500-Italic-DHPOL_YE.ttf +0 -0
- package/public/assets/Jost-600-CnEPylq5.ttf +0 -0
- package/public/assets/Jost-600-Italic-AWz-mhoH.ttf +0 -0
- package/public/assets/Jost-700-B93EcsYm.ttf +0 -0
- package/public/assets/Jost-700-Italic-Dx2e12zd.ttf +0 -0
- package/public/assets/Jost-800-CXzl-c4F.ttf +0 -0
- package/public/assets/Jost-800-Italic-BfYDUGd9.ttf +0 -0
- package/public/assets/Jost-900-B9Ttjx6W.ttf +0 -0
- package/public/assets/Jost-900-Italic-B6um8Fzs.ttf +0 -0
- package/public/assets/LeftLogo-DsGaOcJY.css +1 -0
- package/public/assets/LeftLogo-EmzH7l46.js +1 -0
- package/public/assets/Markdown-CpEumaO9.js +103 -0
- package/public/assets/Markdown-pSjwyqay.css +1 -0
- package/public/assets/Overview-BaSpvlXu.css +1 -0
- package/public/assets/Overview-BhYJL4nA.js +1 -0
- package/public/assets/Section-8ldEsJSi.js +1 -0
- package/public/assets/Section-eAe-gcF2.css +1 -0
- package/public/assets/Settings-Bsf3R9hf.css +1 -0
- package/public/assets/Settings-bKLH4HnT.js +188 -0
- package/public/assets/StackChooser-CmoqSd4m.js +1 -0
- package/public/assets/StackChooser-D5EY2Av8.js +1 -0
- package/public/assets/StackChooser-DRNfmbOi.css +1 -0
- package/public/assets/StackChooser-mg-uox7H.css +1 -0
- package/public/assets/StackMultiple-Dw-7UAYX.css +1 -0
- package/public/assets/StackMultiple-o8pd1Nmf.js +1 -0
- package/public/assets/StackSingle-BzrRRE-y.js +1 -0
- package/public/assets/StackSingle-DWbIQbAl.css +1 -0
- package/public/assets/Tabs-CZAdcV0_.css +1 -0
- package/public/assets/Tabs-Cpjfv5wC.js +1 -0
- package/public/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
- package/public/assets/abap-B-ZgRVsS.js +6 -0
- package/public/assets/apex-pqFeVHah.js +6 -0
- package/public/assets/axios-BZk75tkI.js +6 -0
- package/public/assets/azcli-DrGgKfrx.js +6 -0
- package/public/assets/bat-BRahd1m2.js +6 -0
- package/public/assets/bicep-Br5yCzQa.js +7 -0
- package/public/assets/cameligo-BPiAgOve.js +6 -0
- package/public/assets/clojure-CpX5XwJp.js +6 -0
- package/public/assets/codicon-CgFDqQ3p.ttf +0 -0
- package/public/assets/coffee-DPYBl3Sw.js +6 -0
- package/public/assets/cpp-A-JA5b_j.js +6 -0
- package/public/assets/csharp-CwCtWZg4.js +6 -0
- package/public/assets/csp-DKfky23r.js +6 -0
- package/public/assets/css-C0oCs38a.js +8 -0
- package/public/assets/css.worker-7uusSYJx.js +84 -0
- package/public/assets/cssMode-CUrSSrg6.js +9 -0
- package/public/assets/cursor-CgsCZvc6.svg +3 -0
- package/public/assets/cypher-BHNfvd4C.js +6 -0
- package/public/assets/dart-BLNd8_RN.js +6 -0
- package/public/assets/dockerfile-Bi2t-SDM.js +6 -0
- package/public/assets/ecl-A9rov3bq.js +6 -0
- package/public/assets/editor.worker-C6wdibMX.js +11 -0
- package/public/assets/elixir-DJHHJNm9.js +6 -0
- package/public/assets/fa-brands-400-C99Yv4gD.woff2 +0 -0
- package/public/assets/fa-brands-400-DtZKBM2a.ttf +0 -0
- package/public/assets/fa-regular-400-BMFokQJ2.ttf +0 -0
- package/public/assets/fa-regular-400-OOsPf1xj.woff2 +0 -0
- package/public/assets/fa-solid-900-DAI24fNt.woff2 +0 -0
- package/public/assets/fa-solid-900-DM0teJdg.ttf +0 -0
- package/public/assets/fa-v4compatibility-F0dlVTLQ.ttf +0 -0
- package/public/assets/fa-v4compatibility-aR9vOKaP.woff2 +0 -0
- package/public/assets/favicon-ClgyP8FQ.ico +0 -0
- package/public/assets/flow9-BXCop7c-.js +6 -0
- package/public/assets/freemarker2-dec3WQLB.js +8 -0
- package/public/assets/fsharp-BWYaIR55.js +6 -0
- package/public/assets/go-Bd3rW8Cw.js +6 -0
- package/public/assets/graphql-Dm4lPrOw.js +6 -0
- package/public/assets/handlebars-Da_reGXs.js +6 -0
- package/public/assets/hcl-B_GIsMV3.js +6 -0
- package/public/assets/html-DiMqDoaf.js +6 -0
- package/public/assets/html.worker-BGQnBRGr.js +458 -0
- package/public/assets/htmlMode-wRbKtV-5.js +9 -0
- package/public/assets/index-DUMOL4cy.css +1 -0
- package/public/assets/index-aZm7xMRp.js +233 -0
- package/public/assets/ini-8BCaSfCG.js +6 -0
- package/public/assets/java-BzOp7UBR.js +6 -0
- package/public/assets/javascript-ByCKYcx1.js +6 -0
- package/public/assets/json.worker-Be5ebZoT.js +42 -0
- package/public/assets/jsonMode-BQtLraFt.js +11 -0
- package/public/assets/julia-I1-aRIRv.js +6 -0
- package/public/assets/kotlin-BggX9fXn.js +6 -0
- package/public/assets/less-ByFiWodf.js +7 -0
- package/public/assets/lexon-B2yfmeoX.js +6 -0
- package/public/assets/liquid-Ig1gPJ1q.js +6 -0
- package/public/assets/lua-CTHhD-fD.js +6 -0
- package/public/assets/m3-qBOyJ0vE.js +6 -0
- package/public/assets/markdown-Cm28xlel.js +6 -0
- package/public/assets/mdx-CYaZVbeY.js +6 -0
- package/public/assets/mips-DqiVsLO5.js +6 -0
- package/public/assets/msdax-C3nM-ZR_.js +6 -0
- package/public/assets/mysql-BPWqZDWr.js +6 -0
- package/public/assets/objective-c-afWjKtEP.js +6 -0
- package/public/assets/pascal-DMmvnikK.js +6 -0
- package/public/assets/pascaligo-BaiKb_sq.js +6 -0
- package/public/assets/perl-xMumSrWe.js +6 -0
- package/public/assets/pgsql-C-EgqMcd.js +6 -0
- package/public/assets/php-DkYVXRex.js +6 -0
- package/public/assets/pla-CG9rR3U0.js +6 -0
- package/public/assets/postiats-BCC2sChj.js +6 -0
- package/public/assets/powerquery-BhOZIDqB.js +6 -0
- package/public/assets/powershell-wocyr7cA.js +6 -0
- package/public/assets/protobuf-DU3uZwW0.js +7 -0
- package/public/assets/pug-Bqn_XUqj.js +6 -0
- package/public/assets/python-H9Bd9rT3.js +6 -0
- package/public/assets/qsharp-Cj1jue1V.js +6 -0
- package/public/assets/r-CIZIOQYl.js +6 -0
- package/public/assets/razor-Hy2I2roR.js +6 -0
- package/public/assets/redis-Brk2d6n9.js +6 -0
- package/public/assets/redshift-BraSvCe6.js +6 -0
- package/public/assets/restructuredtext-Hh-PJCdS.js +6 -0
- package/public/assets/rocket-Cqyxqx2p.png +0 -0
- package/public/assets/router-DdnNyrCa.css +32 -0
- package/public/assets/router-ZJYrvDkp.js +4962 -0
- package/public/assets/ruby-Cro5SiRh.js +6 -0
- package/public/assets/rust-GtgTsMTz.js +6 -0
- package/public/assets/sb-DrBYdvZl.js +6 -0
- package/public/assets/scala-u8KvBYJ0.js +6 -0
- package/public/assets/scheme-CC8-3vA2.js +6 -0
- package/public/assets/scss-CG62jlW4.js +8 -0
- package/public/assets/shell-CWImXz8u.js +6 -0
- package/public/assets/solidity-DFsCHDMA.js +6 -0
- package/public/assets/sophia-CWBVWc0_.js +6 -0
- package/public/assets/sparql-Ca6jL_8E.js +6 -0
- package/public/assets/sql-C86UFuzS.js +6 -0
- package/public/assets/st-CjrOQGnb.js +6 -0
- package/public/assets/swift-TX6SQEBl.js +8 -0
- package/public/assets/system-DC3M5FtK.js +1 -0
- package/public/assets/systemverilog-DYRoH6ZJ.js +6 -0
- package/public/assets/tcl-DLjrRbxU.js +6 -0
- package/public/assets/ts.worker-Dap_1Gm7.js +37021 -0
- package/public/assets/tsMode-C0bgKAt8.js +16 -0
- package/public/assets/twig-CRyFog85.js +6 -0
- package/public/assets/typescript-B77iTojx.js +6 -0
- package/public/assets/vb-CQSqy7yk.js +6 -0
- package/public/assets/vscode-icon-DGpXKq7_.svg +182 -0
- package/public/assets/vue.runtime.esm-bundler-VmRDinbK.js +9 -0
- package/public/assets/wgsl-DbhGdQ56.js +303 -0
- package/public/assets/xml-uQhiANeS.js +6 -0
- package/public/assets/yaml-2OwCXstu.js +6 -0
- package/public/index.html +4 -0
- package/runeya.vsix +0 -0
- package/www.js +7030 -0
- package/www.js.map +1 -0
package/www.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../helpers/args.js","../../../common/socket-server/src/CustomObservable.js","../../../common/socket-server/src/sockets.js","../../../common/socket-server/src/index.js","../../../modules/bugs/backend/routes.js","../../../modules/bugs/backend/index.js","../../../modules/base64/backend/Base64.js","../../../modules/base64/backend/routes.js","../../../modules/base64/backend/index.js","../../../modules/configuration/backend/index.js","../../../modules/dev-ops/backend/index.js","../../../modules/diff/backend/routes.js","../../../modules/diff/backend/index.js","../helpers/conflictStorage.js","../helpers/reencrypt-nodered.js","../models/EncryptionKey.js","../helpers/crypto.js","../helpers/dbs.js","../../../modules/documentation/backend/Documentation.js","../../../modules/documentation/backend/Leaf.js","../../../modules/documentation/backend/routes.js","../../../modules/documentation/backend/index.js","../../../modules/finder/backend/routes.js","../../../modules/finder/backend/index.js","../helpers/exec.js","../../../common/express-http-error/src/HTTPError.js","../../../common/express-http-error/src/index.js","../../../modules/git/backend/Git.js","../../../modules/git/backend/routes.js","../../../modules/git/backend/index.js","../../../modules/github/backend/routes.js","../../../modules/github/backend/index.js","../../../modules/global-scripts/backend/GlobalScripts.js","../../../modules/global-scripts/backend/routes.js","../../../modules/global-scripts/backend/index.js","../../../modules/http-client/backend/HttpClient.js","../../../modules/http-client/backend/routes.js","../../../modules/http-client/backend/index.js","../../../modules/json-formatter/backend/JSONFormatter.js","../../../modules/json-formatter/backend/routes.js","../../../modules/json-formatter/backend/index.js","../../../modules/jwt/backend/JWT.js","../../../modules/jwt/backend/routes.js","../../../modules/jwt/backend/index.js","../../../modules/kanban/backend/save.js","../../../modules/kanban/backend/Kanban.js","../../../modules/kanban/backend/routes.js","../../../modules/kanban/backend/index.js","../../../modules/logs/backend/routes.js","../../../modules/logs/backend/index.js","../../../modules/mongo/backend/Mongo.js","../../../modules/mongo/backend/routes.js","../../../modules/mongo/backend/index.js","../../../modules/node-repl/backend/routes.js","../../../modules/node-repl/backend/index.js","../helpers/specialCaracters.helper.js","../helpers/stringTransformer.helper.js","../../../modules/npm/backend/Npm.js","../../../modules/npm/backend/routes.js","../../../modules/npm/backend/index.js","../models/ports.js","../../../modules/openai/backend/routes.js","../../../modules/openai/backend/index.js","../../../modules/regex/backend/index.js","../../../modules/sql-beautifier/backend/SQLBeautifier.js","../../../modules/sql-beautifier/backend/routes.js","../../../modules/sql-beautifier/backend/index.js","../../../modules/toolbox/backend/index.js","../../../modules/uuid/backend/UUID.js","../../../modules/uuid/backend/routes.js","../../../modules/uuid/backend/index.js","../../../modules/help/backend/index.js","../../../modules/openapi/backend/routes.js","../../../modules/openapi/backend/index.js","../../../modules/vscode/backend/routes.js","../../../modules/vscode/backend/index.js","../../../modules/docker/backend/routes.js","../../../modules/docker/backend/index.js","../../../modules/workflows/backend/Workflows.js","../../../common/express-health-check/src/index.js","../../../common/express-error-handler/src/errorCodes.js","../../../common/express-error-handler/src/index.js","../../../common/express-404/src/index.js","../../../common/express/src/index.js","../../../modules/workflows/backend/routes.js","../../../modules/workflows/backend/index.js","../../../modules/plugins-loader/backend/plugins.js","../helpers/readline.js","../helpers/ansiconvert.js","../helpers/isWindows.js","../models/Environment.js","../parser/json.js","../parser/debug.js","../parser/link.js","../models/Parser.js","../models/Service.js","../helpers/exportedHelpers.js","../helpers/version.js","../models/saves.js","../models/stack.js","../helpers/console.table.js","../helpers/plugins.js","../routes/plugins.js","../routes/system.js","../models/myConfs.js","../routes/stack.js","../routes/fs.js","../routes/crypto.js","../routes/parsers.js","../models/editors.js","../routes/editors.js","../routes/index.js","../helpers/cpu.js","../app.js","../bin/server.js","../bin/www"],"sourcesContent":["const path = require('path');\n\nconst yargs = require('yargs/yargs')\nconst { hideBin } = require('yargs/helpers')\nconst yarg = yargs(hideBin(process.argv))\n .usage('Usage: <path-to-your-stack> [options]')\n\n .alias('pe', 'pull-env')\n .describe('pe', 'Pull env from a service (need --environment and --service)')\n .default('pe', false)\n\n .alias('e', 'environment')\n .describe('e', 'Choose your environment')\n .default('e', undefined)\n\n .alias('s', 'service')\n .describe('s', 'Service')\n .default('s', undefined)\n\n .alias('ss', 'services')\n .describe('ss', 'Services')\n .default('ss', [])\n\n .boolean(['pe'])\n .string(['e', 's'])\n .array(['ss'])\n\n .help('h')\n .alias('h', 'help')\n .parse()\n\n/** @type {Awaited<yarg> & {rootPath: string, initialCwd: string}} */\nconst args = Object.assign({\n rootPath: path.resolve(yarg['_']?.[0] || '.'),\n initialCwd: '',\n}, yarg);\n\nif (args.rootPath) {\n args.initialCwd = process.cwd()\n process.chdir(args.rootPath)\n}\n\nif (args.pullEnv && !args.service) {\n console.error('Error: --service needed')\n process.exit(1)\n}\nif (args.pullEnv && !args.environment) {\n console.error('Error: --environment needed')\n process.exit(1)\n}\nmodule.exports = args \n","function CustomObservable() {\n /** @type {GenericFunction[]} */\n this.funcs = [];\n}\n/** @param {GenericFunction} fun */\nCustomObservable.prototype.subscribe = function (fun) {\n this.funcs.push(fun);\n};\n\n/** @param {any[]} value */\nCustomObservable.prototype.next = function (...value) {\n this.funcs.forEach((f) => f(...value));\n};\n\nCustomObservable.prototype.off = function (fun) {\n this.funcs = this.funcs.filter((f) => f !== fun);\n};\n\nCustomObservable.prototype.destroy = function () {\n this.funcs = [];\n};\n\nmodule.exports = CustomObservable;\n\n/**\n * @typedef {(...args: any[]) => any} GenericFunction\n */\n","const WebSocket = require('ws');\nconst CustomObservable = require('./CustomObservable');\n\n/** @type {Record<string, CustomObservable>} */\nconst events = {};\n\nmodule.exports = {\n /** @type {WebSocket.Server | null} */\n io: null,\n emit(channel, ...data) {\n events[channel]?.next(...data)\n this.io?.clients.forEach((ws) => {\n ws.send(JSON.stringify({ channel, data }));\n });\n },\n on: (event, cb) => {\n if (!events[event]) events[event] = new CustomObservable();\n events[event].subscribe(cb);\n },\n off(event, cb) {\n events[event]?.off(cb)\n },\n /**\n *\n * @param {*} server\n */\n connect(server) {\n this.io = new WebSocket.Server({ noServer: true, path: '/socket' });\n this.io.on('connection', function message(ws) {\n ws.on('message', function message(event) {\n const { channel, data } = JSON.parse(event?.toString());\n events[channel]?.next(...data)\n })\n })\n const self = this\n server.on('upgrade', function upgrade(request, socket, head) {\n if (request.url === '/socket') {\n self.io?.handleUpgrade(request, socket, head, function done(ws) {\n self.io?.emit('connection', ws, request);\n });\n }\n });\n },\n};\n","module.exports = {\n sockets: require('./sockets'),\n};\n","const express = require('express');\n\nconst router = express.Router();\nconst pathfs = require('path');\nconst { fork } = require('child_process');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n router.get('/bugs/:service', async (req, res) => {\n const service = runeya.findService(req.params.service);\n if (!service) return res.status(404).send('SERVICE_NOT_FOUND');\n const ts = fork(pathfs.resolve(__dirname, 'checkJsFork'));\n ts.on('message', (results) => {\n res.json(results);\n ts.kill('SIGKILL');\n });\n ts.send(req.query.cwd || service.getRootPath() || __dirname);\n return null;\n });\n return router;\n};\n","const { existsSync } = require('fs');\r\nconst pathfs = require('path');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Bugs',\r\n displayName: 'Bugs',\r\n description: 'Find bugs across a whole javascript project',\r\n icon: 'fas fa-bug',\r\n placements: ['service'],\r\n order: 4,\r\n export: null,\r\n hidden: async (service) => {\r\n if (!service) return true;\r\n const npm = new service.Stack.npm(service)\r\n const serviceIsNpm = !!npm.getNpmPaths(service);\r\n return !serviceIsNpm;\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n\r\n","/**\n * Module Base64 pour encoder et décoder des chaînes\n * @param {import('@runeya/common-typings').Runeya} runeya \n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst Base64 = (runeya) => ({\n /**\n * Encode une chaîne en Base64\n * @param {string} value - La chaîne à encoder\n * @returns {string} - La chaîne encodée\n */\n encode: (value = '') => {\n try {\n const buffer = Buffer.from(value, 'utf-8');\n return buffer.toString('base64');\n } catch (error) {\n console.error('Error encoding to base64:', error);\n return '';\n }\n },\n\n /**\n * Décode une chaîne Base64\n * @param {string} value - La chaîne Base64 à décoder\n * @returns {string} - La chaîne décodée\n */\n decode: (value = '') => {\n try {\n const buffer = Buffer.from(value, 'base64');\n return buffer.toString('utf-8');\n } catch (error) {\n console.error('Error decoding from base64:', error);\n return '';\n }\n },\n});\n\nmodule.exports = Base64; ","const express = require('express');\nconst router = express.Router();\nconst Base64 = require('./Base64');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const base64 = Base64(runeya);\n \n router.post('/base64/encode', (req, res) => {\n try {\n const { value } = req.body;\n const result = base64.encode(value);\n res.json({ result });\n } catch (error) {\n res.status(500).json({ \n error: true, \n message: error instanceof Error ? error.message : 'Unknown error'\n });\n }\n });\n\n router.post('/base64/decode', (req, res) => {\n try {\n const { value } = req.body;\n const result = base64.decode(value);\n res.json({ result });\n } catch (error) {\n res.status(500).json({ \n error: true, \n message: error instanceof Error ? error.message : 'Unknown error'\n });\n }\n });\n\n return router;\n}; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./Base64')>} */\nconst plugin = {\n enabled: true,\n name: 'Base64',\n displayName: 'Base64',\n description: 'Encode and decode Base64 strings',\n icon: 'fas fa-exchange-alt',\n placements: [\n {\n position: 'toolbox',\n label: 'Base64',\n icon: 'fas fa-exchange-alt',\n goTo: { path: '/Base64' },\n active: 'Base64',\n },\n ],\n export: require('./Base64'),\n order: 8,\n routes: require('./routes'),\n};\n\nmodule.exports = plugin; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Configuration',\r\n displayName: 'Configuration',\r\n description: 'Show all configurations used to launch the given service',\r\n icon: 'fas fa-cog',\r\n export: null,\r\n placements: ['service'],\r\n order: 5,\r\n};\r\nmodule.exports = plugin;\r\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: false,\r\n name: 'DevOps',\r\n displayName: 'Dev ops',\r\n description: 'Choose a tool used for dev ops purposes',\r\n icon: 'fas fa-hard-hat',\r\n order: 7,\r\n export: null,\r\n placements: [{\r\n position: 'sidebar',\r\n label: 'DevOps',\r\n icon: 'fas fa-hard-hat',\r\n goTo: { path: '/DevOps' },\r\n active: 'DevOps',\r\n }],\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\n\nconst router = express.Router();\nconst { v4 } = require('uuid');\n\nmodule.exports = () => {\n router.get('/diff', async (req, res) => {\n res.json(v4());\n });\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Diff',\r\n displayName: 'Differences',\r\n description: 'Find differences between two strings',\r\n icon: 'fas fa-columns',\r\n export: null,\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'Diff',\r\n icon: 'fas fa-columns',\r\n goTo: { path: '/Diff' },\r\n active: 'Diff',\r\n },\r\n ],\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","/**\n * Module dedicated to Git conflict storage\n * Helps avoid circular references between modules\n */\n\n// Temporary storage for pending conflicts\nconst pendingConflicts = [];\n\n/**\n * Store a Git conflict for later resolution\n * @param {Object} conflict - The conflict data\n * @returns {string} - The ID of the stored conflict\n */\nfunction storeConflict(conflict) {\n const conflictId = Date.now().toString();\n pendingConflicts.push({\n id: conflictId,\n timestamp: Date.now(),\n ...conflict\n });\n \n // Limit the number of stored conflicts (keep only the last 20)\n if (pendingConflicts.length > 20) {\n pendingConflicts.shift();\n }\n \n return conflictId;\n}\n\n/**\n * Get all pending Git conflicts\n * @returns {Array} - List of pending conflicts\n */\nfunction getPendingConflicts() {\n return pendingConflicts;\n}\n\n/**\n * Remove a conflict from the pending list\n * @param {string} conflictId - The ID of the conflict to remove\n */\nfunction removeConflict(conflictId) {\n const index = pendingConflicts.findIndex(c => c.id === conflictId);\n if (index !== -1) {\n pendingConflicts.splice(index, 1);\n }\n}\n\n// Exporter les fonctions\nmodule.exports = {\n storeConflict,\n getPendingConflicts,\n removeConflict\n}; ","const crypto = require('crypto');\nconst { readFile, writeFile } = require('fs/promises');\n\nvar encryptionAlgorithm = \"aes-256-ctr\";\n\nmodule.exports = async function decryptCreds(oldSecret, newScret, path) {\n const oldKey = crypto.createHash('sha256').update(oldSecret).digest();\n const newKey = crypto.createHash('sha256').update(newScret).digest();\n const cipher = JSON.parse(await readFile(path, 'utf-8'))\n let flows = cipher[\"$\"];\n const vector = Buffer.from(flows.substring(0, 32), 'hex');\n flows = flows.substring(32);\n const decipher = crypto.createDecipheriv(encryptionAlgorithm, oldKey, vector);\n const decrypted = decipher.update(flows, 'base64', 'utf8') + decipher.final('utf8');\n const newVector = crypto.randomBytes(16);\n const newCipher = crypto.createCipheriv(encryptionAlgorithm, newKey, newVector);\n const encrypted = newCipher.update(decrypted, 'utf8', 'base64') + newCipher.final('base64');\n await writeFile(path, JSON.stringify({\n \"$\": newVector.toString('hex') + encrypted\n }, null, 2), 'utf-8')\n}\n","const { existsSync } = require('fs');\nconst path = require('path');\nconst { writeFile, readFile, appendFile } = require('fs/promises');\nconst { randomUUID } = require('crypto');\nconst dbs = require('../helpers/dbs');\nconst { generateKey, encrypt, decrypt } = require('../helpers/crypto');\nconst reencryptNodered = require('../helpers/reencrypt-nodered');\nconst pathfs = require('path');\nconst args = require('../helpers/args');\n\nclass EncryptionKey {\n constructor() {\n this.encryptionKey = '';\n }\n\n #getDb() {\n return dbs.getDb('encryption-key', { encrypted: false });\n }\n\n async init() {\n this.encryptionKey = (await this.#getDb().read()).encryptionKey;\n // Exclude db from git\n const dirname = path.dirname(await dbs.getDb('encryption-key', { encrypted: false }).getPath());\n const gitignorePath = path.resolve(dirname, '.gitignore');\n if (!existsSync(gitignorePath)) {\n writeFile(gitignorePath, 'encryption-key.json');\n } else {\n const gitignoreFile = (await readFile(gitignorePath, 'utf-8')).split('\\n');\n const gitignoreHasKey = (key) => gitignoreFile.some((line) => line.trim() === key);\n if (!gitignoreHasKey('encryption-key.json')) await appendFile(gitignorePath, '\\nencryption-key.json');\n if (!gitignoreHasKey('overrides')) await appendFile(gitignorePath, '\\noverrides');\n }\n }\n\n async update() {\n\n console.log(JSON.stringify(['runeya', 'update'],(_, v) => (typeof v === 'function' ? `[func]` : v)));\n return this.#getDb().write(this.toStorage());\n }\n\n toStorage() {\n return {\n encryptionKey: this.encryptionKey,\n };\n }\n\n async generateKey() {\n return generateKey();\n }\n\n async testKey(encryptionKey) {\n try {\n const variable = randomUUID();\n const result = await encrypt(variable, { encryptionKey });\n\n const decrypted = await decrypt(result, { encryptionKey });\n if (decrypted === variable) return true;\n return false;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n\n async saveKey(key, {noReload} = {noReload: false}) {\n if (!await this.testKey(key)) throw new Error('Key not valid');\n try {\n const envSample = (await dbs.getDbs('envs'))[0];\n if (envSample) await dbs.getDb(`envs/${envSample}`).read();\n if (this.encryptionKey) {\n await reencryptNodered(this.encryptionKey, key, pathfs.resolve(require('./stack').getRootPath(), 'nodered/flow_cred.json'))\n await dbs.reencrypt(this.encryptionKey, key)\n };\n } catch (error) {\n console.error(error);\n }\n const shouldRestart = this.encryptionKey !== key\n this.encryptionKey = key;\n await this.update();\n if(!noReload) {\n await require('./stack').selectConf();\n }\n if(shouldRestart) {\n console.log('Restart...')\n require(\"child_process\").spawn(process.argv[0], process.argv.slice(1), {\n cwd: args.initialCwd,\n detached: true,\n stdio: \"inherit\"\n }).unref();\n process.exit(0)\n }\n return key;\n }\n}\n\nmodule.exports = new EncryptionKey();\n","const _sodium = require('libsodium-wrappers');\nconst crypto = require('crypto');\nconst { sockets } = require('@runeya/common-socket-server');\nconst conflictStorage = require('./conflictStorage');\nconst path = require('path');\n\nmodule.exports.generateKey = async () => {\n await _sodium.ready;\n const sodium = _sodium;\n const key = sodium.crypto_aead_aegis256_keygen();\n return sodium.to_base64(key);\n};\n\nmodule.exports.encrypt = async (data, { additionnalNonce = '', encryptionKey = '' } = {}) => {\n await _sodium.ready;\n const sodium = _sodium;\n if (!encryptionKey) encryptionKey = require('../models/EncryptionKey').encryptionKey;\n const key = sodium.from_base64(encryptionKey);\n if (!key || key.length !== sodium.crypto_secretbox_KEYBYTES) {\n throw new Error('Invalid encryption key length');\n }\n\n let nonce;\n if (additionnalNonce) {\n const combinedHash = crypto.createHash('blake2b512').update(data + additionnalNonce).digest();\n nonce = combinedHash.slice(0, sodium.crypto_secretbox_NONCEBYTES); // Truncate to the required size\n } else {\n nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);\n }\n\n // Convert data to string if it's not already\n const dataStr = typeof data === 'string' ? data : String(data);\n \n // Conversion explicite en Uint8Array pour éviter les erreurs de type\n const dataArray = new TextEncoder().encode(dataStr);\n \n const ciphertext = sodium.crypto_secretbox_easy(dataArray, nonce, key);\n\n return Buffer.concat([\n Buffer.from(nonce.buffer, nonce.byteOffset, nonce.byteLength),\n Buffer.from(ciphertext.buffer, ciphertext.byteOffset, ciphertext.byteLength)\n ]).toString('base64');\n};\n\n/**\n * Decrypt data from a specific file path\n * @param {string} encryptedData - The data to decrypt\n * @param {Object} options - Decryption options\n * @param {string} filePath - The path of the file being decrypted\n * @returns {Promise<string>} - The decrypted data\n */\nmodule.exports.decryptFile = async (encryptedData, options = {}, filePath) => {\n // Check if the data contains git conflict markers\n if (typeof encryptedData === 'string' && (\n encryptedData.includes('<<<<<<< HEAD') || \n encryptedData.includes('=======') || \n encryptedData.includes('>>>>>>>'))\n ) {\n // Pass the file path to handleGitConflict\n return await handleGitConflict(encryptedData, options, filePath);\n }\n\n // Use the regular decrypt function for non-conflicted data\n return await module.exports.decrypt(encryptedData, options);\n};\n\nmodule.exports.decrypt = async (encryptedData, { additionnalNonce = '', encryptionKey = '' } = {}) => {\n // Check if the data contains git conflict markers\n if (typeof encryptedData === 'string' && (\n encryptedData.includes('<<<<<<< HEAD') || \n encryptedData.includes('=======') || \n encryptedData.includes('>>>>>>>'))\n ) {\n return await handleGitConflict(encryptedData, { additionnalNonce, encryptionKey });\n }\n\n await _sodium.ready;\n const sodium = _sodium;\n\n if (!encryptionKey) encryptionKey = require('../models/EncryptionKey').encryptionKey;\n const key = sodium.from_base64(encryptionKey);\n if (!key || key.length !== sodium.crypto_secretbox_KEYBYTES) {\n throw new Error('Invalid decryption key length');\n }\n const encryptedBuffer = Buffer.from(encryptedData, 'base64');\n\n const nonce = encryptedBuffer.slice(0, sodium.crypto_secretbox_NONCEBYTES);\n const ciphertext = encryptedBuffer.slice(sodium.crypto_secretbox_NONCEBYTES);\n\n let decrypted;\n try {\n // Convert buffers to Uint8Array to ensure compatibility with libsodium\n const ciphertextArray = new Uint8Array(ciphertext);\n const nonceArray = new Uint8Array(nonce);\n \n decrypted = sodium.crypto_secretbox_open_easy(ciphertextArray, nonceArray, key);\n } catch (error) {\n throw new Error('Decryption failed');\n }\n\n if (!decrypted) {\n throw new Error('Decryption failed');\n }\n\n return Buffer.from(decrypted).toString('utf-8');\n};\n\n/**\n * Handle decryption of git conflicted files\n * @param {string} conflictedData - The data with git conflict markers\n * @param {Object} options - Decryption options\n * @param {string} [filePath] - Path to the file containing the conflict\n * @returns {Promise<string>} - The decrypted data with conflict markers preserved\n */\nasync function handleGitConflict(conflictedData, options, filePath) {\n // Split the data by conflict markers\n const headMatch = conflictedData.match(/<<<<<<< HEAD\\r?\\n([\\s\\S]*?)\\r?\\n=======\\r?\\n([\\s\\S]*?)\\r?\\n>>>>>>>.*/);\n \n if (!headMatch) {\n // If we can't properly parse the conflict, return the original error\n throw new Error('Git conflict detected but could not be properly parsed');\n }\n\n try {\n // Extract the different versions\n const ourVersion = headMatch[1];\n const theirVersion = headMatch[2];\n \n // Try to decrypt both versions\n let ourDecrypted = '';\n let theirDecrypted = '';\n \n try {\n ourDecrypted = await module.exports.decrypt(ourVersion, options);\n } catch (err) {\n // Type assertion for the error\n const errorMessage = err instanceof Error ? err.message : String(err);\n ourDecrypted = `[ERROR DECRYPTING OUR VERSION: ${errorMessage}]`;\n }\n \n try {\n theirDecrypted = await module.exports.decrypt(theirVersion, options);\n } catch (err) {\n // Type assertion for the error\n const errorMessage = err instanceof Error ? err.message : String(err);\n theirDecrypted = `[ERROR DECRYPTING THEIR VERSION: ${errorMessage}]`;\n }\n \n // Create conflict object\n const conflictData = {\n original: conflictedData,\n ourVersion: ourDecrypted,\n theirVersion: theirDecrypted,\n filePath: filePath || null,\n filename: filePath ? path.basename(filePath) : null\n };\n \n // Store the conflict and get the ID\n const conflictId = conflictStorage.storeConflict(conflictData);\n conflictData.id = conflictId;\n \n // Emit a socket event with both versions\n sockets.emit('crypto:conflict', conflictData);\n \n // Return a formatted conflict with the decrypted content\n return `${JSON.stringify({\n ourVersion: ourDecrypted,\n theirVersion: theirDecrypted\n })}`;\n \n } catch (error) {\n // Type assertion for the error\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error('Error handling git conflict:', errorMessage);\n throw new Error(`Git conflict detected, but failed to process: ${errorMessage}`);\n }\n}\n","const {\n existsSync, mkdirSync, writeFileSync, readFileSync,\n unlinkSync,\n} = require('fs');\nconst pathfs = require('path');\nconst {\n readdir, mkdir, writeFile, readFile,\n unlink,\n} = require('fs/promises');\nconst { fdir } = require('fdir');\nconst PromiseB = require('bluebird');\nconst { sockets } = require('@runeya/common-socket-server');\nconst args = require('./args');\nconst { encrypt, decrypt, decryptFile } = require('./crypto');\nconst alasql = require('alasql');\n\nmodule.exports = new class {\n cache = {};\n\n getRootPath() {\n const rootPath = pathfs.resolve(args.rootPath, '.runeya/dbs');\n if (!existsSync(rootPath)) mkdirSync(rootPath, { recursive: true });\n return rootPath;\n }\n\n async getDbs(namespace = '') {\n const pathToDbs = pathfs.resolve(this.getRootPath(), namespace);\n if (!existsSync(pathToDbs)) await mkdir(pathToDbs, { recursive: true });\n return (await readdir(pathToDbs)).map((id) => id.replace(pathfs.extname(id), '').replace('.encrypted', ''));\n }\n\n async reencrypt(oldKey, newKey) {\n const api = new fdir().withFullPaths()\n .filter((path) => path.endsWith('encrypted.json'))\n .crawl(this.getRootPath());\n await PromiseB.map(api.withPromise(), async (file) => {\n const fileEncrypted = await readFile(file, 'utf-8');\n const additionnalNonce = file.split('.runeya').pop();\n const fileDecrypted = await decrypt(fileEncrypted, { additionnalNonce, encryptionKey: oldKey });\n const fileReEncrypted = await encrypt(fileDecrypted, { additionnalNonce, encryptionKey: newKey });\n await writeFile(file, fileReEncrypted, 'utf-8');\n });\n }\n\n getDb(id, { encrypted, defaultData } = { encrypted: true, defaultData: {} }) {\n const getPath = async () => {\n const persistencePath = pathfs.resolve(`${this.getRootPath()}/${id}${encrypted ? '.encrypted' : ''}.json`);\n if (!existsSync(pathfs.dirname(persistencePath))) await mkdirSync(pathfs.dirname(persistencePath), { recursive: true });\n if (!existsSync(persistencePath)) {\n let defaultDB = JSON.stringify(defaultData || [], null, 2);\n if (encrypted) defaultDB = await encrypt(defaultDB, { additionnalNonce: persistencePath.split('.runeya').pop() });\n await writeFile(persistencePath, defaultDB, 'utf-8');\n this.cache[id] = defaultDB;\n }\n return persistencePath;\n };\n const table = id.replace(/[^a-z0-9]|\\s+|\\r?\\n|\\r/gmi, \"_\");\n const read = async () => {\n if (this.cache[id]) return this.cache[id];\n const path = await getPath();\n const additionnalNonce = path.split('.runeya').pop();\n let db = readFileSync(path, 'utf-8');\n if (encrypted) {\n try {\n if (typeof db === 'string' && (\n db.includes('<<<<<<< HEAD') || \n db.includes('=======') || \n db.includes('>>>>>>>'))\n ) {\n db = await decryptFile(db, { additionnalNonce }, path);\n } else {\n db = await decrypt(db, { additionnalNonce })\n .catch((err) => {\n console.error(path, err);\n sockets.emit('system:wrongKey');\n throw err;\n });\n }\n } catch (err) {\n console.error(path, err);\n sockets.emit('system:wrongKey');\n throw err;\n }\n }\n this.cache[id] = JSON.parse(db);\n if (!alasql.tables[table]){\n await alasql(`CREATE TABLE ${table}`)\n }\n alasql.tables[table].data = this.cache[id];\n return this.cache[id];\n }\n const write = async (data) => {\n let db = JSON.stringify(data, null, 2);\n const path = await getPath();\n const additionnalNonce = path.split('.runeya').pop();\n if (encrypted) db = await encrypt(db, { additionnalNonce });\n writeFileSync(path, db, 'utf-8');\n this.cache[id] = data;\n if (alasql.tables[table]) {\n alasql.tables[table].data = data;\n }\n }\n const escapeQuote = (data) => {\n if (typeof data === 'string') {\n return data.replace(/'/g, \"''\");\n }\n return data;\n };\n const setValue = (item) => {\n if (item == null) {\n return 'NULL';\n }\n if (item instanceof Date && item.toISOString) {\n return `'${item.toISOString()}'`;\n }\n if (typeof item === 'string') {\n return `'${escapeQuote(item)}'`;\n }\n return `${item}`;\n };\n return {\n getPath,\n alasql: {\n table,\n buildUpdateQuery(data) {\n const set = []\n Object.keys(data).forEach(key => {\n set.push(`${key} = ${setValue(data[key])}`)\n })\n return set.join(', ')\n },\n read: async (sql) => {\n await read()\n return alasql.promise(sql)\n }, \n write: async (sql, value) => {\n await read()\n await alasql.promise(sql, value)\n await write(await alasql(`select * from ${table}`))\n }, \n },\n write,\n read,\n delete: async () => {\n delete this.cache[id];\n return unlink(await getPath());\n },\n };\n }\n}();\n","const PromiseB = require('bluebird');\nconst { randomUUID } = require('crypto');\nconst dbs = require('../../../servers/server/helpers/dbs');\nconst db = dbs.getDb(`documentations`)\nconst dbDocumentationTree = dbs.getDb(`documentations-tree`, {encrypted: true, defaultData: []}).alasql\nclass Documentation {\n /**\n * @param {import('@runeya/common-typings').NonFunctionProperties<Documentation>} documentation\n */\n constructor(documentation) {\n /** @type {string} */\n this.id = documentation.id || '';\n /** @type {string} */\n this.text = documentation.text || '';\n }\n\n static async load(id) {\n }\n\n static async all() {\n return db.alasql.select('Select * from ?')\n }\n\n static async find(envId) {\n const documentations = await this.all();\n return documentations.find((env) => env.id === envId);\n }\n\n async save() {\n const obj = this.toStorage();\n await dbs.getDb(`documentations/${this.id}`).write(obj);\n return this;\n }\n\n async update(env) {\n this.transform = env.transform;\n this.label = env.label;\n await dbs.getDb(`documentations/${this.id}`).write(this.toStorage());\n }\n\n async delete() {\n await dbs.getDb(`documentations/${this.id}`).delete();\n }\n\n toStorage() {\n return {\n id: this.id,\n label: this.label,\n transform: this.transform,\n };\n }\n}\n\nmodule.exports = Documentation;\n","const PromiseB = require('bluebird');\nconst { randomUUID } = require('crypto');\nconst dbs = require('../../../servers/server/helpers/dbs');\nconst { v4 } = require('uuid');\nconst dbLeafTree = dbs.getDb(`leafs-leafs`, {encrypted: true, defaultData: []}).alasql\nclass Leaf {\n /**\n * @param {import('@runeya/common-typings').NonFunctionProperties<Leaf>} leaf\n */\n constructor(leaf) {\n /** @type {string} */\n this.id = leaf.id || v4();\n /** @type {string} */\n this.docId = leaf.docId || '';\n /** @type {string} */\n this.serviceId = leaf.serviceId || '';\n /** @type {string} */\n this.label = leaf.label || '';\n /** @type {number} */\n this.position = leaf.position || -1;\n /** @type {string} */\n this.text = leaf.text || '';\n /** @type {string} */\n this.parentId = leaf.parentId || '';\n }\n\n static async getTree(serviceLabel) {\n const leafs = await dbLeafTree.read(`Select * from ${dbLeafTree.table} ${serviceLabel ? `where serviceId = '${serviceLabel}'` : `where serviceId=''`}`)\n return leafs\n }\n toStorage() {\n return {\n docId: this.docId,\n position: this.position,\n serviceId: this.serviceId,\n label: this.label,\n text: this.text,\n parentId: this.parentId,\n }\n }\n\n async remove() {\n return dbLeafTree.write(`DELETE from ${dbLeafTree.table} where id = '${this.id}'`)\n }\n\n static async find({id}) {\n const [leaf] = await dbLeafTree.read(`Select * from ${dbLeafTree.table} where id='${id}'`)\n return leaf ? new Leaf(leaf) : null\n }\n\n async save() {\n const leafExists = await Leaf.find({id: this.id})\n const storage = this.toStorage()\n const set = dbLeafTree.buildUpdateQuery(storage)\n await leafExists\n ? dbLeafTree.write(`update ${dbLeafTree.table} set ${set} where id='${this.id}'`)\n : dbLeafTree.write(`insert into ${dbLeafTree.table} (id, docId, position, serviceId, label, text, parentId) values ('${this.id}', '${this.docId}', ${this.position}, '${this.serviceId}', '${this.label.replace(/'/g, \"''\")}', '${this.text.replace(/'/g, \"''\")}', '${this.parentId}')`)\n return this\n }\n\n}\n\nmodule.exports = Leaf;\n","const express = require('express');\nconst Leaf = require('./Leaf');\nconst PromiseB = require('bluebird')\n\nconst router = express.Router();\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const { findService } = runeya;\n\n router.get('/documentation/tree', async (req, res) => {\n const service = findService(req.query.serviceId?.toString() || '');\n const result = await Leaf.getTree(service?.label)\n return res.send(result);\n });\n router.post('/documentation/tree/sort', async (req, res) => {\n const leafs = await PromiseB.mapSeries(req.body, async (_leaf, index) => {\n const leaf = await Leaf.find({ id: _leaf.id})\n if(!leaf) return\n leaf.position = index\n await leaf.save()\n return leaf\n })\n return res.send(leafs);\n });\n router.post('/documentation/tree', async (req, res) => {\n const result = await new Leaf({\n ...req.body,\n }).save()\n return res.send(result);\n });\n router.post('/documentation/tree/:key', async (req, res) => {\n const result = await new Leaf({\n ...req.body,\n id: req.params.key,\n }).save()\n return res.send(result);\n });\n\n router.delete('/documentation/tree/:key', async (req, res) => {\n const result = await Leaf.find({\n id: req.params.key,\n })\n if (result) return res.send(await result.remove())\n return res.send();\n });\n return router;\n};\n","const { readFile } = require('fs/promises');\r\nconst PromiseB = require('bluebird');\r\nconst pathfs = require('path');\r\nconst Documentation = require('./Documentation');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./Documentation')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Documentation',\r\n displayName: 'Documentation',\r\n description: 'Read documentation for a given service',\r\n icon: 'fas fa-book',\r\n // export: Documentation,\r\n placements: ['service'],\r\n order: 6,\r\n routes: require('./routes'),\r\n finder: async (search, runeya) => {\r\n // const services = runeya.getServices()?.filter((/** @type {any} */s) => s.documentation);\r\n // const servicesFiles = (await PromiseB.map(services, async (service) => {\r\n // const files = await runeya.documentation.getFlatFiles('.', service.documentation);\r\n // return PromiseB.filter(files, (leaf) => !leaf.isDir)?.map(async (path) => {\r\n // const content = path.path && await readFile(pathfs.resolve(service.documentation, path.path), { encoding: 'utf-8' }).catch(console.error);\r\n // return { service, path, content };\r\n // }) || [];\r\n // })).flat()\r\n // .filter((file) => runeya.helpers.searchString(file.path?.name || '', search) || runeya.helpers.searchString(file.content || '', search));\r\n // return [\r\n // ...servicesFiles.map((file) => ({\r\n // icon: 'fas fa-book',\r\n // title: file.path.name || '',\r\n // group: 'Documentation',\r\n // description: `Read documentation for ${file.service.label}`,\r\n // secondaryTitle: file.service.label,\r\n // url: { path: `/stack-single/${encodeURIComponent(file.service.label)}`, query: { tab: 'Documentation', leaf: file.path.path } },\r\n // })),\r\n // ];\r\n },\r\n};\r\nmodule.exports = plugin;\r\n\r\n/**\r\n * @typedef {{\r\n * id: string,\r\n * name: string,\r\n * isDir: boolean,\r\n * path: string,\r\n * ext: string,\r\n * opened: boolean,\r\n * children:Leaf[] | null\r\n * }} Leaf\r\n */\r\n","const express = require('express');\n\nconst router = express.Router();\nconst PromiseB = require('bluebird');\n\n/**\n *\n * @param {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<any>} plugin\n */\nfunction pluginToUrl(plugin) {\n for (let i = 0; i < plugin.placements.length; i += 1) {\n const placement = plugin.placements[i];\n if (typeof placement !== 'string') {\n if (placement.position === 'toolbox') {\n // @ts-ignore\n return `/toolbox${placement.goTo?.path || placement.goTo}`;\n }\n if (placement.position === 'sidebar') {\n // @ts-ignore\n return `${placement.goTo?.path || placement.goTo}`;\n }\n }\n }\n return '';\n}\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nconst routes = (runeya) => {\n const {\n getServices,\n helpers: { searchString },\n } = runeya;\n router.get('/finder/search', async (req, res) => {\n const search = req.query.q?.toString()?.toUpperCase() || '';\n /** @type {FinderChoice[]} */\n const services = getServices()\n .filter((service) => searchString(service?.label, search))\n .map((service) => ({\n title: service.label,\n description: service.description,\n group: 'Service',\n url: `/stack-single/${service.label}`,\n }));\n\n const { plugins } = runeya;\n const _plugins = (await PromiseB\n .map(Object.keys(plugins), (/** @type {keyof typeof plugins} */key) => plugins[key])\n .map(async (plugin) => [\n ...(await plugin?.finder?.(search, runeya)?.catch?.(() => ([])) || []),\n ...(searchString(plugin.name, search) ? [{\n title: plugin.displayName || plugin.name,\n description: plugin.description,\n group: 'Plugin',\n icon: plugin.icon,\n url: pluginToUrl(plugin) || '',\n }] : []),\n ]))\n .flat()\n .filter((a) => a?.url);\n\n /** @type {FinderChoice[]} */\n const result = [\n ...services,\n ..._plugins,\n ].filter((a) => a);\n res.send(result);\n });\n return router;\n};\n\nmodule.exports = routes;\n\n/**\n * @typedef {{\n * icon?: string,\n * title: string,\n * group?: string,\n * description?: string,\n * secondaryTitle?: string\n * secondaryDescription?: string,\n * url: import('vue-router').RouteLocationRaw | string,\n * }} FinderChoice\n */\n","const commandExists = require('command-exists');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Finder',\r\n displayName: 'Finder',\r\n description: 'Find all you want inside this app',\r\n icon: 'fab fa-git-alt',\r\n export: null,\r\n order: -1,\r\n placements: ['global', {\r\n position: 'sidebar',\r\n label: 'Finder',\r\n icon: 'fas fa-search',\r\n goTo: { path: '/Finder' },\r\n active: 'Finder',\r\n }],\r\n hidden: () => commandExists('git').then(() => false).catch(() => true),\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const { exec } = require('child_process');\n\nmodule.exports = {\n /**\n * @param {string} cmd\n * @param {import('child_process').ExecOptions} options\n * @returns {Promise<string>}\n */\n execAsync(cmd, options) {\n return new Promise((res, rej) => {\n exec(cmd, options, (err, stdout, stderr) => {\n if (err) return rej(stderr || err);\n return res(stdout);\n });\n });\n },\n /**\n * @param {string} cmd\n * @param {import('child_process').ExecOptions} options\n * @returns {Promise<string>}\n */\n execAsyncWithoutErr(cmd, options) {\n return new Promise((res) => {\n exec(cmd, options, (err, stdout) => {\n res(stdout);\n });\n });\n },\n /**\n * @param {string} cmd\n * @param {import('child_process').ExecOptions} options\n * @returns {Promise<string>}\n */\n execAsyncGetError(cmd, options) {\n return new Promise((res) => {\n exec(cmd, options, (err, stdout, stderr) => {\n res(stderr);\n });\n });\n },\n};\n","const dayjs = require('dayjs');\nconst { v4: uuid } = require('uuid');\n\nconst statusMessage = {\n 403: 'Not allowed',\n 404: 'Resource not found',\n 500: 'We cannot respond to your request for moment. Contact support for more information',\n};\nmodule.exports.statusMessage = statusMessage;\n\nclass HTTPError extends Error {\n /**\n *\n * @param {string} message\n * @param {number} code\n * @param {string} errorId\n * @param {string} date\n * @param {string} stack\n */\n constructor(\n message,\n code = 500,\n errorId = uuid(),\n date = dayjs().format('YYYY-MM-DD HH:mm:ss'),\n stack = '',\n ) {\n super(message);\n this.code = code || 500;\n this.errorId = errorId;\n this.date = date;\n this.message = process.env.NODE_ENV === 'production'\n ? statusMessage[this.code] || message?.toString() || message\n : message?.toString() || message || statusMessage[this.code];\n this.originalMessage = message;\n this.originalStack = stack || new Error().stack;\n }\n}\n\nmodule.exports = HTTPError;\n","const HTTPError = require('./HTTPError');\n\nmodule.exports = HTTPError;\n","const { existsSync } = require('fs');\nconst pathfs = require('path');\nconst { execAsync, execAsyncWithoutErr } = require('../../../servers/server/helpers/exec');\nconst HTTPError = require('@runeya/common-express-http-error');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nconst Git = (runeya) => {\n const { findService } = runeya;\n const searchGit = (path) => {\n if (existsSync(pathfs.resolve(path, '.git'))) return path;\n const parentPath = pathfs.resolve(path, '..');\n if (parentPath === pathfs.resolve('/')) return null;\n return searchGit(parentPath);\n };\n /** @param {import('../../../servers/server/models/Service')} service */\n const getGitRootPath = (service) => searchGit(service.getRootPath());\n /** @param {import('../../../servers/server/models/Service')} service */\n async function requirements(service) {\n if (!service) throw new Error('Git Error: Service not found');\n if (!service.git) throw new Error(`Git Error - ${service?.label}: Git option not set`);\n const path = getGitRootPath(service);\n if (!path) return false;\n if (!existsSync(path)) return false;\n return true;\n }\n return {\n /**\n * @param {string} serviceName\n * @param {{graphOnAll?: boolean}} param1\n */\n async getGraph(serviceName, { graphOnAll } = {}) {\n const service = findService(serviceName);\n if (!await requirements(service)) return [];\n const cmd = `git -c color.ui=always log --decorate=full --oneline --graph ${(graphOnAll ? '--all' : '')} -500`;\n const result = await execAsync(cmd, { cwd: getGitRootPath(service), env: process.env });\n return result.split('\\n');\n },\n /** @param {string} serviceName */\n async getBranches(serviceName, fetch = false) {\n const service = findService(serviceName);\n if (!await requirements(service)) return [];\n if (fetch) await this.fetch(serviceName);\n const origin = await this.getOrigin(serviceName);\n const unmergeableBranches = ['dev', 'develop', 'main', 'master'];\n const currentBranch = await this.getCurrentBranch(service.label);\n const mergedBranches = await execAsyncWithoutErr('git branch --no-color --merged develop', { cwd: getGitRootPath(service) })\n .then((branches) => branches.trim().split('\\n').map((a) => a.replace('*', '').trim()));\n const localBranches = await execAsyncWithoutErr('git branch --no-color', { cwd: getGitRootPath(service) })\n .then((res) => res.toString().trim().split('\\n').map((branch) => {\n const name = branch.replace('*', '').trim();\n return {\n name,\n isRemote: false,\n isCurrentBranch: currentBranch === name,\n canDelete: !unmergeableBranches.includes(name) && currentBranch !== name,\n merged: mergedBranches.includes(name) && !unmergeableBranches.includes(name) && currentBranch !== name,\n };\n }));\n const remoteBranches = await execAsyncWithoutErr('git branch --no-color -r', { cwd: getGitRootPath(service) })\n .then((res) => res.toString().trim().split('\\n').map((branch) => {\n const name = branch.replace('*', '').trim();\n return {\n name: name.replace(`${origin}/`, ''),\n isRemote: true,\n canDelete: false,\n merged: false,\n };\n })\n .filter((remoteBranch) => !localBranches.find((localBranch) => remoteBranch.name === localBranch.name)));\n return [\n ...localBranches,\n ...remoteBranches,\n ];\n },\n /** @param {string} serviceName */\n async getCurrentBranch(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return '';\n return (await execAsync('git rev-parse --abbrev-ref HEAD', { cwd: getGitRootPath(service) }).catch(err => {}))?.trim();\n },\n /**\n *\n * @param {string} serviceName\n * @param {string} branchName\n * @param {boolean} shouldPush\n * @returns\n */\n async addBranch(serviceName, branchName, shouldPush = false) {\n if (!branchName) throw new Error('Branch name is empty');\n const service = findService(serviceName);\n if (!await requirements(service)) return '';\n const res = (await execAsync(`git checkout -b ${branchName}`, { cwd: getGitRootPath(service) }))?.trim();\n if (shouldPush) await this.push(serviceName);\n return res;\n },\n /** @param {string} serviceName */\n async getStatus(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return [];\n return execAsyncWithoutErr('git -c color.status=no status -s', { cwd: getGitRootPath(service) })\n .then((res) => res.toString().trim().split('\\n')?.filter((a) => a));\n },\n /** @param {string} serviceName */\n async getDiff(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return '';\n return execAsync('git diff --minimal', { cwd: getGitRootPath(service) });\n },\n /**\n * @param {string} serviceName\n * @param {string} branchName\n */\n async changeBranch(serviceName, branchName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync(`git checkout ${branchName}`, { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /**\n * @param {string} serviceName\n * @param {string} branchName\n */\n async deleteBranch(serviceName, branchName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync(`git branch --delete ${branchName}`, { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /**\n * @param {string} serviceName\n * @param {string} branchName\n */\n async remoteDelta(serviceName, branchName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 0;\n const upstream = await execAsync('git rev-parse --abbrev-ref --symbolic-full-name @{u}', { cwd: getGitRootPath(service) }).catch(() => {});\n if (!upstream) {\n throw new HTTPError('BRANCH_NOT_PUSHED', 500.12578)\n }\n await execAsync(`git fetch origin ${branchName}`, { cwd: getGitRootPath(service) });\n const localCommit = await execAsync(`git log --oneline ${branchName}`, { cwd: getGitRootPath(service) });\n const remoteCommit = await execAsync(`git log --oneline origin/${branchName}`, { cwd: getGitRootPath(service) });\n return localCommit.trim().split('\\n').length - remoteCommit.trim().split('\\n').length;\n },\n /** @param {string} serviceName */\n async fetch(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync('git fetch', { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async reset(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync('git reset --hard', { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async pull(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n const origin = await this.getOrigin(serviceName);\n const currentBranch = await this.getCurrentBranch(service.label);\n await execAsync(`git pull ${origin} ${currentBranch}`, { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async getOrigin(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return '';\n return (await execAsync('git remote -v', { cwd: getGitRootPath(service) })).trim().split('\\n').find((a) => a?.includes('fetch'))?.split('\\t')[0]?.trim() || '';\n },\n /** @param {string} serviceName */\n async push(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n const origin = await this.getOrigin(serviceName);\n const currentBranch = await this.getCurrentBranch(service.label);\n await execAsync(`git push ${origin} ${currentBranch}`, { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async stash(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync('git add .', { cwd: getGitRootPath(service) });\n await execAsync('git stash', { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async stashPop(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync('git stash pop', { cwd: getGitRootPath(service) });\n await execAsync('git reset HEAD', { cwd: getGitRootPath(service) });\n return 'ok';\n },\n /** @param {string} serviceName */\n async stashList(serviceName) {\n const service = findService(serviceName);\n if (!await requirements(service)) return '';\n const list = await execAsync('git stash show', { cwd: getGitRootPath(service) })\n .catch(() => '');\n return list;\n },\n /**\n * @param {string} serviceName\n * @param {string} filePath\n */\n async checkoutFile(serviceName, filePath) {\n const service = findService(serviceName);\n if (!await requirements(service)) return 'ko';\n await execAsync(`git checkout ${filePath}`, { cwd: getGitRootPath(service) });\n return 'ok';\n },\n };\n};\n\nmodule.exports = Git;\n","const express = require('express');\r\n\r\nconst router = express.Router();\r\n\r\n/** @param {import('@runeya/common-typings').Runeya} runeya */\r\nmodule.exports = (runeya) => {\r\n const { git } = runeya;\r\n router.get('/git/:service/graph', async (req, res) => {\r\n const graph = await git.getGraph(req.params.service, { graphOnAll: req.query.graphOnAll === 'true' });\r\n res.json(graph);\r\n });\r\n router.get('/git/:service/branches', async (req, res) => {\r\n const branches = await git.getBranches(req.params.service);\r\n res.json(branches);\r\n });\r\n router.get('/git/:service/status', async (req, res) => {\r\n const status = await git.getStatus(req.params.service);\r\n res.json(status);\r\n });\r\n router.get('/git/:service/diff', async (req, res) => {\r\n const diff = await git.getDiff(req.params.service);\r\n res.json(diff);\r\n });\r\n router.post('/git/:service/branch/:branchName/change', async (req, res) => {\r\n await git.changeBranch(req.params.service, req.params.branchName)\r\n .then((result) => res.json(result));\r\n });\r\n router.delete('/git/:service/branch/:branchName', async (req, res) => {\r\n await git.deleteBranch(req.params.service, req.params.branchName)\r\n .then((result) => res.json(result));\r\n });\r\n\r\n router.get('/git/:service/branch/:branchName/remote-delta', async (req, res) => {\r\n await git.remoteDelta(req.params.service, req.params.branchName)\r\n .then((result) => res.json(result));\r\n });\r\n\r\n router.post('/git/:service/fetch', async (req, res) => {\r\n await git.fetch(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n\r\n router.delete('/git/:service/reset', async (req, res) => {\r\n await git.reset(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n\r\n router.get('/git/:service/current-branch', async (req, res) => {\r\n const currentBranch = await git.getCurrentBranch(req.params.service);\r\n res.json(currentBranch);\r\n });\r\n\r\n router.post('/git/:service/add-branch', async (req, res) => {\r\n const currentBranch = await git.addBranch(req.params.service, req.body.name, !!req.body.shouldPush);\r\n res.json(currentBranch);\r\n });\r\n router.post('/git/:service/pull', async (req, res) => {\r\n await git.pull(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n router.post('/git/:service/stash', async (req, res) => {\r\n await git.stash(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n router.post('/git/:service/stash-pop', async (req, res) => {\r\n await git.stashPop(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n router.post('/git/:service/stash-list', async (req, res) => {\r\n await git.stashList(req.params.service)\r\n .then((result) => res.json(result));\r\n });\r\n router.delete('/git/:service/checkout/:file', async (req, res) => {\r\n await git.checkoutFile(req.params.service, req.params.file.trim())\r\n .then((result) => res.json(result));\r\n });\r\n\r\n return router;\r\n};\r\n","const commandExists = require('command-exists');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./Git')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Git',\r\n displayName: 'Git',\r\n description: 'View and manage git across whole projects',\r\n icon: 'fab fa-git-alt',\r\n export: require('./Git'),\r\n placements: ['service', {\r\n position: 'sidebar',\r\n label: 'GIT',\r\n icon: 'fab fa-git-alt',\r\n goTo: { path: '/Git-NotUpToDate' },\r\n active: 'Git-NotUpToDate',\r\n }],\r\n order: 2,\r\n hidden: (service, stack, placement) => {\r\n if (placement === 'sidebar') return commandExists('git').then(() => false).catch(() => true);\r\n if (placement === 'service' && service?.git?.remote) return false;\r\n return true;\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\nconst { Octokit } = require('fix-esm').require('@octokit/core');\nconst { restEndpointMethods } = require('fix-esm').require('@octokit/plugin-rest-endpoint-methods');\n\nconst router = express.Router();\n\nconst MyOctokit = Octokit.plugin(restEndpointMethods);\n\n/** @type {Octokit & import('@octokit/plugin-rest-endpoint-methods').Api | null} */\nlet octokit = process.env.RUNEYA_GH_APIKEY\n ? new MyOctokit({ auth: process.env.RUNEYA_GH_APIKEY })\n : null;\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const { findService } = runeya;\n\n router.get('/github/service/:label/ready', async (req, res) => {\n requirements();\n if (!octokit) return null;\n const { data: { login } } = await octokit.rest.users.getAuthenticated();\n return res.send(login);\n });\n\n router.post('/github/service/:label/apikey', async (req, res) => {\n const { apikey } = req.body;\n if (!apikey) return res.status(400).send('apikey not found in body');\n const _octokit = new Octokit.Octokit({ auth: apikey });\n const { data: { login } } = await _octokit.rest.users.getAuthenticated();\n octokit = _octokit;\n return res.send(login);\n });\n\n router.get('/github/service/:label/whoami', async (req, res) => {\n requirements();\n if (!octokit) return;\n const { data: { login } } = await octokit.rest.users.getAuthenticated();\n res.json({ loggedAs: login });\n });\n\n router.get('/github/service/:label/pull-requests', async (req, res) => {\n const service = findService(req.params.label);\n if (!service) return res.status(404).send('Service not found');\n const [owner, repo] = `${new URL(service.git.home).pathname.replace('.git', '')}`.split('/').slice(-2);\n requirements();\n if (!octokit) return null;\n const { data } = await octokit.rest.pulls.list({ owner, repo });\n return res.json(data);\n });\n\n return router;\n};\n\nfunction requirements() {\n if (!octokit && !process.env.RUNEYA_GH_APIKEY) {\n throw new Error('github api is not initialized');\n } else if (!octokit) {\n octokit = new MyOctokit({ auth: process.env.RUNEYA_GH_APIKEY });\n }\n}\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Github',\r\n displayName: 'Github',\r\n description: 'View pull requests for a given service',\r\n icon: 'fab fa-github',\r\n export: null,\r\n placements: ['service'],\r\n order: 3,\r\n /** @param {import('../../../servers/server/models/Service')} service */\r\n hidden: async (service) => {\r\n if (!service) return true;\r\n return !service.git?.remote?.includes('github.com');\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const { v4 } = require('uuid');\n\n/** @type {GlobalScript[]} */\nconst globalScripts = [];\n/** @type {Record<string, TrackStep>} */\nconst currentScriptsByCommunicationId = {};\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nconst GlobalScripts = (runeya) => {\n const { Socket } = runeya;\n return {\n /** @param {GlobalScript} script */\n addScript(script) {\n const index = globalScripts.findIndex((s) => s.label === script.label);\n if (index >= 0) {\n globalScripts.splice(index, 1);\n }\n globalScripts.push(script);\n runeya.Socket.emit('reloadScripts');\n },\n getScripts() {\n return globalScripts;\n },\n /** @param {string} label */\n getScript(label) {\n const scripts = this.getScripts();\n const script = scripts.find((s) => s.label === label);\n return script;\n },\n /**\n * @param {string} scriptId\n * @param {string} stepLabel\n */\n getStep(scriptId, stepLabel) {\n const script = this.getScript(scriptId);\n if (!script) return null;\n const step = script.pipeline.find((st) => st.id === stepLabel);\n if (!step) return null;\n return step;\n },\n /** @param {string} id */\n launchScript(id) {\n const script = this.getScript(id);\n if (!script) throw new Error(`Script ${id} not found`);\n const communicationId = v4();\n\n /** @type {TrackStep} */\n const track = {\n scriptId: script.label,\n currentStep: script.pipeline[0].id,\n loadingStep: script.pipeline[0].id,\n steps: {},\n output: {},\n prompts: {},\n };\n currentScriptsByCommunicationId[communicationId] = track;\n /** @param {import(\"./GlobalScripts\").GlobalScript['pipeline'][number]} step */\n function getStepIndex(step) {\n return (script?.pipeline || []).indexOf(step);\n }\n Socket.on(communicationId, async (\n /** @type {import('ws').WebSocket} */ socket,\n /** @type {string} */ event,\n /** @type {any} */ data,\n ) => {\n /** @type {ScriptStep | null} */\n let step = null;\n // eslint-disable-next-line no-cond-assign\n while (step = this.getStep(script.label, track.currentStep)) {\n const index = getStepIndex(step);\n const nextStep = index >= 0 ? script.pipeline[index + 1]?.id : '';\n track.loadingStep = step.id;\n track.steps[track.currentStep] = {\n ...track.steps[track.currentStep],\n isValidated: false,\n error: undefined,\n printData: undefined,\n };\n socket.emit(communicationId, 'track', track);\n\n try {\n if (step.skip) {\n const shouldSkip = await step.skip(track.output, track.prompts);\n if (shouldSkip) {\n track.steps[track.currentStep].skipped = true;\n track.loadingStep = '';\n track.currentStep = nextStep;\n socket.emit(communicationId, 'track', track);\n continue;\n }\n }\n } catch (error) {\n console.error('Script error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n break;\n }\n\n const shouldBreak = await prompt(step, track, event, data);\n if (shouldBreak) break;\n if (event === 'validate-prompt') event = '';\n\n if (step.script) {\n try {\n track.output[track.currentStep] = await step.script(track.output, track.prompts);\n } catch (error) {\n console.error('Script error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n break;\n }\n }\n\n if (step.print) {\n try {\n track.steps[track.currentStep].printData = await step.print(track.output, track.prompts);\n await new Promise((resolve) => setTimeout(() => { resolve(null); }, 0)); // It will not pass to next step without this if step is very fast\n } catch (error) {\n console.error('Print error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n break;\n }\n }\n\n track.steps[track.currentStep].isValidated = true;\n track.currentStep = nextStep;\n }\n track.loadingStep = '';\n socket.emit(communicationId, 'track', track);\n });\n return communicationId;\n },\n };\n};\n\nmodule.exports = GlobalScripts;\n\n/**\n *\n * @param {ScriptStep} step\n * @param {TrackStep} track\n * @param {string} event\n * @param {any} data\n * @returns\n */\nasync function prompt(step, track, event, data) {\n if (!step.prompt) return false;\n if (event === 'validate-prompt') {\n if (step.prompt?.validation) {\n try {\n const msgError = await step.prompt.validation(data);\n if (msgError) {\n track.steps[track.currentStep].error = msgError;\n return true;\n }\n track.prompts[track.currentStep] = data;\n } catch (error) {\n console.error('Script error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n return true;\n }\n } else {\n track.prompts[track.currentStep] = data;\n }\n return false;\n }\n if (step.prompt.defaultValue) {\n try {\n const defaultValue = await step.prompt.defaultValue(track.output);\n track.steps[track.currentStep].promptValue = defaultValue;\n } catch (error) {\n console.error('Script error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n return true;\n }\n }\n if (step.prompt.options) {\n try {\n const options = await step.prompt.options(track.output);\n track.steps[track.currentStep].promptOptions = options;\n } catch (error) {\n console.error('Script error');\n console.error(error);\n track.steps[track.currentStep].error = error.message || error;\n return true;\n }\n }\n\n return true;\n}\n\n/**\n * @typedef {{\n * label: string,\n * id: string,\n * skip?: (output: Record<string, any>, prompts: Record<string, any>) => boolean | Promise<boolean>\n * prompt?:{\n * question: string,\n * options?: (output: Record<string, any>) => ({label: string, value: string}[]) | Promise<{label: string, value: string}[]>,\n * defaultValue?: (output: Record<string, any>) => any,\n * type?: 'string' | 'number' | 'boolean' | 'array' | 'select'| 'multi-select',\n* validation?: (value: any) => (string | null) | Promise<string | null>\n * },\n * script?: (output: Record<string, any>,prompts: Record<string, any>) => any,\n * print?: (output: Record<string, any>, prompts: Record<string, any>) => any,\n * }} ScriptStep\n */\n\n/**\n * @typedef {{\n * label: string,\n * pipeline: ScriptStep[]}} GlobalScript\n */\n\n/**\n * @typedef {{\n * scriptId: string,\n * currentStep: string,\n * loadingStep: string,\n * steps: Record<string, {\n * error?: string,\n * isValidated: boolean,\n * skipped?: boolean,\n * printData?: string,\n * promptValue?: string,\n * promptOptions?: {label: string, value: string}[],\n * }>\n * output: Record<string, any>\n * prompts: Record<string, any>\n * }} TrackStep\n */\n","const express = require('express');\n\nconst router = express.Router();\n\n/** @param {import('@runeya/common-typings').Runeya} Stack */\nmodule.exports = (Stack) => {\n const { globalScripts } = Stack;\n router.get('/global-scripts/', async (req, res) => {\n res.json(globalScripts.getScripts());\n });\n\n router.get('/global-scripts/:id', async (req, res) => {\n const script = await globalScripts.getScript(req.params.id);\n res.json(script);\n });\n\n router.post('/global-scripts/:id', async (req, res) => {\n const communicationId = await globalScripts.launchScript(req.params.id);\n res.json(communicationId);\n });\n return router;\n};\n","const GlobalScripts = require('./GlobalScripts');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<GlobalScripts>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Global scripts',\r\n displayName: 'Global scripts',\r\n description: 'Launch scripts and rule the world',\r\n icon: 'fas fa-columns',\r\n export: GlobalScripts,\r\n placements: [\r\n {\r\n position: 'dev-ops',\r\n label: 'Global scripts',\r\n iconText: '{}',\r\n goTo: { path: '/GlobalScripts' },\r\n active: 'GlobalScripts',\r\n },\r\n ],\r\n finder: (search, runeya) => {\r\n const scripts = runeya.globalScripts.getScripts()\r\n .filter((/** @type {*} */script) => script.label.toUpperCase()?.includes(search?.toUpperCase()));\r\n return [\r\n ...scripts.map((/** @type {*} */script) => ({\r\n icon: 'fas fa-cog',\r\n title: script.label,\r\n group: 'Global scripts',\r\n description: '',\r\n secondaryTitle: '',\r\n url: { path: '/DevOps/GlobalScripts', query: { script: script.label } },\r\n })),\r\n ];\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const axios = require('axios').default;\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst HttpClient = (runeya) => ({\n /**\n * Send HTTP request\n * @param {Object} options - Request options\n * @param {string} options.method - HTTP method (GET, POST, PUT, DELETE, etc.)\n * @param {string} options.url - Request URL\n * @param {Object} [options.headers] - Request headers\n * @param {Object|string} [options.body] - Request body\n * @param {Object} [options.params] - Query parameters\n * @returns {Promise<Object>} Response data\n */\n sendRequest: async ({ method, url, headers = {}, body = null, params = {} }) => {\n try {\n const config = {\n method,\n url,\n headers,\n params,\n };\n\n if (body) {\n config.data = body;\n }\n\n const startTime = Date.now();\n const response = await axios(config);\n const endTime = Date.now();\n \n return {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data,\n responseTime: endTime - startTime,\n };\n } catch (error) {\n // Handle axios error responses\n if (error && typeof error === 'object' && 'response' in error) {\n const axiosError = /** @type {import('axios').AxiosError} */ (error);\n return {\n status: axiosError.response?.status,\n statusText: axiosError.response?.statusText,\n headers: axiosError.response?.headers,\n data: axiosError.response?.data,\n error: true,\n };\n }\n throw error;\n }\n },\n});\n\nmodule.exports = HttpClient; ","const express = require('express');\nconst router = express.Router();\nconst HttpClient = require('./HttpClient');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const httpClient = HttpClient(runeya);\n \n router.post('/http-client/request', async (req, res) => {\n try {\n const { method, url, headers, body, params } = req.body;\n const response = await httpClient.sendRequest({\n method,\n url,\n headers,\n body,\n params\n });\n res.json(response);\n } catch (error) {\n res.status(500).json({ \n error: true, \n message: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined\n });\n }\n });\n\n router.get('/http-client/history', (req, res) => {\n // In a real implementation, this would fetch from a persistent store\n res.json([]);\n });\n\n router.post('/http-client/history', (req, res) => {\n // In a real implementation, this would save to a persistent store\n res.json({ success: true });\n });\n\n return router;\n}; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./HttpClient')>} */\nconst plugin = {\n enabled: true,\n name: 'HttpClient',\n displayName: 'HTTP Client',\n description: 'Test HTTP endpoints like Postman',\n icon: 'fas fa-exchange-alt',\n placements: [\n {\n position: 'toolbox',\n label: 'HTTP Client',\n icon: 'fas fa-exchange-alt',\n goTo: { path: '/HttpClient' },\n active: 'HttpClient',\n },\n ],\n export: require('./HttpClient'),\n order: 7,\n routes: require('./routes'),\n};\n\nmodule.exports = plugin; ","const fs = require('fs');\nconst path = require('path');\nconst yaml = require('js-yaml');\nconst xmljs = require('xml-js');\nconst Ajv = require('ajv').default;\n\nclass JSONFormatter {\n /**\n * Validate JSON against a schema\n * @param {Object} json - The JSON object to validate\n * @param {Object} schema - The JSON schema\n * @returns {Object} Validation result\n */\n validateSchema(json, schema) {\n const ajv = new Ajv();\n const validate = ajv.compile(schema);\n const valid = validate(json);\n return {\n valid,\n errors: validate.errors || []\n };\n }\n\n /**\n * Convert JSON to YAML\n * @param {Object} json - The JSON object to convert\n * @returns {string} YAML string\n */\n jsonToYaml(json) {\n return yaml.dump(json);\n }\n\n /**\n * Convert YAML to JSON\n * @param {string} yamlStr - The YAML string to convert\n * @returns {Object} JSON object\n */\n yamlToJson(yamlStr) {\n return yaml.load(yamlStr);\n }\n\n /**\n * Convert JSON to XML\n * @param {Object} json - The JSON object to convert\n * @returns {string} XML string\n */\n jsonToXml(json) {\n return xmljs.js2xml(json, { compact: true, spaces: 2 });\n }\n\n /**\n * Convert XML to JSON\n * @param {string} xmlStr - The XML string to convert\n * @returns {Object} JSON object\n */\n xmlToJson(xmlStr) {\n return xmljs.xml2js(xmlStr, { compact: true });\n }\n\n /**\n * Compress JSON (remove whitespace)\n * @param {Object|string} json - The JSON object or string to compress\n * @returns {string} Compressed JSON string\n */\n compressJson(json) {\n const jsonObj = typeof json === 'string' ? JSON.parse(json) : json;\n return JSON.stringify(jsonObj);\n }\n\n /**\n * Pretty print JSON (add indentation)\n * @param {Object|string} json - The JSON object or string to format\n * @param {number} indentation - Number of spaces for indentation\n * @returns {string} Formatted JSON string\n */\n prettyPrintJson(json, indentation = 2) {\n const jsonObj = typeof json === 'string' ? JSON.parse(json) : json;\n return JSON.stringify(jsonObj, null, indentation);\n }\n\n /**\n * Calculate statistics about a JSON object\n * @param {Object} json - The JSON object\n * @returns {Object} Statistics object\n */\n getJsonStats(json) {\n const stats = {\n size: 0,\n stringifiedSize: 0,\n depth: 0,\n keys: 0,\n arrays: 0,\n objects: 0,\n primitives: 0\n };\n \n // Calculate size in bytes\n stats.stringifiedSize = JSON.stringify(json).length;\n stats.size = Buffer.from(JSON.stringify(json)).length;\n \n // Calculate other stats\n const traverse = (obj, depth = 0) => {\n if (depth > stats.depth) stats.depth = depth;\n \n if (Array.isArray(obj)) {\n stats.arrays++;\n for (const item of obj) {\n if (typeof item === 'object' && item !== null) {\n traverse(item, depth + 1);\n } else {\n stats.primitives++;\n }\n }\n } else if (typeof obj === 'object' && obj !== null) {\n stats.objects++;\n const objKeys = Object.keys(obj);\n stats.keys += objKeys.length;\n \n for (const key of objKeys) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n traverse(obj[key], depth + 1);\n } else {\n stats.primitives++;\n }\n }\n }\n };\n \n traverse(json);\n return stats;\n }\n\n /**\n * Query JSON using JSONPath\n * @param {Object} json - The JSON object\n * @param {string} query - JSONPath query\n * @returns {Array} Query results\n */\n queryJson(json, query) {\n // Simple implementation of JSON path query\n // In a real implementation, use a library like jsonpath\n if (query === '$') return json;\n \n // This is a placeholder - in real implementation, use proper jsonpath library\n return [{ message: 'JSONPath implementation would return results here' }];\n }\n}\n\nmodule.exports = new JSONFormatter(); ","const express = require('express');\nconst router = express.Router();\nconst JSONFormatter = require('./JSONFormatter');\n\n/**\n * Route handler for JSON formatter enhanced features\n * @param {import('../../../../servers/server/models/stack')} runeya - Runeya instance\n * @returns {import('express').Router} Express router\n */\nmodule.exports = function(runeya) {\n // Validate JSON schema\n router.post('/JSONFormatterEnhanced/validate', (req, res) => {\n try {\n const { json, schema } = req.body;\n const result = JSONFormatter.validateSchema(json, schema);\n res.json(result);\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Convert JSON to YAML\n router.post('/JSONFormatterEnhanced/to-yaml', (req, res) => {\n try {\n const { json } = req.body;\n const yaml = JSONFormatter.jsonToYaml(json);\n res.json({ yaml });\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Convert YAML to JSON\n router.post('/JSONFormatterEnhanced/from-yaml', (req, res) => {\n try {\n const { yaml } = req.body;\n const json = JSONFormatter.yamlToJson(yaml);\n res.json({ json });\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Convert JSON to XML\n router.post('/JSONFormatterEnhanced/to-xml', (req, res) => {\n try {\n const { json } = req.body;\n const xml = JSONFormatter.jsonToXml(json);\n res.json({ xml });\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Convert XML to JSON\n router.post('/JSONFormatterEnhanced/from-xml', (req, res) => {\n try {\n const { xml } = req.body;\n const json = JSONFormatter.xmlToJson(xml);\n res.json({ json });\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Get statistics for JSON\n router.post('/JSONFormatterEnhanced/stats', (req, res) => {\n try {\n const { json } = req.body;\n const stats = JSONFormatter.getJsonStats(json);\n res.json(stats);\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n // Query JSON using JSONPath\n router.post('/JSONFormatterEnhanced/query', (req, res) => {\n try {\n const { json, query } = req.body;\n const results = JSONFormatter.queryJson(json, query);\n res.json(results);\n } catch (error) {\n res.status(400).json({ error: error instanceof Error ? error.message : String(error) });\n }\n });\n\n return router;\n}; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./JSONFormatter')>} */\nconst plugin = {\n enabled: true,\n name: 'JSONFormatter',\n displayName: 'JSON',\n description: 'View, edit, validate, transform and explore JSON data',\n icon: 'fas fa-brackets-curly',\n export: require('./JSONFormatter'),\n placements: [\n {\n position: 'toolbox',\n label: 'JSON',\n iconText: '{}',\n goTo: { path: '/JSONFormatter' },\n active: 'JSONFormatter',\n },\n ],\n routes: require('./routes'),\n order: 6,\n};\nmodule.exports = plugin; ","const jsonwebtoken = require('jsonwebtoken');\n\nclass JWT {\n /**\n * Decode a JWT without verifying signature\n * @param {string} token JWT token string\n * @returns {object} Decoded JWT payload\n */\n decode(token) {\n return jsonwebtoken.decode(token, { complete: true });\n }\n\n /**\n * Verify and decode a JWT token\n * @param {string} token JWT token string\n * @param {string} secret Secret key for verification\n * @param {object} options JWT verify options\n * @returns {object} Decoded JWT if valid\n */\n verify(token, secret, options = {}) {\n try {\n return jsonwebtoken.verify(token, secret, options);\n } catch (err) {\n const error = err instanceof Error ? err.message : String(err);\n return { error };\n }\n }\n\n /**\n * Generate a new JWT token\n * @param {object} payload Data to encode in the token\n * @param {string} secret Secret key for signing\n * @param {object} options JWT sign options\n * @returns {string} Signed JWT token\n */\n generate(payload, secret, options = {}) {\n return jsonwebtoken.sign(payload, secret, options);\n }\n\n /**\n * Analyze token structure and details\n * @param {string} token JWT token string\n * @returns {object} Analysis results\n */\n analyze(token) {\n try {\n const decoded = this.decode(token);\n if (!decoded) return { error: 'Invalid token format' };\n\n const parts = token.split('.');\n const analysis = {\n structure: {\n header: decoded.header,\n payload: decoded.payload,\n signature: parts[2] ? true : false\n },\n validation: {\n hasExpiry: decoded.payload.exp ? true : false,\n hasIssuedAt: decoded.payload.iat ? true : false,\n hasNotBefore: decoded.payload.nbf ? true : false,\n }\n };\n\n // Check expiration\n if (analysis.validation.hasExpiry) {\n const expiry = new Date(decoded.payload.exp * 1000);\n const now = new Date();\n analysis.validation.isExpired = now > expiry;\n analysis.validation.expiresIn = analysis.validation.isExpired ? \n 'Expired' : \n this.formatTimeRemaining(expiry.getTime() - now.getTime());\n }\n\n // Check algorithm security\n if (decoded.header.alg) {\n analysis.security = {\n algorithm: decoded.header.alg,\n isSecure: decoded.header.alg !== 'none' && !decoded.header.alg.startsWith('HS')\n };\n }\n\n return analysis;\n } catch (err) {\n const error = err instanceof Error ? err.message : String(err);\n return { error };\n }\n }\n\n /**\n * Format milliseconds to human readable time\n * @param {number} ms Milliseconds\n * @returns {string} Formatted time string\n */\n formatTimeRemaining(ms) {\n if (ms <= 0) return 'Expired';\n \n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n \n if (days > 0) return `${days} day(s)`;\n if (hours > 0) return `${hours} hour(s)`;\n if (minutes > 0) return `${minutes} minute(s)`;\n return `${seconds} second(s)`;\n }\n}\n\nmodule.exports = new JWT(); ","const express = require('express');\nconst JWT = require('./JWT');\n\nconst router = express.Router();\n\nmodule.exports = () => {\n // Decode JWT token\n router.post('/JWT/', async (req, res) => {\n const { jwt } = req.body;\n try {\n res.json(JWT.decode(jwt));\n } catch (err) {\n res.status(400).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Analyze JWT token structure and details\n router.post('/JWT/analyze', async (req, res) => {\n const { jwt } = req.body;\n try {\n res.json(JWT.analyze(jwt));\n } catch (err) {\n res.status(400).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Verify JWT signature\n router.post('/JWT/verify', async (req, res) => {\n const { jwt, secret, options } = req.body;\n try {\n res.json(JWT.verify(jwt, secret, options));\n } catch (err) {\n res.status(400).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Generate a new JWT\n router.post('/JWT/generate', async (req, res) => {\n const { payload, secret, options } = req.body;\n try {\n const token = JWT.generate(payload, secret, options);\n res.json({ token });\n } catch (err) {\n res.status(400).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./JWT')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'JWT',\r\n displayName: 'JWT',\r\n description: 'Decode, verify and create JSON Web Tokens',\r\n icon: 'fas fa-key',\r\n export: require('./JWT'),\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'JWT',\r\n icon: 'fas fa-key',\r\n goTo: { path: '/JWT' },\r\n active: 'JWT',\r\n },\r\n ],\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\n\r\nmodule.exports = plugin;\r\n","const kanban = {\n /** @param {import('@runeya/common-typings').Runeya} runeya */\n getSave(runeya) {\n return runeya.getSave('kanban.json', {\n /** @type {Partial<import('@runeya/common-typings').NonFunctionProperties<import('./Kanban').BoardType>['prototype']>[]} */\n boards: [],\n /** @type {Partial<import('@runeya/common-typings').NonFunctionProperties<import('./Kanban').ColumnType>['prototype']>[]} */\n columns: [],\n /** @type {Partial<import('@runeya/common-typings').NonFunctionProperties<import('./Kanban').CardType>['prototype']>[]} */\n cards: [],\n }, {\n afterGet(data) {\n if (!data.boards) data.boards = [];\n if (!data.columns) data.columns = [];\n if (!data.cards) data.cards = [];\n },\n beforeSave(data) {\n if (!data.boards) data.boards = [];\n if (!data.columns) data.columns = [];\n if (!data.cards) data.cards = [];\n },\n });\n },\n};\nmodule.exports = kanban;\n","/* eslint-disable max-classes-per-file */\nconst { v4 } = require('uuid');\nconst { getSave: _getSave } = require('./save');\n\n/** @type {import('@runeya/common-typings').Runeya | null} */\nlet runeya = null;\n\nfunction getSave() {\n if (!runeya) throw new Error('Call init before');\n const { data, save } = _getSave(runeya);\n return { data, save };\n}\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nclass Board {\n /** @param {Partial<import('@runeya/common-typings').NonFunctionProperties<Board>>} board */\n constructor(board = {}) {\n /** @type {string} */\n this.id = board.id || v4();\n /** @type {string | undefined} */\n this.name = board.name;\n /** @type {string[]} */\n this.columnIds = board.columnIds || [];\n }\n\n /** @returns {Board[]} */\n static all() {\n const { data } = getSave();\n // @ts-ignore\n return data.boards.map((/** @type {*} */b) => (b ? new Board(b) : null)).filter((a) => a);\n }\n\n /** @param {string} id */\n static get(id) {\n const { data } = getSave();\n const board = data.boards.find((d) => d?.id === id);\n return board ? new Board(board) : null;\n }\n\n /**\n *\n * @returns {Column[]}\n */\n getColumns() {\n // @ts-ignore\n return this.columnIds.map((columnId) => Column.get(columnId)).filter((a) => a);\n }\n\n delete() {\n const { data, save } = getSave();\n this.getColumns().forEach((c) => c.delete());\n data.boards = data.boards.filter((b) => b?.id !== this.id);\n save();\n }\n\n /** @param {string} id */\n getColumn(id) {\n return this.getColumns().find((c) => c?.id === id);\n }\n\n /** @param {Partial<import('@runeya/common-typings').NonFunctionProperties<Column>>} column */\n addColumn(column) {\n const savedColumn = new Column({ ...column, boardId: this.id }).save();\n this.columnIds = [...new Set([...this.columnIds, savedColumn.id])];\n this.save();\n return savedColumn;\n }\n\n save() {\n const { data, save } = getSave();\n const existing = data.boards.find((b) => b?.id === this.id);\n if (existing) {\n Object.assign(existing, { ...this });\n } else {\n data.boards.push(this);\n }\n save();\n return this;\n }\n}\n\nclass Column {\n /** @param {Partial<import('@runeya/common-typings').NonFunctionProperties<Column>>} column */\n constructor(column = {}) {\n /** @type {string} */\n this.id = column.id || v4();\n /** @type {string | undefined} */\n this.name = column.name;\n /** @type {string | undefined} */\n this.color = column.color;\n /** @type {string | undefined} */\n this.boardId = column.boardId;\n /** @type {string[]} */\n this.cardIds = column.cardIds || [];\n }\n\n /** @param {string} id */\n static get(id) {\n const { data } = getSave();\n const column = data.columns.find((d) => d?.id === id);\n return column ? new Column(column) : null;\n }\n\n /** @returns {Card[]} */\n getCards() {\n // @ts-ignore\n return this.cardIds.map((columnId) => Card.get(columnId)).filter((a) => a);\n }\n\n /** @param {string} id */\n getCard(id) {\n return this.getCards().find((c) => c?.id === id);\n }\n\n /** @param {Partial<import('@runeya/common-typings').NonFunctionProperties<Card>>} card */\n addCard(card) {\n const savedColumn = new Card({ ...card, boardId: this.boardId, columnId: this.id }).save();\n this.cardIds = [...new Set([...this.cardIds, savedColumn.id])];\n this.save();\n return savedColumn;\n }\n\n delete() {\n const { data, save } = getSave();\n this.getCards().forEach((c) => c.delete());\n data.columns = data.columns.filter((b) => b?.id !== this.id);\n save();\n }\n\n save() {\n const { data, save } = getSave();\n const existing = data.columns.find((b) => b?.id === this.id);\n if (existing) {\n Object.assign(existing, { ...this });\n } else {\n data.columns.push(this);\n }\n save();\n return this;\n }\n}\n\nclass Card {\n /** @param {Partial<import('@runeya/common-typings').NonFunctionProperties<Card>>} card */\n constructor(card = {}) {\n /** @type {string} */\n this.id = card.id || v4();\n /** @type {string | undefined} */\n this.name = card.name;\n /** @type {string | undefined} */\n this.description = card.description;\n\n /** @type {string | undefined} */\n this.boardId = card.boardId;\n /** @type {string | undefined} */\n this.columnId = card.columnId;\n }\n\n /** @param {string} id */\n static get(id) {\n const { data } = getSave();\n const cards = data.cards.find((d) => d?.id === id);\n return cards ? new Card(cards) : null;\n }\n\n delete() {\n const { data, save } = getSave();\n data.cards = data.cards.filter((b) => b?.id !== this.id);\n save();\n }\n\n save() {\n const { data, save } = getSave();\n const existing = data.cards.find((b) => b?.id === this.id);\n if (existing) {\n Object.assign(existing, { ...this });\n } else {\n data.cards.push(this);\n }\n save();\n return this;\n }\n}\n/** @param {import('@runeya/common-typings').Runeya} _runeya */\nconst Kanban = (_runeya) => {\n runeya = _runeya;\n return {\n Card,\n Column,\n Board,\n };\n};\n\nmodule.exports = Kanban;\n\n/** @typedef {typeof Column} ColumnType */\n/** @typedef {typeof Card} CardType */\n/** @typedef {typeof Board} BoardType */\n","const express = require('express');\n\nconst router = express.Router();\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const { Board } = require('./Kanban')(runeya);\n\n router.get('/kanban/boards', async (req, res) => {\n res.json(Board.all());\n });\n router.post('/kanban/boards', async (req, res) => {\n const board = new Board(req.body).save();\n res.json(board);\n });\n router.delete('/kanban/boards/:boardId', async (req, res) => {\n const board = Board.get(req.params.boardId);\n board?.delete();\n res.json(board);\n });\n\n router.get('/kanban/boards/:boardId/columns', async (req, res) => {\n res.json(Board.get(req.params.boardId)?.getColumns());\n });\n router.get('/kanban/boards/:boardId/columns/:columnId', async (req, res) => {\n res.json(Board.get(req.params.boardId)?.getColumn(req.params.columnId));\n });\n router.delete('/kanban/boards/:boardId/columns/:columnId', async (req, res) => {\n const column = Board.get(req.params.boardId)?.getColumn(req.params.columnId);\n column?.delete();\n res.json(column);\n });\n router.post('/kanban/boards/:boardId/columns', async (req, res) => {\n const board = Board.get(req.params.boardId)?.addColumn(req.body);\n res.json(board);\n });\n\n router.get('/kanban/boards/:boardId/columns/:columnId/cards', async (req, res) => {\n res.json(Board.get(req.params.boardId)?.getColumn(req.params.columnId)?.getCards());\n });\n router.delete('/kanban/boards/:boardId/columns/:columnId/cards/:cardId', async (req, res) => {\n const card = Board.get(req.params.boardId)?.getColumn(req.params.columnId)?.getCard(req.params.cardId);\n card?.delete();\n res.json(card);\n });\n router.post('/kanban/boards/:boardId/columns/:columnId/cards', async (req, res) => {\n res.json(Board.get(req.params.boardId)?.getColumn(req.params.columnId)?.addCard(req.body));\n });\n return router;\n};\n","const Kanban = require('./Kanban');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./Kanban')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'kanban',\r\n displayName: 'Kanban',\r\n description: 'Manage your project with cards',\r\n icon: 'fas fa-columns',\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'Kanban',\r\n icon: 'fas fa-columns',\r\n goTo: { path: '/kanban' },\r\n active: 'kanban',\r\n },\r\n ],\r\n finder: (/** @type {*} */search, /** @type {*} */runeya) => {\r\n const boards = Kanban(runeya).Board.all().filter((board) => (\r\n runeya.helpers.searchString(board?.name || '', search)\r\n ));\r\n const cards = Kanban(runeya).Board.all()\r\n .flatMap((b) => b?.getColumns())\r\n ?.flatMap((c) => c?.getCards())\r\n ?.filter((board) => (\r\n runeya.helpers.searchString(board?.name || '', search)\r\n ));\r\n return [\r\n ...boards.map((board) => ({\r\n icon: 'fas fa-columns',\r\n title: board?.name || '',\r\n group: 'Kanban',\r\n description: 'Manage your project with cards',\r\n secondaryTitle: 'Board',\r\n url: { path: '/toolbox/kanban', query: { boardId: board?.id } },\r\n })),\r\n ...cards.map((card) => ({\r\n icon: 'fas fa-columns',\r\n title: card?.name || '',\r\n group: 'Kanban',\r\n description: 'Manage your project with cards',\r\n secondaryTitle: 'Card',\r\n url: { path: '/toolbox/kanban', query: { boardId: card?.boardId, cardId: card?.id } },\r\n })),\r\n ];\r\n },\r\n export: Kanban,\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\n\r\nmodule.exports = plugin;\r\n","const express = require('express');\nconst { v4 } = require('uuid');\n\nconst router = express.Router();\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const history = runeya.getSave('history.json', {\n /** @type {History[]} */\n history: [],\n });\n\n const { findService, Socket } = runeya;\n router.get('/logs/:service/logs', (req, res) => {\n const service = findService(req.params.service);\n res.send(service ? service.store : []);\n });\n\n router.get('/logs/:service/autocomplete', (req, res) => {\n const msg = req.query.message;\n if (!msg && !req.query.force) return res.json([]);\n const historyToSend = groupBy(history.data.history, 'raw')\n .sort(((a, b) => a.timestamp - b.timestamp))\n .filter((a) => a?.raw?.startsWith(msg) || a.cmd?.startsWith(msg))\n .slice(-10);\n return res.json(historyToSend);\n });\n\n router.post('/logs/:service/prompt', async (req, res) => {\n const service = findService(req.params.service);\n /** @type {Record<any, any>} */\n let command = req.body.command || {};\n /** @type {number | undefined} */\n const pid = req.body.pid ? +req.body.pid : undefined;\n if (!command.spawnCmd) command.spawnCmd = '\\n';\n /** @type {History} */\n let result = {\n id: v4(), pid, cmd: command.spawnCmd, args: [], raw: command.spawnCmd, timestamp: Date.now(), service: service.label || '',\n };\n if (pid) service.respondToProcess(pid, command.spawnCmd);\n else if (command) {\n const { spawnProcess, launchMessage } = await service.launchProcess(\n { spawnCmd: command.spawnCmd, spawnArgs: command.spawnArgs || [], spawnOptions: command.spawnOptions || { } },\n false,\n );\n result = {\n ...result,\n pid: spawnProcess?.pid,\n raw: launchMessage.raw,\n timestamp: launchMessage.timestamp,\n };\n history.data.history.push(result);\n history.save();\n }\n\n res.json(result);\n });\n\n router.post('/logs/:service/terminate', (req, res) => {\n const service = findService(req.params.service);\n const {\n /** @type {number | undefined} */\n pid,\n /** @type {boolean | undefined} */\n forceKill,\n } = req.body;\n if (!pid) throw new Error('Pid is required');\n if (pid) service.terminate(pid, !!forceKill);\n Socket.emit('logs:update', []);\n res.send('ok');\n });\n\n router.delete('/logs/:service/logs', (req, res) => {\n const service = findService(req.params.service);\n service.store = [];\n Socket.emit('logs:clear', { label: service.label });\n res.send(service.store);\n });\n return router;\n};\n\n/**\n *\n * @param {Record<string, any>[]} xs\n * @param {string} key\n * @returns\n */\nconst groupBy = (xs, key) => {\n const group = xs.reduce((rv, x) => {\n if (!rv[x[key]]) rv[x[key]] = { ...x, number: 0, timestamps: [] };\n rv[x[key]].timestamps.push(x.timestamp);\n rv[x[key]].timestamp = x.timestamp;\n\n return rv;\n }, {});\n return Object.keys(group).map((key) => group[key]);\n};\n\n/**\n * @typedef {{\n * id: string,\n * cmd: string,\n * args: string[],\n * raw: string,\n * timestamp: number,\n * service: string,\n * pid?: number,\n * }} History\n */\n","const dayjs = require('dayjs');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Logs',\r\n displayName: 'Logs',\r\n description: 'Show, parse and communicate with logs produced by yours commands',\r\n icon: 'fas fa-terminal',\r\n export: null,\r\n placements: ['service'],\r\n order: 1,\r\n /**\r\n * @param {*} search\r\n * @param {import('@runeya/common-typings').Runeya} runeya\r\n */\r\n finder: (search, runeya) => {\r\n const services = runeya.getServices()\r\n ?.flatMap((s) => (s.store?.slice(-300).reverse().map((line) => ({ log: line, service: s }))))\r\n ?.filter(({ log }) => runeya.helpers.searchString(log.raw, search));\r\n return [\r\n ...services.map((service) => ({\r\n icon: 'fas fa-terminal',\r\n title: service.log.raw,\r\n group: 'Logs',\r\n description: `Log from ${service.service.label}`,\r\n secondaryTitle: service.service.label,\r\n secondaryDescription: dayjs(service.log.timestamp).format('YYYY-DD-MM HH:mm:ss'),\r\n url: { path: `/stack-single/${encodeURIComponent(service.service.label)}`, query: { tab: 'Logs' } },\r\n })),\r\n ];\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const { ObjectId } = require('mongodb');\nconst { MongoClient } = require('mongodb');\n\nclass MongoDB {\n /**\n * Generate a new ObjectId\n * @returns {ObjectId} A new MongoDB ObjectId\n */\n generateObjectId() {\n return new ObjectId();\n }\n\n /**\n * Check if a string is a valid MongoDB ObjectId\n * @param {string} id - The string to check\n * @returns {boolean} True if valid, false otherwise\n */\n isValidObjectId(id) {\n if (!id) return false;\n try {\n new ObjectId(id);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Decode an ObjectId to get its components\n * @param {string} objectId - The ObjectId to decode\n * @returns {Object} The decoded information\n */\n decodeObjectId(objectId) {\n if (!this.isValidObjectId(objectId)) {\n return { \n isValid: false,\n error: 'Invalid ObjectId format'\n };\n }\n\n try {\n const timestamp = parseInt(objectId.substring(0, 8), 16);\n const date = new Date(timestamp * 1000);\n \n // Convert to Buffer for correct binary and base64 conversions\n const buffer = Buffer.from(objectId, 'hex');\n \n return {\n isValid: true,\n timestamp,\n date,\n machineId: objectId.substring(8, 14),\n processId: objectId.substring(14, 18),\n counter: objectId.substring(18, 24),\n format: {\n hex: objectId,\n binary: buffer.toString('binary'),\n base64: buffer.toString('base64')\n }\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return { \n isValid: false,\n error: errorMessage\n };\n }\n }\n\n /**\n * Create an ObjectId from a timestamp\n * @param {Date|string} date - The date to use\n * @returns {string} The generated ObjectId\n */\n objectIdFromDate(date) {\n const timestamp = Math.floor(new Date(date).getTime() / 1000);\n return `${timestamp.toString(16)}0000000000000000`;\n }\n\n /**\n * Compare two ObjectIds\n * @param {string} objectId1 - First ObjectId\n * @param {string} objectId2 - Second ObjectId\n * @returns {Object} Comparison results\n */\n compareObjectIds(objectId1, objectId2) {\n const obj1 = this.decodeObjectId(objectId1);\n const obj2 = this.decodeObjectId(objectId2);\n \n if (!obj1.isValid || !obj2.isValid) {\n return {\n isValid: false,\n error: 'One or both ObjectIds are invalid'\n };\n }\n\n const timeDifference = obj1.timestamp - obj2.timestamp;\n const millisecondsDiff = timeDifference * 1000;\n \n return {\n isValid: true,\n timeDifference: {\n seconds: timeDifference,\n milliseconds: millisecondsDiff,\n humanReadable: this.formatTimeDifference(millisecondsDiff)\n },\n sameServer: obj1.machineId === obj2.machineId,\n sameProcess: obj1.processId === obj2.processId,\n counterDifference: parseInt(obj1.counter, 16) - parseInt(obj2.counter, 16)\n };\n }\n\n /**\n * Format time difference in a human readable format\n * @param {number} milliseconds - Time difference in milliseconds\n * @returns {string} Formatted time difference\n */\n formatTimeDifference(milliseconds) {\n const absMs = Math.abs(milliseconds);\n const prefix = milliseconds >= 0 ? 'newer by ' : 'older by ';\n \n if (absMs < 1000) return `${prefix}${absMs} milliseconds`;\n if (absMs < 60000) return `${prefix}${Math.floor(absMs/1000)} seconds`;\n if (absMs < 3600000) return `${prefix}${Math.floor(absMs/60000)} minutes`;\n if (absMs < 86400000) return `${prefix}${Math.floor(absMs/3600000)} hours`;\n return `${prefix}${Math.floor(absMs/86400000)} days`;\n }\n\n /**\n * Test MongoDB connection\n * @param {string} connectionString - MongoDB connection string\n * @returns {Promise<Object>} Connection test results\n */\n async testConnection(connectionString) {\n let client;\n try {\n client = new MongoClient(connectionString, { \n serverSelectionTimeoutMS: 5000,\n connectTimeoutMS: 5000\n });\n await client.connect();\n \n // Get server information\n const admin = client.db().admin();\n const serverInfo = await admin.serverInfo();\n \n // Get database list\n const dbList = await client.db().admin().listDatabases();\n \n return {\n success: true,\n version: serverInfo.version,\n databases: dbList.databases.map(db => ({\n name: db.name,\n sizeOnDisk: db.sizeOnDisk,\n empty: db.empty\n }))\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: errorMessage\n };\n } finally {\n if (client) await client.close();\n }\n }\n}\n\nmodule.exports = new MongoDB(); ","const express = require('express');\nconst MongoDB = require('./Mongo');\n\nconst router = express.Router();\n\nrouter.get('/mongo/generate', async (req, res) => {\n res.json(MongoDB.generateObjectId());\n});\n\nrouter.post('/mongo/validate', async (req, res) => {\n const { objectId } = req.body;\n res.json({\n isValid: MongoDB.isValidObjectId(objectId)\n });\n});\n\nrouter.post('/mongo/decode', async (req, res) => {\n const { objectId } = req.body;\n res.json(MongoDB.decodeObjectId(objectId));\n});\n\nrouter.post('/mongo/from-date', async (req, res) => {\n const { date } = req.body;\n res.json({\n objectId: MongoDB.objectIdFromDate(date)\n });\n});\n\nrouter.post('/mongo/compare', async (req, res) => {\n const { objectId1, objectId2 } = req.body;\n res.json(MongoDB.compareObjectIds(objectId1, objectId2));\n});\n\nrouter.post('/mongo/test-connection', async (req, res) => {\n const { connectionString } = req.body;\n try {\n const result = await MongoDB.testConnection(connectionString);\n res.json(result);\n } catch (error) {\n res.status(500).json({\n success: false,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n});\n\nmodule.exports = () => router;\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Mongo',\r\n displayName: 'MongoDB',\r\n description: 'MongoDB toolkit with ObjectID operations, validation, comparison and connection testing',\r\n icon: 'fab fa-envira',\r\n export: null,\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'MongoDB',\r\n icon: 'fab fa-envira',\r\n goTo: { path: '/Mongo' },\r\n active: 'Mongo',\r\n },\r\n ],\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\nconst { v4 } = require('uuid');\nconst { mkdir, writeFile } = require('fs/promises');\nconst { writeFileSync, readFileSync, unlinkSync } = require('fs');\nconst pathfs = require('path');\nconst { mkdirSync, existsSync } = require('fs');\nconst { spawn } = require('child_process');\nconst { promisify } = require('util');\nconst setTimeoutAsync = promisify(setTimeout);\nconst prettier = require('prettier');\nconst { exec } = require('child_process');\nconst execAsync = promisify(exec);\nconst path = require('path');\nconst fs = require('fs').promises;\n\nconst router = express.Router();\nconst homedir = require('os').homedir();\n\n// Configuration\nconst MAX_SCRIPT_SIZE = 1024 * 1024; // 1MB\nconst MAX_EXECUTION_TIME = 30000; // 30 seconds\nconst MAX_MEMORY = 512 * 1024 * 1024; // 512MB\nconst ALLOWED_MODULES = ['fs', 'path', 'os', 'util', 'crypto', 'buffer', 'stream', 'events'];\n\nconst confDir = pathfs.resolve(homedir, '.runeya');\nif (!existsSync(confDir)) mkdirSync(confDir);\nconst confPath = pathfs.resolve(confDir, 'node-repl');\nif (!existsSync(confPath)) writeFileSync(confPath, '{}', 'utf-8');\nconst conf = JSON.parse(readFileSync(confPath, 'utf-8'));\n\n// Dossier pour les packages npm\nconst packagesDir = pathfs.resolve(confDir, 'node-repl-packages');\nif (!existsSync(packagesDir)) mkdirSync(packagesDir);\n\n// Fonction pour obtenir le dossier des packages d'une room\nfunction getRoomPackagesDir(room) {\n return pathfs.resolve(packagesDir, room);\n}\n\n// Fonction pour initialiser le package.json d'une room\nasync function initRoomPackageJson(room) {\n const roomDir = getRoomPackagesDir(room);\n if (!existsSync(roomDir)) {\n mkdirSync(roomDir, { recursive: true });\n }\n \n const packageJsonPath = pathfs.resolve(roomDir, 'package.json');\n if (!existsSync(packageJsonPath)) {\n await fs.writeFile(packageJsonPath, JSON.stringify({ dependencies: {} }, null, 2), 'utf-8');\n }\n return packageJsonPath;\n}\n\n// Fonction pour nettoyer les packages d'une room\nasync function cleanupRoomPackages(room) {\n const roomDir = getRoomPackagesDir(room);\n if (existsSync(roomDir)) {\n try {\n await fs.rm(roomDir, { recursive: true, force: true });\n } catch (err) {\n console.error(`Error cleaning up packages for room ${room}:`, err);\n }\n }\n}\n\n// Fonction utilitaire pour nettoyer les fichiers temporaires\nasync function cleanupTempFiles() {\n const sandboxDir = pathfs.resolve(__dirname, 'sandbox-node-repl');\n if (existsSync(sandboxDir)) {\n const files = await promisify(require('fs').readdir)(sandboxDir);\n for (const file of files) {\n try {\n await promisify(require('fs').unlink)(pathfs.join(sandboxDir, file));\n } catch (err) {\n console.error(`Error cleaning up file ${file}:`, err);\n }\n }\n }\n}\n\n// Fonction pour valider le script\nfunction validateScript(script) {\n if (script.length > MAX_SCRIPT_SIZE) {\n throw new Error(`Script too large. Maximum size is ${MAX_SCRIPT_SIZE / 1024 / 1024}MB`);\n }\n\n // Vérifier les imports dangereux\n const dangerousImports = script.match(/require\\(['\"](?!${ALLOWED_MODULES.join('|')})['\"]\\)/g);\n if (dangerousImports) {\n throw new Error('Script contains unauthorized module imports');\n }\n\n return true;\n}\n\n// Vérifier si npm est disponible\nasync function checkNpmAvailable() {\n try {\n await execAsync('npm --version');\n return true;\n } catch (error) {\n return false;\n }\n}\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const { Socket } = runeya;\n\n // Nettoyage des fichiers temporaires au démarrage\n cleanupTempFiles().catch(console.error);\n\n router.post('/node-repl/chat/:room', async (req, res) => {\n try {\n const { room } = req.params;\n const { script } = req.body;\n\n // Validation du script\n validateScript(script);\n\n if (!conf.chat?.[room]) {\n if (!conf.chat) conf.chat = {};\n if (!conf.chat?.[room]) conf.chat[room] = {};\n }\n conf.chat[room].script = script;\n\n // Initialiser le package.json de la room si nécessaire\n await initRoomPackageJson(room);\n\n // Créer un dossier temporaire unique pour cette session\n const sessionId = v4();\n const sessionDir = path.join(__dirname, 'sandbox-node-repl', sessionId);\n await fs.mkdir(sessionDir, { recursive: true });\n\n // Créer le fichier de script\n const scriptPath = path.join(sessionDir, 'script.js');\n await fs.writeFile(scriptPath, script);\n\n let result = '';\n let error = null;\n let timeoutId;\n\n // Utiliser les variables d'environnement personnalisées si elles existent\n const customEnv = conf.chat[room]?.env || {};\n const env = {\n ...process.env,\n ...customEnv,\n NODE_OPTIONS: `--max-old-space-size=${MAX_MEMORY / 1024 / 1024}`,\n NODE_PATH: path.join(getRoomPackagesDir(room), 'node_modules'),\n };\n\n const spawnCmd = spawn('node', [scriptPath], {\n env,\n cwd: sessionDir,\n });\n\n // Timeout pour limiter le temps d'exécution\n timeoutId = setTimeout(() => {\n spawnCmd.kill();\n error = new Error('Script execution timed out');\n }, MAX_EXECUTION_TIME);\n\n Socket.emit('node-repl:update', { clear: true });\n\n spawnCmd.stdout.on('data', (data) => {\n const output = data.toString('utf-8');\n Socket.emit('node-repl:update', { msg: output, type: 'stdout' });\n result += output;\n });\n\n spawnCmd.stderr.on('data', (data) => {\n const output = data.toString('utf-8');\n Socket.emit('node-repl:update', { msg: output, type: 'stderr' });\n result += output;\n });\n\n spawnCmd.on('error', (err) => {\n error = err;\n Socket.emit('node-repl:update', { msg: `Error: ${err.message}`, type: 'error' });\n });\n\n spawnCmd.on('close', (code) => {\n clearTimeout(timeoutId);\n Socket.emit('node-repl:update', { close: true });\n\n try {\n conf.chat[room].result = result;\n conf.chat[room].lastExecution = new Date().toISOString();\n conf.chat[room].error = error ? error.message : null;\n save();\n } catch (err) {\n console.error('Error saving result:', err);\n }\n\n // Nettoyage du dossier temporaire\n try {\n require('fs').rmSync(sessionDir, { recursive: true, force: true });\n } catch (err) {\n console.error('Error cleaning up temporary directory:', err);\n }\n });\n\n save();\n res.json(sessionId);\n } catch (err) {\n Socket.emit('node-repl:update', { \n msg: `Error: ${err.message}`, \n type: 'error',\n clear: true \n });\n res.status(400).json({ error: err.message });\n }\n });\n\n router.get('/node-repl/rooms', async (req, res) => {\n res.json(Object.keys(conf?.chat || {}));\n });\n router.post('/node-repl/rooms', async (req, res) => {\n const { room } = req.body;\n if (!conf?.chat?.[room]) {\n if (!conf?.chat) conf.chat = {};\n if (!conf?.chat?.[room]) conf.chat[room] = {};\n }\n save();\n res.json(Object.keys(conf?.chat || {}));\n });\n\n router.delete('/node-repl/rooms/:room', async (req, res) => {\n const { room } = req.params;\n if (conf?.chat?.[room]) {\n delete conf.chat[room];\n // Nettoyer les packages de la room\n await cleanupRoomPackages(room);\n }\n save();\n res.json(Object.keys(conf?.chat || {}));\n });\n\n router.get('/node-repl/chat/:room', async (req, res) => {\n res.json(conf?.chat?.[req.params.room]);\n });\n\n // Route pour le formatage du code\n router.post('/node-repl/format', async (req, res) => {\n try {\n const { code } = req.body;\n if (!code) {\n throw new Error('No code provided');\n }\n\n const formatted = await prettier.format(code, {\n parser: 'babel',\n semi: true,\n singleQuote: true,\n trailingComma: 'es5',\n printWidth: 80,\n tabWidth: 2,\n useTabs: false,\n bracketSpacing: true,\n arrowParens: 'avoid',\n });\n\n res.json({ formatted });\n } catch (err) {\n res.status(400).json({ error: err.message });\n }\n });\n\n // Route pour sauvegarder les variables d'environnement\n router.post('/node-repl/env', async (req, res) => {\n try {\n const { room, env } = req.body;\n if (!room || !env) {\n throw new Error('Room and environment variables are required');\n }\n\n if (!conf.chat?.[room]) {\n if (!conf.chat) conf.chat = {};\n if (!conf.chat?.[room]) conf.chat[room] = {};\n }\n\n conf.chat[room].env = env;\n save();\n res.json({ success: true });\n } catch (err) {\n res.status(400).json({ error: err.message });\n }\n });\n\n // Route pour récupérer les variables d'environnement\n router.get('/node-repl/env/:room', async (req, res) => {\n try {\n const { room } = req.params;\n res.json(conf?.chat?.[room]?.env || {});\n } catch (err) {\n res.status(400).json({ error: err.message });\n }\n });\n\n // Install npm package\n router.post('/node-repl/install', async (req, res) => {\n try {\n const { package: packageName, room } = req.body;\n if (!packageName || !room) {\n return res.status(400).json({ error: 'Package name and room are required' });\n }\n\n // Vérifier si npm est disponible\n const npmAvailable = await checkNpmAvailable();\n if (!npmAvailable) {\n return res.status(500).json({ \n error: 'npm is not available in the system PATH. Please install Node.js and npm first.' \n });\n }\n\n // Initialiser le package.json de la room si nécessaire\n const packageJsonPath = await initRoomPackageJson(room);\n const roomDir = getRoomPackagesDir(room);\n\n // Installer le package dans l'environnement de la room\n await execAsync(`npm install ${packageName}`, { cwd: roomDir });\n \n // Lire le package.json mis à jour\n const installedPackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));\n res.json(installedPackageJson.dependencies || {});\n } catch (error) {\n console.error('Error installing package:', error);\n res.status(500).json({ error: error.message });\n }\n });\n\n // List installed packages\n router.get('/node-repl/packages/:room', async (req, res) => {\n try {\n const { room } = req.params;\n const packageJsonPath = pathfs.resolve(getRoomPackagesDir(room), 'package.json');\n \n try {\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));\n res.json(packageJson.dependencies || {});\n } catch (err) {\n // Si le fichier n'existe pas, retourner un objet vide\n res.json({});\n }\n } catch (error) {\n console.error('Error listing packages:', error);\n res.status(500).json({ error: error.message });\n }\n });\n\n // Uninstall npm package\n router.delete('/node-repl/packages/:room/:name', async (req, res) => {\n try {\n const { room, name } = req.params;\n if (!name || !room) {\n return res.status(400).json({ error: 'Package name and room are required' });\n }\n\n // Vérifier si npm est disponible\n const npmAvailable = await checkNpmAvailable();\n if (!npmAvailable) {\n return res.status(500).json({ \n error: 'npm is not available in the system PATH. Please install Node.js and npm first.' \n });\n }\n\n const roomDir = getRoomPackagesDir(room);\n const packageJsonPath = pathfs.resolve(roomDir, 'package.json');\n\n // Désinstaller le package\n await execAsync(`npm uninstall ${name}`, { cwd: roomDir });\n \n // Lire le package.json mis à jour\n const updatedPackageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));\n res.json(updatedPackageJson.dependencies || {});\n } catch (error) {\n console.error('Error uninstalling package:', error);\n res.status(500).json({ error: error.message });\n }\n });\n\n function save() {\n try {\n writeFileSync(confPath, JSON.stringify(conf, null, 2), 'utf-8');\n } catch (err) {\n console.error('Error saving configuration:', err);\n }\n }\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'NodeREPL',\r\n displayName: 'Node REPL',\r\n description: 'Create nodejs scripts for test purposes',\r\n icon: 'fab fa-node',\r\n export: null,\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'Node Sandbox',\r\n icon: 'fab fa-node',\r\n goTo: { path: '/NodeREPL' },\r\n active: 'NodeREPL',\r\n },\r\n ],\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","module.exports = {};\nmodule.exports.specialCaracters = [\n ['à', 'à', 'agrave'],\n ['À', 'À', 'agrave'],\n ['á', 'á', 'aacute'],\n ['Á', 'Á', 'aacute'],\n ['â', 'â', 'acirc'],\n ['Â', 'Â', 'acirc'],\n ['ã', 'ã', 'atilde'],\n ['Ã', 'Ã', 'atilde'],\n ['ä', 'ä', 'auml'],\n ['Ä', 'Ä', 'auml'],\n ['å', 'å', 'aring'],\n ['Å', 'Å', 'aring'],\n ['æ', 'æ', 'aelig'],\n ['Æ', 'Æ', 'aelig'],\n ['è', 'è', 'egrave'],\n ['È', 'È', 'egrave'],\n ['é', 'é', 'eacute'],\n ['É', 'É', 'eacute'],\n ['ê', 'ê', 'ecirc'],\n ['Ê', 'Ê', 'ecirc'],\n ['ë', 'ë', 'euml'],\n ['Ë', 'Ë', 'euml'],\n ['ì', 'ì', 'igrave'],\n ['Ì', 'Ì', 'igrave'],\n ['í', 'í', 'iacute'],\n ['Í', 'Í', 'iacute'],\n ['î', 'î', 'icirc'],\n ['Î', 'Î', 'icirc'],\n ['ï', 'ï', 'iuml'],\n ['Ï', 'Ï', 'iuml'],\n ['ò', 'ò', 'ograve'],\n ['Ò', 'Ò', 'ograve'],\n ['ó', 'ó', 'oacute'],\n ['Ó', 'Ó', 'oacute'],\n ['ô', 'ô', 'ocirc'],\n ['Ô', 'Ô', 'ocirc'],\n ['õ', 'õ', 'otilde'],\n ['Õ', 'Õ', 'otilde'],\n ['ö', 'ö', 'ouml'],\n ['Ö', 'Ö', 'ouml'],\n ['ø', 'ø', 'oslash'],\n ['Ø', 'Ø', 'oslash'],\n ['ù', 'ù', 'ugrave'],\n ['Ù', 'Ù', 'ugrave'],\n ['ú', 'ú', 'uacute'],\n ['Ú', 'Ú', 'uacute'],\n ['û', 'û', 'ucirc'],\n ['Û', 'Û', 'ucirc'],\n ['ü', 'ü', 'uuml'],\n ['Ü', 'Ü', 'uuml'],\n ['ñ', 'ñ', 'ntilde'],\n ['Ñ', 'Ñ', 'ntilde'],\n ['ç', 'ç', 'ccedil'],\n ['Ç', 'Ç', 'ccedil'],\n ['ý', 'ý', 'yacute'],\n ['Ý', 'Ý', 'yacute'],\n ['ß', 'ß', 'szlig'],\n ['«', '«'],\n ['»', '»'],\n ['&', '&'],\n ['<', '<'],\n ['>', '>'],\n ['\"', '"'],\n ['§', '¶'],\n ['©', '©'],\n];\n","const slugify = require('slugify').default;\nconst { specialCaracters } = require('./specialCaracters.helper');\n\nconst alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n/**\n * Transform number to alphabet letters.\n * Pick letters until there is no rest\n * @example\n * numberToLetters(1111111111111) // => EHHUAAUUA\n */\nfunction numberToLetters(number, result = '') {\n let charIndex = number % alphabet.length;\n let quotient = number / alphabet.length;\n if (charIndex - 1 === -1) {\n charIndex = alphabet.length;\n quotient -= 1;\n }\n // eslint-disable-next-line no-param-reassign\n result = alphabet.charAt(charIndex - 1) + result;\n return quotient >= 1\n ? numberToLetters(+quotient, result)\n : result;\n}\n\n/**\n * A beginning number can be an issue for certain templating language.\n * This function transforms beginning numbers to deterministic and non conflict letters\n * @example\n * transformBeginingNumber('1111111111111aaa') // => EHHUAAUUA_aaa\n */\nfunction transformBeginingNumber(str) {\n let transformedString = str;\n const beginningNumber = Number.parseInt(transformedString, 10);\n const isBeginningWithNumber = Number.isInteger(beginningNumber);\n if (isBeginningWithNumber) {\n const hasAlreadySeparator = transformedString.split(beginningNumber.toString())?.[1]?.charAt(0) === '_';\n transformedString = transformedString.replace(beginningNumber.toString(), `${numberToLetters(beginningNumber)}${hasAlreadySeparator ? '' : '_'}`);\n }\n return transformedString;\n}\n\n/**\n * Transliterate a string to a string without ambigeous caracters\n * @example\n * humanStringToKey('aaa aaa aaa') // => aaa_aaa_aaa\n * humanStringToKey('1111111111111aaa') // => EHHUAAUUA_aaa\n */\nmodule.exports.humanStringToKey = (str, separator = '_') => {\n let transformedString = str\n .trim()\n .toLowerCase();\n specialCaracters.forEach((sc) => {\n const [char, eacute, slug] = sc;\n if (eacute) transformedString = transformedString.replaceAll(eacute.toLowerCase(), char);\n if (slug) transformedString = transformedString.replaceAll(slug.toLowerCase(), char);\n });\n transformedString = transformBeginingNumber(transformedString);\n slugify.extend({\n \"'\": separator,\n '-': '_',\n '(': separator,\n ')': separator,\n });\n return slugify(transformedString, separator);\n};\n\nmodule.exports.replaceEnvs = (str) => {\n Object.keys(process.env).forEach((env) => {\n if (!env) return;\n str = str.replaceAll(`$${env}`, process.env[env]);\n });\n return str;\n};\n","const pathfs = require('path');\nconst { execAsync } = require('@runeya/servers-server/helpers/exec');\nconst { readFile } = require('fs/promises');\nconst { replaceEnvs } = require('../../../servers/server/helpers/stringTransformer.helper');\nconst { existsSync } = require('fs');\n\nclass Npm {\n /** @param {import('@runeya/servers-server/models/Service')} service */\n constructor(service) {\n this.service = service;\n }\n\n async isNpm(path) {\n if (path) {\n return existsSync(pathfs.resolve(path?.toString(), 'package.json'));\n }\n return null;\n }\n\n getNpmPaths() {\n return [\n ...this.service.commands\n .filter(cmd => cmd.spawnOptions.cwd?.toString()?.trim() && cmd.spawnOptions.cwd !== '.')\n .map(cmd => replaceEnvs(cmd.spawnOptions.cwd)),\n this.service.getRootPath(),\n ].filter(cwd => this.isNpm(cwd))\n }\n\n async packageJSON(path) {\n if (path) {\n return JSON.parse(await readFile(pathfs.resolve(path?.toString(), 'package.json'), 'utf-8'));\n }\n return {};\n }\n\n async packageLock(path) {\n if (path) {\n return JSON.parse(await readFile(pathfs.resolve(path?.toString(), 'package-lock.json'), 'utf-8')).catch((err) => {\n console.error(err);\n return {};\n });\n }\n return {};\n }\n\n /**\n * @returns {Promise<import('./index').Outdated>}\n */\n async outdated(path) {\n const result = await execAsync('npm outdated --json || true', { cwd: path });\n return JSON.parse(result);\n }\n}\n\nmodule.exports = Npm;\n","const express = require('express');\n\nconst router = express.Router();\nconst Npm = require('./Npm');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const { findService } = runeya;\n\n router.get('/npm/:service', async (req, res) => {\n const service = findService(req.params.service);\n const npm = new Npm(service);\n const isNpm = await npm.isNpm(req.query.cwd);\n res.json(isNpm);\n });\n router.get('/npm/:service/paths', async (req, res) => {\n const service = findService(req.params.service);\n const npm = new Npm(service);\n const paths = await npm.getNpmPaths();\n res.json(paths);\n });\n\n router.get('/npm/:service/packagejson', async (req, res) => {\n const service = findService(req.params.service);\n const npm = new Npm(service);\n const packagejson = await npm.packageJSON(req.query.cwd);\n res.json(packagejson);\n });\n\n router.get('/npm/:service/outdated', async (req, res) => {\n const service = findService(req.params.service);\n const npm = new Npm(service);\n const packagejson = await npm.outdated(req.query.cwd);\n res.json(packagejson);\n });\n\n return router;\n};\n","const Npm = require('./Npm');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./Npm')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Npm',\r\n displayName: 'Npm',\r\n description: 'View your dependencies and execute your scripts on a service',\r\n icon: 'fab fa-npm',\r\n export: Npm,\r\n placements: ['service'],\r\n order: 4,\r\n /**\r\n *\r\n * @param {import('../../../servers/server/models/Service')} service\r\n * @returns\r\n */\r\n hidden: async (service) => {\r\n if (!service) return false;\r\n const project = new Npm(service);\r\n const serviceIsNpm = !!project.getNpmPaths().length;\r\n return !serviceIsNpm;\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n\r\n/**\r\n * @typedef {Record<string, {\r\n * \"current\": string,\r\n * \"wanted\": string,\r\n * \"latest\": string,\r\n * \"dependent\": string,\r\n * \"location\": string,\r\n * }>} Outdated\r\n */\r\n","module.exports = {\n http: process.env.RUNEYA_HTTP_PORT || 0,\n /** @param {number} port */\n setHttpPort(port) {\n if (!this.http) this.http = port;\n },\n};\n","const express = require('express');\nconst pathfs = require('path');\nconst OpenAIApi = require('openai').OpenAI;\nconst {\n existsSync, mkdirSync, createReadStream,\n writeFileSync,\n readFileSync,\n} = require('fs');\nconst { encode } = require('gpt-3-encoder');\nconst { v4 } = require('uuid');\nconst { writeFile, unlink } = require('fs/promises');\nconst homedir = require('os').homedir();\nconst axios = require('axios').default;\nconst PromiseB = require('bluebird');\nconst ports = require('../../../servers/server/models/ports');\n\nconst router = express.Router();\nconst confDir = pathfs.resolve(homedir, '.runeya');\n\nif (!existsSync(confDir)) mkdirSync(confDir);\nconst openaiConfPath = pathfs.resolve(confDir, 'openaiconf.json');\nif (!existsSync(openaiConfPath)) writeFileSync(openaiConfPath, '{}', 'utf-8');\nconst openaiStoragePath = pathfs.resolve(confDir, 'storage');\nif (!existsSync(openaiStoragePath)) mkdirSync(openaiStoragePath);\nconst openaiconf = JSON.parse(readFileSync(openaiConfPath, 'utf-8'));\n/** @type {OpenAIApi | null} */\nlet openai = process.env.RUNEYA_OPENAI_APIKEY ? new OpenAIApi({\n apiKey: process.env.RUNEYA_OPENAI_APIKEY,\n}) : null;\n\nmodule.exports = () => {\n router.get('/openai', async (req, res) => {\n res.json('hello');\n });\n router.get('/openai/image/:id', async (req, res) => {\n res.setHeader('content-type', 'image/png');\n res.setHeader('content-disposition', 'filename=image.png');\n const path = pathfs.resolve(openaiStoragePath, `${req.params.id}.png`);\n if (existsSync(path)) createReadStream(path).pipe(res);\n else res.status(404).send('file not found');\n });\n router.get('/openai/models', async (req, res) => {\n if (!openai) return res.status(400).send('Openai not initialized');\n const models = await openai.models.list({});\n return res.json(models.data);\n });\n\n router.post('/openai/tokenize', async (req, res) => {\n const encoded = encode(req.body.data);\n res.json({\n nbTokens: encoded.length,\n price: (encoded.length * 0.002) / 1000,\n });\n });\n\n router.post('/openai/review', async (req, res) => {\n if (!openai) return res.status(400).send('Openai not initialized');\n const result = await openai.chat.completions.create({\n model: 'gpt-3.5-turbo',\n temperature: 0,\n n: 1,\n max_tokens: Infinity,\n messages: [\n { role: 'system', content: 'You are a developer for 10 years. You are expert in git and you should write a commit. I gave you a git diff after. Write me a resume of this diff and write me a commit for this diff in this format: \"<fix|feat|major>: <your message not exceeding 60 characters>\"' },\n { role: 'assistant', content: req.body.data },\n ],\n }).catch((err) => {\n console.error(err.response.data);\n return Promise.reject(err);\n });\n return res.json(result.choices[0]?.message?.content || 'Cannot respond');\n });\n\n router.post('/openai/error', async (req, res) => {\n if (!openai) return res.status(400).send('Openai not initialized');\n const result = await openai.chat.completions.create({\n model: 'gpt-3.5-turbo',\n temperature: 0,\n n: 1,\n max_tokens: Infinity,\n messages: [\n { role: 'system', content: 'You are a developer for 20 years. You are expert in it and you should find a solution to this following error. Resume the following error and try to fix it' },\n { role: 'assistant', content: req.body.data },\n ],\n }).catch((err) => {\n console.error(err.response.data);\n return Promise.reject(err);\n });\n return res.json(result.choices[0]?.message?.content || 'Cannot respond');\n });\n\n router.post('/openai/chat/:room/image', async (req, res) => {\n if (!openai) return res.status(400).send('Openai not initialized');\n const { message, quality, resolution } = req.body;\n if (!openaiconf?.chat) openaiconf.chat = {};\n if (!openaiconf?.chat?.[req.params.room]) openaiconf.chat[req.params.room] = {};\n if (!openaiconf?.chat?.[req.params.room]?.messages) {\n openaiconf.chat[req.params.room].messages = [\n { role: 'system', content: 'Tu es un assistant utile.' },\n ];\n }\n /** @type {import('./index').OpenAiChat[]} */\n const messages = openaiconf?.chat[req.params.room]?.messages || [];\n messages.push({\n _id: v4(),\n // @ts-ignore\n role: 'user',\n content: message,\n created_at: new Date().toISOString(),\n });\n const response = await openai.images.generate({\n quality,\n model: 'dall-e-3',\n prompt: message,\n n: 1,\n size: resolution,\n });\n\n if (response?.data?.[0]?.url) {\n const { url, revised_prompt } = response.data[0];\n const uuid = v4();\n const { data: fileBuffer } = await axios.get(url, {\n responseType: 'arraybuffer',\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n });\n await writeFile(pathfs.resolve(openaiStoragePath, `${uuid}.png`), fileBuffer);\n\n messages.push({\n url: `http://localhost:${ports.http}/openai/image/${uuid}`,\n contentId: uuid,\n revised_prompt,\n _id: v4(),\n created_at: new Date().toISOString(),\n });\n save();\n }\n return res.json(response.data[0].url);\n });\n\n router.post('/openai/chat/:room', async (req, res) => {\n if (!openai) return res.status(400).send('Openai not initialized');\n const { message, model, temperature } = req.body;\n if (!openaiconf?.chat) openaiconf.chat = {};\n if (!openaiconf?.chat?.[req.params.room]) openaiconf.chat[req.params.room] = {};\n if (!openaiconf?.chat?.[req.params.room]?.messages) {\n openaiconf.chat[req.params.room].messages = [\n { role: 'system', content: 'Tu es un assistant utile.' },\n ];\n }\n /** @type {import('./index').OpenAiChat[]} */\n const messages = openaiconf?.chat[req.params.room]?.messages || [];\n messages.push({\n _id: v4(),\n // @ts-ignore\n role: 'user',\n content: message,\n created_at: new Date().toISOString(),\n });\n const result = await openai.chat.completions.create({\n model: model || 'gpt-3.5-turbo',\n temperature: Number.isNaN(+temperature) ? 0 : +temperature,\n n: 1,\n max_tokens: Infinity,\n // @ts-ignore\n messages: messages\n .filter((f) => f?.content)\n .map((a) => ({ role: a.role || 'user', content: a.content || '' }))\n .slice(-15),\n }).catch((err) => Promise.reject(err));\n if (result?.choices?.[0]?.message) {\n const { usage } = result;\n const { message } = result.choices[0];\n messages.push({\n ...message,\n ...usage,\n _id: v4(),\n created_at: new Date().toISOString(),\n });\n }\n save();\n return res.json(messages);\n });\n\n router.get('/openai/rooms', async (req, res) => {\n res.json(Object.keys(openaiconf?.chat || {}));\n });\n\n router.post('/openai/rooms', async (req, res) => {\n const { room } = req.body;\n if (!openaiconf?.chat?.[room]) {\n if (!openaiconf?.chat) openaiconf.chat = {};\n if (!openaiconf?.chat?.[room]) openaiconf.chat[room] = {};\n }\n save();\n res.json(Object.keys(openaiconf?.chat || {}));\n });\n\n router.delete('/openai/rooms/:room', async (req, res) => {\n const { room } = req.params;\n if (openaiconf?.chat?.[room]) {\n await PromiseB.map(openaiconf?.chat?.[room].messages, async (message) => {\n if (message.contentId && existsSync(pathfs.resolve(openaiStoragePath, `${message.contentId}.png`))) {\n await unlink(pathfs.resolve(openaiStoragePath, `${message.contentId}.png`));\n }\n }, { concurrency: 4 });\n delete openaiconf.chat[room];\n }\n save();\n res.json(Object.keys(openaiconf?.chat || {}));\n });\n\n router.get('/openai/chat/:room', async (req, res) => {\n res.json(openaiconf?.chat?.[req.params.room]?.messages);\n });\n\n router.post('/openai/apikey', async (req, res) => {\n const { apikey } = req.body;\n process.env.RUNEYA_OPENAI_APIKEY = apikey;\n save();\n openai = process.env.RUNEYA_OPENAI_APIKEY ? new OpenAIApi({\n apiKey: process.env.RUNEYA_OPENAI_APIKEY,\n }) : null;\n\n res.json(true);\n });\n\n router.get('/openai/ready', async (req, res) => {\n if (!openai) return res.json(false);\n console.log(process.env.RUNEYA_OPENAI_APIKEY, openaiconf?.apikey)\n try {\n const {data} = await openai.models.list({});\n res.json(!!data?.length);\n } catch (error) {\n res.json(false);\n }\n return undefined;\n });\n\n function save() {\n writeFileSync(openaiConfPath, JSON.stringify(openaiconf), 'utf-8');\n }\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'OpenAI',\r\n displayName: 'Open A.I.',\r\n description: 'Just chat with Chat GPT',\r\n icon: 'fas fa-brain',\r\n export: null,\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'OpenAi',\r\n icon: 'fas fa-brain',\r\n goTo: { path: '/OpenAI' },\r\n active: 'OpenAI',\r\n },\r\n ],\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n\r\n/**\r\n * @typedef {Partial<\r\n * import('openai').OpenAI.ChatCompletionMessage &\r\n * import('openai').OpenAI.CompletionUsage &\r\n * {\r\n * url?:string\r\n * contentId?:string\r\n * revised_prompt?:string\r\n * created_at: string,\r\n * _id: string\r\n * }\r\n * >} OpenAiChat\r\n */\r\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Regex',\r\n displayName: 'Regex',\r\n description: 'Test your regular expression',\r\n icon: 'fas fa-key',\r\n export: null,\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'Regex',\r\n icon: 'fas fa-key',\r\n goTo: { path: '/Regex' },\r\n active: 'Regex',\r\n },\r\n ],\r\n order: 6,\r\n};\r\nmodule.exports = plugin;\r\n","const sqlFormatter = require('sql-formatter');\n\n/**\n * @typedef {import('sql-formatter').FormatOptionsWithLanguage} FormatOptions\n */\n\n/**\n * @typedef {Object} BeautifyResult\n * @property {string} result - The beautified SQL query\n */\n\n/**\n * @typedef {Object} BeautifyError\n * @property {string} error - The error message\n */\n\nclass SQLBeautifier {\n /**\n * Beautify SQL query\n * @param {string} sql - The SQL query to beautify\n * @returns {BeautifyResult} The beautified SQL query\n * @throws {Error} If the SQL query is invalid or formatting fails\n */\n beautify(sql) {\n if (!sql || typeof sql !== 'string') {\n throw new Error('SQL query must be a non-empty string');\n }\n\n try {\n const formattedSQL = sqlFormatter.format(sql);\n return {\n result: formattedSQL\n };\n } catch (/** @type {unknown} */ error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(`Failed to beautify SQL: ${errorMessage}`);\n }\n }\n}\n\nmodule.exports = new SQLBeautifier(); ","const express = require('express');\nconst beautifier = require('./SQLBeautifier');\n\n/**\n * @param {import('../../../../servers/server/models/stack')} runeya\n * @returns {import('express').Router}\n */\nfunction routes(runeya) {\n const router = express.Router();\n\n /**\n * @typedef {Object} BeautifyRequest\n * @property {string} sql - The SQL query to beautify\n */\n\n router.post('/sqlbeautifier/beautify', (req, res) => {\n const { sql } = req.body;\n\n // Validate request body\n if (!sql || typeof sql !== 'string') {\n return res.status(400).json({ \n error: 'SQL query must be a non-empty string' \n });\n }\n\n try {\n const result = beautifier.beautify(sql);\n res.json(result);\n } catch (error) {\n const errorMessage = error instanceof Error \n ? error.message \n : 'An unknown error occurred while beautifying SQL';\n \n res.status(500).json({ error: errorMessage });\n }\n });\n\n return router;\n}\n\nmodule.exports = routes; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./SQLBeautifier')>} */\nconst plugin = {\n enabled: true,\n name: 'sqlbeautifier',\n displayName: 'SQL Beautifier',\n description: 'Format and beautify SQL queries with syntax highlighting and real-time updates',\n icon: 'fas fa-database',\n order: 8,\n export: require('./SQLBeautifier'),\n routes: require('./routes'),\n placements: [\n {\n position: 'toolbox',\n label: 'SQL Beautifier',\n icon: 'fas fa-database',\n goTo: { path: '/SQLBeautifier' },\n active: 'SQLBeautifier',\n }\n ]\n};\n\nmodule.exports = plugin; ","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Toolbox',\r\n displayName: 'Toolbox',\r\n description: 'Choose from a bunch of tool',\r\n icon: 'fas fa-plus',\r\n export: null,\r\n placements: [{\r\n position: 'sidebar',\r\n label: 'Toolbox',\r\n icon: 'fas fa-toolbox',\r\n goTo: '/toolbox',\r\n active: 'toolbox',\r\n }],\r\n order: 6,\r\n};\r\nmodule.exports = plugin;\r\n","const { v4 } = require('uuid');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst UUID = (runeya) => ({\n generate: ({ count = 1, noDash = false, uppercase = false } = {}) => {\n const uuids = Array(count).fill().map(() => {\n let uuid = v4();\n if (noDash) {\n uuid = uuid.replace(/-/g, '');\n }\n if (uppercase) {\n uuid = uuid.toUpperCase();\n }\n return uuid;\n });\n return count === 1 ? uuids[0] : uuids;\n },\n});\n\nmodule.exports = UUID;\n","const express = require('express');\n\nconst router = express.Router();\nconst UUID = require('./UUID');\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nmodule.exports = (runeya) => {\n const uuid = UUID(runeya);\n router.get('/uuid/', async (req, res) => {\n const { count, noDash, uppercase } = req.query;\n res.json(uuid.generate({\n count: count ? parseInt(count, 10) : undefined,\n noDash: noDash === 'true',\n uppercase: uppercase === 'true'\n }));\n });\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<import('./UUID')>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'UUID',\r\n displayName: 'UUID',\r\n description: 'Generate an UUID',\r\n icon: 'fas fa-random',\r\n placements: [\r\n {\r\n position: 'toolbox',\r\n label: 'UUID',\r\n icon: 'fas fa-random',\r\n goTo: { path: '/UUID' },\r\n active: 'UUID',\r\n },\r\n ],\r\n export: require('./UUID'),\r\n order: 6,\r\n routes: require('./routes'),\r\n};\r\n\r\nmodule.exports = plugin;\r\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Help',\r\n displayName: 'Help',\r\n description: 'Show help',\r\n icon: 'fa-question-circle',\r\n export: null,\r\n placements: [{\r\n position: 'sidebar',\r\n label: 'Help',\r\n icon: 'fas fa-question-circle',\r\n goTo: { path: '/Help' },\r\n active: 'Help',\r\n }],\r\n order: Infinity,\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\nconst axios = require('axios').default;\n\nconst router = express.Router();\nmodule.exports = () => {\n router.post('/openapi/swagger.json', async (req, res) => {\n const { data } = await axios.get(req.body.url);\n res.json(data);\n });\n return router;\n};\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'OpenApi',\r\n displayName: 'OpenApi',\r\n export: null,\r\n description: 'Open an open api json into swagger',\r\n icon: 'fas fa-network-wired',\r\n placements: ['service'],\r\n order: 4,\r\n hidden: (service) => {\r\n if (!service) return false;\r\n return !service?.openapiURL;\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\nconst open = require('open');\nconst pathfs = require('path');\nconst ws = require('workspace-tools');\nconst { readFile } = require('fs/promises');\nconst { readFileSync, existsSync } = require('fs');\nconst { execAsync } = require('../../../servers/server/helpers/exec');\n\nconst router = express.Router();\n\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nconst routes = (runeya) => {\n router.post('/vscode/install', async (req, res) => {\n await execAsync('code --install-extension ./runeya.vsix', { cwd: __dirname });\n res.send('ok');\n });\n router.delete('/vscode/uninstall', async (req, res) => {\n await execAsync('code --uninstall-extension runeya.runeya', { cwd: __dirname });\n res.send('ok');\n });\n\n router.get('/vscode/open-url', async (req, res) => {\n const url = req.query.url?.toString();\n if (url) open(url);\n res.send('ok');\n });\n router.get('/vscode/get-services-from-file', async (req, res) => {\n try {\n if (!req.query.file) return res.status(400).send('file params is required');\n const packageRoot = ws.findPackageRoot(req.query.file?.toString());\n let projectRoot;\n try { projectRoot = ws.findProjectRoot(req.query.file?.toString()); } catch (error) { projectRoot = packageRoot; }\n if (!packageRoot) return res.status(400).send('no package found');\n if (!projectRoot) return res.status(400).send('no package found');\n const monorepo = packageRoot !== projectRoot;\n if (monorepo) {\n const packageInfos = await ws.getPackageInfosAsync(projectRoot);\n const { dependents: dependentsMap } = ws.createDependencyMap(packageInfos);\n const packageJSON = JSON.parse(await readFile(pathfs.resolve(packageRoot, './package.json'), 'utf-8'));\n const dependents = [\n ...(dependentsMap.get(packageJSON.name) || []),\n ];\n const services = runeya.getServices().filter((service) => {\n const servicePackageNames = [\n service.getRootPath(),\n ...service.commands.map((cmd) => cmd.spawnOptions?.env),\n ]\n .flat(100)\n .filter((a, i, arr) => (\n a\n && !arr.slice(0, i).includes(a)\n && a.toString() !== projectRoot\n && existsSync(pathfs.resolve(a.toString(), './package.json'))\n ))\n .map((path) => JSON.parse(readFileSync(pathfs.resolve(path?.toString() || '', './package.json'), 'utf-8')).name);\n return dependents.some((packageName) => servicePackageNames.includes(packageName))\n || servicePackageNames.includes(packageJSON.name);\n });\n res.json(services);\n } else {\n const packageRoot = ws.findPackageRoot(req.query.file?.toString());\n let projectRoot;\n try {\n projectRoot = ws.findProjectRoot(req.query.file?.toString());\n } catch (error) { projectRoot = packageRoot; }\n if (!packageRoot) return res.status(400).send('no package found');\n if (!projectRoot) return res.status(400).send('no package found');\n const services = runeya.getServices().filter((service) => {\n const servicePaths = [\n service.getRootPath(),\n ...service.commands.map((cmd) => cmd.spawnOptions?.env),\n ]\n .flat(100)\n .filter((a, i, arr) => (\n a\n && !arr.slice(0, i).includes(a)\n && existsSync(pathfs.resolve(a.toString(), './package.json'))\n ));\n return servicePaths.includes(projectRoot);\n });\n res.json(services);\n }\n } catch (error) {\n console.error(error);\n res.json([]);\n }\n return null;\n });\n\n router.get('/vscode/download', (req, res) => {\n const vsixPath = pathfs.resolve(__dirname, './runeya.vsix');\n res.download(vsixPath, 'runeya.vsix');\n });\n\n return router;\n};\n\nmodule.exports = routes;\n","const commandExists = require('command-exists');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Vscode',\r\n displayName: 'Vscode',\r\n description: 'interact with vscode extension',\r\n icon: 'fab fa-git-alt',\r\n export: null,\r\n order: Infinity,\r\n placements: [{\r\n position: 'sidebar',\r\n label: 'VScode extension',\r\n img: 'https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Visual_Studio_Code_1.35_icon.svg/512px-Visual_Studio_Code_1.35_icon.svg.png',\r\n goTo: { path: '/Vscode' },\r\n active: 'Vscode',\r\n }],\r\n hidden: () => commandExists('code').then(() => false).catch(() => true),\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const express = require('express');\r\nconst { execAsync } = require('../../../servers/server/helpers/exec');\r\n\r\nconst router = express.Router();\r\n\r\n/** @param {import('@runeya/common-typings').Runeya} runeya */\r\nmodule.exports = (runeya) => {\r\n router.get('/docker/:service', async (req, res) => {\r\n const service = runeya.findService(req.params.service);\r\n if (!service) return res.status(404).send('Service not found');\r\n const isAlive = await execAsync(`docker inspect --format {{.State.Pid}} ${service.container.name}`, {})\r\n .catch(() => null);\r\n const dockerInfos = await execAsync(`docker inspect ${service.container.name}`, {})\r\n .then((data) => {\r\n try {\r\n return JSON.parse(data)[0];\r\n } catch (error) {\r\n console.error(error);\r\n return '';\r\n }\r\n })\r\n .catch(() => null);\r\n let dockerImage = null;\r\n if (dockerInfos) {\r\n dockerImage = await execAsync(`docker history --no-trunc --human --format json ${dockerInfos.Image}`, {})\r\n .then((data) => {\r\n try {\r\n return data.trim().split('\\n').map((a) => JSON.parse(a)).sort((a, b) => {\r\n if (a && b) return a.CreatedAt.localeCompare(b.CreatedAt);\r\n return 0;\r\n })\r\n .map((a) => `${a.Size} ${a.CreatedBy} `);\r\n } catch (error) {\r\n console.error(error);\r\n return '';\r\n }\r\n })\r\n .catch(() => null);\r\n }\r\n res.json([\r\n { label: 'containerName', value: service.container.name },\r\n { label: 'isAlive', value: !!isAlive },\r\n { label: 'pid', value: isAlive },\r\n { label: 'dockerInfos', value: dockerInfos, type: 'json' },\r\n { label: 'image', value: dockerImage, type: 'json' },\r\n ]);\r\n return null;\r\n });\r\n return router;\r\n};\r\n","/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<null>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Docker',\r\n displayName: 'Docker',\r\n description: 'Show docker configs',\r\n icon: 'fab fa-docker',\r\n export: null,\r\n placements: ['service'],\r\n order: 4,\r\n /** @param {import('../../../servers/server/models/Service') | null} service */\r\n hidden: async (service) => {\r\n if (!service?.container) return true;\r\n return !service.container.enabled;\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","\n/** @param {import('@runeya/common-typings').Runeya} runeya */\nconst NodeRed = (runeya) => {\n \n}\n\nmodule.exports = NodeRed","/**\n * @param {import('express')} express\n * @param {{name?:string, version?:string}} param1\n * @returns\n */\nmodule.exports = (express, { name = '', version = '' } = {}) => express.Router().use('/health', (req, res) => {\n res.json({\n name, version, health: true,\n });\n});\n","module.exports = [\n { code: 100, label: 'Continue' },\n { code: 101, label: 'Switching Protocols' },\n { code: 102, label: 'Processing (WebDAV; RFC 2518)' },\n { code: 103, label: 'Early Hints (RFC 8297)' },\n { code: 200, label: 'OK' },\n { code: 201, label: 'Created' },\n { code: 202, label: 'Accepted' },\n { code: 203, label: 'Non-Authoritative Information (since HTTP/1.1)' },\n { code: 204, label: 'No Content' },\n { code: 205, label: 'Reset Content' },\n { code: 206, label: 'Partial Content' },\n { code: 207, label: 'Multi-Status (WebDAV; RFC 4918)' },\n { code: 208, label: 'Already Reported (WebDAV; RFC 5842)' },\n { code: 226, label: 'IM Used (RFC 3229)' },\n { code: 300, label: 'Multiple Choices' },\n { code: 301, label: 'Moved Permanently' },\n { code: 302, label: 'Found (Previously \"Moved temporarily\")' },\n { code: 303, label: 'See Other (since HTTP/1.1)' },\n { code: 304, label: 'Not Modified' },\n { code: 305, label: 'Use Proxy (since HTTP/1.1)' },\n { code: 306, label: 'Switch Proxy' },\n { code: 307, label: 'Temporary Redirect (since HTTP/1.1)' },\n { code: 308, label: 'Permanent Redirect' },\n { code: 400, label: 'Bad Request' },\n { code: 401, label: 'Unauthorized' },\n { code: 402, label: 'Payment Required' },\n { code: 403, label: 'Forbidden' },\n { code: 404, label: 'Not Found' },\n { code: 405, label: 'Method Not Allowed' },\n { code: 406, label: 'Not Acceptable' },\n { code: 407, label: 'Proxy Authentication Required' },\n { code: 408, label: 'Request Timeout' },\n { code: 409, label: 'Conflict' },\n { code: 410, label: 'Gone' },\n { code: 411, label: 'Length Required' },\n { code: 412, label: 'Precondition Failed' },\n { code: 413, label: 'Payload Too Large' },\n { code: 414, label: 'URI Too Long' },\n { code: 415, label: 'Unsupported Media Type' },\n { code: 416, label: 'Range Not Satisfiable' },\n { code: 417, label: 'Expectation Failed' },\n { code: 418, label: 'I\\'m a teapot (RFC 2324, RFC 7168)' },\n { code: 421, label: 'Misdirected Request' },\n { code: 422, label: 'Unprocessable Entity' },\n { code: 423, label: 'Locked (WebDAV; RFC 4918)' },\n { code: 424, label: 'Failed Dependency (WebDAV; RFC 4918)' },\n { code: 425, label: 'Too Early (RFC 8470)' },\n { code: 426, label: 'Upgrade Required' },\n { code: 428, label: 'Precondition Required (RFC 6585)' },\n { code: 429, label: 'Too Many Requests (RFC 6585)' },\n { code: 431, label: 'Request Header Fields Too Large (RFC 6585)' },\n { code: 451, label: 'Unavailable For Legal Reasons (RFC 7725)' },\n { code: 500, label: 'Internal Server Error' },\n { code: 501, label: 'Not Implemented' },\n { code: 502, label: 'Bad Gateway' },\n { code: 503, label: 'Service Unavailable' },\n { code: 504, label: 'Gateway Timeout' },\n { code: 505, label: 'HTTP Version Not Supported' },\n { code: 506, label: 'Variant Also Negotiates (RFC 2295)' },\n { code: 507, label: 'Insufficient Storage (WebDAV; RFC 4918)' },\n { code: 508, label: 'Loop Detected (WebDAV; RFC 5842)' },\n { code: 510, label: 'Not Extended (RFC 2774)' },\n { code: 511, label: 'Network Authentication Required (RFC 6585)' },\n { code: 419, label: 'Page Expired (Laravel Framework)' },\n { code: 420, label: 'Method Failure (Spring Framework)' },\n { code: 420, label: 'Enhance Your Calm (Twitter)' },\n { code: 430, label: 'Request Header Fields Too Large (Shopify)' },\n { code: 450, label: 'Blocked by Windows Parental Controls (Microsoft)' },\n { code: 498, label: 'Invalid Token (Esri)' },\n { code: 499, label: 'Token Required (Esri)' },\n { code: 509, label: 'Bandwidth Limit Exceeded (Apache Web Server/cPanel)' },\n { code: 529, label: 'Site is overloaded' },\n { code: 530, label: 'Site is frozen' },\n { code: 598, label: '(Informal convention) Network read timeout error' },\n { code: 599, label: 'Network Connect Timeout Error' },\n { code: 440, label: 'Login Time-out' },\n { code: 449, label: 'Retry With' },\n { code: 451, label: 'Redirect' },\n { code: 444, label: 'No Response' },\n { code: 494, label: 'Request header too large' },\n { code: 495, label: 'SSL Certificate Error' },\n { code: 496, label: 'SSL Certificate Required' },\n { code: 497, label: 'HTTP Request Sent to HTTPS Port' },\n { code: 499, label: 'Client Closed Request' },\n { code: 520, label: 'Web Server Returned an Unknown Error' },\n { code: 521, label: 'Web Server Is Down' },\n { code: 522, label: 'Connection Timed Out' },\n { code: 523, label: 'Origin Is Unreachable' },\n { code: 524, label: 'A Timeout Occurred' },\n { code: 525, label: 'SSL Handshake Failed' },\n { code: 526, label: 'Invalid SSL Certificate' },\n { code: 527, label: 'Railgun Error' },\n { code: 460, label: '' },\n { code: 463, label: '' },\n { code: 464, label: '' },\n { code: 561, label: 'Unauthorized' },\n { code: 110, label: 'Response is Stale' },\n { code: 111, label: 'Revalidation Failed' },\n { code: 112, label: 'Disconnected Operation' },\n { code: 113, label: 'Heuristic Expiration' },\n { code: 199, label: 'Miscellaneous Warning' },\n { code: 214, label: 'Transformation Applied' },\n { code: 299, label: 'Miscellaneous Persistent Warning' },\n];\n","const HTTPError = require('@runeya/common-express-http-error');\nconst errorCodes = require('./errorCodes');\n\nmodule.exports = () => (err, req, res, next) => {\n const isValidCode = (\n (\n !Number.isNaN(Number(err.code)) || typeof err.code !== 'number'\n ) && errorCodes.map((a) => a.code).includes(Math.floor(+err.code))\n );\n let httpErr;\n if (err instanceof HTTPError && isValidCode) {\n httpErr = err;\n } else {\n httpErr = (!err.code || !isValidCode)\n ? new HTTPError(err, 500, err?.errorId, err?.date, err?.stack)\n : new HTTPError(err.message, err.code, err?.errorId, err?.date, err?.stack);\n }\n console.error(httpErr);\n res.status(Math.floor(httpErr.code)).json({\n errorId: httpErr.errorId,\n date: httpErr.date,\n code: httpErr.code,\n message: httpErr.message,\n details: httpErr.details || err?.details,\n ...(err?.customCode ? { customCode: err.customCode } : {}),\n });\n next(err);\n};\n","module.exports = (req, res) => {\n res.status(404).send(`${req.method} ${req.url} not found`);\n};\n","require('express-async-errors');\nconst express = require('express');\nconst cors = require('cors');\nconst pathfs = require('path');\nconst fs = require('fs');\nconst healthCheck = require('@runeya/common-express-health-check');\nconst helmet = require('helmet').default;\nconst cookieParser = require('cookie-parser');\nconst compression = require('compression');\nconst http = require('http');\nconst Socket = require('@runeya/common-socket-server');\nconst CustomObservable = require('@runeya/common-socket-server/src/CustomObservable');\n\nconst onServerLaunch = new CustomObservable()\nlet _server\nrequire('express-async-errors');\n\nmodule.exports = {\n onServerLaunch, \n getServer: () => {\n return new Promise((res) => {\n if(_server) return res(_server)\n onServerLaunch.subscribe(() => {\n res(_server)\n })\n })\n },\n /**\n * @param {{\n * port: number | string,\n * baseUrl?: string,\n * helmetConf?: import('helmet').HelmetOptions | null,\n * corsConf?: import('cors').CorsOptions,\n * beforeAll?: ({app, server}) => any,\n * afterAll?: () => any,\n * socket?: boolean,\n * onListening?: (server: {server: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>, app: import('express').Express}) => any,\n * beforeStatic?: (server: {server: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>, app: import('express').Express}) => any,\n * afterControllers?: (server: {server: http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>, app: import('express').Express}) => any,\n * controllers?: () => import('express').RequestHandler,\n * staticController?: string,\n * noGreetings?: boolean,\n * apiPrefix?: string\n * bodyLimit?: string\n * healthPath?: string\n * }} param0\n * @returns\n */\n async launch({\n port = process.env.PORT || 4002,\n baseUrl = __dirname,\n helmetConf = {},\n corsConf = {},\n beforeAll = () => {},\n afterAll = () => {},\n onListening = () => { },\n beforeStatic = () => { },\n afterControllers = () => { },\n controllers = () => () => {},\n staticController = undefined,\n noGreetings = false,\n socket = false,\n apiPrefix = '/api',\n bodyLimit = '50mb',\n healthPath = apiPrefix,\n }) {\n const pkgJSONPath = pathfs.resolve(baseUrl, 'package.json');\n const isPkgJSONExists = fs.existsSync(pkgJSONPath);\n const pkgJSON = isPkgJSONExists ? require(pkgJSONPath) : { name: 'unknown', version: 'unknown' };\n const appVersion = pkgJSON.version;\n const appName = pkgJSON.name;\n\n console.log(`<h2 style=\"background: linear-gradient(90deg, rgba(52,70,91,1) 0%, rgba(28,92,227,1) 100%);color:white;border-radius:10px;padding:10px;width: max-content\">${appName.replace('@runeya/', '')}</h2>`);\n console.log(`v${appVersion} started, listening on port ${port}.`);\n\n const app = express();\n\n const server = http.createServer(app);\n if (helmetConf) {\n app.use((req, res, next) => {\n if(req.url.startsWith('/red')) return next()\n helmet(\n helmetConf\n )(req, res, next)\n });\n }\n\n console.log('Enable cors...');\n app.use(cors(corsConf));\n app.options('*', (req, res, next) => {\n res.setHeader('Access-Control-Allow-Credentials', 'true');\n next();\n });\n\n console.log('Enable JSON body...');\n app.use(express.json({ limit: bodyLimit }));\n app.use(express.urlencoded({ extended: true }));\n\n console.log('Enable Cookie parser...');\n app.use(cookieParser());\n\n console.log('Enable Compression...');\n app.use(compression());\n\n console.log('Enable health check...');\n app.use(healthPath, healthCheck(express, { name: appName, version: appVersion }));\n\n beforeStatic?.({ server, app });\n\n console.log('Apply additional routes...');\n if (staticController) {\n app.use('/', express.static(staticController));\n }\n\n if (socket) {\n console.log('Enable socket...');\n Socket.sockets.connect(server);\n }\n app.use(apiPrefix, controllers());\n\n if (!noGreetings) {\n app.get('/', (req, res) => res.json({ appName, appVersion }));\n }\n\n afterControllers?.({ server, app });\n if (process.env.NODE_ENV === 'HFBXdZMJxLyJoua28asEaxRixJ6LriR7FnRzX6pwA7pFjZ') {\n const createProxyMiddleware = require('http-proxy-middleware').createProxyMiddleware;\n app.use('/', createProxyMiddleware({\n target: 'http://127.0.0.1:5173',\n changeOrigin: false,\n ws: true,\n }));\n server.on('upgrade', (req, res) => {\n if (req.url === '/') {\n proxy.ws(req, res, {\n target: 'ws://127.0.0.1:5173',\n });\n }\n });\n }\n console.log('Enable error handling...');\n app.use(require('@runeya/common-express-error-handler')());\n\n console.log('Enable 404 handling...');\n app.use(require('@runeya/common-express-404'));\n\n console.log('Apply additional tasks before launch...');\n await beforeAll({ app, server });\n\n console.log('Launch...');\n server.on('listening', () => onListening({ server, app }));\n\n server.listen(port, async () => {\n _server = server\n onServerLaunch.next({ server, app })\n console.log('<h1>✓ Launched</h1>');\n });\n server.on('close', async () => {\n await afterAll();\n });\n\n return server;\n },\n express,\n};\n","const { express, getServer } = require('@runeya/common-express');\nconst { sockets } = require('@runeya/common-socket-server');\nvar RED = require(\"node-red\");\nconst compressing = require('compressing')\n\nconst router = express.Router();\nconst pathfs = require('path');\nconst { existsSync } = require('fs');\nconst { rm, readFile, writeFile, mkdir, readdir } = require('fs/promises');\nconst ports = require('@runeya/servers-server/models/ports');\nconst { execAsync } = require('@runeya/servers-server/helpers/exec');\nconst EncryptionKey = require('@runeya/servers-server/models/EncryptionKey');\nconst PromiseB = require('bluebird')\nconst { v4 } = require('uuid');\n\n/** @param {import('@runeya/common-typings').Runeya} Stack */\nmodule.exports = (Stack) => {\n getServer().then(async (server) => {\n const userDir = pathfs.resolve(Stack.getRootPath(), 'nodered')\n if (!existsSync(userDir)) await mkdir(userDir, {recursive: true})\n const settings = {\n httpAdminRoot: \"/red\",\n httpNodeRoot: \"/node-red\",\n userDir,\n credentialSecret: EncryptionKey.encryptionKey,\n functionGlobalContext: {},\n flowFile: 'flow.json',\n paletteCategories: ['Runeya'],\n }\n settings.functionGlobalContext.runeya = {\n sockets,\n url: `http://localhost:${ports.http}`,\n stack: require('@runeya/servers-server/models/stack')\n }\n \n RED.init(server, {\n ...settings,\n });\n router.use(settings.httpAdminRoot, RED.httpAdmin);\n router.use(settings.httpNodeRoot, RED.httpNode);\n\n const moduleName = 'node-red-contrib-runeya'\n const moduleNameLegacy = 'node-red-contrib-stack-monitor'\n const modulePath = pathfs.resolve(userDir, 'node_modules', moduleName);\n const localNodeModuleTarPath = pathfs.resolve(__dirname, `${moduleName}.tar`)\n const packageJSONPath = pathfs.resolve(userDir, 'package.json')\n\n // Remove legacy module\n if(existsSync(pathfs.resolve(userDir, 'node_modules', moduleNameLegacy))) {\n await rm(pathfs.resolve(userDir, 'node_modules', moduleNameLegacy), { recursive: true, force: true })\n await execAsync('npm uninstall node-red-contrib-stack-monitor', { cwd: userDir })\n }\n\n if (existsSync(modulePath)) {\n console.log(moduleName, 'found, delete it before start nodered')\n await rm(modulePath, { recursive: true, force: true })\n await execAsync('npm uninstall node-red-contrib-runeya', { cwd: userDir })\n }\n\n await PromiseB.map(await readdir(userDir), async file => {\n if(file.startsWith(`node-red-contrib-runeya-`) && file.endsWith('.tgz')) {\n await rm(pathfs.resolve(userDir, file))\n }\n })\n\n /** @type {Buffer} */\n let buffer\n if(existsSync(localNodeModuleTarPath)) {\n console.log(`Read ${moduleName} from local tar`)\n buffer = await readFile(localNodeModuleTarPath)\n } else {\n console.log(`Build ${moduleName} from dir`)\n function stream2buffer(stream) {\n return new Promise((resolve, reject) => {\n const _buf = [];\n stream.on(\"data\", (chunk) => _buf.push(chunk));\n stream.on(\"end\", () => resolve(Buffer.concat(_buf)));\n stream.on(\"error\", (err) => reject(err));\n });\n }\n const stream = new compressing.tar.Stream()\n stream.addEntry(pathfs.resolve(__dirname, './nodes'), { ignoreBase: true, relativePath: 'package' })\n buffer = await stream2buffer(stream)\n }\n\n let packageJSON = {\n \"name\": \"node-red-project\",\n \"description\": \"A Node-RED Project\",\n \"version\": \"0.0.1\",\n \"private\": true,\n \"dependencies\": {}\n }\n \n if(existsSync(packageJSONPath)) {\n Object.assign(packageJSON, JSON.parse(await readFile(packageJSONPath, 'utf-8')))\n }\n const tgzFileName = `${moduleName}.tgz`\n packageJSON.dependencies[moduleName] = `file:${tgzFileName}`\n const pathToTgz = pathfs.resolve(userDir, `${tgzFileName}`) \n await writeFile(pathToTgz, buffer)\n await writeFile(packageJSONPath, JSON.stringify(packageJSON, null, 2), 'utf-8')\n await execAsync('npm i', { cwd: userDir })\n\n await writeFile(pathfs.resolve(userDir, '.gitignore'), `*\n!flow.json\n!flow_cred.json\n!package.json\n `)\n await RED.start();\n sockets.emit('scenarios:start')\n })\n return router;\n};\n","const Workflows = require('./Workflows');\r\n\r\n/** @type {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<Workflows>} */\r\nconst plugin = {\r\n enabled: true,\r\n name: 'Workflows',\r\n displayName: 'Workflows',\r\n description: 'Make workflows based on events or manual triggers',\r\n icon: 'fas fa-sitemap',\r\n export: Workflows,\r\n order: 10,\r\n placements: [\r\n {\r\n position: 'sidebar-top',\r\n label: 'Workflows',\r\n icon: 'fas fa-sitemap',\r\n goTo: { path: '/Workflows' },\r\n active: 'Workflows',\r\n },\r\n ],\r\n finder: (search, runeya) => {\r\n return []\r\n },\r\n routes: require('./routes'),\r\n};\r\nmodule.exports = plugin;\r\n","const plugins = {\n bugs: require('@runeya/modules-bugs-backend'),\n base64: require('@runeya/modules-base64-backend'),\n configuration: require('@runeya/modules-configuration-backend'),\n devOps: require('@runeya/modules-dev-ops-backend'),\n diff: require('@runeya/modules-diff-backend'),\n documentation: require('@runeya/modules-documentation-backend'),\n finder: require('@runeya/modules-finder-backend'),\n git: require('@runeya/modules-git-backend'),\n github: require('@runeya/modules-github-backend'),\n globalScripts: require('@runeya/modules-global-scripts-backend'),\n httpClient: require('@runeya/modules-http-client-backend'),\n jsonFormatter: require('@runeya/modules-json-formatter-backend'),\n jwt: require('@runeya/modules-jwt-backend'),\n kanban: require('@runeya/modules-kanban-backend'),\n logs: require('@runeya/modules-logs-backend'),\n mongo: require('@runeya/modules-mongo-backend'),\n nodeRepl: require('@runeya/modules-node-repl-backend'),\n npm: require('@runeya/modules-npm-backend'),\n openai: require('@runeya/modules-openai-backend'),\n regex: require('@runeya/modules-regex-backend'),\n sqlBeautifier: require('@runeya/modules-sql-beautifier-backend'),\n toolbox: require('@runeya/modules-toolbox-backend'),\n uuid: require('@runeya/modules-uuid-backend'),\n help: require('@runeya/modules-help-backend'),\n openapi: require('@runeya/modules-openapi-backend'),\n vscode: require('@runeya/modules-vscode-backend'),\n docker: require('@runeya/modules-docker-backend'),\n nodered: require('@runeya/modules-workflows-backend'),\n};\nmodule.exports = Object.keys(plugins).reduce((acc, key) => {\n if (plugins[key].enabled) acc[key] = plugins[key];\n return acc;\n}, {});\n","const { EventEmitter } = require('events');\n\nmodule.exports = class extends EventEmitter {\n /**\n *\n * @param {{input?: import('stream').Readable, emitAfterNoDataMs?: number}} options\n */\n constructor(options = {}) {\n super();\n this.options = options;\n if (options.input) this.linkToInput(options.input);\n /** @type {string[]} */\n this.all = [];\n /** @type {NodeJS.Timeout|undefined} */\n this.timeout = undefined;\n }\n\n /**\n *\n * @param {import('stream').Readable} readStream\n */\n linkToInput(readStream) {\n readStream.on('data', (data) => {\n clearTimeout(this.timeout);\n data = data.toString('utf-8');\n const dataLen = data.length;\n for (let i = 0; i < dataLen; i += 1) {\n const char = data[i];\n if (char === '\\n' || char === '\\r\\n') {\n this.#emit();\n } else {\n this.all.push(char);\n }\n }\n if (this.options.emitAfterNoDataMs) {\n this.timeout = setTimeout(() => {\n this.#emit();\n }, this.options.emitAfterNoDataMs);\n }\n });\n }\n\n #emit() {\n if (!this.all.length) return;\n const line = this.all.splice(0, this.all.length).join('');\n this.emit('line', line);\n }\n};\n","const ansiconvert = new (require('ansi-to-html'))({\n newline: true,\n escapeXML: false,\n bg: '#FFFFFFFF',\n fg: '#4c4c4c',\n});\n\n/** @param {string} msg */\nfunction stripAnsi(msg) {\n return msg\n // eslint-disable-next-line no-control-regex\n .replaceAll(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/gm, '');\n}\n/** @param {string} msg */\nfunction unescapeAnsi(msg) {\n return msg\n .replaceAll(/\\\\u001b\\[/gm, '\\u001b[')\n .replaceAll(/\\\\u009b\\[/gm, '\\u009b[');\n}\n\nmodule.exports = { ansiconvert, stripAnsi, unescapeAnsi };\n","module.exports = process.platform === 'win32';\n","const PromiseB = require('bluebird');\nconst { cloneDeep, merge, over } = require('lodash');\nconst dbs = require('../helpers/dbs');\nconst { existsSync } = require('fs');\n\nclass Environment {\n /**\n * @param {import('@runeya/common-typings').NonFunctionProperties<Environment>} environment\n */\n constructor(environment) {\n /** @type {string} */\n this.label = environment.label || '';\n /** @type {boolean} */\n this.default = environment.default || false;\n /** @type {string} */\n this.color = environment.color || '';\n /** @type {string} */\n this.bgColor = environment.bgColor || '';\n /** @type {{[key: string]: string}} */\n this.envs = environment.envs || {};\n /** @type {string[]} */\n this.extends = environment.extends || [];\n /** @type {{[key: string]: string}} */\n this.overrideEnvs = environment.overrideEnvs || {};\n }\n\n static async load(label, Stack) {\n const environmentDB = await dbs.getDb(`envs/${label}`).read();\n const overridesDB = dbs.getDb(`overrides/${label}-environment`)\n if(!existsSync(await overridesDB.getPath())) await new Environment(environmentDB).save()\n const overrides = await dbs.getDb(`overrides/${label}-environment`).read();\n merge(environmentDB?.envs || {}, overrides?.envs || {});\n return new Environment(environmentDB, Stack);\n }\n\n static async all() {\n const allDbds = await dbs.getDbs('envs');\n\n const environments = await PromiseB.map(allDbds, (id) => Environment.load(id));\n if (!environments.length) {\n const localEnv = new Environment({\n bgColor: '#FFFFFF',\n color: '#000000',\n default: true,\n label: 'Local',\n envs: {},\n });\n await localEnv.save();\n environments.push(localEnv);\n }\n return environments;\n }\n\n static async find(envLabel) {\n const envs = await this.all();\n return envs.find((env) => env.label === envLabel);\n }\n\n /** @returns {Promise<Environment[]>} */\n async getExtendedEnvironments() {\n return [\n this,\n ...await PromiseB\n .mapSeries(this.extends || [], (environmentLabel) => Environment.find(environmentLabel))\n .filter(a => !!a)\n ]\n }\n async getBank() {\n const bank = {}\n const environments = await this.getExtendedEnvironments()\n await PromiseB.map(environments.reverse(), async environment => {\n Object.assign(bank, environment?.envs)\n })\n Object.assign(bank, this.envs)\n return bank\n }\n\n async save() {\n const dbToWrite = this.toStorage();\n const overrideDbToWrite = { envs: {} };\n Object.keys(dbToWrite.envs).forEach((key) => {\n if (key.endsWith('_RUNEYA_OVERRIDE')) {\n overrideDbToWrite.envs[key] = dbToWrite.envs[key];\n delete dbToWrite.envs[key];\n }\n });\n await dbs.getDb(`overrides/${this.label}-environment`).write(overrideDbToWrite);\n await dbs.getDb(`envs/${this.label}`).write(dbToWrite);\n }\n\n async update(env) {\n this.default = env.default;\n this.color = env.color;\n this.bgColor = env.bgColor;\n this.envs = env.envs;\n this.extends = env.extends;\n return this.save();\n }\n\n async delete() {\n await dbs.getDb(`envs/${this.label}`).delete();\n }\n\n toStorage() {\n return cloneDeep({\n label: this.label,\n default: this.default,\n color: this.color,\n bgColor: this.bgColor,\n extends: this.extends,\n envs: this.envs,\n });\n }\n}\n\nmodule.exports = Environment;\n","/** @type {import(\"../models/Service\").Parser} */\nconst parser = {\n id: 'runeya-parser-jsons',\n label: 'Parse jsons',\n readonly: true,\n transform: (line) => {\n if (!line.raw) return line;\n const firstChar = line.raw.trim().charAt(0);\n if (firstChar === '[' || firstChar === '{') {\n try { line.json = JSON.parse(line.raw); } catch (error) { }\n }\n return line;\n },\n};\nmodule.exports = parser;\n","const jsonParser = require('./json');\n/** @type {import(\"../models/Service\").Parser} */\nconst parser = {\n id: 'runeya-parser-debug',\n label: 'Runeya debug',\n readonly: true,\n transform: (line, ...rest) => {\n if (!line.json) line = jsonParser.transform(line, ...rest);\n if (!line.json) return line;\n if (/** @type {Array<any>} */(line?.json)?.[0] === 'runeya') {\n line.debug = line.json.length === 2 ? /** @type {Array<any>} */(line?.json)?.[1] : line.json.slice(1);\n }\n return line;\n },\n};\nmodule.exports = parser;\n","const urlRegex = /(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])/gi;\n\n/** @type {import(\"../models/Service\").Parser} */\nconst parser = {\n id: 'runeya-parser-links',\n label: 'Parse links',\n readonly: true,\n transform: (line) => {\n line.msg = line.msg.replaceAll(urlRegex, (url) => `<a href=\"${url}\" target=\"_blank\">${url}</a>`);\n return line;\n },\n};\n\nmodule.exports = parser;\n","const PromiseB = require('bluebird');\nconst { randomUUID } = require('crypto');\nconst dbs = require('../helpers/dbs');\n\nconst nativeParsers = {\n [require('../parser/debug').id]: require('../parser/debug'),\n [require('../parser/json').id]: require('../parser/json'),\n [require('../parser/link').id]: require('../parser/link'),\n};\nclass Parser {\n /**\n * @param {import('@runeya/common-typings').NonFunctionProperties<Parser>} parser\n */\n constructor(parser) {\n /** @type {string} */\n this.label = parser.label || '';\n /** @type {string} */\n this.id = parser.id || randomUUID();\n /** @type {string} */\n this.transform = parser.transform || '';\n /** @type {boolean} */\n this.readonly = parser.readonly || false;\n try {\n /** @type {Function} */\n this.transformFunction = typeof parser.transform === 'string' ? eval(parser.transform) : parser.transform;\n } catch (error) {\n console.error('[PARSER]:', this.label, 'Cannot interpret your parser', error);\n }\n }\n\n static async load(id) {\n if (nativeParsers[id]) return new Parser(nativeParsers[id]);\n return new Parser(await dbs.getDb(`parsers/${id}`).read());\n }\n\n static async all() {\n const allDbds = [\n ...await dbs.getDbs('parsers'),\n ...Object.keys(nativeParsers),\n ];\n return PromiseB.map(allDbds, (id) => this.load(id));\n }\n\n static async find(envId) {\n const parsers = await this.all();\n return parsers.find((env) => env.id === envId);\n }\n\n async save() {\n const obj = this.toStorage();\n await dbs.getDb(`parsers/${this.id}`).write(obj);\n return this;\n }\n\n async update(env) {\n this.transform = env.transform;\n this.label = env.label;\n await dbs.getDb(`parsers/${this.id}`).write(this.toStorage());\n }\n\n async delete() {\n await dbs.getDb(`parsers/${this.id}`).delete();\n }\n\n toStorage() {\n return {\n id: this.id,\n label: this.label,\n transform: this.transform,\n };\n }\n}\n\nmodule.exports = Parser;\n","/* eslint-disable func-names */\n/// <reference path=\"@runeya/common-typings.d.ts\">\nconst os = require('os');\nconst { spawn } = require('child_process');\nconst killport = require('kill-port');\nconst URL = require('url');\nconst path = require('path');\nconst PromiseB = require('bluebird');\nconst dayjs = require('dayjs');\nconst { v4 } = require('uuid');\nconst { existsSync, readFileSync } = require('fs');\nconst kill = require('tree-kill');\nconst axios = require('axios').default;\nconst pathfs = require('path');\nconst net = require('net');\n// eslint-disable-next-line import/no-extraneous-dependencies\nconst { sockets } = require('@runeya/common-socket-server');\nconst { mkdir, writeFile } = require('fs/promises');\nconst { cloneDeep, over } = require('lodash');\nconst CreateInterface = require('../helpers/readline');\nconst { stripAnsi, ansiconvert, unescapeAnsi } = require('../helpers/ansiconvert');\nconst isWindows = require('../helpers/isWindows');\nconst { execAsync } = require('../helpers/exec');\nconst { humanStringToKey, replaceEnvs } = require('../helpers/stringTransformer.helper');\nconst dbs = require('../helpers/dbs');\nconst Environment = require('./Environment');\nconst ParserModel = require('./Parser');\n\nconst userInfo = os.userInfo();\nconst { gid, uid, username } = userInfo;\n\n/** @type {Record<string, {cmd: string, args: string[]}>} */\nconst alias = {\n ls: { cmd: 'ls', args: ['--color=force'] },\n gco: { cmd: 'git', args: ['checkout'] },\n};\n\n/**\n * @param {import('@runeya/common-typings').NonFunctionProperties<Service>} service\n * @param {import('./stack')} Stack\n */\nfunction Service(service, Stack, { isUpdate } = { isUpdate: false }) {\n return (async () => {\n this.Stack = Stack;\n /** @type {LogMessage[]} */\n this.queue = service.queue || [];\n this.stopQueue = false\n if (!isUpdate) {\n this.processQueue()\n }\n /** @type {string} */\n this.label = service.label || '';\n /** @type {string} */\n this.description = service.description || '';\n /**\n * @type {{\n * home: string,\n * remote: string,\n * }}\n * */\n this.git = {\n home: service.git?.home || '',\n remote: service.git?.remote || '',\n };\n /** @type {string} */\n this.documentation = service.documentation || '';\n /** @type {string} */\n this.openapiURL = service.openapiURL || '';\n /** @type {string} */\n this.url = service.url || '';\n /** @type {string} */\n this.rootPath = service.rootPath || '.';\n /** @type {string[]} */\n this.urls = service.urls || [];\n /** @type {string[]} */\n this.groups = service.groups || [];\n /** @type {string[]} */\n this.parsers = service.parsers || [\n 'runeya-parser-debug',\n 'runeya-parser-jsons',\n 'runeya-parser-links',\n ];\n /** @type {boolean} */\n this.enabled = service.enabled || false;\n /** @type {boolean} */\n this.crashed = service.crashed || false;\n /**\n * @type {{\n * enabled: boolean\n * name: string,\n * user?: string,\n * build: string,\n * volumes: string[],\n * ignoreVolumes: string[],\n * sharedVolume: string,\n * ports: string[],\n * noHostUser: true\n * noChangeWorkDir: true,\n * customPid?: ({cmd, args, pid})=> Promise<number | null>\n * bootstrap: {commands: Array<{user: string, cmd: string, entrypoint:string}>}\n * }}\n */\n // @ts-ignore\n this.container = service.container || {};\n if (this.container) {\n this.container.name = humanStringToKey(this.label);\n if (!this.container.volumes?.length) this.container.volumes = [];\n if (!this.container.build) this.container.build = '';\n this.container.ports = this.container.ports || [];\n this.container.sharedVolume = this.container.sharedVolume || '~/.runeya';\n this.container.ignoreVolumes = this.container.ignoreVolumes?.length\n ? this.container.ignoreVolumes.filter((f) => !f.startsWith(this.container?.sharedVolume || ''))\n : [];\n if (!this.container.bootstrap) this.container.bootstrap = { commands: [] };\n if (!this.container.bootstrap.commands) this.container.bootstrap.commands = [];\n }\n /** @type {boolean} */\n this.exited = service.exited || false;\n /** @type {{[key:string]: {[key:string]: {value: string, override: string, systemOverride?: string, prefix?: string, suffix?: string}}}} */\n this.envs = service.envs || {}\n /**\n * @type {{\n * id: string,\n * spawnArgs: string[],\n * spawnCmd: string,\n * spawnOptions: SpawnOptions\n * effectiveParsers: ParserModel[]\n * parsers: string[]\n * }[]}\n * */\n this.commands = service.commands || [];\n /**\n * @type {{\n * id: string,\n * spawnArgs: string[],\n * spawnCmd: string,\n * spawnOptions: SpawnOptions\n * effectiveParsers: ParserModel[]\n * parsers: string[]\n * }[]}\n * */\n this.shortcuts = service.shortcuts || [];\n /** @type {LogMessage[]} */\n this.store = service.store || [];\n /** @type {import('child_process').ChildProcess[]} */\n this.pids = service.pids || [];\n /** @type {number | null} */\n this.lastDatePrinted = service.lastDatePrinted || null;\n\n /**\n * @type {{\n * enabled: boolean,\n * url: string,\n * interval: string,\n * method: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'\n * returnCode: number,\n * responseText: string,\n * timeout: number,\n * startAfter: number\n * }}\n * */\n this.health = service.health || {\n enabled: false,\n url: '',\n interval: '',\n method: 'GET',\n returnCode: 200,\n responseText: '',\n timeout: 0,\n startAfter: 0,\n };\n const environments = await Environment.all();\n const overrides = await dbs.getDb(`overrides/${this.label}-envs`).read();\n // Load variables from db and envs\n if (!isUpdate) {\n environments.forEach((environment) => {\n const envs = this.envs[environment.label] || {}\n Object.keys(envs).forEach((key) => {\n const env = envs[key]\n const tag = extractTag(env.value);\n if (tag) envs[key].override = `{{${tag}_RUNEYA_OVERRIDE}}`;\n const override = overrides[environment.label]?.[key];\n if (!env || !override) return\n envs[key].override = override\n });\n });\n }\n /** @type {Record<string, string>} */\n this.meta = service.meta || {};\n await PromiseB.map(this.commands || [], async (command) => {\n // @ts-ignore\n command.effectiveParsers = await PromiseB.map([\n ...(this.parsers || []),\n ...(command.parsers || []),\n ], (parserId) => ParserModel.find(parserId)).filter((a) => !!a);\n });\n return this;\n })();\n}\nService.prototype.getRootPath = function () {\n return replaceEnvs(this.rootPath);\n};\n\nService.prototype.processQueue = function() {\n if (this.queue.length) {\n const messages = this.queue.splice(0, this.queue.length);\n sockets.emit('logs:update', messages);\n }\n if(this.stopQueue) return\n setTimeout(() => {this.processQueue()}, 100);\n}\n\nService.prototype.save = async function () {\n const obj = this.toStorage();\n const overrides = {};\n await PromiseB.map(Object.keys(obj.envs), (environmentLabel) => {\n if (!overrides[environmentLabel]) overrides[environmentLabel] = {};\n Object.keys(obj.envs[environmentLabel]).forEach((key) => {\n const env = obj.envs[environmentLabel][key]\n overrides[environmentLabel][key] = env.override;\n delete env.systemOverride;\n delete env.override;\n });\n });\n await dbs.getDb(`overrides/${this.label}-envs`).write(overrides);\n await dbs.getDb(`services/${this.label}`).write(obj);\n};\n\nService.prototype.delete = async function () {\n await dbs.getDb(`overrides/${this.label}-envs`).delete();\n await dbs.getDb(`services/${this.label}`).delete();\n};\n\nService.load = async function (label, Stack) {\n return new Service(await dbs.getDb(`services/${label}`).read(), Stack);\n};\n\n/** @param {string} path */\nService.prototype.loadCustomEnv = function (path) {\n const dotEnvPath = pathfs.resolve(path, '.env');\n if (existsSync(dotEnvPath) && readFileSync(dotEnvPath, { encoding: 'utf-8' }).trim()) {\n console.log(`! A .env will override your ${this.label} service !`);\n return require('dotenv').parse(readFileSync(dotEnvPath, 'utf-8'));\n }\n return null;\n};\n\nService.prototype.exportInApi = function () {\n const res = { ...this };\n // @ts-ignore\n delete res.pids;\n // @ts-ignore\n delete res.store;\n // @ts-ignore\n delete res.Stack;\n return res;\n};\n/** @return {Partial<import('@runeya/common-typings').NonFunctionProperties<Service>>} */\nService.prototype.toStorage = function () {\n const service = cloneDeep({\n label: this.label,\n commands: this.commands,\n description: this.description,\n git: this.git,\n groups: this.groups,\n url: this.url,\n rootPath: this.rootPath,\n openapiURL: this.openapiURL,\n health: this.health,\n urls: this.urls,\n parsers: this.parsers,\n container: this.container,\n meta: this.meta,\n envs: this.envs,\n shortcuts: this.shortcuts\n });\n return service;\n};\n\nService.prototype.restart = async function () {\n await this.kill();\n await this.launch();\n};\n\nService.prototype.sendHasBeenModified = function () {\n sockets.emit('conf:update', [this.label]);\n};\n\nService.prototype.kill = async function (keepEnabled = false) {\n if (this.container?.enabled && this.container?.name) {\n await execAsync(`docker stop ${this.container.name}`, {}).catch(console.error);\n await execAsync(`docker rm ${this.container.name}`, {}).catch(console.error);\n } else {\n await PromiseB.map(this.pids, async (spawnedProcess) => {\n if (!spawnedProcess.pid) return;\n await killAsync(spawnedProcess.pid);\n spawnedProcess.kill('SIGKILL');\n });\n const urls = [...this.urls || [], this.url].filter((a) => a);\n if (urls.length) {\n await PromiseB.mapSeries(urls, async (url) => {\n const { port } = URL.parse(url);\n if (port && !Number.isNaN(+port)) {\n let free = false;\n for (let i = 0; i < 16; i += 1) {\n // eslint-disable-next-line no-await-in-loop\n await wait(100);\n // eslint-disable-next-line no-await-in-loop\n free = await checkport(+port);\n if (free) break;\n }\n if (!free) {\n await killport(+port).catch((err) => console.error('Error: (Kill port):', err?.message || err));\n }\n }\n });\n }\n }\n this.pids = [];\n sockets.emit('logs:clear', { label: this.label });\n this.store = [];\n await wait(100);\n this.enabled = keepEnabled;\n this.crashed = false;\n this.sendHasBeenModified();\n};\n\nService.prototype.launch = async function () {\n this.store = [];\n await this.kill(true).catch(console.error);\n if(this.container?.enabled) {\n await this.buildDocker({isMainProcess: true})\n }\n if (this.commands?.length) {\n await PromiseB.map(this.commands, async (command) => {\n if (command?.spawnCmd) {\n await this.launchProcess(command);\n }\n });\n }\n this.enabled = true;\n this.sendHasBeenModified();\n};\n\n/**\n * @param {Buffer | string} data\n * @param {Partial<LogMessage>} logMessageOverride\n */\nService.prototype.add = async function (data, logMessageOverride, {\n pid, isMainProcess, command,\n}) {\n const timestamp = Date.now();\n\n const ansiMsg = unescapeAnsi(data.toString());\n const stripMsg = stripAnsi(ansiMsg);\n const htmlMessage = ansiMsg ? ansiconvert.toHtml(ansiMsg) : '<br/>';\n /** @type {LogMessage} */\n let line = {\n pid,\n msg: htmlMessage,\n raw: stripMsg,\n timestamp,\n label: this.label,\n json: null,\n debug: null,\n ...logMessageOverride,\n id: v4(),\n };\n line = await PromiseB.reduce(command.effectiveParsers || [], async (line, parser) => {\n try {\n const result = await parser.transformFunction(line, this);\n if (!result?.id) {\n console.error(`It seems your parser \"${parser.label}\" not return correct value. Please verify or disable it..`);\n return line;\n }\n return result;\n } catch (err) {\n console.error('[PARSER]:', parser.label, ':', err);\n return line;\n }\n }, line);\n\n if (line.hide) return;\n\n if (line.source === 'stderr' && isMainProcess) {\n sockets.emit('alert', { label: this.label, message: line.raw.toString(), type: 'error', commandId: command?.id });\n }\n\n if (timestamp > (this.lastDatePrinted || Date.now()) + 2000) {\n const date = `🕑 ${dayjs().format('YYYY-MM-DD HH:mm:ss')}`;\n /** @type {LogMessage} */\n const line = {\n id: v4(), raw: date, label: this.label, msg: date, timestamp, isSeparator: true,\n };\n this.store.push(line);\n this.queue.push(line);\n }\n this.lastDatePrinted = Date.now();\n\n if (line.msg.length > 100000 && !line.msg.startsWith('[\"runeya\"')) line.msg = line.msg.slice(0, 10000);\n this.store.push(line);\n this.queue.push(line);\n};\n\nService.prototype.launchProcess = async function (command, isMainProcess = true) {\n try {\n this.enabled = true;\n this.sendHasBeenModified();\n this.crashed = false;\n this.exited = false;\n let { cmd, args, options } = this.container.enabled\n ? await this.parseIncomingCommandDocker(command)\n : await this.parseIncomingCommand(command);\n if (!existsSync(options.cwd)) {\n this.crashed = true;\n this.exited = true;\n /** @type {LogMessage} */\n const launchMessage = {\n id: v4(),\n timestamp: Date.now(),\n label: this.label,\n pid: null,\n msg: `Path does not exists (${options.cwd})`,\n raw: `Path does not exists (${options.cwd})`,\n cmd: {\n cmd,\n args,\n options,\n status: 'exited',\n },\n };\n console.error(launchMessage.msg);\n this.add(launchMessage.msg, { source: 'stderr' }, { pid: null, command, isMainProcess });\n return {spawnProcess: null, launchMessage};\n }\n const spawnProcess = spawn(cmd, args, { ...options, detached: !isWindows });\n\n /** @type {number | undefined | null} */\n let pid = 0;\n pid = spawnProcess.pid;\n if (this.container?.customPid) {\n // cant wait for custom pid, because listeners should be attached fast after spawn call\n this.container.customPid({ pid: spawnProcess.pid, cmd, args })\n .then((_pid) => { pid = _pid; });\n }\n if (!this.pids) this.pids = [];\n this.pids.push(spawnProcess);\n // @ts-ignore\n spawnProcess.title = this.label;\n this.lastDatePrinted = Date.now();\n /** @type {LogMessage[]} */\n this.queue = [];\n new CreateInterface({\n input: spawnProcess.stdout,\n emitAfterNoDataMs: 100,\n })\n .on('line', (message) => {\n this.add(message, { source: 'stdout' }, { isMainProcess, pid, command });\n });\n new CreateInterface({\n input: spawnProcess.stderr,\n emitAfterNoDataMs: 100,\n }).on('line', (message) => {\n this.add(message, { source: 'stderr' }, { isMainProcess, pid, command });\n });\n\n /** @type {LogMessage} */\n const launchMessage = {\n id: v4(),\n timestamp: Date.now(),\n label: this.label,\n pid,\n msg: `${cmd} ${args.join(' ')}`,\n raw: `${cmd} ${args.join(' ')}`,\n cmd: {\n cmd,\n args,\n options,\n status: 'running',\n },\n };\n spawnProcess.on('exit', (code, signal) => {\n if (code) {\n if (launchMessage.cmd) launchMessage.cmd.status = 'error';\n if (isMainProcess) {\n sockets.emit('service:crash', {\n label: this.label, code, signal, pid,\n });\n this.crashed = true;\n }\n } else if (launchMessage.cmd) {\n launchMessage.cmd.status = 'exited';\n if (isMainProcess) {\n this.exited = true;\n }\n }\n sockets.emit('service:exit', {\n label: this.label, code, signal, pid,\n });\n sockets.emit('logs:update:lines', [launchMessage]);\n });\n\n const date = `🕑 ${dayjs().format('YYYY-MM-DD HH:mm:ss')}`;\n /** @type {LogMessage} */\n const line = {\n id: v4(), raw: date, label: this.label, msg: date, timestamp: this.lastDatePrinted, isSeparator: true,\n };\n this.store.push(line, launchMessage);\n sockets.emit('logs:update', [line, launchMessage]);\n if (isMainProcess) {\n setTimeout(() => {\n this.launchHealthChecker(spawnProcess);\n }, this.health.startAfter || 0);\n sockets.emit('service:start', {\n label: this.label, pid,\n });\n }\n\n return {\n launchMessage,\n spawnProcess,\n };\n } catch (error) {\n /** @type {LogMessage} */\n const launchMessage = {\n id: v4(),\n timestamp: Date.now(),\n label: this.label,\n pid: null,\n msg: `ERROR: ${error?.message || error}`,\n raw: `ERROR: ${error?.message || error}`,\n cmd: {\n cmd: command.spawnCmd,\n args: command.spawnArgs,\n options: command.spawnOptions,\n status: 'exited',\n },\n };\n const date = `🕑 ${dayjs().format('YYYY-MM-DD HH:mm:ss')}`;\n const line = {\n id: v4(), raw: date, label: this.label, msg: date, timestamp: this.lastDatePrinted, isSeparator: true,\n };\n sockets.emit('logs:update', [line, launchMessage]);\n throw error;\n }\n};\n\n/**\n *\n * @param {import('child_process').ChildProcessWithoutNullStreams} spawnProcess\n */\nService.prototype.launchHealthChecker = async function (spawnProcess) {\n if ((!spawnProcess.pid && !this.container?.name) || !this.health?.enabled) return;\n const healthy = await axios({\n method: this.health.method || 'GET',\n url: this.health.url || this.url,\n headers: {Accept: '*/*'},\n timeout: +(this.health.timeout || 0),\n validateStatus: (status) => status === (+(this.health.returnCode || 200)),\n })\n .then(({ data: response }) => {\n if (this.health.responseText && this.health.responseText !== JSON.stringify(response)) {\n return false;\n }\n return true;\n })\n .catch(() => false);\n if (!healthy && !this.crashed) {\n this.crashed = true;\n sockets.emit('service:healthcheck:down', { label: this.label, pid: spawnProcess.pid });\n } else if (healthy && this.crashed) {\n this.crashed = false;\n sockets.emit('service:healthcheck:up', { label: this.label, pid: spawnProcess.pid });\n }\n await wait(+(this.health.interval || 1000));\n this.launchHealthChecker(spawnProcess);\n};\n\n/**\n *\n * @param {number} pid\n * @param {string} message\n */\nService.prototype.respondToProcess = function (pid, message) {\n const process = this.pids.find((process) => process.pid === pid);\n if (!process) return console.error(`Pid (${pid}) not found`);\n process.stdin?.write(`${message.trim()}\\n`);\n\n /** @type {LogMessage} */\n const line = {\n id: v4(),\n raw: `${message.trim()}\\n`,\n label: this.label,\n msg: `${message.trim()}\\n`,\n timestamp: Date.now(),\n prompt: true,\n pid,\n };\n this.store.push(line);\n sockets.emit('logs:update', [line]);\n return null;\n};\n\n/**\n * @param {number} pid\n * @param {boolean} forceKill\n */\nService.prototype.terminate = function (pid, forceKill = false) {\n const processFound = this.pids.find((process) => process.pid === pid);\n if (!processFound) return console.error(`Pid (${pid}) not found`);\n if (processFound.pid) {\n if (isWindows) process.kill(processFound.pid, 'SIGKILL');\n else process.kill(-processFound.pid, forceKill ? 'SIGKILL' : 'SIGTERM');\n }\n return null;\n};\n\nService.prototype.enable = function () {\n this.enabled = true;\n this.sendHasBeenModified();\n};\n\nService.prototype.disable = function () {\n this.enabled = false;\n this.sendHasBeenModified();\n};\n\nService.prototype.getGlobalEnvs = async function (environmentLabel) {\n const globalEnvironment = await Environment.find(environmentLabel);\n return (label) => {\n const tag = this.extractTag(label);\n if (tag) {\n return globalEnvironment?.envs[tag] ?? '';\n }\n return label;\n };\n};\n\nService.prototype.buildEnvs = async function (\n environmentLabel,\n) {\n const globalEnvironment = await Environment.find(environmentLabel)\n if(!globalEnvironment) return {}\n const extendedEnvironments = await globalEnvironment.getExtendedEnvironments()\n const environmentsKeys = new Map()\n const searchEnv = (label, env) => {\n const tag = this.extractTag(label);\n if (tag) {\n return env[tag] ?? '';\n }\n return label;\n };\n extendedEnvironments.map(extendedEnvironment => {\n Object.keys(this.envs[extendedEnvironment.label] || {}).forEach(key => {\n const env = this.envs[extendedEnvironment.label][key]\n if(!environmentsKeys.has(key)) {\n for (let i = 0; i < extendedEnvironments.length; i++) {\n let occurrence = searchEnv(env.systemOverride, extendedEnvironments[i].envs) || searchEnv(env.override, extendedEnvironments[i].envs) || searchEnv(env.value, extendedEnvironments[i].envs)\n if (occurrence) occurrence = `${env.prefix || ''}${occurrence || ''}${env.suffix || ''}`\n const value = occurrence\n if(value) {\n environmentsKeys.set(key, value)\n return \n }\n }\n }\n });\n });\n return ([...environmentsKeys]).reduce((agg, [key, value]) => {\n agg[key] = value\n return agg\n }, {})\n};\n\nService.prototype.extractTag = function (field) {\n const extractedTag = /{{(.*)}}/gi.exec(field)?.[1]?.trim();\n return extractedTag;\n};\n\nService.prototype.parseIncomingCommandDocker = async function (command) {\n let { spawnCmd, spawnArgs = [], spawnOptions = { envs: [] } } = command;\n const isAlive = await execAsync(`docker inspect --format {{.State.Pid}} ${this.container.name}`, {})\n .then((pid) => pid.trim() !== '0')\n .catch(() => false);\n const cmd = 'docker'\n const args = isAlive \n ? ['exec', this.container.name, spawnCmd, ...spawnArgs]\n : [\n 'run',\n '--rm',\n ...await this.getDockerEnvsArgs(), ...await this.getDockerVolumesArgs(), ...await this.getDockerPorts(),\n '--network', 'host',\n '--name', this.container.name,\n this.container.name,\n 'sh', `-c '${spawnCmd} ${spawnArgs.join(' ')}'`\n ]\n const cwd = pathfs.resolve(replaceEnvs(spawnOptions.cwd || this.getRootPath() || '.'));\n const options = {\n cwd,\n shell: isWindows ? process.env.ComSpec : '/bin/sh',\n };\n return {cmd, args, options}\n}\n\nService.prototype.parseIncomingCommand = async function (command) {\n const { spawnCmd, spawnArgs = [], spawnOptions = { envs: [] } } = command;\n let cmd = spawnCmd?.split(' ')?.[0];\n const argFromCmd = spawnCmd?.split(' ')?.slice(1).join(' ');\n let args = [argFromCmd, ...spawnArgs].filter((a) => a);\n\n const currentAlias = alias[cmd];\n if (currentAlias) {\n cmd = currentAlias?.cmd || cmd;\n args = [...(currentAlias?.args || []), ...args];\n }\n const cwd = pathfs.resolve(replaceEnvs(spawnOptions.cwd || this.getRootPath() || '.'));\n const options = {\n ...spawnOptions,\n cwd,\n shell: isWindows ? process.env.ComSpec : '/bin/sh',\n env: {\n ...process.env,\n ...await this.buildEnvs(this.Stack.getCurrentEnvironment()?.label)\n },\n };\n\n if (cmd.match(/[/\\\\]/g)) {\n cmd = path.resolve(options.cwd.toString(), cmd);\n }\n options.env = { ...process.env, ...options.env };\n return { cmd, args, options };\n};\n\nfunction replaceHome(str) {\n return str.startsWith('~')\n ? pathfs.resolve(os.homedir(), str.replace('~/', ''))\n : pathfs.resolve(str);\n}\n\nService.prototype.getDockerVolumesArgs = async function () {\n const internalVolumeRootPath = replaceHome(this.container.sharedVolume)\n const volumesCmd = this.container.volumes.map((v) => {\n let [external, internal] = v.split(':');\n if (external) external = pathfs.resolve(replaceHome(replaceEnvs(external)));\n if (internal) internal = pathfs.resolve(replaceHome(replaceEnvs(internal)));\n return ['-v', `\"${external}:${internal || external}\"`];\n });\n volumesCmd.push(...await PromiseB.map(this.container.ignoreVolumes, async (ignoredVolume) => {\n const volumePath = pathfs.join(internalVolumeRootPath, `ignored-volume-${humanStringToKey(this.label)}`, ignoredVolume);\n if (!existsSync(volumePath)) await mkdir(volumePath, { recursive: true }); // Pre create folders with host uid,gid to prevent docker to create as root user\n return ['-v', `\"${volumePath}:${ignoredVolume}\"`];\n }).filter((f) => !!f?.length));\n return volumesCmd.flat(1)\n}\nService.prototype.getDockerPorts = async function () {\n const portsCmd = []\n this.container.ports.forEach(port => {\n portsCmd.push('-p', port)\n })\n return portsCmd.flat(1)\n}\n\nService.prototype.getDockerEnvsArgs = async function () {\n const envs = await this.buildEnvs(this.Stack.getCurrentEnvironment()?.label)\n const envCmd = []\n Object.keys(envs).forEach(key => {\n envCmd.push('-e', `\"${key}=${envs[key]}\"`)\n })\n return envCmd\n}\n\nService.prototype.launchDockerBuild = async function ({ isMainProcess }) {\n const internalVolumeRootPath = replaceHome(this.container.sharedVolume)\n const dockerFilePath = pathfs.resolve(internalVolumeRootPath, `Dockerfile.${this.container.name}`);\n const dockerContextPath = pathfs.resolve(internalVolumeRootPath, '.empty-context');\n const command = {\n spwanCmd: 'docker',\n spawnArgs: ['build', '-f', dockerFilePath, '-t', this.container?.name || '', dockerContextPath],\n spawnOptions: { cwd: internalVolumeRootPath, shell: isWindows ? true : '/bin/sh', env: process.env },\n };\n this.add('<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hard-hat\" title=\"build\"></i> Building docker image...', { source: 'stdout' }, { pid: null, isMainProcess, command });\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hard-hat\" title=\"build\"></i> ${command.spwanCmd} ${command.spawnArgs?.join(' ')}}`, { source: 'stdout' }, { pid: null, isMainProcess, command });\n await new Promise((resolve, reject) => {\n const buildProcess = spawn(command.spwanCmd, command.spawnArgs, command.spawnOptions);\n new CreateInterface({\n input: buildProcess.stdout,\n })\n .on('line', (message) => {\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hard-hat\" title=\"build\"></i> ${message}`, { source: 'stdout' }, { isMainProcess, pid: buildProcess.pid, command });\n });\n new CreateInterface({\n input: buildProcess.stderr,\n }).on('line', (message) => {\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hard-hat\" title=\"build\"></i> ${message}`, { source: 'stdout' }, { isMainProcess, pid: buildProcess.pid, command });\n });\n buildProcess.on('exit', (code) => {\n if (code) {\n this.exited = true;\n this.crashed = true;\n return reject(code);\n }\n return resolve(null);\n });\n });\n}\n\n\nService.prototype.launchDockerBootstrap = async function ({ isMainProcess }) {\n const volumesCmd = await this.getDockerVolumesArgs()\n const baseArgs = ['run', '--name', this.container.name, '--init', '--rm', , ...(isWindows ? [] : ['--user', this.container.user || `${uid}:${gid}`]), '--network', 'host', ...volumesCmd];\n if (this.container.bootstrap) {\n const envCmd = await this.getDockerEnvsArgs()\n await PromiseB.mapSeries(this.container.bootstrap.commands || [], async (command) => {\n await new Promise((resolve, reject) => {\n const entrypoint = command.entrypoint ? ['--entrypoint', `${command.entrypoint}`] : [];\n const userEntrypoint = command.user && !isWindows ? ['--user', `${command.user || this.container.user || `${uid}:${gid}`}`] : [];\n const bootstrapArgs = /**@type {String[]}*/([\n ...baseArgs,\n ...entrypoint.flat(1),\n ...userEntrypoint.flat(1),\n ...envCmd.flat(1),\n this.container.name,\n command.cmd,\n ].filter((a) => !!a));\n const commandBootstrap = {\n spawnCmd: 'docker',\n spawnArgs: bootstrapArgs,\n spawnOptions: { shell: isWindows ? process.env.ComSpec : '/bin/sh' },\n };\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hourglass-start\" title=\"bootstrap\"></i> ${commandBootstrap.spawnCmd} ${commandBootstrap.spawnArgs?.join(' ')}`, { source: 'stdout' }, { isMainProcess, pid: null, command: commandBootstrap });\n const bootstrapProcess = spawn(\n commandBootstrap.spawnCmd,\n commandBootstrap.spawnArgs,\n commandBootstrap.spawnOptions,\n );\n new CreateInterface({\n input: bootstrapProcess.stdout,\n })\n .on('line', (message) => {\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hourglass-start\" title=\"bootstrap\"></i> ${message}`, { source: 'stdout' }, { isMainProcess, pid: bootstrapProcess.pid, command: commandBootstrap });\n });\n new CreateInterface({\n input: bootstrapProcess.stderr,\n }).on('line', (message) => {\n this.add(`<i class=\"fab fa-docker\" title=\"docker\"></i> <i class=\"fas fa-hourglass-start\" title=\"bootstrap\"></i> ${message}`, { source: 'stderr' }, { isMainProcess, pid: bootstrapProcess.pid, command: commandBootstrap });\n });\n bootstrapProcess.on('exit', (code) => {\n if (code) return reject(code);\n return resolve(null);\n });\n });\n })\n }\n}\n\n\n/**\n * @param {{isMainProcess: boolean}} spawnCmd\n */\nService.prototype.buildDocker = async function ({\n isMainProcess\n}) {\n const internalVolumeRootPath = replaceHome(this.container.sharedVolume)\n const dockerFilePath = pathfs.resolve(internalVolumeRootPath, `Dockerfile.${this.container.name}`);\n const dockerIgnoreFilePath = pathfs.resolve(internalVolumeRootPath, '.dockerignore');\n const dockerContextPath = pathfs.resolve(internalVolumeRootPath, '.empty-context');\n if (!existsSync(internalVolumeRootPath)) await mkdir(internalVolumeRootPath, { recursive: true });\n if (!existsSync(dockerContextPath)) await mkdir(dockerContextPath, { recursive: true });\n await writeFile(dockerFilePath, `${this.container.build || ''}`);\n await writeFile(dockerIgnoreFilePath, 'Dockerfile.*'.trim(), 'utf-8');\n await this.launchDockerBuild({ isMainProcess })\n await this.launchDockerBootstrap({ isMainProcess })\n this.container.customPid = async () => {\n const getPid = () => execAsync(`docker inspect --format {{.State.Pid}} ${this.container?.name}`, {}).then((a) => a.trim()).catch(() => null);\n let pid = await getPid();\n if (!pid) {\n await wait(1000);\n pid = await getPid();\n }\n return pid && !Number.isNaN(+pid) ? +pid : null;\n };\n};\n\nconst wait = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); });\n/**\n * @param {number} pid\n */\nfunction killAsync(pid) {\n return new Promise((resolve, reject) => {\n kill(pid, (err, children) => {\n if (err) return reject(err);\n return resolve(children);\n });\n });\n}\n\n/** @param {number} _port */\nfunction checkport(_port) {\n return new Promise((resolve) => {\n const s = net.createServer();\n s.once('error', () => {\n s.close();\n resolve(false);\n });\n s.once('listening', () => {\n resolve(true);\n s.close();\n });\n s.listen(_port);\n });\n}\n\nfunction extractTag(field) {\n const extractedTag = /{{(.*)}}/gi.exec(field)?.[1]?.trim();\n return extractedTag || '';\n}\n\nmodule.exports = Service;\n\n/**\n * @typedef {import('child_process').ExecOptions &\n * {overrideEnvs?: import('child_process').ExecOptions['env']}\n * } SpawnOptions\n */\n\n/**\n * @typedef {Service} ServiceType\n */\n/**\n * @typedef {{\n * msg: string,\n * raw: string,\n * timestamp: number,\n * prompt?: boolean,\n * id: string,\n * source?: 'stdout' | 'stderr'\n * json?: Record<any, any> | any[] | null,\n * debug?: Record<any, any> | any[] | null,\n * isSeparator?: boolean,\n * label: string,\n * pid?: number | null,\n * hide?: boolean,\n * cmd?: {cmd: string, args: string[], options: import('child_process').ExecOptions, status: 'running' | 'error' | 'exited'},\n * }} LogMessage\n */\n\n/**\n * @typedef {{\n * id: string,\n * transform: ((msg: LogMessage, service?: Service | null) => LogMessage)\n * }} Parser\n */\n","module.exports = {\n /**\n * @param {string} str\n * @param {string} search\n */\n searchString(str, search) {\n return str?.toUpperCase()?.includes(search);\n },\n};\n","const { existsSync, readFileSync } = require('fs');\nconst path = require('path');\n\nconst file = {\n version: '0.0.0',\n};\nif (existsSync(path.resolve(__dirname, './package.json'))) {\n file.version = JSON.parse(readFileSync(path.resolve(__dirname, './package.json'), { encoding: 'utf-8' })).version;\n} else if (existsSync(path.resolve(__dirname, '../package.json'))) {\n file.version = JSON.parse(readFileSync(path.resolve(__dirname, '../package.json'), { encoding: 'utf-8' })).version;\n} else if (existsSync(path.resolve(__dirname, '../../../lerna.json'))) {\n file.version = JSON.parse(readFileSync(path.resolve(__dirname, '../../../lerna.json'), { encoding: 'utf-8' })).version;\n}\n\nmodule.exports = {\n version: file.version,\n};\n","const pathfs = require('path');\nconst homedir = require('os').homedir();\nconst {\n existsSync, mkdirSync, writeFileSync, readFileSync,\n} = require('fs');\n\nconst confDir = pathfs.resolve(homedir, '.runeya');\n\n/**\n * @param {string} file\n * @param {T} initialData\n * @param {{\n * beforeSave?: (data: T) => void\n * afterGet?: (data: T) => void\n * }} options\n * @template T\n */\nfunction getSave(file, initialData, options = {}) {\n if (!existsSync(confDir)) mkdirSync(confDir);\n const dataConfPath = pathfs.resolve(confDir, file);\n if (!existsSync(dataConfPath)) writeFileSync(dataConfPath, JSON.stringify(initialData), 'utf-8');\n const data = JSON.parse(readFileSync(dataConfPath, 'utf-8'));\n options?.afterGet?.(data);\n return {\n /** @type {T} */\n data,\n save() {\n options?.beforeSave?.(data);\n writeFileSync(dataConfPath, JSON.stringify(data), 'utf-8');\n },\n };\n}\n\nmodule.exports = getSave;\n","/* eslint-disable func-names */\n// eslint-disable-next-line import/no-extraneous-dependencies\nconst { sockets } = require('@runeya/common-socket-server');\n// eslint-disable-next-line import/no-extraneous-dependencies\nconst plugins = require('@runeya/modules-plugins-loader-backend');\nconst PromiseB = require('bluebird');\nconst Service = require('./Service');\nconst ports = require('./ports');\nconst dbs = require('../helpers/dbs');\nconst EnvironmentModel = require('./Environment');\nconst EncryptionKey = require('./EncryptionKey');\nconst CustomObservable = require('@runeya/common-socket-server/src/CustomObservable');\nconst args = require('../helpers/args');\nconst { existsSync, mkdirSync } = require('fs');\nconst { rename } = require('fs/promises');\nconst pathfs = require('path');\nconst { default: axios } = require('axios');\n\n\n/** @param {Partial<Stack>} stack */\nfunction Stack(stack) {\n this.onServerLauch = new CustomObservable()\n return (async () => {\n /** @type {string[]} */\n this.watchFiles = stack.watchFiles || [];\n /** @type {import('./Service').Parser[]} */\n this.logParsers = stack.logParsers || [];\n /** @type {boolean} */\n this.monorepo = stack.monorepo || false;\n /** @type {Record<string, string>} */\n this.themes = stack.themes || {};\n /** @type {import('./Environment')[]} */\n this.environments = stack.environments ? stack.environments.map((env) => new EnvironmentModel(env)) : [];\n /** @type {string | undefined} */\n this.documentation = stack.documentation;\n /** @type {Service[]} */\n this.services = await PromiseB.map(stack.services || [], (service) => (\n new Service(service, /** @type {StackWithPlugins} */(Stack))\n ));\n\n this.helpers = require('../helpers/exportedHelpers');\n return this;\n })();\n}\n\n/** @type {Stack | null} */\nStack.currentStack = null;\n/** @type {import('fs').FSWatcher[]} */\nStack.currentWatches = [];\n/** @type {import('./Environment') | null} */\nStack.currentEnvironment = null;\nStack.Socket = sockets;\nStack.plugins = plugins;\n/** @type {string} */\nStack.version = require('../helpers/version').version || '';\n/** @type {string} */\nStack.url = `http://localhost:${ports.http}`;\n/** @type {number} */\nStack.port = +ports.http;\nStack.parsers = {\n links: require('../parser/link'),\n jsons: require('../parser/json'),\n debug: require('../parser/debug'),\n};\nStack.helpers = require('../helpers/exportedHelpers');\nStack.getSave = require('./saves');\n\n/** @param {{label: string, enabled: boolean}[]} servicesLabelSelected */\nStack.prototype.enable = async function (servicesLabelSelected) {\n const services = this.getServices();\n await PromiseB.map(servicesLabelSelected, (serviceConf) => {\n const service = services.find((service) => serviceConf.label === service.label);\n if (!service) return null;\n const hasChanged = serviceConf.enabled !== service.enabled;\n if (hasChanged) {\n if (serviceConf.enabled) {\n service.enable();\n return service.launch();\n }\n service.disable();\n return service.kill();\n }\n return null;\n });\n};\n\nStack.restart = async function () {\n await PromiseB.map(this.getEnabledServices(), (service) => service.restart());\n};\n\nStack.kill = async function () {\n await PromiseB.map(this.getEnabledServices(), (service) => service.kill());\n};\n\nStack.getCurrentEnvironment = function () {\n return Stack.currentEnvironment;\n};\n\nStack.prototype.toStorage = function () {\n return {\n watchFiles: this.watchFiles,\n themes: this.themes,\n services: this.services.map((s) => s.toStorage()),\n };\n};\n\nStack.getRootPath = () => {\n const rootPath = pathfs.resolve(args.rootPath, '.runeya');\n if (!existsSync(rootPath)) mkdirSync(rootPath, { recursive: true });\n return rootPath;\n}\n\nStack.parse = async function () {\n const dbsRootPath = await dbs.getDbs('services');\n let services = [];\n let environments = [];\n try {\n services = await PromiseB.map(dbsRootPath, (id) => Service.load(id, Stack));\n environments = await EnvironmentModel.all();\n } catch (error) {\n console.error(error);\n this.Socket.emit('system:wrongKey');\n }\n\n return new Stack({\n environments,\n services,\n });\n};\n\nStack.prototype.launch = async function () {\n await PromiseB.map(this.getServices(), (microservice) => {\n if (microservice.enabled) {\n return microservice.launch();\n }\n return microservice.kill();\n });\n};\n\nStack.getStack = function () {\n return Stack.currentStack;\n};\n\nStack.getServices = function () {\n return Stack.currentStack?.services || [];\n};\n\nStack.deleteService = async function (label) {\n if (!Stack.currentStack) return;\n const service = this.findService(label);\n Stack.currentStack.services = Stack.currentStack.services.filter((a) => a.label !== label);\n await service.delete();\n};\n\nStack.prototype.getServices = function () {\n return Stack.getServices();\n};\nStack.getAxios = function () {\n return axios.create({baseURL: this.url});\n};\n\nStack.getEnabledServices = function () {\n return Stack.getServices().filter((s) => s.enabled);\n};\n\nStack.prototype.getEnabledServices = function () {\n return Stack.getEnabledServices();\n};\n\nStack.prototype.exportInApi = function () {\n const res = { ...this };\n res.services = res.services?.map((s) => s.exportInApi());\n return res;\n};\n\n/**\n *\n * @param {string} serviceLabel\n * @returns\n */\nStack.findService = function (serviceLabel) {\n return Stack.getServices().filter((s) => s.label === serviceLabel)[0];\n};\n\n/**\n *\n * @param {string} serviceLabel\n * @returns\n */\nStack.prototype.findService = function (serviceLabel) {\n return Stack.findService(serviceLabel);\n};\n\nStack.selectConf = async function () {\n const localLegacyPath = pathfs.resolve(require('./stack').getRootPath(), '../.stackmonitor')\n const localNewPath = pathfs.resolve(require('./stack').getRootPath(), '.runeya')\n if(existsSync(localLegacyPath) && !existsSync(localNewPath)) {\n console.log('Legacy path found, move to new path')\n await rename(localLegacyPath, localNewPath)\n }\n\n const globalLegacyPath = pathfs.resolve(require('os').homedir(), '.stackmonitor')\n const globalNewPath = pathfs.resolve(require('os').homedir(), '.runeya-global')\n if(existsSync(globalLegacyPath) && !existsSync(globalNewPath)) {\n console.log('Legacy path found, move to new path')\n await rename(globalLegacyPath, globalNewPath)\n }\n await EncryptionKey.init();\n if (!EncryptionKey.encryptionKey) {\n await EncryptionKey.saveKey(await EncryptionKey.generateKey());\n }\n Stack.currentStack = await this.parse();\n Stack.currentEnvironment = (args.e || process.env.RUNEYA_DEFAULT_ENVIRONMENT)\n ? Stack.currentStack.environments.find((env) => (\n env.label === args.e?.toString() ||\n env.label === process.env.RUNEYA_DEFAULT_ENVIRONMENT\n )) || null\n : Stack.currentStack.environments.find((env) => env.default) || null;\n if (process.env.RUNEYA_SERVICES) {\n process.env.RUNEYA_SERVICES.split(',').forEach((serviceLabel) => {\n const service = Stack.findService(serviceLabel)\n if(service) service.enable()\n })\n }\n return sockets.emit('stack:selectConf');\n};\n\n/**\n *\n * @param {string} envLabel\n */\nStack.prototype.changeEnvironment = async function (envLabel) {\n const environment = await EnvironmentModel.find(envLabel);\n if (environment) {\n Stack.currentEnvironment = environment;\n Stack.getServices().forEach((service) => {\n if (!service.envs[envLabel]) {\n service.envs[envLabel] = {};\n }\n });\n const enabledServices = Stack.getEnabledServices();\n await Stack.kill();\n enabledServices.forEach((s) => {\n s.enabled = true;\n s.store = [];\n });\n await Stack.getStack()?.launch();\n } else {\n throw new Error('Environment not found');\n }\n};\n\nStack.stopWatchers = function () {\n Stack.currentWatches.forEach((currentWatch) => currentWatch.close());\n};\n\nconst pluginsToLoad = /** @type {(keyof typeof plugins)[]} */(Object.keys(plugins)).reduce((p, key) => {\n const plugin = plugins[key];\n if (plugin.export) {\n p[key] = typeof plugin.export === 'function' && !(/^\\s*class\\s+/.test(plugin.export.toString()))\n ? plugin.export(/** @type {StackWithPlugins} */(Stack))\n // @ts-ignore\n : plugin.export;\n }\n return p;\n}, /** @type {OmitNever<typeof plugins>} */({}));\n\nmodule.exports = /** @type {StackWithPlugins} */(Object.assign(Stack, pluginsToLoad));\n\n/**\n * @typedef {typeof Stack & OmitNever<typeof plugins>} StackWithPlugins\n */\n\n/**\n * @typedef {Omit<import('@runeya/common-typings').NonFunctionProperties<Service>, 'pids' | 'store' | 'enabled'>[]} StackArray\n */\n\n/**\n * @typedef {{\n * watchFiles?: string[],\n * logParsers?: import('./Service').Parser[],\n * stack?: StackArray,\n * monorepo?: boolean,\n * services?: StackArray,\n * }} StackObject\n */\n\n/**\n * @typedef {(runeya: StackWithPlugins) => StackObject | Promise<StackObject>} StackFunction\n */\n\n/**\n * @typedef {StackArray | StackObject | StackFunction} StackFile\n */\n\n/**\n * @typedef {{\n * id?: string,\n * label: string,\n * envs: Record<string, any>,\n * color?: string,\n * bgColor?: string\n * default?: boolean\n * }} Environment\n */\n\n/**\n * @template {{ [key: string]: {export: any }}} T\n * @typedef {{\n * [K in keyof T]: T[K]['export'] extends Function ? ReturnType<T[K]['export']> : never;\n * }} KeysMatching\n */\n/**\n * @template {{ [key: string]: {export: any }}} T\n * @typedef {{ [K in keyof T as (\n * T[K]['export'] extends undefined|null ? never : K)\n * ]: T[K]['export'] extends Function ? ReturnType<T[K]['export']> : T[K]['export'] }} OmitNever\n */\n","const { Transform } = require('stream');\nconst { Console } = require('console');\n\n/** @param {Record<string, string | number>[]} input */\nfunction table(input) {\n // @see https://stackoverflow.com/a/67859384\n const ts = new Transform({ transform(chunk, enc, cb) { cb(null, chunk); } });\n const logger = new Console({ stdout: ts });\n logger.table(input);\n const table = (ts.read() || '').toString();\n let result = '';\n for (const row of table.split(/[\\r\\n]+/)) {\n let r = row.replace(/[^┬]*┬/, '┌');\n r = r.replace(/^├─*┼/, '├');\n r = r.replace(/│[^│]*/, '');\n r = r.replace(/^└─*┴/, '└');\n r = r.replace(/'/g, ' ');\n result += `${r}\\n`;\n }\n console.log(result);\n}\n\nmodule.exports = table;\n","const plugins = require('@runeya/modules-plugins-loader-backend');\r\nconst Stack = require('../models/stack');\r\n\r\n/** @type {import('express').Router[]} */\r\nconst routes = [];\r\n/** @type {PluginSM[]} */\r\nconst forService = [];\r\n/** @type {Record<string, PluginSM[]>} */\r\nconst allPlugins = {};\r\n\r\nObject.keys(plugins)\r\n .map((key) => plugins[/** @type {keyof (typeof plugins)} */(key)])\r\n .forEach((plugin) => {\r\n if (!plugin) return null;\r\n if (plugin.placements?.includes('service')) forService.push(plugin);\r\n if (plugin.routes) {\r\n routes.push(plugin.routes(Stack));\r\n delete plugin.routes;\r\n }\r\n (plugin.placements || []).forEach((p) => {\r\n const position = typeof p === 'string' ? p : p.position;\r\n if (!position) return null;\r\n if (!allPlugins[position]) allPlugins[position] = [];\r\n if (!allPlugins[position].includes(plugin)) {\r\n allPlugins[position].push({\r\n ...plugin,\r\n placements: (plugin.placements || []).filter((_p) => typeof _p !== 'string' && _p.position === position),\r\n });\r\n }\r\n return null;\r\n });\r\n return plugin;\r\n });\r\nmodule.exports = {\r\n forService,\r\n ...allPlugins,\r\n routes,\r\n};\r\n\r\n/**\r\n * @typedef {import('@runeya/modules-plugins-loader-front/src/views').PluginSM<unknown>} PluginSM\r\n */\r\n","const { express } = require('@runeya/common-express');\n\nconst router = express.Router();\nconst PromiseB = require('bluebird');\nconst { findService } = require('../models/stack');\nconst Stack = require('../models/stack');\nconst plugins = require('../helpers/plugins');\n\nrouter.get('/services/:service', async (req, res) => {\n const service = findService(req.params.service);\n const services = await PromiseB.filter(plugins.forService, async (plugin) => (plugin.hidden ? !(await plugin.hidden(service, Stack, 'service')) : true));\n services.sort((a, b) => (b?.order || Number.MAX_SAFE_INTEGER) - (a?.order || Number.MAX_SAFE_INTEGER));\n res.send(services);\n});\nrouter.get('/services', async (req, res) => {\n const services = await PromiseB.filter(plugins.forService, async (plugin) => (plugin.hidden ? !(await plugin.hidden(null, Stack, 'global')) : true));\n res.send(services);\n});\nrouter.get('/:type', async (req, res) => {\n /** @type {import(\"@runeya/modules-plugins-loader-front/src/views\").PluginSM<null>[]} */\n // @ts-ignore\n const services = await PromiseB.filter(plugins[req.params.type], async (plugin) => (plugin.hidden ? !(await plugin.hidden(null, Stack, req.params.type)) : true));\n services.sort((a, b) => (a.order || 1000) - (b.order || 1000));\n res.send(services);\n});\nmodule.exports = router;\n","const { express } = require('@runeya/common-express');\nconst axios = require('axios');\n\nconst router = express.Router();\nconst pidusageTree = require('pidusage-tree');\nconst os = require('os');\nconst Stack = require('../models/stack');\nconst { execAsync } = require('../helpers/exec');\nconst args = require('../helpers/args');\n\nrouter.get('/:service/infos', async (req, res) => {\n try {\n const service = Stack.findService(req.params.service);\n if (service.container?.name) {\n const data = await execAsync('docker container stats --format \\'{ \"cpuPerc\": \"{{.CPUPerc}}\", \"memPerc\": \"{{.MemPerc}}\" }\\' --no-stream --no-trunc user_api_monorepo', {})\n .then((_data) => {\n const data = JSON.parse(_data);\n const cpuPerc = data.cpuPerc.trim().replaceAll('%', '');\n const memPerc = data.memPerc.trim().replaceAll('%', '');\n return {\n cpu: Number.isNaN(+cpuPerc) ? 0 : +cpuPerc,\n mem: Number.isNaN(+memPerc) ? 0 : +memPerc,\n };\n });\n res.json(data);\n } else {\n const pid = service.container?.customPid\n ? await service.container.customPid({ cmd: null, args: null, pid: null })\n : service.pids[0]?.pid;\n res.json(pid ? await getCPU(pid) : {\n cpu: null,\n ram: null,\n });\n }\n } catch (e) {\n res.json({ cpu: null, mem: null });\n }\n});\n\nrouter.get('/disconnect', async () => {\n process.exit(0);\n});\n\nrouter.get('/restart', async (req, res) => {\n res.json({ success: true, message: 'Restart in progress...' });\n \n setTimeout(() => {\n console.log('Restarting application...');\n require(\"child_process\").spawn(process.argv[0], process.argv.slice(1), {\n cwd: args.initialCwd || process.cwd(),\n detached: true,\n stdio: \"inherit\"\n }).unref();\n process.exit(0);\n }, 500);\n});\n\nrouter.get('/proxy-img', async (req, res) => {\n axios({\n method: 'get',\n url: req.query.url,\n responseType: 'stream',\n })\n .then((response) => {\n for (const key in response.headers) {\n if (response.headers.hasOwnProperty(key)) {\n const element = response.headers[key];\n res.header(key, element);\n }\n }\n res.status(response.status);\n response.data.pipe(res);\n })\n .catch(({ response }) => {\n for (const key in response.headers) {\n if (response.headers.hasOwnProperty(key)) {\n const element = response.headers[key];\n res.header(key, element);\n }\n }\n res.status(response.status);\n response.data.pipe(res);\n });\n});\n\n/** @param {number} pid */\nasync function getCPU(pid) {\n const tree = await pidusageTree(pid).catch(() => null);\n /** @type {number[]} */\n const cpus = [];\n let mem = 0;\n let cpuPerc = 0;\n let totalMem = 0;\n if (tree) {\n Object.keys(tree).forEach((key) => {\n if (tree[key]?.cpu) cpus.push(tree[key].cpu);\n if (tree[key]?.memory) mem += tree[key].memory;\n });\n cpuPerc = cpus.reduce((prev, curr) => prev + curr, 0) / cpus.length;\n totalMem = os.totalmem();\n }\n return {\n cpu: Number.isNaN(cpuPerc) ? 0 : cpuPerc,\n mem: mem / totalMem,\n };\n}\n\nmodule.exports = router;\n","const pathfs = require('path');\nconst os = require('os');\nconst {\n existsSync, mkdirSync, writeFileSync, readFileSync,\n} = require('fs');\n\nconst persistencePath = pathfs.resolve(os.homedir(), '.runeya');\n\nif (!existsSync(persistencePath)) mkdirSync(persistencePath, { recursive: true });\nconst confsPath = pathfs.resolve(persistencePath, 'confs');\nif (!existsSync(confsPath)) writeFileSync(confsPath, JSON.stringify([]), 'utf-8');\nconst store = JSON.parse(readFileSync(confsPath, 'utf-8'));\n\nmodule.exports = {\n /** @type {string[]} */\n confs: store,\n /** @param {string} conf */\n async add(conf) {\n if (!store.includes(conf)) {\n store.push(conf);\n await writeFileSync(confsPath, JSON.stringify(store), 'utf-8');\n }\n },\n /** @param {string} conf */\n async remove(conf) {\n store.splice(store.indexOf(conf), 1);\n await writeFileSync(confsPath, JSON.stringify(store), 'utf-8');\n },\n};\n","const { express } = require('@runeya/common-express');\nconst { exec } = require('child_process');\nconst open = require('open');\nconst commandExists = require('command-exists').sync;\nconst { Octokit } = require('fix-esm').require('@octokit/core');\nconst { restEndpointMethods } = require('fix-esm').require('@octokit/plugin-rest-endpoint-methods');\n\nconst { sockets } = require('@runeya/common-socket-server');\nconst Stack = require('../models/stack');\nconst myConfs = require('../models/myConfs');\n\nconst router = express.Router();\nconst { findService } = Stack;\nconst Service = require('../models/Service');\nconst Environment = require('../models/Environment');\nconst { replaceEnvs } = require('../helpers/stringTransformer.helper');\nconst MyOctokit = Octokit.plugin(restEndpointMethods);\n\nrouter.post('/services', async (req, res) => {\n const existingService = Stack.findService(req.body.label);\n if (existingService) {\n await existingService.constructor(req.body, Stack, { isUpdate: true });\n await existingService.save();\n sockets.emit('conf:update', [existingService.label]);\n res.send(existingService);\n } else {\n const service = await new Service(req.body, Stack);\n await service.save();\n Stack.getStack()?.services.push(service);\n sockets.emit('conf:update', [service.label]);\n res.send(service);\n }\n});\n\nrouter.put('/:service/duplicate', async (req, res) => {\n const existingService = findService(req.params.service).toStorage();\n const service = await new Service(existingService, Stack);\n service.label = req.body.label;\n await service.save();\n Stack.getStack()?.services.push(service);\n sockets.emit('conf:update');\n res.send(service);\n});\nrouter.patch('/:service', async (req, res) => {\n const service = findService(req.params.service);\n await service.save();\n Stack.getStack()?.services.push(service);\n sockets.emit('conf:update');\n res.send(service);\n});\n\nrouter.get('/export-env', async (req, res) => {\n const service = findService(req.query.service?.toString() || '');\n if (!service) return res.status(404).send('Service not found');\n const command = service.commands?.[+(req.query.commandIndex?.toString() || '0')];\n if (!command) return res.status(404).send('Command not found');\n const envs = await service.buildEnvs(req.query.environment);\n res.send(envs);\n});\n\nrouter.delete('/:service', async (req, res) => {\n await Stack.deleteService(req.params.service);\n sockets.emit('conf:update');\n res.send('ok');\n});\n\nrouter.get('/has-update', async (req, res) => {\n try {\n const localVersion = `v${require('../helpers/version').version}`;\n const octokit = new MyOctokit({ auth: process.env.RUNEYA_GH_APIKEY });\n const { data: tags } = await octokit.rest.repos.listTags({ owner: 'runeya', repo: 'runeya' });\n const remoteVersion = tags[0]?.name;\n return res.json({\n local: localVersion,\n remote: remoteVersion,\n hasUpdate: localVersion !== remoteVersion,\n });\n } catch (error) {\n console.error(error);\n return res.json(null);\n }\n});\n\nrouter.get('/configuration', (req, res) => {\n res.json(Stack.getStack()?.exportInApi());\n});\nrouter.get('/environment', (req, res) => {\n res.json(Stack.getCurrentEnvironment());\n});\n\nrouter.patch('/environments/:environmentLabel', async (req, res) => {\n const env = await Stack.getStack()?.environments.find((env) => env.label === req.params.environmentLabel);\n if (!env) return res.status(404).send('Environment not found');\n await env.update(req.body);\n await sockets.emit('reloadEnvironments');\n res.json(Stack.getCurrentEnvironment());\n});\n\nrouter.delete('/environments/:environmentLabel', async (req, res) => {\n const env = await Stack.getStack()?.environments.find((env) => env.label === req.params.environmentLabel);\n if (!env) return res.status(404).send('Environment not found');\n await env.delete();\n await sockets.emit('reloadEnvironments');\n res.json('ok');\n});\n\nrouter.get('/additional-themes', (req, res) => {\n const additionalThemes = Stack.getStack()?.themes || {};\n res.json(additionalThemes);\n});\n\nrouter.post('/environment', async (req, res) => {\n const { environment } = req.body;\n if (!environment) return res.status(400).send('Provide an environment field in body');\n await Stack.getStack()?.changeEnvironment(environment);\n return res.json(Stack.getCurrentEnvironment());\n});\nrouter.post('/environment/create', async (req, res) => {\n const { environment } = req.body;\n if (!environment) return res.status(400).send('Provide an environment field in body');\n const newEnvironment = new Environment(environment);\n await newEnvironment.save();\n await sockets.emit('reloadEnvironments');\n return res.json(Stack.getCurrentEnvironment());\n});\nrouter.get('/environments', async (req, res) => {\n res.json(await Environment.all());\n});\nrouter.get('/all-confs-path', (req, res) => {\n res.json(myConfs.confs);\n});\nrouter.post('/select-conf', async (req, res) => {\n const { path } = req.body;\n await Stack.selectConf();\n res.json(path);\n});\n\nrouter.post('/delete-conf', async (req, res) => {\n const { path } = req.body;\n await myConfs.remove(path);\n res.json(path);\n});\n\nrouter.post('/choose', async (req, res) => {\n /** @type {{label: string, enabled: boolean}[]} */\n const servicesLabelSelected = req.body;\n if (!Array.isArray(servicesLabelSelected)) return res.status(400).send('you should provide an array as body with all service label you want to launch');\n const stack = Stack.getStack();\n if (!stack) return res.status(500).send('Stack not configured');\n await stack.enable(servicesLabelSelected);\n return res.json(stack.getEnabledServices().map((s) => s.exportInApi()));\n});\n\nrouter.get('/', (req, res) => {\n const stack = Stack.getStack();\n res.json(stack ? stack.exportInApi() : null);\n});\n\nrouter.get('/services', (req, res) => {\n res.json(Stack.getServices().map((s) => s.exportInApi()));\n});\n\nrouter.get('/restart-all', async (req, res) => {\n try {\n await Stack.restart();\n res.send({ success: true });\n } catch (/** @type {unknown} */ error) {\n console.error('Error during restart all:', error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n res.status(500).send({ success: false, error: errorMessage });\n }\n});\n\nrouter.get('/:service', (req, res) => {\n const service = findService(req.params.service);\n res.send(service.exportInApi());\n});\n\nrouter.get('/:service/open-folder', (req, res) => {\n open(replaceEnvs(req.query.path?.toString() || '.'));\n res.send();\n});\n\nrouter.get('/:service/restart', async (req, res) => {\n const service = findService(req.params.service);\n await service.restart();\n res.send();\n});\nrouter.get('/:service/start', async (req, res) => {\n const service = findService(req.params.service);\n await service.launch();\n res.send();\n});\n\nrouter.get('/:service/stop', async (req, res) => {\n const service = findService(req.params.service);\n await service.kill();\n res.send();\n});\n\nmodule.exports = router;\n","const { express } = require('@runeya/common-express');\n\nconst router = express.Router();\nconst pathfs = require('path');\nconst PromiseB = require('bluebird');\nconst os = require('os');\nconst { sort } = require('fast-sort');\nconst { readdir, readFile, stat } = require('fs/promises');\n\nrouter.get('/home-dir', async (req, res) => {\n res.send(os.homedir());\n});\nrouter.get('/ls', async (req, res) => {\n const path = req.query.path?.toString() || __dirname;\n const dir = await readdir(path);\n const parentDirectory = {\n absolutePath: pathfs.resolve(path, '..'),\n name: '..',\n isDirectory: true,\n };\n let dirs = [parentDirectory];\n await PromiseB.map(dir, async (entry) => {\n try {\n if (entry.charAt(0) === '.') return null;\n const absolutePath = pathfs.resolve(path, entry);\n const entryStat = await stat(absolutePath);\n /** @type {Entry} */\n const entryInfos = {\n absolutePath,\n name: entry,\n isDirectory: entryStat.isDirectory(),\n npmInfos: null,\n isStack: false,\n };\n if (entryInfos.isDirectory) {\n entryInfos.npmInfos = await getNpmInfos(entryInfos.absolutePath);\n } else if (pathfs.extname(absolutePath) === '.js') {\n try {\n const stack = require(absolutePath);\n if (Array.isArray(stack) && stack.length && stack[0].label && stack[0].spawnCmd) {\n entryInfos.isStack = true;\n }\n // eslint-disable-next-line no-empty\n } catch (error) {\n console.error(error);\n }\n }\n dirs.push(entryInfos);\n return null;\n } catch (error) {\n console.error(error);\n return null;\n }\n });\n // @ts-ignore\n dirs = sort(dirs).asc((d) => d.name.toUpperCase());\n res.json(dirs);\n});\n\n/**\n *\n * @param {string} path\n */\nasync function getNpmInfos(path) {\n const dir = await readdir(path);\n if (dir.includes('package.json')) {\n const packageJSON = JSON.parse(await readFile(pathfs.resolve(path, 'package.json'), 'utf-8'));\n /** @type {NpmInfos} */\n return {\n path,\n packageJSON,\n version: packageJSON.version,\n name: packageJSON.name,\n author: packageJSON.author,\n };\n }\n return null;\n}\nmodule.exports = router;\n\n/**\n * @typedef {{\n * absolutePath: string\n * name: string\n * isDirectory: boolean\n * npmInfos?: NpmInfos | null\n * isStack: boolean\n * }} Entry\n */\n\n/**\n * @typedef {{\n * path: string,\n * packageJSON: Record<string, any>,\n * version: string,\n * name: string,\n * author: string\n * }} NpmInfos\n */\n","const { express } = require('@runeya/common-express');\nconst config = require('../models/EncryptionKey');\nconst dbs = require('../helpers/dbs');\nconst { encrypt } = require('../helpers/crypto');\nconst fs = require('fs').promises;\nconst path = require('path');\nconst HTTPError = require('@runeya/common-express-http-error');\nconst { sockets } = require('@runeya/common-socket-server');\nconst conflictStorage = require('../helpers/conflictStorage');\n\nconst router = express.Router();\n\nrouter.get('/generate-key', async (req, res) => {\n res.send(await config.generateKey());\n});\nrouter.post('/encryption-key', async (req, res) => {\n const { key } = req.body;\n await config.saveKey(key);\n return res.send(key);\n});\nrouter.get('/should-setup', async (req, res) => {\n if (!config.encryptionKey) return res.json(true);\n const envSample = (await dbs.getDbs('envs'))[0];\n try {\n if (envSample) await dbs.getDb(`envs/${envSample}`).read();\n return res.json(false);\n } catch (error) {\n console.error(error);\n return res.json(true);\n }\n});\nrouter.get('/encryption-key', async (req, res) => {\n res.send(config.encryptionKey);\n});\nrouter.post('/test-encryption-key', async (req, res) => {\n const result = await config.testKey(req.body?.key || config.encryptionKey);\n if (result) return res.send('ok');\n return res.status(400).send(config.encryptionKey);\n});\n\n/**\n * Get all pending Git conflicts\n * @returns {Array} - List of pending conflicts\n */\nrouter.get('/pending-conflicts', async (req, res) => {\n res.json(conflictStorage.getPendingConflicts());\n});\n\n/**\n * Handle resolution of git conflicts in encrypted files\n */\nrouter.post('/resolve-conflict', async (req, res) => {\n try {\n const { original, resolution, conflictId } = req.body;\n \n if (!original || !resolution) {\n throw new HTTPError('Missing original or resolution data', 400);\n }\n \n // Extract the conflict markers to identify file location\n const headerMatch = original.match(/<<<<<<< HEAD\\r?\\n([\\s\\S]*?)\\r?\\n=======\\r?\\n([\\s\\S]*?)\\r?\\n>>>>>>>\\s?(.*)/);\n \n if (!headerMatch) {\n throw new HTTPError('Invalid conflict format', 400);\n }\n \n // The branch name or commit hash is typically in the third capture group\n const branchIdentifier = headerMatch[3];\n \n // Get the conflict details from storage\n const conflict = conflictStorage.getPendingConflicts().find(c => c.id === conflictId);\n \n // Check if we have a file path in the conflict data\n const filePath = conflict?.filePath;\n if (!filePath) {\n console.warn(`No file path found for conflict ID: ${conflictId}`);\n }\n \n // Encrypt the resolution\n const encryptedResolution = await encrypt(resolution, { additionnalNonce: branchIdentifier });\n \n // If we have a file path, write the encrypted resolution to the file\n let fileWritten = false;\n if (filePath) {\n try {\n // Check if the file exists before writing\n const fileExists = await fs.access(filePath).then(() => true).catch(() => false);\n \n if (fileExists) {\n await fs.writeFile(filePath, encryptedResolution, 'utf8');\n console.log(`Conflict resolved and saved to file: ${filePath}`);\n fileWritten = true;\n } else {\n console.error(`Could not resolve conflict: file does not exist at path: ${filePath}`);\n }\n } catch (writeError) {\n // Type assertion pour éviter l'erreur 'writeError' is of type 'unknown'\n const errorMessage = writeError instanceof Error ? writeError.message : String(writeError);\n console.error('Error writing resolved file:', writeError);\n throw new HTTPError(`Failed to write to file: ${errorMessage}`, 500);\n }\n }\n \n // If a conflict ID was provided, remove it from the pending list\n if (conflictId) {\n conflictStorage.removeConflict(conflictId);\n }\n \n // Notify clients that a conflict was resolved\n sockets.emit('crypto:conflict-resolved', { conflictId });\n \n // Return the encrypted resolution and file path info\n return res.json({\n success: true,\n encryptedResolution,\n filePath,\n fileWritten\n });\n } catch (error) {\n // Type assertion for the error\n console.error('Error resolving conflict:', error);\n \n // Get the status code from the error or use 500 as default\n let statusCode = 500;\n let message = 'Failed to resolve conflict';\n \n if (error instanceof Error) {\n message = error.message;\n // Check if it's an HTTPError with a code\n if (error instanceof HTTPError && typeof error.code === 'number') {\n statusCode = error.code;\n }\n }\n \n return res.status(statusCode).json({\n success: false,\n message\n });\n }\n});\n\nmodule.exports = router;\n","const { express } = require('@runeya/common-express');\nconst Parser = require('../models/Parser');\n\nconst router = express.Router();\n\nrouter.post('/', async (req, res) => {\n delete req.body.id;\n const parser = new Parser(req.body);\n await parser.save();\n res.json(parser.toStorage());\n});\nrouter.put('/:id', async (req, res) => {\n const parser = await Parser.find(req.params.id);\n if (!parser) return res.status(404).send('Parser not found');\n await parser.update(req.body);\n res.json(parser.toStorage());\n});\nrouter.delete('/:id', async (req, res) => {\n const parser = await Parser.find(req.params.id);\n if (!parser) return res.status(404).send('Parser not found');\n await parser?.delete();\n res.json('ok');\n});\n\nrouter.get('/', async (req, res) => {\n const parsers = await Parser.all();\n res.json(parsers);\n});\n\nmodule.exports = router;\n","const commandExists = require(\"command-exists\").sync\n\nconst codeArgsBuilder = ({ link, command, cwd, line, column }) => (\n `${command} ${link ? `--goto ${link}${line ? `:${line}${column ? `:${column}` : ''}` : ''}` : ''} ${cwd}`\n)\nconst intellijArgsBuilder = ({ link, command, cwd, line, column }) => {\n return `${command} ${cwd} ${column ? `--column ${column}` : ''} ${line ? `--line ${line}` : ''} ${link}`\n}\nconst editors = {\n code: {\n commands: ['code', 'code-insiders'],\n args: codeArgsBuilder\n },\n cursor: {\n commands: ['cursor'],\n args: codeArgsBuilder\n },\n intellij: {\n commands: ['idea'],\n args: intellijArgsBuilder\n },\n androidstudio: {\n commands: ['android-studio'],\n args: intellijArgsBuilder\n },\n sublime: {\n commands: ['subl'],\n args: ({ link, command, cwd, line, column }) => (\n link \n ? `${command} ${link ? `${link}${line ? `:${line}${column ? `:${column}`: ''}`: ''}` : ''}`\n : `${command} ${cwd}`\n )\n }\n}\n\nmodule.exports.allEditors = Object.keys(editors)\nmodule.exports.availableEditors = module.exports.allEditors\n .filter(key => editors[key].commands.find((command) => commandExists(command)))\n\nmodule.exports.getCommandLine = (editorLabel, {cwd = '.', link = '', line = 0, column = 0} = {}) => {\n const editor = editors[editorLabel]\n if (!editor) return null\n const command = editor.commands.find((command) => commandExists(command))\n if (command) {\n return editor.args({cwd, command, line, column, link})\n }\n return\n}\n","const { express } = require('@runeya/common-express');\nconst { availableEditors, getCommandLine } = require('../models/editors');\nconst { replaceEnvs } = require('../helpers/stringTransformer.helper');\nconst Stack = require('../models/stack');\nconst { exec } = require('child_process');\nconst { findService } = Stack;\n\nconst router = express.Router();\n\nrouter.get('/available-editors', (req, res) => {\n res.send(availableEditors);\n});\n\nrouter.get('/:service/open-in-vs-code', (req, res) => {\n const service = findService(req.params.service);\n const commandLine = getCommandLine(req.query.editor)\n if(!commandLine) return res.status(400).send('Editor not found')\n exec(commandLine, { cwd: replaceEnvs(service.rootPath) || replaceEnvs(req.query.path?.toString() || '.'), env: process.env });\n res.send('ok');\n});\n\nrouter.get('/:service/open-link-in-vs-code', (req, res) => {\n const service = findService(req.params.service);\n const commandLine = getCommandLine(req.query.editor, { link: req.query.link?.toString() || '' })\n if (!commandLine) return res.status(400).send('Editor not found')\n const cwd = replaceEnvs(service.rootPath) || replaceEnvs(req.query.path?.toString() || '.')\n exec(commandLine, { cwd, env: process.env });\n res.send({ commandLine, cwd});\n});\n\nmodule.exports = router","const { express } = require('@runeya/common-express');\n\nconst router = express.Router();\nconst plugins = require('../helpers/plugins');\n\nplugins.routes.forEach((route) => router.use(route));\n\nrouter.use('/plugins', require('./plugins'));\nrouter.use('/system', require('./system'));\nrouter.use('/stack', require('./stack'));\nrouter.use('/fs', require('./fs'));\nrouter.use('/crypto', require('./crypto'));\nrouter.use('/parsers', require('./parsers'));\nrouter.use('/editors', require('./editors'));\n\nrouter.get('/version', async (req, res) => {\n res.send(require('../helpers/version').version);\n});\n\nmodule.exports = router;\n","const os = require('os');\nconst { fork } = require('node:child_process');\nconst path = require('path');\nconst { sockets } = require('@runeya/common-socket-server');\n\nconst nbCpus = os.cpus().length;\n\n/** @type {AbortController | null} */\nlet controller = null;\n/** @type { import('child_process').ChildProcess | null } */\nlet child = null;\ncontroller = new AbortController();\nconst { signal } = controller;\nchild = fork(path.resolve(__dirname, './cpuFork.js'), [], { signal });\nchild.on('message', (message) => {\n const { ram, cpu } = JSON.parse(message.toString());\n sockets.emit('infos:global', {\n nbCpus,\n memPercentage: ram.memPercentage,\n totalmem: ram.totalmem,\n freemem: ram.freemem,\n cpu,\n });\n});\n\nmodule.exports = {\n stopCpu: async () => {\n child?.kill('SIGKILL');\n },\n};\n","// @ts-ignore\nrequire('express-async-errors');\nconst { express } = require('@runeya/common-express');\nconst indexRouter = require('./routes/index');\nconst { stopCpu } = require('./helpers/cpu');\nconst { stopWatchers } = require('./models/stack');\n\nconst app = express();\n\napp.use('/', indexRouter);\n\n// @ts-ignore\napp.stopWorkers = async () => {\n await stopCpu();\n stopWatchers();\n};\nmodule.exports = app;\n","const { launch } = require('@runeya/common-express');\nconst pathfs = require('path');\nconst ports = require('../models/ports');\nconst table = require('../helpers/console.table');\nconst args = require('../helpers/args');\n\nmodule.exports = {\n async launch() {\n await launch({\n port: process.env.RUNEYA_HTTP_PORT || 0,\n controllers: () => require('../app'),\n socket: true,\n apiPrefix: '/',\n bodyLimit: '100mb',\n noGreetings: true,\n staticController: process.env.NODE_ENV !== 'HFBXdZMJxLyJoua28asEaxRixJ6LriR7FnRzX6pwA7pFjZ' ? pathfs.resolve(__dirname, 'public') : undefined,\n helmetConf: process.env.NODE_ENV !== 'HFBXdZMJxLyJoua28asEaxRixJ6LriR7FnRzX6pwA7pFjZ' ? {\n crossOriginEmbedderPolicy: false,\n crossOriginResourcePolicy: false,\n contentSecurityPolicy: {\n directives: {\n upgradeInsecureRequests: null,\n 'frame-src': [\"'self'\", 'runeya.github.io', 'jsoncrack.com'],\n },\n useDefaults: true,\n },\n } : null,\n onListening({ server }) {\n const addr = server.address();\n const port = typeof addr === 'string'\n ? addr\n : addr?.port;\n ports.setHttpPort(+(port || 0));\n if (process.env.NODE_ENV !== 'HFBXdZMJxLyJoua28asEaxRixJ6LriR7FnRzX6pwA7pFjZ' && !process.versions.electron) {\n require('open')(`http://localhost:${port}`);\n }\n // Tips\n (() => {\n table([\n { '': 'Version', Value: require('../helpers/version').version, 'Overrided By': '-' },\n { '': 'Port', Value: ports.http, 'Overrided By': 'RUNEYA_HTTP_PORT' },\n { '': 'Url', Value: `http://localhost:${ports.http}`, 'Overrided By': '-' },\n ...args.ss.length\n ? [{ '': 'Services', Value: args.ss.join(', '), 'Overrided By': '-' }]\n : [],\n ]);\n })();\n },\n });\n await require('../models/stack').selectConf();\n },\n};\n","#!/usr/bin/env node\nprocess.title = 'runeya';\nconst args = require('../helpers/args');\n\n\nrequire('dotenv').config();\n(async () => {\n if(args['pull-env']) {\n await require('../models/stack').selectConf();\n const service = require('../models/stack').findService(args.s)\n if(!service) {\n console.error('Service', args.s, 'not found')\n process.exit(1)\n }\n const envs = await service.buildEnvs(args['e'])\n console.log(Object.keys(envs).reduce((agg, key) => (agg+=`\\n${key}=${envs[key]}`), '').trim())\n process.exit(0)\n } else {\n console.log('Root path:', args.rootPath)\n require('./server')\n .launch()\n .catch((err) => {\n console.error(err)\n return err\n })\n }\n})()\n"],"mappings":"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","names":["exports","module","args","exports","module","exports","module","message","exports","module","exports","module","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_backend","exports","module","require_backend","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","exports","module","exports","module","randomUUID","dbs","args","exports","module","exports","module","PromiseB","args","exports","module","PromiseB","randomUUID","dbs","exports","module","PromiseB","randomUUID","dbs","require_routes","exports","module","PromiseB","require_backend","exports","module","PromiseB","require_routes","exports","module","PromiseB","require_backend","exports","module","exports","module","exports","module","require_src","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_routes","exports","module","key","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","PromiseB","message","require_backend","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_backend","exports","module","exports","module","require_routes","exports","module","require_backend","exports","module","require_backend","exports","module","require_routes","exports","module","require_backend","exports","module","require_routes","exports","module","packageRoot","projectRoot","require_backend","exports","module","require_routes","exports","module","require_backend","exports","module","exports","module","require_src","exports","module","exports","module","require_src","exports","module","require_src","exports","module","require_src","exports","module","require_routes","exports","module","PromiseB","stream2buffer","stream","require_backend","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","PromiseB","dbs","exports","module","parser","exports","module","parser","exports","module","parser","exports","module","URL","PromiseB","dbs","path","line","parser","args","launchMessage","process","exports","module","exports","module","exports","module","exports","module","PromiseB","dbs","args","service","exports","module","table","require_plugins","exports","module","require_plugins","exports","module","PromiseB","exports","module","args","data","exports","module","require_stack","exports","module","env","exports","module","PromiseB","require_crypto","exports","module","dbs","exports","module","Parser","parser","exports","module","command","require_editors","exports","module","require_routes","exports","module","exports","module","exports","module","exports","module","args"]}
|