pluginstore

package
v7.2.63 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 10, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RequestKindRegistry = "registry"
	RequestKindMetadata = "metadata"
	RequestKindArtifact = "artifact"

	AuthTypeNone        = "none"
	AuthTypeBearer      = "bearer"
	AuthTypeBasic       = "basic"
	AuthTypeHeader      = "header"
	AuthTypeGitHubToken = "github-token"
)
View Source
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

View Source
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 ArchiveName(id, version, goos, goarch string) string

func AuthConfigured added in v7.2.44

func AuthConfigured(auth []AuthConfig, requestURL string, kind string) bool

func GitHubRepositoryParts

func GitHubRepositoryParts(repository string) (string, string, error)

func ParseChecksums

func ParseChecksums(data []byte) (map[string]string, error)

func PluginAuthConfigured added in v7.2.45

func PluginAuthConfigured(source Source, plugin Plugin, auth []AuthConfig) bool

func PluginInstallType added in v7.2.44

func PluginInstallType(plugin Plugin) string

func ReleaseVersion added in v7.1.72

func ReleaseVersion(release Release) (string, error)

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 SourceID added in v7.2.2

func SourceID(registryURL string) string

func SourceName added in v7.2.2

func SourceName(registryURL string) string

func UpdateAvailable

func UpdateAvailable(installed, latest string) bool

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 ValidateArtifact(artifact Artifact) error

func ValidateInstallPlan added in v7.2.44

func ValidateInstallPlan(plan InstallPlan) error

func ValidatePlugin

func ValidatePlugin(plugin Plugin) error

func ValidatePluginVersions added in v7.2.44

func ValidatePluginVersions(plugin Plugin) error

func ValidateRegistry

func ValidateRegistry(registry Registry) error

func VerifyArtifactChecksum added in v7.2.44

func VerifyArtifactChecksum(artifact Artifact, data []byte) error

func VerifyChecksum

func VerifyChecksum(name string, data []byte, checksums map[string]string) error

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 PluginArtifacts(plugin Plugin) []Artifact

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 (c Client) DownloadArtifact(ctx context.Context, artifact Artifact) ([]byte, error)

func (Client) DownloadAsset

func (c Client) DownloadAsset(ctx context.Context, asset ReleaseAsset) ([]byte, error)

func (Client) FetchLatestRelease added in v7.1.72

func (c Client) FetchLatestRelease(ctx context.Context, plugin Plugin) (Release, error)

FetchLatestRelease returns the latest published release of the plugin's GitHub repository, mirroring the WebUI panel update check.

func (Client) FetchRegistry

func (c Client) FetchRegistry(ctx context.Context) (Registry, error)

func (Client) FetchReleaseByTag added in v7.2.28

func (c Client) FetchReleaseByTag(ctx context.Context, plugin Plugin, tag string) (Release, error)

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 HTTPDoer

type HTTPDoer = httpfetch.Doer

HTTPDoer abstracts the HTTP client used to execute requests.

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"`
	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 ManifestFromPlugin(source Source, plugin Plugin) (Manifest, error)

func ManifestFromRelease added in v7.2.44

func ManifestFromRelease(source Source, plugin Plugin, release Release) (Manifest, error)

func (Manifest) InstallType added in v7.2.44

func (m Manifest) InstallType() string

func (Manifest) Plugin added in v7.2.44

func (m Manifest) Plugin() Plugin

func (Manifest) Validate added in v7.2.44

func (m Manifest) Validate() error

type Platform added in v7.2.44

type Platform struct {
	GOOS   string `json:"goos"`
	GOARCH string `json:"goarch"`
}

func PluginPlatforms added in v7.2.44

func PluginPlatforms(plugin Plugin) []Platform

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"`
	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

func ParseRegistry(data []byte) (Registry, error)

func (Registry) PluginByID

func (r Registry) PluginByID(id string) (Plugin, bool)

type Release

type Release struct {
	TagName string         `json:"tag_name"`
	Assets  []ReleaseAsset `json:"assets"`
}

type ReleaseAsset

type ReleaseAsset struct {
	APIURL             string `json:"url"`
	Name               string `json:"name"`
	BrowserDownloadURL string `json:"browser_download_url"`
}

type Source added in v7.2.2

type Source struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	URL  string `json:"url"`
}

func DefaultSource added in v7.2.2

func DefaultSource() Source

func NormalizeSources added in v7.2.2

func NormalizeSources(registryURLs []string) ([]Source, error)

type Version added in v7.2.44

type Version struct {
	Version string      `json:"version"`
	Install InstallPlan `json:"install,omitempty"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL