mirror of
https://github.com/navidrome/navidrome.git
synced 2026-11-04 17:28:39 +01:00
* implement storage api/hooks * fine. if the error messages are different, just match error * rename storageMount * add independent plugin test * round 2 * .-. * one more copypasta fail * docs(plugins): document the Storage host service The README is the plugin author reference and every other host service has a section there, but Storage had none, so the /storage guest path contract only existed in code. Documents the mount point and its backing directory, the manifest permission, the host function, and the two behaviours an author would otherwise discover the hard way: there is no size limit, and the directory outlives an uninstall. * docs(plugins): correct the library filesystem security notes The README stated in three places that library filesystem access is read-only, which stopped being true when AllowWriteAccess was added: an administrator can grant a plugin write access to libraries. Corrects those and gives the library and storage mounts the same wording for what the sandbox guarantees, since both now go through the same jail. * docs(plugins): describe symlink handling in mounts accurately The security notes claimed paths resolving outside a mount are rejected, which overstates the jail. Only lexical escapes are: '..' and absolute paths. Creating symlinks is denied, but symlinks already present are followed and do reach outside the mount, which is what lets music libraries link folders in from elsewhere. Both behaviours are pinned by tests in the plugins package. --------- Co-authored-by: Deluan Quintão <deluan@navidrome.org>
60 lines
2 KiB
Go
60 lines
2 KiB
Go
// Code generated by ndpgen. DO NOT EDIT.
|
|
|
|
/*
|
|
Package host provides Navidrome Plugin Development Kit wrappers for Go/TinyGo plugins.
|
|
|
|
This package is auto-generated by the ndpgen tool and should not be edited manually.
|
|
|
|
# Usage
|
|
|
|
Add this module as a dependency in your plugin's go.mod:
|
|
|
|
require github.com/navidrome/navidrome/plugins/pdk/go/host v0.0.0
|
|
|
|
Then import the package in your plugin code:
|
|
|
|
import host "github.com/navidrome/navidrome/plugins/pdk/go/host"
|
|
|
|
func myPluginFunction() error {
|
|
// Use the cache service
|
|
_, err := host.CacheSetString("my_key", "my_value", 3600)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Schedule a recurring task
|
|
_, err = host.SchedulerScheduleRecurring("@every 5m", "payload", "task_id")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
# Available Services
|
|
|
|
The following host services are available:
|
|
|
|
- Artwork: provides artwork public URL generation capabilities for plugins.
|
|
- Cache: provides in-memory TTL-based caching capabilities for plugins.
|
|
- Config: provides access to plugin configuration values.
|
|
- HTTP: provides outbound HTTP request capabilities for plugins.
|
|
- KVStore: provides persistent key-value storage for plugins.
|
|
- Library: provides access to music library metadata for plugins.
|
|
- Matcher: resolves externally-obtained songs to local library tracks,
|
|
- Scheduler: provides task scheduling capabilities for plugins.
|
|
- Storage: provides access to a plugin-specific directory with read/write permissions
|
|
- SubsonicAPI: provides access to Navidrome's Subsonic API from plugins.
|
|
- Task: provides persistent task queues for plugins.
|
|
- Users: provides access to user information for plugins.
|
|
- WebSocket: provides WebSocket communication capabilities for plugins.
|
|
|
|
# Building Plugins
|
|
|
|
Go plugins must be compiled to WebAssembly using TinyGo:
|
|
|
|
tinygo build -o plugin.wasm -target=wasip1 -buildmode=c-shared .
|
|
|
|
See the examples directory for complete plugin implementations.
|
|
*/
|
|
package host
|