Files
st/server/router/app/extension.go

56 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package app
import (
"git.echol.cn/loser/st/server/api/v1"
"git.echol.cn/loser/st/server/middleware"
"github.com/gin-gonic/gin"
)
type ExtensionRouter struct{}
func (r *ExtensionRouter) InitExtensionRouter(Router *gin.RouterGroup) {
extensionRouter := Router.Group("extension").Use(middleware.AppJWTAuth())
extensionApi := v1.ApiGroupApp.AppApiGroup.ExtensionApi
{
// 扩展管理
extensionRouter.POST("", extensionApi.CreateExtension) // 创建/安装扩展
extensionRouter.PUT("/:id", extensionApi.UpdateExtension) // 更新扩展
extensionRouter.DELETE("/:id", extensionApi.DeleteExtension) // 删除/卸载扩展
extensionRouter.GET("/:id", extensionApi.GetExtension) // 获取扩展详情
extensionRouter.GET("/list", extensionApi.GetExtensionList) // 获取扩展列表
extensionRouter.GET("/enabled", extensionApi.GetEnabledExtensions) // 获取启用的扩展列表
// 扩展操作
extensionRouter.POST("/:id/toggle", extensionApi.ToggleExtension) // 启用/禁用扩展
extensionRouter.POST("/:id/update", extensionApi.UpgradeExtension) // 升级扩展版本
// 扩展配置
extensionRouter.GET("/:id/settings", extensionApi.GetExtensionSettings) // 获取扩展配置
extensionRouter.PUT("/:id/settings", extensionApi.UpdateExtensionSettings) // 更新扩展配置
// 扩展元数据
extensionRouter.GET("/:id/manifest", extensionApi.GetExtensionManifest) // 获取 manifest.json
// 导入导出
extensionRouter.POST("/import", extensionApi.ImportExtension) // 导入扩展
extensionRouter.GET("/:id/export", extensionApi.ExportExtension) // 导出扩展
// 安装方式
extensionRouter.POST("/install/url", extensionApi.InstallExtensionFromURL) // 从 URL 安装扩展(后端代理)
extensionRouter.POST("/install/git", extensionApi.InstallExtensionFromGit) // 从 Git URL 安装扩展
// 统计
extensionRouter.POST("/stats", extensionApi.UpdateExtensionStats) // 更新扩展统计
}
// 扩展资源文件 - 公开路由(不需要鉴权)
// 原因:<script type="module"> 标签无法携带 JWT header
// 且 ES module 的 import 语句也无法携带认证信息。
// 与原版 SillyTavern 一致:扩展文件作为公开静态资源提供。
extensionPublicRouter := Router.Group("extension")
{
extensionPublicRouter.GET("/:id/asset/*path", extensionApi.ProxyExtensionAsset)
}
}