mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-11 14:41:21 +00:00
feat(task): replace built-in task adaptors with a sandboxed JS plugin system (#7076)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package plugins
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
|
||||
"github.com/QuantumNous/new-api/pkg/jsplugin"
|
||||
)
|
||||
|
||||
//go:embed tasks/*/plugin.js
|
||||
var taskPlugins embed.FS
|
||||
|
||||
func init() {
|
||||
entries, err := fs.ReadDir(taskPlugins, "tasks")
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("read embedded task plugins: %v", err))
|
||||
}
|
||||
for _, entry := range entries {
|
||||
if !entry.IsDir() {
|
||||
continue
|
||||
}
|
||||
key := entry.Name()
|
||||
source, sourceErr := Source(key)
|
||||
if sourceErr != nil {
|
||||
panic(fmt.Sprintf("read embedded task plugin %s: %v", key, sourceErr))
|
||||
}
|
||||
if _, registerErr := jsplugin.DefaultRegistry.RegisterFactory(source, jsplugin.Options{Key: key}); registerErr != nil {
|
||||
panic(fmt.Sprintf("register embedded task plugin %s: %v", key, registerErr))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Source returns the embedded factory source for a task plugin key.
|
||||
func Source(key string) (string, error) {
|
||||
source, err := taskPlugins.ReadFile("tasks/" + key + "/plugin.js")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(source), nil
|
||||
}
|
||||
Reference in New Issue
Block a user