From 81ee52b00fea4b58b5e97ccec59b049a251c440a Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Mon, 27 Jan 2025 15:38:29 -0500 Subject: [PATCH] dev: add puterexec module --- src/backend/exports.js | 2 + .../modules/puterexec/ExecInterfaceService.js | 44 +++++++++++++++++++ .../src/modules/puterexec/PuterExecModule.js | 16 +++++++ 3 files changed, 62 insertions(+) create mode 100644 src/backend/src/modules/puterexec/ExecInterfaceService.js create mode 100644 src/backend/src/modules/puterexec/PuterExecModule.js diff --git a/src/backend/exports.js b/src/backend/exports.js index f494eb938..cf7f50405 100644 --- a/src/backend/exports.js +++ b/src/backend/exports.js @@ -36,6 +36,7 @@ const { AppsModule } = require("./src/modules/apps/AppsModule.js"); const { DevelopmentModule } = require("./src/modules/development/DevelopmentModule.js"); const { HostOSModule } = require("./src/modules/hostos/HostOSModule.js"); const { InternetModule } = require("./src/modules/internet/InternetModule.js"); +const { PuterExecModule } = require("./src/modules/puterexec/PuterExecModule.js"); module.exports = { helloworld: () => { @@ -68,6 +69,7 @@ module.exports = { SelfHostedModule, TestDriversModule, PuterAIModule, + PuterExecModule, BroadcastModule, InternetModule, diff --git a/src/backend/src/modules/puterexec/ExecInterfaceService.js b/src/backend/src/modules/puterexec/ExecInterfaceService.js new file mode 100644 index 000000000..1e7e3ef4f --- /dev/null +++ b/src/backend/src/modules/puterexec/ExecInterfaceService.js @@ -0,0 +1,44 @@ +const BaseService = require("../../services/BaseService"); + +class ExecInterfaceService extends BaseService { + async ['__on_driver.register.interfaces'] () { + const svc_registry = this.services.get('registry'); + const col_interfaces = svc_registry.get('interfaces'); + + col_interfaces.set('puter-exec', { + description: 'Execute code with various languages.', + methods: { + about: { + description: 'Get information about the execution service.', + parameters: {}, + result: { type: 'json' }, + }, + supported: { + description: 'List supported languages and their details.', + parameters: {}, + result: { type: 'json' }, + }, + exec: { + description: 'Execute code with a specific language.', + parameters: { + runtime: { + type: 'string', + description: 'Name of programming language or ID of runtime.', + }, + code: { + type: 'string', + description: 'Code to execute.', + }, + stdin: { + type: 'string', + description: 'Input to provide to the code.', + } + }, + result: {}, + }, + } + }); + } +} + +module.exports = ExecInterfaceService; diff --git a/src/backend/src/modules/puterexec/PuterExecModule.js b/src/backend/src/modules/puterexec/PuterExecModule.js new file mode 100644 index 000000000..bd00eae3a --- /dev/null +++ b/src/backend/src/modules/puterexec/PuterExecModule.js @@ -0,0 +1,16 @@ +const config = require("../../config"); + +const { AdvancedBase } = require("@heyputer/putility"); + +class PuterExecModule extends AdvancedBase { + async install (context) { + const services = context.get('services'); + + const ExecInterfaceService = require('./ExecInterfaceService'); + services.registerService('__exec-interfaces', ExecInterfaceService); + } +} + +module.exports = { + PuterExecModule +};