mirror of
https://github.com/HeyPuter/puter.git
synced 2025-12-30 17:50:00 -06:00
Puter.js workers api (#1339)
This commit is contained in:
@@ -25,6 +25,7 @@ import Perms from './modules/Perms.js';
|
||||
import { pFetch } from './modules/networking/requests.js';
|
||||
import localStorageMemory from './lib/polyfills/localStorage.js'
|
||||
import xhrshim from './lib/polyfills/xhrshim.js'
|
||||
import { WorkersHandler } from './modules/Workers.js';
|
||||
|
||||
// TODO: This is for a safe-guard below; we should check if we can
|
||||
// generalize this behavior rather than hard-coding it.
|
||||
@@ -378,6 +379,8 @@ export default globalThis.puter = (function() {
|
||||
},
|
||||
fetch: pFetch
|
||||
}
|
||||
|
||||
this.workers = new WorkersHandler(this.authToken);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
64
src/puter-js/src/modules/Workers.js
Normal file
64
src/puter-js/src/modules/Workers.js
Normal file
@@ -0,0 +1,64 @@
|
||||
export class WorkersHandler {
|
||||
|
||||
constructor(authToken) {
|
||||
this.authToken = authToken;
|
||||
}
|
||||
|
||||
async create(workerName, filePath) {
|
||||
const data = await puter.fs.read(filePath).then(r => r.text());
|
||||
let currentWorkers = await puter.kv.get("user-workers");
|
||||
if (!currentWorkers) {
|
||||
currentWorkers = {};
|
||||
}
|
||||
|
||||
const driverCall = await puter.drivers.call("workers", "worker-service", "create", { authorization: puter.authToken, fileData: data, workerName });
|
||||
const driverResult = JSON.parse(driverCall.result);
|
||||
if (!driverCall.success || !driverResult.success) {
|
||||
throw new Error(driverResult?.errors || "Driver failed to execute, do you have the necessary permissions?");
|
||||
}
|
||||
currentWorkers[workerName] = { filePath, url: driverResult["url"], deployTime: Date.now() };
|
||||
await puter.kv.set("user-workers", currentWorkers);
|
||||
|
||||
return driverResult;
|
||||
}
|
||||
|
||||
// This is temporary until FS stuff is hooked properly
|
||||
async update(workerName) {
|
||||
let filePath = (await puter.kv.get("user-workers"))[workerName]["filePath"];
|
||||
return this.create(workerName, filePath);
|
||||
}
|
||||
|
||||
async list() {
|
||||
return await puter.kv.get("user-workers");
|
||||
}
|
||||
|
||||
async get(workerName) {
|
||||
try {
|
||||
return (await puter.kv.get("user-workers"))[workerName].url;
|
||||
} catch (e) {
|
||||
throw new Error("Failed to get worker");
|
||||
}
|
||||
}
|
||||
|
||||
async delete(workerName) {
|
||||
const driverCall = await puter.drivers.call("workers", "worker-service", "destroy", { authorization: puter.authToken, workerName });
|
||||
|
||||
if (!driverCall.success || !driverCall.result.result) {
|
||||
if (!driverCall.result.result) {
|
||||
throw new Error("Worker doesn't exist");
|
||||
}
|
||||
throw new Error(driverResult?.errors || "Driver failed to execute, do you have the necessary permissions?");
|
||||
} else {
|
||||
let currentWorkers = await puter.kv.get("user-workers");
|
||||
|
||||
if (!currentWorkers) {
|
||||
currentWorkers = {};
|
||||
}
|
||||
delete currentWorkers[workerName];
|
||||
|
||||
await puter.kv.set("user-workers", currentWorkers);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user