Documentation
¶
Index ¶
- Constants
- Variables
- func ArchiveName(id, version, goos, goarch string) string
- func AuthConfigured(auth []AuthConfig, requestURL string, kind string) bool
- func GitHubRepositoryParts(repository string) (string, string, error)
- func ParseChecksums(data []byte) (map[string]string, error)
- func PluginAuthConfigured(source Source, plugin Plugin, auth []AuthConfig) bool
- func PluginInstallType(plugin Plugin) string
- func ReleaseVersion(release Release) (string, error)
- func SelectReleaseAssets(release Release, id, version, goos, goarch string) (ReleaseAsset, ReleaseAsset, error)
- func SourceID(registryURL string) string
- func SourceName(registryURL string) string
- func UpdateAvailable(installed, latest string) bool
- func ValidateArtifact(artifact Artifact) error
- func ValidateInstallPlan(plan InstallPlan) error
- func ValidatePlugin(plugin Plugin) error
- func ValidatePluginVersions(plugin Plugin) error
- func ValidateRegistry(registry Registry) error
- func VerifyArtifactChecksum(artifact Artifact, data []byte) error
- func VerifyChecksum(name string, data []byte, checksums map[string]string) error
- type Artifact
- type AuthConfig
- type Client
- func (c Client) DownloadArtifact(ctx context.Context, artifact Artifact) ([]byte, error)
- func (c Client) DownloadAsset(ctx context.Context, asset ReleaseAsset) ([]byte, error)
- func (c Client) FetchLatestRelease(ctx context.Context, plugin Plugin) (Release, error)
- func (c Client) FetchRegistry(ctx context.Context) (Registry, error)
- func (c Client) FetchReleaseByTag(ctx context.Context, plugin Plugin, tag string) (Release, error)
- func (c Client) Install(ctx context.Context, plugin Plugin, options InstallOptions) (InstallResult, error)
- func (c Client) InstallDirect(ctx context.Context, plugin Plugin, plan InstallPlan, options InstallOptions) (InstallResult, error)
- func (c Client) InstallManifest(ctx context.Context, manifest Manifest, options InstallOptions) (InstallResult, error)
- func (c Client) InstallVersion(ctx context.Context, plugin Plugin, releaseTag string, version string, ...) (InstallResult, error)
- type HTTPDoer
- type InstallOptions
- type InstallPlan
- type InstallResult
- type Manifest
- type Platform
- type Plugin
- type Registry
- type Release
- type ReleaseAsset
- type Source
- type Version
Constants ¶
const ( RequestKindRegistry = "registry" RequestKindMetadata = "metadata" RequestKindArtifact = "artifact" AuthTypeNone = "none" AuthTypeBearer = "bearer" AuthTypeBasic = "basic" AuthTypeHeader = "header" AuthTypeGitHubToken = "github-token" )
const ( DefaultRegistryURL = "https://raw.githubusercontent.com/router-for-me/CLIProxyAPI-Plugins-Store/main/registry.json" DefaultSourceID = "official" DefaultSourceName = "Official" SchemaVersion = 1 SchemaVersionV2 = 2 InstallTypeGitHubRelease = "github-release" InstallTypeDirect = "direct" )
Variables ¶
var ErrLoadedPluginLocked = errors.New("loaded plugin library cannot be overwritten while the server is running")
ErrLoadedPluginLocked is returned when an install would overwrite a plugin library that is loaded by the running process on Windows.
Functions ¶
func ArchiveName ¶
func AuthConfigured ¶ added in v7.2.44
func AuthConfigured(auth []AuthConfig, requestURL string, kind string) bool
func PluginAuthConfigured ¶ added in v7.2.45
func PluginAuthConfigured(source Source, plugin Plugin, auth []AuthConfig) bool
func PluginInstallType ¶ added in v7.2.44
func ReleaseVersion ¶ added in v7.1.72
ReleaseVersion derives the plugin version from the release tag, stripping a leading "v"/"V" and validating the result.
func SelectReleaseAssets ¶
func SelectReleaseAssets(release Release, id, version, goos, goarch string) (ReleaseAsset, ReleaseAsset, error)
func SourceName ¶ added in v7.2.2
func UpdateAvailable ¶
UpdateAvailable reports whether latest should be offered as an upgrade over installed. A leading "v"/"V" is ignored on both sides. Versions are compared numerically when both are dotted release numbers, so an installed version newer than the registry one is not reported as an update; otherwise any difference counts as an update.
func ValidateArtifact ¶ added in v7.2.44
func ValidateInstallPlan ¶ added in v7.2.44
func ValidateInstallPlan(plan InstallPlan) error
func ValidatePlugin ¶
func ValidatePluginVersions ¶ added in v7.2.44
func ValidateRegistry ¶
func VerifyArtifactChecksum ¶ added in v7.2.44
Types ¶
type Artifact ¶ added in v7.2.44
type Artifact struct {
GOOS string `yaml:"goos,omitempty" json:"goos,omitempty"`
GOARCH string `yaml:"goarch,omitempty" json:"goarch,omitempty"`
URL string `yaml:"url,omitempty" json:"url,omitempty"`
SHA256 string `yaml:"sha256,omitempty" json:"sha256,omitempty"`
Size int64 `yaml:"size,omitempty" json:"size,omitempty"`
}
func PluginArtifacts ¶ added in v7.2.44
func SelectArtifact ¶ added in v7.2.44
func SelectArtifact(plan InstallPlan, goos string, goarch string) (Artifact, error)
type AuthConfig ¶ added in v7.2.44
type AuthConfig struct {
Match string `yaml:"match,omitempty" json:"match,omitempty"`
ApplyTo []string `yaml:"apply-to,omitempty" json:"apply_to,omitempty"`
Type string `yaml:"type,omitempty" json:"type,omitempty"`
TokenEnv string `yaml:"token-env,omitempty" json:"token_env,omitempty"`
UsernameEnv string `yaml:"username-env,omitempty" json:"username_env,omitempty"`
PasswordEnv string `yaml:"password-env,omitempty" json:"password_env,omitempty"`
HeaderName string `yaml:"header-name,omitempty" json:"header_name,omitempty"`
HeaderValueEnv string `yaml:"header-value-env,omitempty" json:"header_value_env,omitempty"`
AllowInsecure bool `yaml:"allow-insecure,omitempty" json:"allow_insecure,omitempty"`
}
func NormalizeAuthConfigs ¶ added in v7.2.44
func NormalizeAuthConfigs(auth []AuthConfig) []AuthConfig
type Client ¶
type Client struct {
HTTPClient HTTPDoer
RegistryURL string
UserAgent string
Auth []AuthConfig
}
func (Client) DownloadArtifact ¶ added in v7.2.44
func (Client) DownloadAsset ¶
func (Client) FetchLatestRelease ¶ added in v7.1.72
FetchLatestRelease returns the latest published release of the plugin's GitHub repository, mirroring the WebUI panel update check.
func (Client) FetchReleaseByTag ¶ added in v7.2.28
FetchReleaseByTag returns a published release by its exact GitHub tag.
func (Client) Install ¶
func (c Client) Install(ctx context.Context, plugin Plugin, options InstallOptions) (InstallResult, error)
func (Client) InstallDirect ¶ added in v7.2.44
func (c Client) InstallDirect(ctx context.Context, plugin Plugin, plan InstallPlan, options InstallOptions) (InstallResult, error)
func (Client) InstallManifest ¶ added in v7.2.44
func (c Client) InstallManifest(ctx context.Context, manifest Manifest, options InstallOptions) (InstallResult, error)
func (Client) InstallVersion ¶ added in v7.2.28
func (c Client) InstallVersion(ctx context.Context, plugin Plugin, releaseTag string, version string, options InstallOptions) (InstallResult, error)
InstallVersion installs a plugin artifact from a fixed release tag/version.
type InstallOptions ¶
type InstallOptions struct {
PluginsDir string
GOOS string
GOARCH string
// PluginLoaded reports whether the plugin's dynamic library is currently
// loaded by the running host. Windows installs are rejected only when they
// would overwrite an existing target file while it returns true.
PluginLoaded func() bool
// BeforeWrite runs after the archive has been downloaded and verified, but
// before an existing target plugin file is replaced.
BeforeWrite func() error
}
type InstallPlan ¶ added in v7.2.44
type InstallPlan struct {
Type string `yaml:"type,omitempty" json:"type,omitempty"`
Artifacts []Artifact `yaml:"artifacts,omitempty" json:"artifacts,omitempty"`
}
func NormalizeInstallPlan ¶ added in v7.2.44
func NormalizeInstallPlan(plan InstallPlan) InstallPlan
type InstallResult ¶
type InstallResult struct {
ID string `json:"id"`
Version string `json:"version"`
ReleaseTag string `json:"release_tag,omitempty"`
InstallType string `json:"install_type,omitempty"`
Path string `json:"path"`
Overwritten bool `json:"overwritten"`
Skipped bool `json:"skipped"`
}
func InstallArchive ¶
func InstallArchive(archiveData []byte, plugin Plugin, options InstallOptions) (InstallResult, error)
type Manifest ¶ added in v7.2.44
type Manifest struct {
SchemaVersion int `yaml:"schema-version,omitempty" json:"schema_version,omitempty"`
ID string `yaml:"id,omitempty" json:"id,omitempty"`
Name string `yaml:"name,omitempty" json:"name,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
Author string `yaml:"author,omitempty" json:"author,omitempty"`
Version string `yaml:"version,omitempty" json:"version,omitempty"`
ReleaseTag string `yaml:"release-tag,omitempty" json:"release_tag,omitempty"`
Repository string `yaml:"repository,omitempty" json:"repository,omitempty"`
Logo string `yaml:"logo,omitempty" json:"logo,omitempty"`
Homepage string `yaml:"homepage,omitempty" json:"homepage,omitempty"`
License string `yaml:"license,omitempty" json:"license,omitempty"`
Tags []string `yaml:"tags,omitempty" json:"tags,omitempty"`
SourceID string `yaml:"source-id,omitempty" json:"source_id,omitempty"`
SourceName string `yaml:"source-name,omitempty" json:"source_name,omitempty"`
SourceURL string `yaml:"source-url,omitempty" json:"source_url,omitempty"`
Install InstallPlan `yaml:"install,omitempty" json:"install,omitempty"`
}
func ManifestFromPlugin ¶ added in v7.2.44
func ManifestFromRelease ¶ added in v7.2.44
func (Manifest) InstallType ¶ added in v7.2.44
type Platform ¶ added in v7.2.44
func PluginPlatforms ¶ added in v7.2.44
type Plugin ¶
type Plugin struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Author string `json:"author"`
Version string `json:"version"`
Versions []Version `json:"versions,omitempty"`
Repository string `json:"repository,omitempty"`
Logo string `json:"logo,omitempty"`
Homepage string `json:"homepage,omitempty"`
License string `json:"license,omitempty"`
Tags []string `json:"tags,omitempty"`
Install InstallPlan `json:"install,omitempty"`
AuthRequired bool `json:"auth_required,omitempty"`
}
type Registry ¶
type Registry struct {
SchemaVersion int `json:"schema_version"`
Plugins []Plugin `json:"plugins"`
}
func ParseRegistry ¶
type Release ¶
type Release struct {
TagName string `json:"tag_name"`
Assets []ReleaseAsset `json:"assets"`
}
type ReleaseAsset ¶
type Source ¶ added in v7.2.2
func DefaultSource ¶ added in v7.2.2
func DefaultSource() Source
func NormalizeSources ¶ added in v7.2.2
type Version ¶ added in v7.2.44
type Version struct {
Version string `json:"version"`
Install InstallPlan `json:"install,omitempty"`
}