omegga 1.2.9 → 1.3.0
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/README.md +20 -1
- package/dist/brickadia/config.js +26 -90
- package/dist/brickadia/config.js.map +1 -1
- package/dist/brickadia/server.js +294 -293
- package/dist/brickadia/server.js.map +1 -1
- package/dist/cli/auth.js +149 -177
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/config.js +64 -66
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +14 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installer.js +37 -43
- package/dist/cli/installer.js.map +1 -1
- package/dist/cli/plugin.js +651 -682
- package/dist/cli/plugin.js.map +1 -1
- package/dist/cli/terminal.js +811 -733
- package/dist/cli/terminal.js.map +1 -1
- package/dist/config/formats/format_js.js +6 -6
- package/dist/config/formats/format_js.js.map +1 -1
- package/dist/config/formats/format_yml.js +7 -10
- package/dist/config/formats/format_yml.js.map +1 -1
- package/dist/config/index.js +46 -68
- package/dist/config/index.js.map +1 -1
- package/dist/config/reader.js +16 -27
- package/dist/config/reader.js.map +1 -1
- package/dist/config/validator.js +23 -25
- package/dist/config/validator.js.map +1 -1
- package/dist/config/writer.js +11 -21
- package/dist/config/writer.js.map +1 -1
- package/dist/index.js +18 -64
- package/dist/index.js.map +1 -1
- package/dist/info/default_commands.json.js +39 -0
- package/dist/info/default_commands.json.js.map +1 -0
- package/dist/logger.js +61 -60
- package/dist/logger.js.map +1 -1
- package/dist/main.js +424 -471
- package/dist/main.js.map +1 -1
- package/dist/omegga/auth.js +101 -148
- package/dist/omegga/auth.js.map +1 -1
- package/dist/omegga/commandInjector.js +261 -251
- package/dist/omegga/commandInjector.js.map +1 -1
- package/dist/omegga/index.js +14 -52
- package/dist/omegga/index.js.map +1 -1
- package/dist/omegga/logWrangler.js +224 -275
- package/dist/omegga/logWrangler.js.map +1 -1
- package/dist/omegga/matchers/auth.js +36 -50
- package/dist/omegga/matchers/auth.js.map +1 -1
- package/dist/omegga/matchers/chat.js +49 -71
- package/dist/omegga/matchers/chat.js.map +1 -1
- package/dist/omegga/matchers/command.js +25 -36
- package/dist/omegga/matchers/command.js.map +1 -1
- package/dist/omegga/matchers/exit.js +15 -18
- package/dist/omegga/matchers/exit.js.map +1 -1
- package/dist/omegga/matchers/index.js +26 -40
- package/dist/omegga/matchers/index.js.map +1 -1
- package/dist/omegga/matchers/init.js +20 -23
- package/dist/omegga/matchers/init.js.map +1 -1
- package/dist/omegga/matchers/interact.js +58 -64
- package/dist/omegga/matchers/interact.js.map +1 -1
- package/dist/omegga/matchers/join.js +74 -95
- package/dist/omegga/matchers/join.js.map +1 -1
- package/dist/omegga/matchers/leave.js +43 -56
- package/dist/omegga/matchers/leave.js.map +1 -1
- package/dist/omegga/matchers/mapChange.js +26 -35
- package/dist/omegga/matchers/mapChange.js.map +1 -1
- package/dist/omegga/matchers/minigameJoin.js +24 -31
- package/dist/omegga/matchers/minigameJoin.js.map +1 -1
- package/dist/omegga/matchers/version.js +42 -49
- package/dist/omegga/matchers/version.js.map +1 -1
- package/dist/omegga/player.js +527 -527
- package/dist/omegga/player.js.map +1 -1
- package/dist/omegga/plugin/interface.js +91 -98
- package/dist/omegga/plugin/interface.js.map +1 -1
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +524 -429
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +282 -294
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_safe.js +365 -393
- package/dist/omegga/plugin/plugin_node_safe.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_unsafe.js +119 -179
- package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -1
- package/dist/omegga/plugin.js +402 -347
- package/dist/omegga/plugin.js.map +1 -1
- package/dist/omegga/server.js +742 -774
- package/dist/omegga/server.js.map +1 -1
- package/dist/omegga/wrapper.js +64 -91
- package/dist/omegga/wrapper.js.map +1 -1
- package/dist/plugin.js +11 -31
- package/dist/plugin.js.map +1 -1
- package/dist/softconfig.js +121 -100
- package/dist/softconfig.js.map +1 -1
- package/dist/updater/steam.js +97 -112
- package/dist/updater/steam.js.map +1 -1
- package/dist/util/brdb.js +496 -528
- package/dist/util/brdb.js.map +1 -1
- package/dist/util/brick/checkBounds.js +11 -15
- package/dist/util/brick/checkBounds.js.map +1 -1
- package/dist/util/brick/constants.js +723 -174
- package/dist/util/brick/constants.js.map +1 -1
- package/dist/util/brick/displayName.js +204 -211
- package/dist/util/brick/displayName.js.map +1 -1
- package/dist/util/brick/getBounds.js +29 -41
- package/dist/util/brick/getBounds.js.map +1 -1
- package/dist/util/brick/getBrickSize.js +6 -7
- package/dist/util/brick/getBrickSize.js.map +1 -1
- package/dist/util/brick/getScaleAxis.js +24 -30
- package/dist/util/brick/getScaleAxis.js.map +1 -1
- package/dist/util/brick/index.js +8 -29
- package/dist/util/brick/index.js.map +1 -1
- package/dist/util/brick/rotate.js +29 -34
- package/dist/util/brick/rotate.js.map +1 -1
- package/dist/util/brick/setOwnership.js +13 -19
- package/dist/util/brick/setOwnership.js.map +1 -1
- package/dist/util/chat.js +53 -44
- package/dist/util/chat.js.map +1 -1
- package/dist/util/color.js +112 -124
- package/dist/util/color.js.map +1 -1
- package/dist/util/file.js +54 -98
- package/dist/util/file.js.map +1 -1
- package/dist/util/index.js +84 -106
- package/dist/util/index.js.map +1 -1
- package/dist/util/map.js +18 -20
- package/dist/util/map.js.map +1 -1
- package/dist/util/pattern.js +6 -9
- package/dist/util/pattern.js.map +1 -1
- package/dist/util/time.js +31 -34
- package/dist/util/time.js.map +1 -1
- package/dist/util/uuid.js +10 -8
- package/dist/util/uuid.js.map +1 -1
- package/dist/util/wsl.js +19 -25
- package/dist/util/wsl.js.map +1 -1
- package/dist/version.js +7 -9
- package/dist/version.js.map +1 -1
- package/dist/webserver/backend/api.js +784 -874
- package/dist/webserver/backend/api.js.map +1 -1
- package/dist/webserver/backend/calendar.js +14 -17
- package/dist/webserver/backend/calendar.js.map +1 -1
- package/dist/webserver/backend/database.js +563 -613
- package/dist/webserver/backend/database.js.map +1 -1
- package/dist/webserver/backend/index.js +153 -191
- package/dist/webserver/backend/index.js.map +1 -1
- package/dist/webserver/backend/metrics.js +219 -248
- package/dist/webserver/backend/metrics.js.map +1 -1
- package/dist/webserver/backend/util.js +47 -68
- package/dist/webserver/backend/util.js.map +1 -1
- package/dist/worker.js +322 -0
- package/dist/worker.js.map +1 -0
- package/package.json +14 -10
- package/templates/safe-ts/omegga.d.ts +1 -1
- package/vite.backend.config.mts +46 -0
- package/vite.frontend.config.mts +58 -0
- package/vitest.backend.config.mts +7 -0
- package/dist/brickadia/config.d.ts +0 -3
- package/dist/brickadia/presets.d.ts +0 -65
- package/dist/brickadia/presets.js +0 -3
- package/dist/brickadia/presets.js.map +0 -1
- package/dist/brickadia/server.d.ts +0 -36
- package/dist/brickadia/types.d.ts +0 -45
- package/dist/brickadia/types.js +0 -3
- package/dist/brickadia/types.js.map +0 -1
- package/dist/cli/auth.d.ts +0 -26
- package/dist/cli/config.d.ts +0 -10
- package/dist/cli/index.d.ts +0 -30
- package/dist/cli/installer.d.ts +0 -1
- package/dist/cli/plugin.d.ts +0 -22
- package/dist/cli/terminal.d.ts +0 -25
- package/dist/config/authorizer.d.ts +0 -2
- package/dist/config/authorizer.js +0 -38
- package/dist/config/authorizer.js.map +0 -1
- package/dist/config/formats/format_js.d.ts +0 -3
- package/dist/config/formats/format_yml.d.ts +0 -3
- package/dist/config/index.d.ts +0 -18
- package/dist/config/reader.d.ts +0 -3
- package/dist/config/types.d.ts +0 -50
- package/dist/config/types.js +0 -3
- package/dist/config/types.js.map +0 -1
- package/dist/config/validator.d.ts +0 -6
- package/dist/config/writer.d.ts +0 -3
- package/dist/index.d.ts +0 -22
- package/dist/info/default_commands.json +0 -29
- package/dist/logger.d.ts +0 -41
- package/dist/main.d.ts +0 -1
- package/dist/omegga/auth.d.ts +0 -9
- package/dist/omegga/commandInjector.d.ts +0 -35
- package/dist/omegga/index.d.ts +0 -7
- package/dist/omegga/logWrangler.d.ts +0 -32
- package/dist/omegga/matchers/auth.d.ts +0 -10
- package/dist/omegga/matchers/chat.d.ts +0 -10
- package/dist/omegga/matchers/command.d.ts +0 -7
- package/dist/omegga/matchers/exit.d.ts +0 -3
- package/dist/omegga/matchers/index.d.ts +0 -3
- package/dist/omegga/matchers/init.d.ts +0 -3
- package/dist/omegga/matchers/interact.d.ts +0 -4
- package/dist/omegga/matchers/join.d.ts +0 -4
- package/dist/omegga/matchers/leave.d.ts +0 -4
- package/dist/omegga/matchers/mapChange.d.ts +0 -3
- package/dist/omegga/matchers/minigameJoin.d.ts +0 -9
- package/dist/omegga/matchers/types.d.ts +0 -5
- package/dist/omegga/matchers/types.js +0 -3
- package/dist/omegga/matchers/types.js.map +0 -1
- package/dist/omegga/matchers/version.d.ts +0 -3
- package/dist/omegga/player.d.ts +0 -81
- package/dist/omegga/plugin/interface.d.ts +0 -30
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +0 -23
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +0 -145
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +0 -1
- package/dist/omegga/plugin/plugin_node_safe/worker.js +0 -367
- package/dist/omegga/plugin/plugin_node_safe/worker.js.map +0 -1
- package/dist/omegga/plugin/plugin_node_safe.d.ts +0 -23
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts +0 -13
- package/dist/omegga/plugin.d.ts +0 -63
- package/dist/omegga/server.d.ts +0 -166
- package/dist/omegga/types.d.ts +0 -49
- package/dist/omegga/types.js +0 -3
- package/dist/omegga/types.js.map +0 -1
- package/dist/omegga/wrapper.d.ts +0 -32
- package/dist/plugin.d.ts +0 -916
- package/dist/softconfig.d.ts +0 -67
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/updater/index.d.ts +0 -1
- package/dist/updater/index.js +0 -10
- package/dist/updater/index.js.map +0 -1
- package/dist/updater/steam.d.ts +0 -52
- package/dist/util/brdb.d.ts +0 -31
- package/dist/util/brick/checkBounds.d.ts +0 -8
- package/dist/util/brick/constants.d.ts +0 -18
- package/dist/util/brick/displayName.d.ts +0 -7
- package/dist/util/brick/getBounds.d.ts +0 -5
- package/dist/util/brick/getBrickSize.d.ts +0 -3
- package/dist/util/brick/getScaleAxis.d.ts +0 -3
- package/dist/util/brick/index.d.ts +0 -14
- package/dist/util/brick/rotate.d.ts +0 -16
- package/dist/util/brick/setOwnership.d.ts +0 -12
- package/dist/util/chat.d.ts +0 -23
- package/dist/util/color.d.ts +0 -13
- package/dist/util/file.d.ts +0 -5
- package/dist/util/index.d.ts +0 -183
- package/dist/util/map.d.ts +0 -6
- package/dist/util/pattern.d.ts +0 -1
- package/dist/util/time.d.ts +0 -39
- package/dist/util/uuid.d.ts +0 -3
- package/dist/util/wsl.d.ts +0 -2
- package/dist/version.d.ts +0 -2
- package/dist/webserver/backend/api.d.ts +0 -115
- package/dist/webserver/backend/calendar.d.ts +0 -5
- package/dist/webserver/backend/database.d.ts +0 -150
- package/dist/webserver/backend/index.d.ts +0 -30
- package/dist/webserver/backend/metrics.d.ts +0 -3
- package/dist/webserver/backend/types.d.ts +0 -114
- package/dist/webserver/backend/types.js +0 -3
- package/dist/webserver/backend/types.js.map +0 -1
- package/dist/webserver/backend/util.d.ts +0 -2
- package/dist/webserver/index.d.ts +0 -2
- package/dist/webserver/index.js +0 -9
- package/dist/webserver/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin_node_safe.js","sourceRoot":"","sources":["../../../src/omegga/plugin/plugin_node_safe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin_node_safe.js","sources":["../../../src/omegga/plugin/plugin_node_safe.ts"],"sourcesContent":["import Logger from '@/logger';\nimport Omegga from '@omegga/server';\nimport EventEmitter from 'node:events';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Worker } from 'node:worker_threads';\nimport readline from 'readline';\nimport { Plugin } from './interface';\nimport { bootstrap } from './plugin_node_safe/proxyOmegga';\n\n// Main plugin file (like index.js)\n// this isn't named 'index.js' or 'plugin.js' because those may be filenames\n// used with other loaders (rpc loader) and are too generic\n// omegga.main.js is rather unique and helps avoid collision\nconst MAIN_FILE = 'omegga.plugin.js';\nconst MAIN_FILE_TS = 'omegga.plugin.ts';\n\n// Documentation file (contains name, description, author, command helptext)\nconst DOC_FILE = 'doc.json';\nconst ACCESS_FILE = 'access.json';\nconst PLUGIN_FILE = 'plugin.json';\n\nexport default class NodeVmPlugin extends Plugin {\n #worker: Worker;\n #outInterface: readline.Interface;\n #errInterface: readline.Interface;\n\n // every node vm plugin requires a main file, a doc file, and an access file\n // may evolve this so it checks the contents of the doc file later\n static canLoad(pluginPath: string) {\n return (\n (fs.existsSync(path.join(pluginPath, MAIN_FILE)) ||\n fs.existsSync(path.join(pluginPath, MAIN_FILE_TS))) &&\n fs.existsSync(path.join(pluginPath, DOC_FILE)) &&\n fs.existsSync(path.join(pluginPath, ACCESS_FILE))\n );\n }\n\n // safe node plugins are limited\n static getFormat() {\n return 'node_safe';\n }\n\n plugin: EventEmitter;\n messageCounter: number;\n access: string[];\n isTypeScript: boolean;\n\n constructor(pluginPath: string, omegga: Omegga) {\n super(pluginPath, omegga);\n\n // event emitter and message counter for keeping track of worker events\n this.plugin = new EventEmitter();\n this.messageCounter = 0;\n\n // TODO: validate documentation\n this.documentation = Plugin.readJSON(path.join(pluginPath, DOC_FILE));\n this.isTypeScript = fs.existsSync(path.join(pluginPath, MAIN_FILE_TS));\n this.pluginConfig = Plugin.readJSON(path.join(pluginPath, PLUGIN_FILE));\n\n // access list is a list of builtin requires\n // can be ['*'] for everything\n this.access = Plugin.readJSON(path.join(pluginPath, ACCESS_FILE)) || [];\n\n // list of registered commands\n this.commands = [];\n\n // verify access is an array of strings\n if (\n !(this.access instanceof Array) ||\n !this.access.every(s => typeof s === 'string')\n ) {\n throw new Error('access list not a string array');\n }\n\n // plugin name\n const name = this.getName();\n\n // when the worker emits an error or a log, pass it up to omegga\n this.plugin.on('error', (resp, ...args) => {\n Logger.error(name.brightRed.underline, '!>'.red, ...args);\n this.notify(resp);\n });\n this.plugin.on('log', (resp, ...args) => {\n Logger.log(name.underline, '>>'.green, ...args);\n this.notify(resp);\n });\n\n // let the worker write commands to brickadia\n this.plugin.on('exec', (_, cmd) => omegga.writeln(cmd));\n\n // storage interface\n this.plugin.on('store.get', async (resp, key) => {\n try {\n this.notify(resp, await this.storage.get(key));\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.get of',\n key,\n e,\n );\n }\n });\n this.plugin.on('store.set', async (resp, key, value) => {\n try {\n await this.storage.set(key, JSON.parse(value));\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.set of',\n key,\n value,\n e,\n );\n }\n this.notify(resp);\n });\n this.plugin.on('store.delete', async (resp, key) => {\n try {\n await this.storage.delete(key);\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.delete of',\n key,\n e,\n );\n }\n this.notify(resp);\n });\n this.plugin.on('store.wipe', async resp => {\n try {\n await this.storage.wipe();\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.wipe',\n e,\n );\n }\n this.notify(resp);\n });\n this.plugin.on('store.count', async resp => {\n try {\n this.notify(resp, await this.storage.count());\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.count',\n e,\n );\n }\n });\n this.plugin.on('store.keys', async resp => {\n try {\n this.notify(resp, await this.storage.keys());\n } catch (e) {\n Logger.error(\n name.brightRed.underline,\n '!>'.red,\n 'error in store.keys',\n e,\n );\n }\n });\n\n // plugin fetching\n this.plugin.on('getPlugin', async (resp, name) => {\n const plugin = this.omegga.pluginLoader.plugins.find(\n p => p.getName() === name,\n );\n\n if (plugin) {\n this.notify(resp, {\n name,\n documentation: plugin.getDocumentation(),\n loaded: plugin.isLoaded(),\n });\n } else {\n this.notify(resp);\n }\n });\n\n this.plugin.on('emitPlugin', async (resp, target, ev, args) => {\n const plugin = this.omegga.pluginLoader.plugins.find(\n p => p.getName() === target,\n );\n\n if (plugin) {\n let r = await plugin.emitPlugin(ev, name, args);\n this.notify(resp, r);\n } else {\n Logger.error(name.brightRed.underline, '!>'.red, 'error in emitPlugin');\n }\n });\n\n // command registration\n this.plugin.on('command.registers', async (_, blob) => {\n if (typeof blob !== 'string') return;\n const registers = JSON.parse(blob);\n // ensure registers is an array of strings\n if (\n !(registers instanceof Array) ||\n registers.some(i => typeof i !== 'string')\n )\n return;\n\n this.commands = registers;\n });\n\n // listen on every message, post them to to the worker\n this.eventPassthrough = this.eventPassthrough.bind(this);\n }\n\n // emit a custom plugin event\n async emitPlugin(ev: string, from: string, args: any[]) {\n const [r]: any[] = (await this.emit('emitPlugin', ev, from, args)) ?? [];\n return r;\n }\n\n // documentation is based on doc.json file\n getDocumentation() {\n return this.documentation;\n }\n\n // loaded state is based on if a worker exists\n isLoaded() {\n return !!this.#worker;\n }\n\n // determing if a command is registered\n isCommand(cmd: string) {\n return this.commands.includes(cmd);\n }\n\n // require the plugin into the system, run the init func\n async load() {\n // can't load the plugin if it's already loaded\n if (typeof this.#worker !== 'undefined') return false;\n\n // vm restriction settings, default is access to everything\n const vmOptions = {\n builtin: this.access, // TODO: reference access file\n external: true, // TODO: reference access file\n isTypeScript: this.isTypeScript,\n };\n this.commands = [];\n\n try {\n const config = await this.storage.getConfig();\n if (this.pluginConfig?.emitConfig) {\n await fs.promises.writeFile(\n path.join(this.path, this.pluginConfig.emitConfig),\n JSON.stringify(config),\n );\n }\n this.createWorker();\n\n // tell the worker its name :)\n await this.emit('name', this.getName());\n\n // create the vm, export the plugin's class\n Logger.verbose('Loading safe plugin');\n if (!(await this.emit('load', this.path, vmOptions))[0]) throw '';\n\n // get some initial information to create an omegga proxy\n const initialData = bootstrap(this.omegga);\n // send all of the mock events to the proxy omegga\n Logger.verbose('Sending initial data to safe plugin');\n for (const ev in initialData) {\n try {\n (this.#worker as Worker).postMessage({\n action: 'brickadiaEvent',\n args: [ev, ...initialData[ev]],\n });\n } catch (e) {\n /* just writing 'safe' code :) */\n }\n }\n\n // pass events through\n this.omegga.on('*', this.eventPassthrough);\n Logger.verbose('Starting safe plugin');\n // actually start the plugin\n if (!(await this.emit('start', config))[0]) throw 'plugin failed start';\n\n this.emitStatus();\n return true;\n } catch (e) {\n // kill the worker\n await this.emit('kill');\n\n Logger.error(\n '!>'.red,\n 'error loading node vm plugin',\n this.getName().brightRed.underline,\n e,\n );\n this.emitStatus();\n return false;\n }\n }\n\n // disrequire the plugin into the system, run the stop func\n unload() {\n let frozen = true,\n timed = false;\n\n return Promise.race([\n (async () => {\n // can't unload the plugin if it hasn't been loaded\n if (typeof this.#worker === 'undefined') return false;\n\n try {\n // stop the plugin (cleanly)\n await this.emit('stop');\n\n // remove listeners\n this.omegga.off('*', this.eventPassthrough);\n\n // let the unload function wait for the worker to properly cleanup\n const promise = new Promise(res => {\n this.#worker.once('exit', res);\n });\n\n // kill the worker\n await this.emit('kill');\n\n // wait for the worker to exit\n await promise;\n\n frozen = false;\n if (timed) return;\n this.emitStatus();\n this.commands = [];\n return true;\n } catch (e) {\n frozen = false;\n if (timed) return;\n\n Logger.error(\n '!>'.red,\n 'error unloading node plugin',\n this.getName().brightRed.underline,\n e,\n );\n this.emitStatus();\n return false;\n }\n })(),\n new Promise<boolean>(resolve => {\n // check if the worker is frozen (while true)\n setTimeout(() => {\n if (!frozen) return;\n this.plugin.emit(\n 'error',\n 0,\n 'I appear to be in an unresponsive state - terminating worker',\n );\n\n // remove listeners\n this.omegga.off('*', this.eventPassthrough);\n\n // tell the worker to exit\n if (this.#worker) this.#worker.emit('exit');\n\n // terminate the worker if it still exists\n try {\n if (this.#worker) this.#worker.terminate();\n } catch (err) {\n console.error('error terminating worker:', err);\n }\n\n timed = true;\n resolve(true);\n this.emitStatus();\n }, 5000);\n }),\n ]);\n }\n\n // emit an action to the worker and return a promise with its response\n emit(action: string, ...args: any[]) {\n if (!this.#worker) return;\n\n const messageId = 'message:' + this.messageCounter++;\n\n // promise waits for the message to resolve\n const promise = new Promise<unknown[]>(resolve =>\n this.plugin.once(messageId, (_, ...x) => resolve(x)),\n );\n\n // post the message\n try {\n this.#worker.postMessage({\n action,\n args: [messageId, ...args],\n });\n } catch (e) {\n return Promise.reject(e);\n }\n\n // return the promise\n return promise;\n }\n\n // notify a response to the worker\n notify(action: string, ...args: any[]) {\n if (!this.#worker) return;\n\n // post the message\n try {\n this.#worker.postMessage({\n action,\n args: [...args],\n });\n } catch (e) {\n // do nothing here\n }\n }\n\n // create the worker for this plugin, attach emitter\n createWorker() {\n this.#worker = new Worker(\n // vite transpiles worker.ts to dist/worker.js\n path.join(__dirname, '../../worker.js'),\n {\n stdout: true,\n env: {\n VERBOSE: Logger.VERBOSE + '',\n },\n },\n );\n\n // pipe plugin output into omegga\n this.#outInterface = readline.createInterface({\n input: this.#worker.stdout,\n terminal: false,\n });\n this.#errInterface = readline.createInterface({\n input: this.#worker.stderr,\n terminal: false,\n });\n this.#outInterface.on('line', Logger.log);\n this.#errInterface.on('line', Logger.error);\n\n // attach message emitter\n this.#worker.on('message', ({ action, args }) =>\n this.plugin.emit(action, ...args),\n );\n\n // broadcast an error if there is one\n this.#worker.on('error', err => {\n Logger.error(\n '!>'.red,\n 'error in plugin',\n this.getName().brightRed.underline,\n err,\n );\n });\n\n // when the worker exits - set its variable to undefined this knows it's stopped\n this.#worker.on('exit', () => {\n this.omegga.off('*', this.eventPassthrough);\n this.#outInterface.removeAllListeners('line');\n this.#errInterface.removeAllListeners('line');\n try {\n if (this.#worker) this.#worker.terminate();\n } catch (err) {\n Logger.error(\n '!>'.red,\n 'Error terminating worker for',\n this.getName().brightRed.underline,\n err,\n );\n }\n this.#worker = undefined;\n this.emitStatus();\n });\n }\n\n eventPassthrough(...args: any[]) {\n // worker does not exist\n if (!this.#worker) return;\n\n try {\n // post the message\n this.#worker.postMessage({\n action: 'brickadiaEvent',\n args,\n });\n } catch (e) {\n // make sure post message doesn't crash the entire app\n Logger.error('!>'.red, 'error sending to plugin', ...args, e);\n }\n }\n}\n"],"names":["Plugin","Logger","name","bootstrap","Worker"],"mappings":"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"}
|
|
@@ -1,187 +1,127 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const logger = require("../../logger.js");
|
|
4
|
+
const index = require("../../util/index.js");
|
|
5
|
+
const disrequire = require("disrequire");
|
|
6
|
+
const fs = require("node:fs");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
const _interface = require("./interface.js");
|
|
9
|
+
global.OMEGGA_UTIL = index;
|
|
10
|
+
const MAIN_FILE = "omegga.main.js";
|
|
11
|
+
const DOC_FILE = "doc.json";
|
|
12
|
+
const PLUGIN_FILE = "plugin.json";
|
|
13
|
+
class NodePlugin extends _interface.Plugin {
|
|
14
|
+
// every node plugin requires the main file and a doc file
|
|
15
|
+
// may evolve this so it checks the contents of the doc file later
|
|
16
|
+
static canLoad(pluginPath) {
|
|
17
|
+
return fs.existsSync(path.join(pluginPath, MAIN_FILE)) && fs.existsSync(path.join(pluginPath, DOC_FILE));
|
|
18
|
+
}
|
|
19
|
+
// unsafe node plugins (can potentially crash omegga) are powerful
|
|
20
|
+
static getFormat() {
|
|
21
|
+
return "node_unsafe";
|
|
22
|
+
}
|
|
23
|
+
constructor(pluginPath, omegga) {
|
|
24
|
+
super(pluginPath, omegga);
|
|
25
|
+
this.documentation = _interface.Plugin.readJSON(path.join(pluginPath, DOC_FILE));
|
|
26
|
+
this.pluginConfig = _interface.Plugin.readJSON(path.join(pluginPath, PLUGIN_FILE));
|
|
27
|
+
this.pluginFile = path.join(pluginPath, MAIN_FILE);
|
|
28
|
+
this.commands = [];
|
|
29
|
+
}
|
|
30
|
+
// documentation is based on doc.json file
|
|
31
|
+
getDocumentation() {
|
|
32
|
+
return this.documentation;
|
|
33
|
+
}
|
|
34
|
+
// loaded state is based on if the loadedPlugin object is created
|
|
35
|
+
isLoaded() {
|
|
36
|
+
return !!this.loadedPlugin;
|
|
37
|
+
}
|
|
38
|
+
// determing if a command is registered
|
|
39
|
+
isCommand(cmd) {
|
|
40
|
+
return this.commands.includes(cmd);
|
|
41
|
+
}
|
|
42
|
+
// require the plugin into the system, run the init func
|
|
43
|
+
async load() {
|
|
44
|
+
const stopPlugin = (reason) => {
|
|
45
|
+
logger.default.errorp("error launching node plugin", this.getName(), ":", reason);
|
|
46
|
+
try {
|
|
47
|
+
this.disrequireAll();
|
|
48
|
+
} catch (e) {
|
|
49
|
+
logger.default.errorp("error unloading node plugin (2)", this.getName(), e);
|
|
50
|
+
}
|
|
51
|
+
this.emitStatus();
|
|
52
|
+
return false;
|
|
33
53
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// unsafe node plugins (can potentially crash omegga) are powerful
|
|
62
|
-
static getFormat() {
|
|
63
|
-
return 'node_unsafe';
|
|
64
|
-
}
|
|
65
|
-
constructor(pluginPath, omegga) {
|
|
66
|
-
super(pluginPath, omegga);
|
|
67
|
-
// TODO: validate documentation
|
|
68
|
-
this.documentation = interface_1.Plugin.readJSON(path_1.default.join(pluginPath, DOC_FILE));
|
|
69
|
-
this.pluginConfig = interface_1.Plugin.readJSON(path_1.default.join(pluginPath, PLUGIN_FILE));
|
|
70
|
-
this.pluginFile = path_1.default.join(pluginPath, MAIN_FILE);
|
|
71
|
-
// list of registered comands
|
|
72
|
-
this.commands = [];
|
|
73
|
-
}
|
|
74
|
-
// documentation is based on doc.json file
|
|
75
|
-
getDocumentation() {
|
|
76
|
-
return this.documentation;
|
|
77
|
-
}
|
|
78
|
-
// loaded state is based on if the loadedPlugin object is created
|
|
79
|
-
isLoaded() {
|
|
80
|
-
return !!this.loadedPlugin;
|
|
81
|
-
}
|
|
82
|
-
// determing if a command is registered
|
|
83
|
-
isCommand(cmd) {
|
|
84
|
-
return this.commands.includes(cmd);
|
|
85
|
-
}
|
|
86
|
-
// require the plugin into the system, run the init func
|
|
87
|
-
async load() {
|
|
88
|
-
var _a;
|
|
89
|
-
const stopPlugin = (reason) => {
|
|
90
|
-
logger_1.default.errorp('error launching node plugin', this.getName(), ':', reason);
|
|
91
|
-
try {
|
|
92
|
-
this.disrequireAll();
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
logger_1.default.errorp('error unloading node plugin (2)', this.getName(), e);
|
|
96
|
-
}
|
|
97
|
-
this.emitStatus();
|
|
98
|
-
return false;
|
|
99
|
-
};
|
|
100
|
-
this.commands = [];
|
|
101
|
-
try {
|
|
102
|
-
const config = await this.storage.getConfig();
|
|
103
|
-
if ((_a = this.pluginConfig) === null || _a === void 0 ? void 0 : _a.emitConfig) {
|
|
104
|
-
await fs_1.default.promises.writeFile(path_1.default.join(this.path, this.pluginConfig.emitConfig), JSON.stringify(config));
|
|
105
|
-
}
|
|
106
|
-
// require the plugin itself
|
|
107
|
-
const Plugin = require(this.pluginFile);
|
|
108
|
-
// node plugins must export a class with a constructor
|
|
109
|
-
if (typeof Plugin.prototype !== 'object' ||
|
|
110
|
-
typeof Plugin.prototype.constructor !== 'function')
|
|
111
|
-
return stopPlugin('missing constructor in plugin');
|
|
112
|
-
// interface with plugin store
|
|
113
|
-
const store = {
|
|
114
|
-
get: key => this.storage.get(key),
|
|
115
|
-
set: (key, value) => this.storage.set(key, value),
|
|
116
|
-
delete: key => this.storage.delete(key),
|
|
117
|
-
wipe: () => this.storage.wipe(),
|
|
118
|
-
count: () => this.storage.count(),
|
|
119
|
-
keys: () => this.storage.keys(),
|
|
120
|
-
};
|
|
121
|
-
// create the loaded plugin
|
|
122
|
-
this.loadedPlugin = new Plugin(this.omegga, config, store);
|
|
123
|
-
// start the loaded plugin
|
|
124
|
-
if (typeof this.loadedPlugin.init === 'function') {
|
|
125
|
-
const result = await this.loadedPlugin.init();
|
|
126
|
-
// plugins can return a result object
|
|
127
|
-
if (typeof result === 'object' && result) {
|
|
128
|
-
// if registeredCommands is in the results, register the provided strings as commands
|
|
129
|
-
const cmds = result.registeredCommands;
|
|
130
|
-
if (cmds &&
|
|
131
|
-
cmds instanceof Array &&
|
|
132
|
-
cmds.every(i => typeof i === 'string'))
|
|
133
|
-
this.commands = cmds;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
this.emitStatus();
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
catch (e) {
|
|
140
|
-
logger_1.default.errorp('error loading node plugin', this.getName(), e);
|
|
141
|
-
this.emitStatus();
|
|
142
|
-
return false;
|
|
54
|
+
this.commands = [];
|
|
55
|
+
try {
|
|
56
|
+
const config = await this.storage.getConfig();
|
|
57
|
+
if (this.pluginConfig?.emitConfig) {
|
|
58
|
+
await fs.promises.writeFile(
|
|
59
|
+
path.join(this.path, this.pluginConfig.emitConfig),
|
|
60
|
+
JSON.stringify(config)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const Plugin2 = require(this.pluginFile);
|
|
64
|
+
if (typeof Plugin2.prototype !== "object" || typeof Plugin2.prototype.constructor !== "function")
|
|
65
|
+
return stopPlugin("missing constructor in plugin");
|
|
66
|
+
const store = {
|
|
67
|
+
get: (key) => this.storage.get(key),
|
|
68
|
+
set: (key, value) => this.storage.set(key, value),
|
|
69
|
+
delete: (key) => this.storage.delete(key),
|
|
70
|
+
wipe: () => this.storage.wipe(),
|
|
71
|
+
count: () => this.storage.count(),
|
|
72
|
+
keys: () => this.storage.keys()
|
|
73
|
+
};
|
|
74
|
+
this.loadedPlugin = new Plugin2(this.omegga, config, store);
|
|
75
|
+
if (typeof this.loadedPlugin.init === "function") {
|
|
76
|
+
const result = await this.loadedPlugin.init();
|
|
77
|
+
if (typeof result === "object" && result) {
|
|
78
|
+
const cmds = result.registeredCommands;
|
|
79
|
+
if (cmds && cmds instanceof Array && cmds.every((i) => typeof i === "string"))
|
|
80
|
+
this.commands = cmds;
|
|
143
81
|
}
|
|
82
|
+
}
|
|
83
|
+
this.emitStatus();
|
|
84
|
+
return true;
|
|
85
|
+
} catch (e) {
|
|
86
|
+
logger.default.errorp("error loading node plugin", this.getName(), e);
|
|
87
|
+
this.emitStatus();
|
|
88
|
+
return false;
|
|
144
89
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
try {
|
|
153
|
-
// run the stop func on the plugin if applicable
|
|
154
|
-
if (typeof this.loadedPlugin.stop === 'function')
|
|
155
|
-
await this.loadedPlugin.stop();
|
|
156
|
-
// unload the plugin
|
|
157
|
-
this.disrequireAll();
|
|
158
|
-
this.loadedPlugin = undefined;
|
|
159
|
-
this.emitStatus();
|
|
160
|
-
this.commands = [];
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
catch (e) {
|
|
164
|
-
logger_1.default.errorp('error unloading node plugin', this.getName(), e);
|
|
165
|
-
this.emitStatus();
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
90
|
+
}
|
|
91
|
+
// disrequire the plugin into the system, run the stop func
|
|
92
|
+
async unload() {
|
|
93
|
+
if (typeof this.loadedPlugin === "undefined") {
|
|
94
|
+
this.emitStatus();
|
|
95
|
+
return false;
|
|
168
96
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
throw e;
|
|
182
|
-
}
|
|
183
|
-
});
|
|
97
|
+
try {
|
|
98
|
+
if (typeof this.loadedPlugin.stop === "function")
|
|
99
|
+
await this.loadedPlugin.stop();
|
|
100
|
+
this.disrequireAll();
|
|
101
|
+
this.loadedPlugin = void 0;
|
|
102
|
+
this.emitStatus();
|
|
103
|
+
this.commands = [];
|
|
104
|
+
return true;
|
|
105
|
+
} catch (e) {
|
|
106
|
+
logger.default.errorp("error unloading node plugin", this.getName(), e);
|
|
107
|
+
this.emitStatus();
|
|
108
|
+
return false;
|
|
184
109
|
}
|
|
110
|
+
}
|
|
111
|
+
// disrequire all that match plugin path in require.cache
|
|
112
|
+
disrequireAll() {
|
|
113
|
+
const requiredFiles = Object.keys(require.cache).filter(
|
|
114
|
+
(requiredFile) => requiredFile.includes(this.path)
|
|
115
|
+
);
|
|
116
|
+
requiredFiles.forEach((file) => {
|
|
117
|
+
try {
|
|
118
|
+
disrequire(file);
|
|
119
|
+
} catch (e) {
|
|
120
|
+
if (e.code !== "MODULE_NOT_FOUND")
|
|
121
|
+
throw e;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
185
125
|
}
|
|
186
126
|
exports.default = NodePlugin;
|
|
187
|
-
//# sourceMappingURL=plugin_node_unsafe.js.map
|
|
127
|
+
//# sourceMappingURL=plugin_node_unsafe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin_node_unsafe.js","
|
|
1
|
+
{"version":3,"file":"plugin_node_unsafe.js","sources":["../../../src/omegga/plugin/plugin_node_unsafe.ts"],"sourcesContent":["import Logger from '@/logger';\nimport OmeggaPlugin, { PluginStore } from '@/plugin';\nimport type Omegga from '@omegga/server';\nimport * as util from '@util';\nimport disrequire from 'disrequire';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Plugin } from './interface';\n\nglobal.OMEGGA_UTIL = util;\n\n// Main plugin file (like index.js)\n// this isn't named 'index.js' or 'plugin.js' because those may be filenames\n// used with other loaders (rpc loader) and are too generic\n// omegga.main.js is rather unique and helps avoid collision\nconst MAIN_FILE = 'omegga.main.js';\n\n// Documentation file (contains name, description, author, command helptext)\nconst DOC_FILE = 'doc.json';\nconst PLUGIN_FILE = 'plugin.json';\n\nexport default class NodePlugin extends Plugin {\n // every node plugin requires the main file and a doc file\n // may evolve this so it checks the contents of the doc file later\n static canLoad(pluginPath: string) {\n return (\n fs.existsSync(path.join(pluginPath, MAIN_FILE)) &&\n fs.existsSync(path.join(pluginPath, DOC_FILE))\n );\n }\n\n // unsafe node plugins (can potentially crash omegga) are powerful\n static getFormat() {\n return 'node_unsafe';\n }\n\n constructor(pluginPath: string, omegga: Omegga) {\n super(pluginPath, omegga);\n // TODO: validate documentation\n this.documentation = Plugin.readJSON(path.join(pluginPath, DOC_FILE));\n this.pluginConfig = Plugin.readJSON(path.join(pluginPath, PLUGIN_FILE));\n this.pluginFile = path.join(pluginPath, MAIN_FILE);\n\n // list of registered comands\n this.commands = [];\n }\n\n // documentation is based on doc.json file\n getDocumentation() {\n return this.documentation;\n }\n\n // loaded state is based on if the loadedPlugin object is created\n isLoaded() {\n return !!this.loadedPlugin;\n }\n\n // determing if a command is registered\n isCommand(cmd: string) {\n return this.commands.includes(cmd);\n }\n\n // require the plugin into the system, run the init func\n async load() {\n const stopPlugin = (reason?: string) => {\n Logger.errorp('error launching node plugin', this.getName(), ':', reason);\n try {\n this.disrequireAll();\n } catch (e) {\n Logger.errorp('error unloading node plugin (2)', this.getName(), e);\n }\n this.emitStatus();\n return false;\n };\n this.commands = [];\n\n try {\n const config = await this.storage.getConfig();\n if (this.pluginConfig?.emitConfig) {\n await fs.promises.writeFile(\n path.join(this.path, this.pluginConfig.emitConfig),\n JSON.stringify(config),\n );\n }\n\n // require the plugin itself\n const Plugin: OmeggaPlugin = require(this.pluginFile);\n\n // node plugins must export a class with a constructor\n if (\n typeof (Plugin as any).prototype !== 'object' ||\n typeof (Plugin as any).prototype.constructor !== 'function'\n )\n return stopPlugin('missing constructor in plugin');\n\n // interface with plugin store\n const store: PluginStore = {\n get: key => this.storage.get(key),\n set: (key, value) => this.storage.set(key, value),\n delete: key => this.storage.delete(key),\n wipe: () => this.storage.wipe(),\n count: () => this.storage.count(),\n keys: () => this.storage.keys(),\n };\n\n // create the loaded plugin\n this.loadedPlugin = new (Plugin as any)(this.omegga, config, store);\n\n // start the loaded plugin\n if (typeof this.loadedPlugin.init === 'function') {\n const result = await this.loadedPlugin.init();\n\n // plugins can return a result object\n if (typeof result === 'object' && result) {\n // if registeredCommands is in the results, register the provided strings as commands\n const cmds = result.registeredCommands;\n if (\n cmds &&\n cmds instanceof Array &&\n cmds.every(i => typeof i === 'string')\n )\n this.commands = cmds;\n }\n }\n\n this.emitStatus();\n return true;\n } catch (e) {\n Logger.errorp('error loading node plugin', this.getName(), e);\n this.emitStatus();\n return false;\n }\n }\n\n // disrequire the plugin into the system, run the stop func\n async unload() {\n // can't unload the plugin if it hasn't been loaded\n if (typeof this.loadedPlugin === 'undefined') {\n this.emitStatus();\n return false;\n }\n\n try {\n // run the stop func on the plugin if applicable\n if (typeof this.loadedPlugin.stop === 'function')\n await this.loadedPlugin.stop();\n\n // unload the plugin\n this.disrequireAll();\n this.loadedPlugin = undefined;\n this.emitStatus();\n this.commands = [];\n return true;\n } catch (e) {\n Logger.errorp('error unloading node plugin', this.getName(), e);\n this.emitStatus();\n return false;\n }\n }\n\n // disrequire all that match plugin path in require.cache\n disrequireAll() {\n // get all files in plugin directory from require cache\n const requiredFiles = Object.keys(require.cache).filter(requiredFile =>\n requiredFile.includes(this.path),\n );\n // disrequire all the files\n requiredFiles.forEach(file => {\n try {\n disrequire(file);\n } catch (e) {\n if (e.code !== 'MODULE_NOT_FOUND')\n // ignore error thrown if a module was deleted\n throw e;\n }\n });\n }\n}\n"],"names":["util","Plugin","Logger"],"mappings":"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"}
|