mirror of
https://github.com/HeyPuter/puter
synced 2024-11-14 14:03:42 +00:00
feat: add debug mod
This commit is contained in:
parent
a094ae5683
commit
16b1649ff6
13
mods/README.md
Normal file
13
mods/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Puter Mods
|
||||||
|
|
||||||
|
A list of Puter mods which may be expanded in the future.
|
||||||
|
|
||||||
|
**Contributions of new mods are welcome.**
|
||||||
|
|
||||||
|
## kdmod
|
||||||
|
|
||||||
|
- **location:** [./kdmod](./kdmod)
|
||||||
|
- **description:**
|
||||||
|
> "kernel dev mod"; specifically for the devex needs of
|
||||||
|
> GitHub user KernelDeimos and provided in case anyone else
|
||||||
|
> finds it of any use.
|
60
mods/mods_available/kdmod/CustomPuterService.js
Normal file
60
mods/mods_available/kdmod/CustomPuterService.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
class CustomPuterService extends use.Service {
|
||||||
|
async _init () {
|
||||||
|
const svc_commands = this.services.get('commands');
|
||||||
|
this._register_commands(svc_commands);
|
||||||
|
|
||||||
|
const svc_puterHomepage = this.services.get('puter-homepage');
|
||||||
|
svc_puterHomepage.register_script('/custom-gui/main.js');
|
||||||
|
}
|
||||||
|
['__on_install.routes'] (_, { app }) {
|
||||||
|
const require = this.require;
|
||||||
|
const express = require('express');
|
||||||
|
const path_ = require('path');
|
||||||
|
|
||||||
|
app.use('/custom-gui',
|
||||||
|
express.static(path.join(__dirname, 'gui')));
|
||||||
|
}
|
||||||
|
async ['__on_boot.consolidation'] () {
|
||||||
|
const then = Date.now();
|
||||||
|
this.tod_widget = () => {
|
||||||
|
const s = 5 - Math.floor(
|
||||||
|
(Date.now() - then) / 1000);
|
||||||
|
const lines = [
|
||||||
|
"\x1B[36;1mKDMOD ENABLED\x1B[0m" +
|
||||||
|
` (👁️ ${s}s)`
|
||||||
|
];
|
||||||
|
// It would be super cool to be able to use this here
|
||||||
|
// surrounding_box('33;1', lines);
|
||||||
|
return lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
const svc_devConsole = this.services.get('dev-console', { optional: true });
|
||||||
|
if ( ! svc_devConsole ) return;
|
||||||
|
svc_devConsole.add_widget(this.tod_widget);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
svc_devConsole.remove_widget(this.tod_widget);
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
|
||||||
|
_register_commands (commands) {
|
||||||
|
commands.registerCommands('o', [
|
||||||
|
{
|
||||||
|
id: 'k',
|
||||||
|
description: '',
|
||||||
|
handler: async (_, log) => {
|
||||||
|
const svc_devConsole = this.services.get('dev-console', { optional: true });
|
||||||
|
if ( ! svc_devConsole ) return;
|
||||||
|
svc_devConsole.remove_widget(this.tod_widget);
|
||||||
|
const lines = this.tod_widget();
|
||||||
|
for ( const line of lines ) log.log(line);
|
||||||
|
this.tod_widget = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { CustomPuterService };
|
7
mods/mods_available/kdmod/README.md
Normal file
7
mods/mods_available/kdmod/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Kernel Dev Mod
|
||||||
|
|
||||||
|
This mod makes testing and debugging easier.
|
||||||
|
|
||||||
|
## Current Features:
|
||||||
|
- A service-script adds `reqex` to the `window` object in the client,
|
||||||
|
which contains a bunch of example requests to internal API endpoints.
|
85
mods/mods_available/kdmod/gui/main.js
Normal file
85
mods/mods_available/kdmod/gui/main.js
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
const request_examples = [
|
||||||
|
{
|
||||||
|
name: 'entity storage app read',
|
||||||
|
fetch: async (args) => {
|
||||||
|
return await fetch(`${window.api_origin}/drivers/call`, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": `Bearer ${puter.authToken}`,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
interface: 'puter-apps',
|
||||||
|
method: 'read',
|
||||||
|
args,
|
||||||
|
}),
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
out: async (resp) => {
|
||||||
|
const data = await resp.json();
|
||||||
|
if ( ! data.success ) return data;
|
||||||
|
return data.result;
|
||||||
|
},
|
||||||
|
exec: async function exec (...a) {
|
||||||
|
const resp = await this.fetch(...a);
|
||||||
|
return await this.out(resp);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'entity storage app select all',
|
||||||
|
fetch: async () => {
|
||||||
|
return await fetch(`${window.api_origin}/drivers/call`, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": `Bearer ${puter.authToken}`,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
interface: 'puter-apps',
|
||||||
|
method: 'select',
|
||||||
|
args: { predicate: [] },
|
||||||
|
}),
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
out: async (resp) => {
|
||||||
|
const data = await resp.json();
|
||||||
|
if ( ! data.success ) return data;
|
||||||
|
return data.result;
|
||||||
|
},
|
||||||
|
exec: async function exec (...a) {
|
||||||
|
const resp = await this.fetch(...a);
|
||||||
|
return await this.out(resp);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'grant permission from a user to a user',
|
||||||
|
fetch: async (user, perm) => {
|
||||||
|
return await fetch(`${window.api_origin}/auth/grant-user-user`, {
|
||||||
|
"headers": {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Authorization": `Bearer ${puter.authToken}`,
|
||||||
|
},
|
||||||
|
"body": JSON.stringify({
|
||||||
|
target_username: user,
|
||||||
|
permission: perm,
|
||||||
|
}),
|
||||||
|
"method": "POST",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
out: async (resp) => {
|
||||||
|
const data = await resp.json();
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
exec: async function exec (...a) {
|
||||||
|
const resp = await this.fetch(...a);
|
||||||
|
return await this.out(resp);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
globalThis.reqex = request_examples;
|
||||||
|
|
||||||
|
globalThis.service_script(api => {
|
||||||
|
api.on_ready(() => {
|
||||||
|
});
|
||||||
|
});
|
8
mods/mods_available/kdmod/module.js
Normal file
8
mods/mods_available/kdmod/module.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module.exports = class BillingModule extends use.Module {
|
||||||
|
install (context) {
|
||||||
|
const services = context.get('services');
|
||||||
|
|
||||||
|
const { CustomPuterService } = require('./CustomPuterService.js');
|
||||||
|
services.registerService('__custom-puter', CustomPuterService);
|
||||||
|
}
|
||||||
|
}
|
12
mods/mods_available/kdmod/package.json
Normal file
12
mods/mods_available/kdmod/package.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "custom-puter-mod",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "module.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
2
mods/mods_enabled/.gitignore
vendored
Normal file
2
mods/mods_enabled/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
Loading…
Reference in New Issue
Block a user