SYMBOL INDEX (1189 symbols across 267 files) FILE: cmd/bestsub/main.go function main (line 17) | func main() { FILE: internal/config/base.go function init (line 21) | func init() { function Base (line 64) | func Base() config.Base { function setupPaths (line 68) | func setupPaths(config *config.Base, configPath string) { function loadFromFile (line 89) | func loadFromFile(config *config.Base, filePath string) error { function loadFromEnv (line 104) | func loadFromEnv(config *config.Base) { function parsePort (line 133) | func parsePort(portStr string) (int, error) { function createDefaultConfig (line 144) | func createDefaultConfig(filePath string) error { function validateConfig (line 166) | func validateConfig(config *config.Base) error { function validateServerConfig (line 190) | func validateServerConfig(config *config.ServerConfig) error { function validateDatabaseConfig (line 206) | func validateDatabaseConfig(config *config.DatabaseConfig) error { function validateLogConfig (line 223) | func validateLogConfig(config *config.LogConfig) error { function validateJWTConfig (line 252) | func validateJWTConfig(config *config.JWTConfig) error { function validateSessionConfig (line 268) | func validateSessionConfig(config *config.SessionConfig) error { FILE: internal/core/check/check.go function Get (line 12) | func Get(m string, c string) (check.Instance, error) { function GetTypes (line 16) | func GetTypes() []string { function GetInfoMap (line 20) | func GetInfoMap() map[string][]Desc { FILE: internal/core/check/checker/alive.go type Alive (line 22) | type Alive struct method Init (line 34) | func (e *Alive) Init() error { method Run (line 38) | func (e *Alive) Run(ctx context.Context, log *log.Logger, subID []uint... method detect (line 116) | func (e *Alive) detect(ctx context.Context, raw map[string]any) bool { type Result (line 28) | type Result struct function init (line 135) | func init() { FILE: internal/core/check/checker/country.go type Country (line 20) | type Country struct method Init (line 25) | func (e *Country) Init() error { method Run (line 29) | func (e *Country) Run(ctx context.Context, log *log.Logger, subID []ui... function init (line 96) | func init() { FILE: internal/core/check/checker/speed.go constant mbToBytes (line 23) | mbToBytes = 1024 * 1024 type Speed (line 25) | type Speed struct method Init (line 44) | func (e *Speed) Init() error { method Run (line 48) | func (e *Speed) Run(ctx context.Context, log *log.Logger, subID []uint... method download (line 126) | func (e *Speed) download(ctx context.Context, client *http.Client) int... method upload (line 148) | func (e *Speed) upload(ctx context.Context, client *http.Client) int64 { type trackingZeroReader (line 174) | type trackingZeroReader struct method Read (line 179) | func (r *trackingZeroReader) Read(p []byte) (n int, err error) { function init (line 197) | func init() { FILE: internal/core/check/checker/tiktok.go type TikTok (line 23) | type TikTok struct method Init (line 28) | func (e *TikTok) Init() error { method Run (line 32) | func (e *TikTok) Run(ctx context.Context, log *log.Logger, subID []uin... method detectTikTok (line 99) | func (e *TikTok) detectTikTok(ctx context.Context, raw map[string]any)... function extractRegion (line 151) | func extractRegion(html []byte) bool { function init (line 155) | func init() { FILE: internal/core/cron/check.go function CheckLoad (line 22) | func CheckLoad() { function CheckAdd (line 32) | func CheckAdd(data *checkModel.Data) error { function CheckUpdate (line 78) | func CheckUpdate(data *checkModel.Data) error { function CheckRun (line 84) | func CheckRun(id uint16) error { function CheckEnable (line 93) | func CheckEnable(id uint16) error { function CheckDisable (line 108) | func CheckDisable(id uint16) error { function CheckRemove (line 120) | func CheckRemove(id uint16) error { function CheckStop (line 132) | func CheckStop(id uint16) error { function CheckStatus (line 139) | func CheckStatus(id uint16) string { FILE: internal/core/cron/cron.go type cronFunc (line 9) | type cronFunc struct constant RunningStatus (line 17) | RunningStatus = "running" constant ScheduledStatus (line 18) | ScheduledStatus = "scheduled" constant PendingStatus (line 19) | PendingStatus = "pending" constant DisabledStatus (line 20) | DisabledStatus = "disabled" function Start (line 23) | func Start() { function Stop (line 27) | func Stop() { FILE: internal/core/cron/fetch.go function FetchLoad (line 21) | func FetchLoad() { function FetchAdd (line 32) | func FetchAdd(data *subModel.Data) error { function FetchRun (line 61) | func FetchRun(subID uint16) subModel.Result { function FetchEnable (line 90) | func FetchEnable(subID uint16) error { function FetchDisable (line 109) | func FetchDisable(subID uint16) error { function FetchRemove (line 121) | func FetchRemove(subID uint16) error { function FetchStop (line 133) | func FetchStop(subID uint16) error { function FetchUpdate (line 140) | func FetchUpdate(data *subModel.Data) error { function FetchStatus (line 145) | func FetchStatus(subID uint16) string { FILE: internal/core/fetch/fetch.go function Do (line 24) | func Do(ctx context.Context, subID uint16, config string) subModel.Result { function createFailureResult (line 127) | func createFailureResult(msg string, startTime time.Time) subModel.Result { function createSuccessResult (line 137) | func createSuccessResult(count uint32, startTime time.Time, nodeNull boo... FILE: internal/core/mihomo/mihomo.go type HC (line 19) | type HC struct method Release (line 150) | func (h *HC) Release() { function parsePort (line 43) | func parsePort(portStr string) (uint16, error) { function Default (line 51) | func Default(useProxy bool) *HC { function direct (line 103) | func direct() *HC { function Proxy (line 111) | func Proxy(raw map[string]any) *HC { FILE: internal/core/node/exist.go type exist (line 5) | type exist struct method Exist (line 14) | func (k *exist) Exist(key uint64) bool { method Add (line 21) | func (k *exist) Add(key uint64) { method Remove (line 26) | func (k *exist) Remove(key uint64) { function NewExist (line 10) | func NewExist(size int) *exist { FILE: internal/core/node/info.go function RefreshInfo (line 5) | func RefreshInfo() { FILE: internal/core/node/node.go function InitNodePool (line 25) | func InitNodePool(size int) { function CloseNodePool (line 51) | func CloseNodePool() error { type nameNode (line 72) | type nameNode struct function Add (line 76) | func Add(node *[]nodeModel.Base) int { function ForEach (line 165) | func ForEach(fn func(node []byte)) { function GetAll (line 173) | func GetAll() []nodeModel.Data { function GetBySubIdExclude (line 179) | func GetBySubIdExclude(subId []uint16) []uint16 { function GetBySubId (line 191) | func GetBySubId(subId []uint16) *[]nodeModel.Data { function GetByFilter (line 203) | func GetByFilter(filter nodeModel.Filter) *[]nodeModel.Data { function mergeNodesToPool (line 244) | func mergeNodesToPool(newNodes []nodeModel.Data) int { function GetSubInfo (line 292) | func GetSubInfo(subID uint16) nodeModel.SimpleInfo { function GetCountryInfo (line 298) | func GetCountryInfo(country string) nodeModel.SimpleInfo { function DeleteBySubId (line 303) | func DeleteBySubId(subID uint16) { FILE: internal/core/node/var.go type infoSums (line 27) | type infoSums struct FILE: internal/core/subconv/subconv.go function ConvertData (line 16) | func ConvertData(raw string, target string) string { FILE: internal/core/system/monitor.go function init (line 19) | func init() { function AddUploadBytes (line 23) | func AddUploadBytes(bytes uint64) { function AddDownloadBytes (line 27) | func AddDownloadBytes(bytes uint64) { function GetSystemInfo (line 31) | func GetSystemInfo() *system.Info { function Reset (line 59) | func Reset() { FILE: internal/core/task/task.go function Init (line 8) | func Init(maxThread int) { function Submit (line 13) | func Submit(fn func()) { function Release (line 17) | func Release() { function MaxThread (line 21) | func MaxThread() int { FILE: internal/core/update/core.go function UpdateCore (line 17) | func UpdateCore() error { function updateCore (line 28) | func updateCore() error { function restartExecutable (line 94) | func restartExecutable(execPath string) { FILE: internal/core/update/update.go constant bestsubUpdateUrl (line 22) | bestsubUpdateUrl = "https://github.com/bestruirui/bestsub/releases/la... constant bestsubUpdateApiUrl (line 23) | bestsubUpdateApiUrl = "https://api.github.com/repos/bestruirui/BestSub/r... type LatestInfo (line 26) | type LatestInfo struct function GetLatestBestsubInfo (line 33) | func GetLatestBestsubInfo() (*LatestInfo, error) { function getLatestInfo (line 37) | func getLatestInfo(url string, proxy bool) (*LatestInfo, error) { function download (line 74) | func download(url string, proxy bool) ([]byte, error) { function unzip (line 102) | func unzip(data []byte, dest string) error { function inDest (line 157) | func inDest(fpath, dest string) bool { FILE: internal/database/client/sqlite/auth.go method Auth (line 14) | func (db *DB) Auth() interfaces.AuthRepository { type AuthRepository (line 19) | type AuthRepository struct method Get (line 24) | func (db *AuthRepository) Get(ctx context.Context) (*auth.Data, error) { method UpdateName (line 46) | func (r *AuthRepository) UpdateName(ctx context.Context, name string) ... method UpdatePassword (line 68) | func (r *AuthRepository) UpdatePassword(ctx context.Context, hashPassw... method Initialize (line 90) | func (r *AuthRepository) Initialize(ctx context.Context, authData *aut... method IsInitialized (line 102) | func (r *AuthRepository) IsInitialized(ctx context.Context) (bool, err... FILE: internal/database/client/sqlite/check.go type CheckRepository (line 13) | type CheckRepository struct method Create (line 21) | func (r *CheckRepository) Create(ctx context.Context, t *check.Data) e... method GetByID (line 46) | func (r *CheckRepository) GetByID(ctx context.Context, id uint16) (*ch... method Update (line 71) | func (r *CheckRepository) Update(ctx context.Context, t *check.Data) e... method Delete (line 91) | func (r *CheckRepository) Delete(ctx context.Context, id uint16) error { method List (line 103) | func (r *CheckRepository) List(ctx context.Context) (*[]check.Data, er... method Check (line 17) | func (db *DB) Check() interfaces.CheckRepository { FILE: internal/database/client/sqlite/migration/001_table.go function Migration001Table (line 6) | func Migration001Table() string { function init (line 96) | func init() { FILE: internal/database/client/sqlite/migration/002_add_sub_tags.go function Migration002AddSubTags (line 6) | func Migration002AddSubTags() string { function init (line 14) | func init() { FILE: internal/database/client/sqlite/migration/migration.go constant ClientName (line 5) | ClientName = "sqlite" function Get (line 7) | func Get() []*migration.Info { FILE: internal/database/client/sqlite/migrator.go method Migrate (line 11) | func (db *DB) Migrate() error { method ensureMigrationsTable (line 39) | func (db *DB) ensureMigrationsTable() error { method getAppliedMigrations (line 56) | func (db *DB) getAppliedMigrations() (map[uint64]bool, error) { method applyMigrations (line 80) | func (db *DB) applyMigrations(migrations []*migModel.Info) error { FILE: internal/database/client/sqlite/notify.go type NotifyRepository (line 13) | type NotifyRepository struct method Create (line 21) | func (r *NotifyRepository) Create(ctx context.Context, channel *notify... method GetByID (line 46) | func (r *NotifyRepository) GetByID(ctx context.Context, id uint16) (*n... method Update (line 69) | func (r *NotifyRepository) Update(ctx context.Context, channel *notify... method Delete (line 87) | func (r *NotifyRepository) Delete(ctx context.Context, id uint16) error { method List (line 99) | func (r *NotifyRepository) List(ctx context.Context) (*[]notify.Data, ... method Notify (line 17) | func (db *DB) Notify() interfaces.NotifyRepository { type NotifyTemplateRepository (line 132) | type NotifyTemplateRepository struct method Create (line 140) | func (r *NotifyTemplateRepository) Create(ctx context.Context, templat... method GetByType (line 157) | func (r *NotifyTemplateRepository) GetByType(ctx context.Context, t st... method Update (line 177) | func (r *NotifyTemplateRepository) Update(ctx context.Context, templat... method List (line 191) | func (r *NotifyTemplateRepository) List(ctx context.Context) (*[]notif... method NotifyTemplate (line 136) | func (db *DB) NotifyTemplate() interfaces.NotifyTemplateRepository { FILE: internal/database/client/sqlite/setting.go method Setting (line 12) | func (db *DB) Setting() interfaces.SettingRepository { type SystemConfigRepository (line 16) | type SystemConfigRepository struct method Create (line 20) | func (r *SystemConfigRepository) Create(ctx context.Context, configs *... method GetAll (line 56) | func (r *SystemConfigRepository) GetAll(ctx context.Context) (*[]setti... method GetByKey (line 86) | func (r *SystemConfigRepository) GetByKey(ctx context.Context, keys []... method Update (line 129) | func (r *SystemConfigRepository) Update(ctx context.Context, data *[]s... FILE: internal/database/client/sqlite/share.go type ShareRepository (line 13) | type ShareRepository struct method Create (line 21) | func (r *ShareRepository) Create(ctx context.Context, shareData *share... method GetByID (line 49) | func (r *ShareRepository) GetByID(ctx context.Context, id uint16) (*sh... method Update (line 76) | func (r *ShareRepository) Update(ctx context.Context, shareData *share... method UpdateAccessCount (line 98) | func (r *ShareRepository) UpdateAccessCount(ctx context.Context, share... method Delete (line 131) | func (r *ShareRepository) Delete(ctx context.Context, id uint16) error { method List (line 143) | func (r *ShareRepository) List(ctx context.Context) (*[]share.Data, er... method GetGenByToken (line 179) | func (r *ShareRepository) GetGenByToken(ctx context.Context, token str... method Share (line 17) | func (db *DB) Share() interfaces.ShareRepository { FILE: internal/database/client/sqlite/sqlite.go type DB (line 13) | type DB struct method Close (line 38) | func (db *DB) Close() error { function New (line 18) | func New(databasePath string) (interfaces.Repository, error) { function enablePragmas (line 43) | func enablePragmas(db *sql.DB) error { FILE: internal/database/client/sqlite/storage.go type StorageRepository (line 14) | type StorageRepository struct method Create (line 24) | func (r *StorageRepository) Create(ctx context.Context, config *storag... method GetByID (line 50) | func (r *StorageRepository) GetByID(ctx context.Context, id uint16) (*... method Update (line 74) | func (r *StorageRepository) Update(ctx context.Context, config *storag... method Delete (line 93) | func (r *StorageRepository) Delete(ctx context.Context, id uint16) err... method List (line 106) | func (r *StorageRepository) List(ctx context.Context) (*[]storage.Data... method Storage (line 19) | func (db *DB) Storage() interfaces.StorageRepository { FILE: internal/database/client/sqlite/sub.go type SubRepository (line 14) | type SubRepository struct method Create (line 22) | func (r *SubRepository) Create(ctx context.Context, link *sub.Data) er... method GetByID (line 54) | func (r *SubRepository) GetByID(ctx context.Context, id uint16) (*sub.... method Update (line 82) | func (r *SubRepository) Update(ctx context.Context, data *sub.Data) er... method Delete (line 104) | func (r *SubRepository) Delete(ctx context.Context, id uint16) error { method List (line 116) | func (r *SubRepository) List(ctx context.Context) (*[]sub.Data, error) { method BatchCreate (line 154) | func (r *SubRepository) BatchCreate(ctx context.Context, links []*sub.... method Sub (line 18) | func (db *DB) Sub() interfaces.SubRepository { FILE: internal/database/database.go function Initialize (line 12) | func Initialize(sqltype, path string) error { function Close (line 39) | func Close() error { FILE: internal/database/init.go function initAuth (line 15) | func initAuth(ctx context.Context, auth interfaces.AuthRepository) error { function initSystemSetting (line 34) | func initSystemSetting(ctx context.Context, systemSetting interfaces.Set... function initNotifyTemplate (line 66) | func initNotifyTemplate(ctx context.Context, notifyTemplateRepo interfac... FILE: internal/database/interfaces/auth.go type AuthRepository (line 10) | type AuthRepository interface FILE: internal/database/interfaces/check.go type CheckRepository (line 9) | type CheckRepository interface FILE: internal/database/interfaces/notify.go type NotifyRepository (line 10) | type NotifyRepository interface type NotifyTemplateRepository (line 28) | type NotifyTemplateRepository interface FILE: internal/database/interfaces/repository.go type Repository (line 4) | type Repository interface FILE: internal/database/interfaces/setting.go type SettingRepository (line 9) | type SettingRepository interface FILE: internal/database/interfaces/share.go type ShareRepository (line 10) | type ShareRepository interface FILE: internal/database/interfaces/storage.go type StorageRepository (line 10) | type StorageRepository interface FILE: internal/database/interfaces/sub.go type SubRepository (line 10) | type SubRepository interface FILE: internal/database/migration/migration.go type Info (line 7) | type Info struct function Register (line 16) | func Register(client string, date uint64, version, description string, c... function Get (line 37) | func Get(client string) []*Info { FILE: internal/database/op/auth.go function AuthRepo (line 15) | func AuthRepo() interfaces.AuthRepository { function AuthGet (line 22) | func AuthGet() (auth.Data, error) { function AuthUpdateName (line 29) | func AuthUpdateName(name string) error { function AuthUpdatePassWord (line 40) | func AuthUpdatePassWord(password string) error { function AuthVerify (line 55) | func AuthVerify(username, password string) error { FILE: internal/database/op/check.go function CheckRepo (line 18) | func CheckRepo() interfaces.CheckRepository { function GetCheckByID (line 24) | func GetCheckByID(id uint16) (check.Data, error) { function CreateCheck (line 35) | func CreateCheck(ctx context.Context, t *check.Data) error { function UpdateCheck (line 47) | func UpdateCheck(ctx context.Context, t *check.Data) error { function UpdateCheckResult (line 64) | func UpdateCheckResult(id uint16, result check.Result) error { function DeleteCheck (line 100) | func DeleteCheck(ctx context.Context, id uint16) error { function GetCheckList (line 112) | func GetCheckList() ([]check.Data, error) { function refreshCheckCache (line 127) | func refreshCheckCache() error { FILE: internal/database/op/notify.go function notifyRepo (line 17) | func notifyRepo() interfaces.NotifyRepository { function GetNotifyList (line 23) | func GetNotifyList() ([]notify.Data, error) { function GetNotifyByID (line 38) | func GetNotifyByID(id uint16) (notify.Data, error) { function UpdateNotify (line 51) | func UpdateNotify(ctx context.Context, n *notify.Data) error { function CreateNotify (line 64) | func CreateNotify(ctx context.Context, n *notify.Data) error { function DeleteNotify (line 78) | func DeleteNotify(ctx context.Context, id uint16) error { function refreshNotifyCache (line 91) | func refreshNotifyCache(ctx context.Context) error { function NotifyTemplateRepo (line 103) | func NotifyTemplateRepo() interfaces.NotifyTemplateRepository { function GetNotifyTemplateList (line 109) | func GetNotifyTemplateList() ([]notify.Template, error) { function GetNotifyTemplateByType (line 125) | func GetNotifyTemplateByType(t string) (string, error) { function UpdateNotifyTemplate (line 138) | func UpdateNotifyTemplate(ctx context.Context, nt *notify.Template) error { function refreshNotifyTemplate (line 148) | func refreshNotifyTemplate(ctx context.Context) error { FILE: internal/database/op/repo.go function SetRepo (line 9) | func SetRepo(repository interfaces.Repository) { function Close (line 12) | func Close() error { FILE: internal/database/op/setting.go function SettingRepo (line 16) | func SettingRepo() interfaces.SettingRepository { function GetAllSettingMap (line 22) | func GetAllSettingMap(ctx context.Context) (map[string]string, error) { function GetAllSetting (line 33) | func GetAllSetting(ctx context.Context) ([]setting.Setting, error) { function GetSettingByKey (line 51) | func GetSettingByKey(key string) (string, error) { function UpdateSetting (line 64) | func UpdateSetting(ctx context.Context, setting *[]setting.Setting) error { function GetSettingStr (line 80) | func GetSettingStr(key string) string { function GetSettingInt (line 87) | func GetSettingInt(key string) int { function GetSettingBool (line 98) | func GetSettingBool(key string) bool { function refreshSettingCache (line 106) | func refreshSettingCache(ctx context.Context) error { FILE: internal/database/op/share.go function ShareRepo (line 22) | func ShareRepo() interfaces.ShareRepository { function GetShareList (line 28) | func GetShareList(ctx context.Context) ([]share.Data, error) { function GetShareByID (line 44) | func GetShareByID(ctx context.Context, id uint16) (*share.Data, error) { function GetShareByToken (line 55) | func GetShareByToken(ctx context.Context, token string) (*share.Data, er... function CreateShare (line 68) | func CreateShare(ctx context.Context, share *share.Data) error { function UpdateShare (line 80) | func UpdateShare(ctx context.Context, share *share.Data) error { function UpdateShareAccessCount (line 98) | func UpdateShareAccessCount(ctx context.Context, id uint16) error { function DeleteShare (line 118) | func DeleteShare(ctx context.Context, id uint16) error { function refreshShareCache (line 131) | func refreshShareCache(ctx context.Context) error { function startScheduleUpdateAccessCount (line 142) | func startScheduleUpdateAccessCount() { function updateAccessCount (line 156) | func updateAccessCount() { FILE: internal/database/op/storage.go function StorageRepo (line 15) | func StorageRepo() interfaces.StorageRepository { function GetStorageList (line 21) | func GetStorageList(ctx context.Context) ([]storage.Data, error) { function GetStorageByID (line 37) | func GetStorageByID(ctx context.Context, id uint16) (*storage.Data, erro... function CreateStorage (line 48) | func CreateStorage(ctx context.Context, storage *storage.Data) error { function UpdateStorage (line 60) | func UpdateStorage(ctx context.Context, storage *storage.Data) error { function DeleteStorage (line 73) | func DeleteStorage(ctx context.Context, id uint16) error { function refreshStorageCache (line 86) | func refreshStorageCache(ctx context.Context) error { FILE: internal/database/op/sub.go function SubRepo (line 17) | func SubRepo() interfaces.SubRepository { function GetSubList (line 23) | func GetSubList(ctx context.Context) ([]subModel.Data, error) { function GetSubByID (line 39) | func GetSubByID(ctx context.Context, id uint16) (*subModel.Data, error) { function GetSubNameByID (line 50) | func GetSubNameByID(ctx context.Context, id uint16) string { function GetSubTagsByID (line 57) | func GetSubTagsByID(ctx context.Context, id uint16) []string { function CreateSub (line 69) | func CreateSub(ctx context.Context, sub *subModel.Data) error { function BatchCreateSub (line 82) | func BatchCreateSub(ctx context.Context, subs []*subModel.Data) error { function UpdateSub (line 96) | func UpdateSub(ctx context.Context, sub *subModel.Data) error { function UpdateSubResult (line 114) | func UpdateSubResult(ctx context.Context, id uint16, result subModel.Res... function DeleteSub (line 146) | func DeleteSub(ctx context.Context, id uint16) error { function refreshSubCache (line 158) | func refreshSubCache(ctx context.Context) error { FILE: internal/models/auth/auth.go type Data (line 5) | type Data struct type LoginRequest (line 11) | type LoginRequest struct type LoginResponse (line 16) | type LoginResponse struct type ChangePasswordRequest (line 21) | type ChangePasswordRequest struct type UpdateUserInfoRequest (line 27) | type UpdateUserInfoRequest struct type LoginNotify (line 30) | type LoginNotify struct FILE: internal/models/auth/default.go function Default (line 3) | func Default() Data { FILE: internal/models/check/check.go type Instance (line 11) | type Instance interface type Data (line 16) | type Data struct method GenResponse (line 61) | func (r *Data) GenResponse(status string) Response { type Task (line 25) | type Task struct type Result (line 37) | type Result struct type Request (line 44) | type Request struct method GenData (line 79) | func (r *Request) GenData() Data { type Response (line 51) | type Response struct FILE: internal/models/common/base.go type BaseDbModel (line 6) | type BaseDbModel struct type BaseRequestModel (line 15) | type BaseRequestModel struct type BaseUpdateRequestModel (line 20) | type BaseUpdateRequestModel struct FILE: internal/models/config/config.go type Base (line 3) | type Base struct type ServerConfig (line 11) | type ServerConfig struct type DatabaseConfig (line 17) | type DatabaseConfig struct type LogConfig (line 22) | type LogConfig struct type JWTConfig (line 28) | type JWTConfig struct type SessionConfig (line 32) | type SessionConfig struct FILE: internal/models/config/default.go function DefaultBase (line 3) | func DefaultBase() Base { FILE: internal/models/node/node.go constant Alive (line 11) | Alive uint64 = 1 << 0 constant Country (line 12) | Country uint64 = 1 << 1 constant TikTok (line 13) | TikTok uint64 = 1 << 2 constant TikTokIDC (line 14) | TikTokIDC uint64 = 1 << 3 type Data (line 17) | type Data struct type Base (line 22) | type Base struct type UniqueKey (line 28) | type UniqueKey struct method Gen (line 76) | func (u *UniqueKey) Gen() uint64 { type Info (line 38) | type Info struct method SetAliveStatus (line 68) | func (i *Info) SetAliveStatus(AliveStatus uint64, status bool) { type SimpleInfo (line 48) | type SimpleInfo struct type Filter (line 56) | type Filter struct FILE: internal/models/notify/default.go function DefaultTemplates (line 3) | func DefaultTemplates() []Template { FILE: internal/models/notify/notify.go type Data (line 8) | type Data struct method GenResponse (line 63) | func (d *Data) GenResponse() Response { type NameAndID (line 14) | type NameAndID struct type Request (line 18) | type Request struct method GenData (line 51) | func (c *Request) GenData(id uint16) Data { type Response (line 24) | type Response struct type Template (line 31) | type Template struct type Instance (line 36) | type Instance interface constant TypeLoginSuccess (line 42) | TypeLoginSuccess uint16 = 1 << 0 constant TypeLoginFailed (line 43) | TypeLoginFailed uint16 = 1 << 1 FILE: internal/models/setting/default.go function DefaultSetting (line 3) | func DefaultSetting() []Setting { FILE: internal/models/setting/setting.go type Setting (line 3) | type Setting struct constant PROXY_ENABLE (line 9) | PROXY_ENABLE = "proxy_enable" constant PROXY_URL (line 10) | PROXY_URL = "proxy_url" constant LOG_RETENTION_DAYS (line 12) | LOG_RETENTION_DAYS = "log_retention_days" constant SUBCONV_URL (line 14) | SUBCONV_URL = "subconv_url" constant SUBCONV_URL_PROXY (line 15) | SUBCONV_URL_PROXY = "subconv_url_proxy" constant SUB_DISABLE_AUTO (line 17) | SUB_DISABLE_AUTO = "sub_disable_auto" constant NODE_POOL_SIZE (line 19) | NODE_POOL_SIZE = "node_pool_size" constant NODE_TEST_URL (line 20) | NODE_TEST_URL = "node_test_url" constant NODE_TEST_TIMEOUT (line 21) | NODE_TEST_TIMEOUT = "node_test_timeout" constant NODE_PROTOCOL_FILTER_ENABLE (line 23) | NODE_PROTOCOL_FILTER_ENABLE = "node_protocol_filter_enable" constant NODE_PROTOCOL_FILTER_MODE (line 24) | NODE_PROTOCOL_FILTER_MODE = "node_protocol_filter_mode" constant NODE_PROTOCOL_FILTER (line 25) | NODE_PROTOCOL_FILTER = "node_protocol_filter" constant TASK_MAX_THREAD (line 27) | TASK_MAX_THREAD = "task_max_thread" constant TASK_MAX_TIMEOUT (line 28) | TASK_MAX_TIMEOUT = "task_max_timeout" constant TASK_MAX_RETRY (line 29) | TASK_MAX_RETRY = "task_max_retry" constant NOTIFY_OPERATION (line 31) | NOTIFY_OPERATION = "notify_operation" constant NOTIFY_ID (line 32) | NOTIFY_ID = "notify_id" FILE: internal/models/share/share.go type Data (line 9) | type Data struct method GenResponse (line 66) | func (r *Data) GenResponse() Response { type GenConfig (line 20) | type GenConfig struct type Request (line 26) | type Request struct method GenData (line 51) | func (r *Request) GenData() Data { type Response (line 35) | type Response struct type UpdateAccessCountDB (line 46) | type UpdateAccessCountDB struct FILE: internal/models/storage/storage.go type Data (line 8) | type Data struct method GenResponse (line 43) | func (d *Data) GenResponse() Response { type Request (line 15) | type Request struct method GenData (line 33) | func (r *Request) GenData(id uint16) Data { type Response (line 21) | type Response struct type Instance (line 28) | type Instance interface FILE: internal/models/sub/sub.go type Data (line 10) | type Data struct method GenResponse (line 78) | func (d *Data) GenResponse(status string, subInfo nodeModel.SimpleInfo... type Config (line 22) | type Config struct type Result (line 31) | type Result struct type Request (line 41) | type Request struct method GenData (line 63) | func (c *Request) GenData(id uint16) Data { type Response (line 49) | type Response struct FILE: internal/models/system/info.go type HealthResponse (line 4) | type HealthResponse struct type Info (line 12) | type Info struct type Version (line 20) | type Version struct FILE: internal/modules/country/channel/cloudflare.go type CloudflareCDN (line 9) | type CloudflareCDN struct method Url (line 11) | func (c *CloudflareCDN) Url() string { method Header (line 15) | func (c *CloudflareCDN) Header(req *http.Request) { method CountryCode (line 18) | func (c *CloudflareCDN) CountryCode(body []byte) string { type CloudflareSpeed (line 36) | type CloudflareSpeed struct method Url (line 38) | func (c *CloudflareSpeed) Url() string { method Header (line 42) | func (c *CloudflareSpeed) Header(req *http.Request) { method CountryCode (line 46) | func (c *CloudflareSpeed) CountryCode(body []byte) string { function init (line 56) | func init() { FILE: internal/modules/country/channel/commen.go type Common (line 9) | type Common struct function UserAgent (line 13) | func UserAgent(req *http.Request) { FILE: internal/modules/country/channel/freeip.go type FreeIP (line 8) | type FreeIP struct method Url (line 10) | func (c *FreeIP) Url() string { method Header (line 14) | func (c *FreeIP) Header(req *http.Request) { method CountryCode (line 18) | func (c *FreeIP) CountryCode(body []byte) string { function init (line 28) | func init() { FILE: internal/modules/country/channel/ip_sb.go type IPSB (line 8) | type IPSB struct method Url (line 10) | func (c *IPSB) Url() string { method Header (line 14) | func (c *IPSB) Header(req *http.Request) { method CountryCode (line 18) | func (c *IPSB) CountryCode(body []byte) string { function init (line 26) | func init() { FILE: internal/modules/country/channel/ipapi.go type IPAPI (line 8) | type IPAPI struct method Url (line 10) | func (c *IPAPI) Url() string { method Header (line 14) | func (c *IPAPI) Header(req *http.Request) { method CountryCode (line 18) | func (c *IPAPI) CountryCode(body []byte) string { function init (line 26) | func init() { FILE: internal/modules/country/channel/ipwho.go type IPWho (line 8) | type IPWho struct method Url (line 10) | func (c *IPWho) Url() string { method Header (line 14) | func (c *IPWho) Header(req *http.Request) { method CountryCode (line 18) | func (c *IPWho) CountryCode(body []byte) string { function init (line 26) | func init() { FILE: internal/modules/country/channel/myip.go type MYIP (line 8) | type MYIP struct method Url (line 12) | func (c *MYIP) Url() string { method Header (line 16) | func (c *MYIP) Header(req *http.Request) { method CountryCode (line 19) | func (c *MYIP) CountryCode(body []byte) string { function init (line 27) | func init() { FILE: internal/modules/country/channel/reallyfreegeoip.go type ReallyFreeGeoIP (line 8) | type ReallyFreeGeoIP struct method Url (line 10) | func (c *ReallyFreeGeoIP) Url() string { method Header (line 14) | func (c *ReallyFreeGeoIP) Header(req *http.Request) { method CountryCode (line 18) | func (c *ReallyFreeGeoIP) CountryCode(body []byte) string { function init (line 28) | func init() { FILE: internal/modules/country/channel/register.go type Channel (line 7) | type Channel interface function register (line 15) | func register(channel Channel) { FILE: internal/modules/country/country.go function GetCode (line 12) | func GetCode(ctx context.Context, client *http.Client) string { FILE: internal/modules/notify/channel/email.go type Email (line 13) | type Email struct method Init (line 27) | func (e *Email) Init() error { method Send (line 40) | func (e *Email) Send(title string, body *bytes.Buffer) error { method buildMessage (line 54) | func (e *Email) buildMessage(subject string, body *bytes.Buffer) *byte... method sendMail (line 68) | func (e *Email) sendMail(message *bytes.Buffer) error { method sendMailWithTLS (line 76) | func (e *Email) sendMailWithTLS(message *bytes.Buffer) error { function init (line 119) | func init() { FILE: internal/modules/notify/channel/webhook.go type WebHook (line 9) | type WebHook struct method Init (line 13) | func (e *WebHook) Init() error { method Send (line 17) | func (e *WebHook) Send(title string, body *bytes.Buffer) error { function init (line 21) | func init() { FILE: internal/modules/notify/notify.go function SendSystemNotify (line 18) | func SendSystemNotify(operation uint16, title string, content any) error { function Get (line 70) | func Get(m string, c string) (notifyModel.Instance, error) { function GetChannels (line 74) | func GetChannels() []string { function GetInfoMap (line 78) | func GetInfoMap() map[string][]desc.Data { FILE: internal/modules/register/category.go function Notify (line 9) | func Notify(i notify.Instance) { function Check (line 12) | func Check(i check.Instance) { function Storage (line 15) | func Storage(i storage.Instance) { FILE: internal/modules/register/register.go type registerInfo (line 12) | type registerInfo struct function register (line 19) | func register(t string, i any) { function Get (line 33) | func Get[T any](t string, m string, c string) (T, error) { function GetList (line 56) | func GetList(t string) []string { function GetInfoMap (line 69) | func GetInfoMap(t string) map[string][]desc.Data { FILE: internal/modules/share/share.go function GenSubData (line 19) | func GenSubData(genConfigStr string) []byte { function GenNodeData (line 56) | func GenNodeData(config string) []byte { function rename (line 92) | func rename(raw []byte, newName []byte) []byte { type renameTmpl (line 111) | type renameTmpl struct FILE: internal/modules/storage/channel/webdav.go function init (line 9) | func init() { type WebDAV (line 13) | type WebDAV struct method Init (line 19) | func (w *WebDAV) Init() error { method Upload (line 23) | func (w *WebDAV) Upload(ctx context.Context) error { FILE: internal/modules/storage/storage.go function Get (line 12) | func Get(m string, c string) (storageModel.Instance, error) { function GetChannels (line 16) | func GetChannels() []string { function GetInfoMap (line 20) | func GetInfoMap() map[string][]Desc { FILE: internal/server/auth/auth.go type Claims (line 12) | type Claims struct function GenerateToken (line 18) | func GenerateToken(username, secret string) (*auth.LoginResponse, error) { function ValidateToken (line 48) | func ValidateToken(tokenString, secret string) (*Claims, error) { FILE: internal/server/handlers/auth.go function init (line 20) | func init() { function login (line 60) | func login(c *gin.Context) { function logout (line 118) | func logout(c *gin.Context) { function changePassword (line 137) | func changePassword(c *gin.Context) { function getUserInfo (line 174) | func getUserInfo(c *gin.Context) { function updateUsername (line 198) | func updateUsername(c *gin.Context) { FILE: internal/server/handlers/check.go function init (line 19) | func init() { function getCheckTypes (line 65) | func getCheckTypes(c *gin.Context) { function createCheck (line 82) | func createCheck(c *gin.Context) { function getCheck (line 110) | func getCheck(c *gin.Context) { function updateCheck (line 155) | func updateCheck(c *gin.Context) { function deleteCheck (line 200) | func deleteCheck(c *gin.Context) { function runCheck (line 242) | func runCheck(c *gin.Context) { function stopCheck (line 279) | func stopCheck(c *gin.Context) { FILE: internal/server/handlers/info.go function init (line 19) | func init() { function healthCheck (line 55) | func healthCheck(c *gin.Context) { function readinessCheck (line 96) | func readinessCheck(c *gin.Context) { function livenessCheck (line 137) | func livenessCheck(c *gin.Context) { function systemInfo (line 155) | func systemInfo(c *gin.Context) { function version (line 170) | func version(c *gin.Context) { FILE: internal/server/handlers/log.go function init (line 15) | func init() { function getLogFileList (line 39) | func getLogFileList(c *gin.Context) { function getLogContent (line 67) | func getLogContent(c *gin.Context) { FILE: internal/server/handlers/notify.go function init (line 20) | func init() { function getNotifyChannel (line 76) | func getNotifyChannel(c *gin.Context) { function getNotifyChannelConfig (line 92) | func getNotifyChannelConfig(c *gin.Context) { function getNotifyList (line 112) | func getNotifyList(c *gin.Context) { function getNotifyNameAndID (line 132) | func getNotifyNameAndID(c *gin.Context) { function createNotify (line 161) | func createNotify(c *gin.Context) { function testNotify (line 194) | func testNotify(c *gin.Context) { function updateNotify (line 242) | func updateNotify(c *gin.Context) { function deleteNotify (line 282) | func deleteNotify(c *gin.Context) { function getTemplates (line 315) | func getTemplates(c *gin.Context) { function updateTemplate (line 338) | func updateTemplate(c *gin.Context) { FILE: internal/server/handlers/pprof.go function init (line 12) | func init() { function index (line 65) | func index(c *gin.Context) { function cmdline (line 69) | func cmdline(c *gin.Context) { function profile (line 73) | func profile(c *gin.Context) { function symbol (line 77) | func symbol(c *gin.Context) { function trace (line 81) | func trace(c *gin.Context) { function allocs (line 85) | func allocs(c *gin.Context) { function block (line 89) | func block(c *gin.Context) { function goroutine (line 93) | func goroutine(c *gin.Context) { function heap (line 97) | func heap(c *gin.Context) { function mutex (line 101) | func mutex(c *gin.Context) { function threadcreate (line 105) | func threadcreate(c *gin.Context) { FILE: internal/server/handlers/scalar.go function init (line 12) | func init() { function scalar (line 52) | func scalar(c *gin.Context) { function apidata (line 55) | func apidata(c *gin.Context) { FILE: internal/server/handlers/setting.go function init (line 16) | func init() { function getSetting (line 42) | func getSetting(c *gin.Context) { function updateSetting (line 65) | func updateSetting(c *gin.Context) { FILE: internal/server/handlers/share.go function init (line 18) | func init() { function createShare (line 59) | func createShare(c *gin.Context) { function getShare (line 84) | func getShare(c *gin.Context) { function updateShare (line 109) | func updateShare(c *gin.Context) { function deleteShare (line 141) | func deleteShare(c *gin.Context) { function getShareNodeContent (line 164) | func getShareNodeContent(c *gin.Context) { function getShareSubContent (line 203) | func getShareSubContent(c *gin.Context) { FILE: internal/server/handlers/storage.go function init (line 17) | func init() { function createStorage (line 57) | func createStorage(c *gin.Context) { function getStorage (line 82) | func getStorage(c *gin.Context) { function getStorageChannel (line 106) | func getStorageChannel(c *gin.Context) { function getStorageChannelConfig (line 126) | func getStorageChannelConfig(c *gin.Context) { function updateStorage (line 147) | func updateStorage(c *gin.Context) { function deleteStorage (line 178) | func deleteStorage(c *gin.Context) { FILE: internal/server/handlers/sub.go function init (line 18) | func init() { function createSub (line 60) | func createSub(c *gin.Context) { function getSubs (line 89) | func getSubs(c *gin.Context) { function updateSub (line 134) | func updateSub(c *gin.Context) { function deleteSub (line 175) | func deleteSub(c *gin.Context) { function refreshSub (line 208) | func refreshSub(c *gin.Context) { function batchCreateSub (line 232) | func batchCreateSub(c *gin.Context) { FILE: internal/server/handlers/update.go function init (line 13) | func init() { function latest (line 37) | func latest(c *gin.Context) { function updateFunc (line 60) | func updateFunc(c *gin.Context) { FILE: internal/server/handlers/ws.go constant WriteTimeout (line 30) | WriteTimeout = 5 constant PingInterval (line 31) | PingInterval = 5 constant MaxConnections (line 32) | MaxConnections = 20 constant WriteBufferSize (line 33) | WriteBufferSize = 1024 constant ChannelBufferSize (line 34) | ChannelBufferSize = 256 type LogFilter (line 38) | type LogFilter struct method ShouldSend (line 44) | func (f *LogFilter) ShouldSend(logEntry log.LogEntry) bool { function shouldSendLogLevel (line 57) | func shouldSendLogLevel(filterLevel, logLevel string) bool { type wsHandler (line 69) | type wsHandler struct method handleLogWebSocket (line 126) | func (h *wsHandler) handleLogWebSocket(c *gin.Context) { method broadcastLogs (line 162) | func (h *wsHandler) broadcastLogs() { method broadcastToClients (line 170) | func (h *wsHandler) broadcastToClients(logEntry log.LogEntry) { method shouldSendLog (line 201) | func (h *wsHandler) shouldSendLog(client *Client, logEntry log.LogEntr... method handleClient (line 208) | func (h *wsHandler) handleClient(client *Client) { method removeClient (line 235) | func (h *wsHandler) removeClient(client *Client) { type Client (line 77) | type Client struct function init (line 85) | func init() { function newWSHandler (line 97) | func newWSHandler() *wsHandler { FILE: internal/server/middleware/auth.go function Auth (line 15) | func Auth() gin.HandlerFunc { function WSAuth (line 49) | func WSAuth() gin.HandlerFunc { FILE: internal/server/middleware/cors.go function Cors (line 8) | func Cors() gin.HandlerFunc { FILE: internal/server/middleware/logging.go function Logging (line 9) | func Logging() gin.HandlerFunc { FILE: internal/server/middleware/recovery.go function Recovery (line 11) | func Recovery() gin.HandlerFunc { FILE: internal/server/middleware/static.go function StaticEmbed (line 11) | func StaticEmbed(urlPrefix string, embedFS fs.FS) gin.HandlerFunc { function StaticLocal (line 16) | func StaticLocal(urlPrefix string, localPath string) gin.HandlerFunc { function static (line 21) | func static(urlPrefix string, fileSystem http.FileSystem) gin.HandlerFunc { FILE: internal/server/resp/resp.go type ResponseStruct (line 9) | type ResponseStruct struct type ResponsePaginationStruct (line 15) | type ResponsePaginationStruct struct function Success (line 22) | func Success(c *gin.Context, data any) { function Error (line 30) | func Error(c *gin.Context, code int, err string) { function ErrorBadRequest (line 37) | func ErrorBadRequest(c *gin.Context) { FILE: internal/server/router/router.go type Method (line 11) | type Method constant GET (line 14) | GET Method = "GET" constant POST (line 15) | POST Method = "POST" constant PUT (line 16) | PUT Method = "PUT" constant DELETE (line 17) | DELETE Method = "DELETE" constant HEAD (line 18) | HEAD Method = "HEAD" constant OPTIONS (line 19) | OPTIONS Method = "OPTIONS" constant PATCH (line 20) | PATCH Method = "PATCH" constant ANY (line 21) | ANY Method = "ANY" type GroupRouter (line 25) | type GroupRouter struct method Use (line 45) | func (g *GroupRouter) Use(middlewares ...gin.HandlerFunc) *GroupRouter { method AddRoute (line 51) | func (g *GroupRouter) AddRoute(route *Route) *GroupRouter { function NewGroupRouter (line 35) | func NewGroupRouter(path string) *GroupRouter { type Route (line 57) | type Route struct method Handle (line 74) | func (r *Route) Handle(handlers ...gin.HandlerFunc) *Route { method Use (line 80) | func (r *Route) Use(middlewares ...gin.HandlerFunc) *Route { method Validate (line 86) | func (r *Route) Validate() error { function NewRoute (line 65) | func NewRoute(path string, method Method) *Route { function GetRouterCount (line 94) | func GetRouterCount() int { function RegisterAll (line 103) | func RegisterAll(engine *gin.Engine) error { function registerRoute (line 129) | func registerRoute(group *gin.RouterGroup, method Method, path string, h... FILE: internal/server/server/server.go constant defaultReadTimeout (line 54) | defaultReadTimeout = 30 * time.Second constant defaultWriteTimeout (line 55) | defaultWriteTimeout = 30 * time.Second constant defaultIdleTimeout (line 56) | defaultIdleTimeout = 60 * time.Second constant defaultShutdownTimeout (line 57) | defaultShutdownTimeout = 30 * time.Second constant defaultMaxHeaderBytes (line 58) | defaultMaxHeaderBytes = 1 << 20 type Server (line 63) | type Server struct function Initialize (line 68) | func Initialize() error { function Start (line 89) | func Start() error { function Close (line 105) | func Close() error { function IsInitialized (line 122) | func IsInitialized() bool { function setRouter (line 126) | func setRouter() (*gin.Engine, error) { FILE: internal/utils/cache/cache.go function keyToString (line 10) | func keyToString[K comparable](key K) string { type Cache (line 14) | type Cache interface function New (line 24) | func New[K comparable, V any](shards int) Cache[K, V] { type cache (line 40) | type cache struct method Set (line 45) | func (c *cache[K, V]) Set(k K, v V) { method Get (line 51) | func (c *cache[K, V]) Get(k K) (V, bool) { method GetAll (line 57) | func (c *cache[K, V]) GetAll() map[K]V { method Del (line 68) | func (c *cache[K, V]) Del(ks ...K) int { method Exists (line 78) | func (c *cache[K, V]) Exists(ks ...K) bool { method Len (line 87) | func (c *cache[K, V]) Len() int { method getShard (line 95) | func (c *cache[K, V]) getShard(hashedKey uint64) (shard *shard[K, V]) { method Clear (line 99) | func (c *cache[K, V]) Clear() { FILE: internal/utils/cache/shard.go type shard (line 7) | type shard struct method set (line 12) | func (c *shard[K, V]) set(k K, v V) { method get (line 18) | func (c *shard[K, V]) get(k K) (V, bool) { method del (line 29) | func (c *shard[K, V]) del(k K) int { method clear (line 39) | func (c *shard[K, V]) clear() { method getAll (line 45) | func (c *shard[K, V]) getAll() map[K]V { method len (line 55) | func (c *shard[K, V]) len() int { FILE: internal/utils/color/color.go constant Reset (line 5) | Reset string = "\033[0m" constant Red (line 6) | Red string = "\033[31m" constant Green (line 7) | Green string = "\033[32m" constant Yellow (line 8) | Yellow string = "\033[33m" constant Blue (line 9) | Blue string = "\033[34m" constant Purple (line 10) | Purple string = "\033[35m" constant Cyan (line 11) | Cyan string = "\033[36m" constant White (line 12) | White string = "\033[37m" constant Bold (line 13) | Bold string = "\033[1m" constant Dim (line 14) | Dim string = "\033[2m" FILE: internal/utils/country/conutry.go type Country (line 7) | type Country struct function GetCountry (line 13) | func GetCountry(code string) Country { function emoji (line 23) | func emoji(alpha2 string) string { FILE: internal/utils/desc/desc.go constant TypeBoolean (line 8) | TypeBoolean = "boolean" constant TypeNumber (line 9) | TypeNumber = "number" constant TypeString (line 10) | TypeString = "string" constant TypeSelect (line 11) | TypeSelect = "select" constant TypeMultiSelect (line 12) | TypeMultiSelect = "multi_select" type Data (line 15) | type Data struct function Gen (line 25) | func Gen(v any) []Data { function gen (line 33) | func gen(t reflect.Type) []Data { function getType (line 64) | func getType(t string) string { FILE: internal/utils/generic/map.go type MapOf (line 33) | type MapOf struct type readOnly (line 69) | type readOnly struct type entry (line 79) | type entry struct function newEntry (line 101) | func newEntry[V any](i V) *entry[V] { method Load (line 108) | func (m *MapOf[K, V]) Load(key K) (value V, ok bool) { method load (line 133) | func (e *entry[V]) load() (value V, ok bool) { method Store (line 142) | func (m *MapOf[K, V]) Store(key K, value V) { method tryStore (line 175) | func (e *entry[V]) tryStore(i *V) bool { method unexpungeLocked (line 191) | func (e *entry[V]) unexpungeLocked() (wasExpunged bool) { method storeLocked (line 198) | func (e *entry[V]) storeLocked(i *V) { method LoadOrStore (line 205) | func (m *MapOf[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool) { method tryLoadOrStore (line 245) | func (e *entry[V]) tryLoadOrStore(i V) (actual V, loaded, ok bool) { method Delete (line 273) | func (m *MapOf[K, V]) Delete(key K) { method delete (line 290) | func (e *entry[V]) delete() (hadValue bool) { method Range (line 312) | func (m *MapOf[K, V]) Range(f func(key K, value V) bool) { method missLocked (line 345) | func (m *MapOf[K, V]) missLocked() { method dirtyLocked (line 355) | func (m *MapOf[K, V]) dirtyLocked() { method tryExpungeLocked (line 369) | func (e *entry[V]) tryExpungeLocked() (isExpunged bool) { FILE: internal/utils/generic/queue.go type Integer (line 3) | type Integer interface type Queue (line 8) | type Queue struct function NewQueue (line 14) | func NewQueue[T Integer](capacity int) *Queue[T] { method Update (line 25) | func (q *Queue[T]) Update(value T) { method GetAll (line 37) | func (q *Queue[T]) GetAll() []T { method Clear (line 55) | func (q *Queue[T]) Clear() { method Average (line 61) | func (q *Queue[T]) Average() T { FILE: internal/utils/info/info.go function Banner (line 19) | func Banner() { function printInfo (line 52) | func printInfo(label, value, print_color string) { function formatDate (line 58) | func formatDate(date string) string { function min (line 79) | func min(a, b int) int { FILE: internal/utils/log/log.go type LogEntry (line 21) | type LogEntry struct type Logger (line 58) | type Logger struct method Close (line 241) | func (l *Logger) Close() error { type Config (line 62) | type Config struct function webSocketHook (line 71) | func webSocketHook(entry zapcore.Entry) error { function init (line 90) | func init() { function Initialize (line 102) | func Initialize(level, path, method string) error { function GetDefaultLogger (line 144) | func GetDefaultLogger() *Logger { function NewTaskLogger (line 147) | func NewTaskLogger(name string, taskid uint16, level string, writeFile b... function GetWSChannel (line 161) | func GetWSChannel() <-chan LogEntry { function NewLogger (line 165) | func NewLogger(config Config) (*Logger, error) { function createLogFile (line 228) | func createLogFile(path string) (*os.File, error) { function Debug (line 254) | func Debug(args ...interface{}) { function Info (line 257) | func Info(args ...interface{}) { function Warn (line 260) | func Warn(args ...interface{}) { function Error (line 263) | func Error(args ...interface{}) { function Fatal (line 266) | func Fatal(args ...interface{}) { function Debugf (line 270) | func Debugf(template string, args ...interface{}) { function Infof (line 274) | func Infof(template string, args ...interface{}) { function Warnf (line 278) | func Warnf(template string, args ...interface{}) { function Errorf (line 282) | func Errorf(template string, args ...interface{}) { function Fatalf (line 286) | func Fatalf(template string, args ...interface{}) { function Close (line 289) | func Close() error { function CleanupOldLogs (line 293) | func CleanupOldLogs(retentionDays int) error { function GetLogFileList (line 326) | func GetLogFileList(path string) ([]uint64, error) { function StreamLogToHTTP (line 373) | func StreamLogToHTTP(path string, timestamp uint64, writer io.Writer) er... function DeleteLog (line 431) | func DeleteLog(path string) error { FILE: internal/utils/shutdown/shutdown.go function Register (line 13) | func Register(fn func() error) { function Listen (line 17) | func Listen() { function All (line 34) | func All() { FILE: internal/utils/ua/ua.go function SetHeader (line 8) | func SetHeader(req *http.Request) { function Random (line 12) | func Random() string { FILE: internal/utils/utils.go function IsWritableDir (line 14) | func IsWritableDir(dir string) bool { function Contains (line 27) | func Contains(slice []string, item string) bool { function RemoveAllControlCharacters (line 35) | func RemoveAllControlCharacters(data *[]byte) { function IsDebug (line 47) | func IsDebug() bool { function IPToUint32 (line 53) | func IPToUint32(ip string) uint32 { function Uint32ToIP (line 76) | func Uint32ToIP(ip uint32) string { FILE: web/src/app/layout.tsx function RootLayout (line 6) | function RootLayout({ FILE: web/src/app/not-found.tsx function NotFound (line 6) | function NotFound() { FILE: web/src/app/page.tsx function Home (line 5) | function Home() { FILE: web/src/components/app/app-layout.tsx function AppLayout (line 11) | function AppLayout() { FILE: web/src/components/app/spa-app.tsx function SPAApp (line 6) | function SPAApp() { FILE: web/src/components/features/check/components/check-form.tsx type CheckFormProps (line 15) | interface CheckFormProps { function CheckForm (line 23) | function CheckForm({ FILE: web/src/components/features/check/components/check-list.tsx type CheckListProps (line 18) | interface CheckListProps { function CheckList (line 22) | function CheckList({ onEdit }: CheckListProps) { FILE: web/src/components/features/check/components/check-page.tsx function CheckPage (line 10) | function CheckPage() { FILE: web/src/components/features/check/components/form-sections/basic-config-section.tsx function BasicConfigSection (line 8) | function BasicConfigSection({ control }: { control: Control ... FILE: web/src/components/features/check/components/form-sections/extra-config-section.tsx function ExtraConfigSection (line 12) | function ExtraConfigSection({ control }: { control: Control }) { FILE: web/src/components/features/check/components/form-sections/notify-config.tsx function NotifyConfig (line 7) | function NotifyConfig({ control }: { control: Control }) { FILE: web/src/components/features/check/constants/index.ts constant CHECK_CONSTANTS (line 1) | const CHECK_CONSTANTS = { constant LOG_LEVELS (line 10) | const LOG_LEVELS = [ constant CHECK_STATUS_OPTIONS (line 17) | const CHECK_STATUS_OPTIONS = [ constant FORM_VALIDATION (line 24) | const FORM_VALIDATION = { constant UI_TEXT (line 32) | const UI_TEXT = { constant CRON_PRESETS (line 56) | const CRON_PRESETS = [ FILE: web/src/components/features/check/hooks/useCheckForm.ts type UseCheckFormProps (line 12) | interface UseCheckFormProps { function useCheckForm (line 19) | function useCheckForm({ FILE: web/src/components/features/check/utils/index.ts function createDefaultCheckData (line 4) | function createDefaultCheckData(): CheckRequest { function validateCheckForm (line 21) | function validateCheckForm(formData: CheckRequest): { isValid: boolean; ... function convertCheckResponseToRequest (line 51) | function convertCheckResponseToRequest(check: CheckResponse): CheckReque... FILE: web/src/components/features/home/dashboard.tsx function DashboardPage (line 6) | function DashboardPage() { FILE: web/src/components/features/login/login-form.tsx function LoginForm (line 19) | function LoginForm({ FILE: web/src/components/features/login/login-page.tsx function LoginPage (line 3) | function LoginPage() { FILE: web/src/components/features/notify/components/notify-form.tsx type NotifyFormProps (line 9) | interface NotifyFormProps { function NotifyForm (line 24) | function NotifyForm({ FILE: web/src/components/features/notify/components/notify-list.tsx type NotifyListProps (line 9) | interface NotifyListProps { function NotifyList (line 19) | function NotifyList({ FILE: web/src/components/features/notify/components/notify-page.tsx function NotifyPage (line 11) | function NotifyPage() { FILE: web/src/components/features/notify/hooks/useNotifyForm.ts constant DEFAULT_FORM_DATA (line 7) | const DEFAULT_FORM_DATA: NotifyRequest = { type UseNotifyFormProps (line 13) | interface UseNotifyFormProps { function useNotifyForm (line 17) | function useNotifyForm({ onSuccess }: UseNotifyFormProps) { FILE: web/src/components/features/notify/hooks/useNotifyOperations.ts function useNotifyOperations (line 7) | function useNotifyOperations() { FILE: web/src/components/features/profile/ProfileDesktopNavButton.tsx type ProfileDesktopNavButtonProps (line 4) | interface ProfileDesktopNavButtonProps { function ProfileDesktopNavButton (line 11) | function ProfileDesktopNavButton({ tabId, activeTab, onTabChange, childr... FILE: web/src/components/features/profile/ProfileDialog.tsx type ProfileDialogProps (line 19) | interface ProfileDialogProps { type FormData (line 24) | interface FormData { function ProfileDialog (line 31) | function ProfileDialog({ open, onOpenChange }: ProfileDialogProps) { FILE: web/src/components/features/profile/ProfileLayout.tsx type ProfileLayoutProps (line 5) | interface ProfileLayoutProps { function ProfileLayout (line 13) | function ProfileLayout({ FILE: web/src/components/features/profile/ProfileNavButton.tsx type ProfileNavButtonProps (line 4) | interface ProfileNavButtonProps { function ProfileNavButton (line 11) | function ProfileNavButton({ tabId, activeTab, onTabChange, children }: P... FILE: web/src/components/features/settings/SettingsActions.tsx type SettingsActionsProps (line 4) | interface SettingsActionsProps { function SettingsActions (line 10) | function SettingsActions({ onCancel, isMobile, hasChanges }: SettingsAct... FILE: web/src/components/features/settings/SettingsLayout.tsx type SettingsLayoutProps (line 4) | interface SettingsLayoutProps { function SettingsLayout (line 13) | function SettingsLayout({ FILE: web/src/components/features/settings/sections/NodeSettingsSection.tsx function NodeSettingsSection (line 17) | function NodeSettingsSection({ control }: { control: Control... FILE: web/src/components/features/settings/sections/NotifySettingsSection.tsx function NotifySettingsSection (line 6) | function NotifySettingsSection({ control }: { control: Control... FILE: web/src/components/features/settings/sections/fields/BooleanSettingField.tsx type BooleanSettingFieldProps (line 5) | interface BooleanSettingFieldProps extends BaseSettingProps { function BooleanSettingField (line 10) | function BooleanSettingField({ FILE: web/src/components/features/settings/sections/fields/MultiSelectSettingField.tsx type MultiSelectSettingFieldProps (line 5) | type MultiSelectSettingFieldProps = BaseSettingProps & { function MultiSelectSettingField (line 11) | function MultiSelectSettingField({ FILE: web/src/components/features/settings/sections/fields/NumberSettingField.tsx type NumberSettingFieldProps (line 5) | interface NumberSettingFieldProps extends BaseSettingProps { function NumberSettingField (line 11) | function NumberSettingField({ FILE: web/src/components/features/settings/sections/fields/SelectSettingField.tsx type SelectSettingFieldProps (line 5) | type SelectSettingFieldProps = BaseSettingProps & { function SelectSettingField (line 12) | function SelectSettingField({ FILE: web/src/components/features/settings/sections/fields/SettingCard.tsx type SettingCardProps (line 3) | type SettingCardProps = { function SettingCard (line 11) | function SettingCard({ title, description, action, actionAlignment = 'st... FILE: web/src/components/features/settings/sections/fields/TextSettingField.tsx type TextSettingFieldProps (line 5) | type TextSettingFieldProps = BaseSettingProps & { function TextSettingField (line 12) | function TextSettingField({ FILE: web/src/components/features/settings/sections/fields/types.ts type BaseSettingProps (line 3) | type BaseSettingProps = { FILE: web/src/components/features/settings/sections/index.ts type SectionComponent (line 9) | type SectionComponent = ComponentType<{ control: Control }> type SettingsSectionDefinition (line 11) | interface SettingsSectionDefinition { constant SETTINGS_SECTIONS (line 17) | const SETTINGS_SECTIONS: SettingsSectionDefinition[] = [ FILE: web/src/components/features/settings/settings.tsx type SettingsDialogProps (line 14) | interface SettingsDialogProps { function SettingsDialog (line 20) | function SettingsDialog({ open, onOpenChange }: SettingsDialogProps) { FILE: web/src/components/features/share/components/form-sections/alive-status-section.tsx type AliveStatusSectionProps (line 5) | interface AliveStatusSectionProps { constant ALIVE_STATUS_FLAGS (line 11) | const ALIVE_STATUS_FLAGS = [ function AliveStatusSection (line 18) | function AliveStatusSection({ control, fieldName }: AliveStatusSectionPr... FILE: web/src/components/features/share/components/form-sections/basic-info-section.tsx type BasicInfoSectionProps (line 8) | interface BasicInfoSectionProps { function BasicInfoSection (line 12) | function BasicInfoSection({ control }: BasicInfoSectionProps) { FILE: web/src/components/features/share/components/form-sections/config-section.tsx type ConfigSectionProps (line 9) | interface ConfigSectionProps { function ConfigSection (line 13) | function ConfigSection({ control }: ConfigSectionProps) { FILE: web/src/components/features/share/components/form-sections/country-section.tsx type CountrySectionProps (line 12) | interface CountrySectionProps { constant POPULAR_COUNTRIES (line 17) | const POPULAR_COUNTRIES = [ constant ALL_COUNTRIES (line 30) | const ALL_COUNTRIES = [ function CountrySection (line 271) | function CountrySection({ control, fieldName }: CountrySectionProps) { FILE: web/src/components/features/share/components/form-sections/filter-section.tsx function FilterSection (line 6) | function FilterSection({ control }: { control: Control { function fallbackCopyToClipboard (line 46) | function fallbackCopyToClipboard(text: string): boolean { function createDefaultShareData (line 75) | function createDefaultShareData(): ShareRequest { function validateCountryCodes (line 104) | function validateCountryCodes(codes: string): string[] { function formatAccessCount (line 115) | function formatAccessCount(current: number, max: number): string { function formatExpiresTime (line 122) | function formatExpiresTime(expires: number): string { function isCustomConfig (line 137) | function isCustomConfig(config: string, availableRules: Array<{ value: s... function safeParseInt (line 144) | function safeParseInt(value: string, defaultValue = 0): number { function safeParseFloat (line 152) | function safeParseFloat(value: string, defaultValue = 0): number { FILE: web/src/components/features/storage/storage.tsx function StoragePage (line 5) | function StoragePage() { FILE: web/src/components/features/sub/components/batch-sub-form.tsx type BatchSubFormProps (line 13) | interface BatchSubFormProps { type BatchFormData (line 18) | interface BatchFormData extends SubRequest { function BatchSubForm (line 22) | function BatchSubForm({ isOpen, onClose }: BatchSubFormProps) { FILE: web/src/components/features/sub/components/form-sections/basic-info-section.tsx function BasicInfoSection (line 10) | function BasicInfoSection({ control }: { control: Control }) { FILE: web/src/components/features/sub/components/form-sections/config-section.tsx function ConfigSection (line 7) | function ConfigSection({ control }: { control: Control }) { FILE: web/src/components/features/sub/components/form-sections/protocol-filter-section.tsx function ProtocolFilterSection (line 8) | function ProtocolFilterSection({ control }: { control: Control) { FILE: web/src/components/layout/nav-documents.tsx function NavDocuments (line 28) | function NavDocuments({ FILE: web/src/components/layout/nav-main.tsx function NavMain (line 14) | function NavMain({ FILE: web/src/components/layout/nav-secondary.tsx function NavSecondary (line 16) | function NavSecondary({ FILE: web/src/components/layout/nav-user.tsx function NavUser (line 36) | function NavUser() { FILE: web/src/components/layout/site-header.tsx function SiteHeader (line 5) | function SiteHeader() { FILE: web/src/components/pages/not-found.tsx type NotFoundProps (line 8) | interface NotFoundProps { function NotFound (line 12) | function NotFound({ path }: NotFoundProps) { FILE: web/src/components/providers/alert-provider.tsx type AlertOptions (line 15) | interface AlertOptions { type AlertContextType (line 23) | interface AlertContextType { function useAlert (line 29) | function useAlert() { type AlertState (line 37) | interface AlertState { function AlertProvider (line 47) | function AlertProvider({ children }: { children: React.ReactNode }) { FILE: web/src/components/providers/auth-provider.tsx type AuthState (line 9) | interface AuthState { type AuthContextType (line 15) | interface AuthContextType extends AuthState { function useAuth (line 23) | function useAuth() { function AuthProvider (line 31) | function AuthProvider({ children }: { children: React.ReactNode }) { FILE: web/src/components/providers/query-provider.tsx function QueryProvider (line 6) | function QueryProvider({ children }: { children: React.ReactNode }) { FILE: web/src/components/providers/theme-provider.tsx function ThemeProvider (line 6) | function ThemeProvider({ FILE: web/src/components/shared/dynamic-config-form.tsx type DynamicConfigFormProps (line 8) | interface DynamicConfigFormProps { function DynamicConfigForm (line 16) | function DynamicConfigForm({ FILE: web/src/components/shared/status-badge.tsx type BadgeVariant (line 4) | type BadgeVariant = ComponentProps["variant"] type StatusConfig (line 6) | interface StatusConfig { constant STATUS_CONFIG (line 12) | const STATUS_CONFIG: Record = { function StatusBadge (line 26) | function StatusBadge({ status }: { status: string }) { FILE: web/src/components/shared/subscription-section.tsx type SubscriptionSectionProps (line 8) | interface SubscriptionSectionProps { function SubscriptionSection (line 14) | function SubscriptionSection({ control, subIdField, subIdExcludeField }:... FILE: web/src/components/ui/accordion.tsx function Accordion (line 9) | function Accordion({ function AccordionItem (line 15) | function AccordionItem({ function AccordionTrigger (line 28) | function AccordionTrigger({ function AccordionContent (line 50) | function AccordionContent({ FILE: web/src/components/ui/alert-dialog.tsx function AlertDialog (line 9) | function AlertDialog({ function AlertDialogTrigger (line 15) | function AlertDialogTrigger({ function AlertDialogPortal (line 23) | function AlertDialogPortal({ function AlertDialogOverlay (line 31) | function AlertDialogOverlay({ function AlertDialogContent (line 47) | function AlertDialogContent({ function AlertDialogHeader (line 66) | function AlertDialogHeader({ function AlertDialogFooter (line 79) | function AlertDialogFooter({ function AlertDialogTitle (line 95) | function AlertDialogTitle({ function AlertDialogDescription (line 108) | function AlertDialogDescription({ function AlertDialogAction (line 121) | function AlertDialogAction({ function AlertDialogCancel (line 133) | function AlertDialogCancel({ FILE: web/src/components/ui/avatar.tsx function Avatar (line 8) | function Avatar({ function AvatarImage (line 24) | function AvatarImage({ function AvatarFallback (line 37) | function AvatarFallback({ FILE: web/src/components/ui/badge.tsx function Badge (line 28) | function Badge({ FILE: web/src/components/ui/breadcrumb.tsx function Breadcrumb (line 7) | function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { function BreadcrumbList (line 11) | function BreadcrumbList({ className, ...props }: React.ComponentProps<"o... function BreadcrumbItem (line 24) | function BreadcrumbItem({ className, ...props }: React.ComponentProps<"l... function BreadcrumbLink (line 34) | function BreadcrumbLink({ function BreadcrumbPage (line 52) | function BreadcrumbPage({ className, ...props }: React.ComponentProps<"s... function BreadcrumbSeparator (line 65) | function BreadcrumbSeparator({ function BreadcrumbEllipsis (line 83) | function BreadcrumbEllipsis({ FILE: web/src/components/ui/button.tsx function Button (line 38) | function Button({ FILE: web/src/components/ui/calendar.tsx function Calendar (line 14) | function Calendar({ function CalendarDayButton (line 175) | function CalendarDayButton({ FILE: web/src/components/ui/card.tsx function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) { function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) { function CardTitle (line 31) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) { function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"... function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) { function CardContent (line 64) | function CardContent({ className, ...props }: React.ComponentProps<"div"... function CardFooter (line 74) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) { FILE: web/src/components/ui/chart.tsx constant THEMES (line 9) | const THEMES = { light: "", dark: ".dark" } as const type ChartConfig (line 11) | type ChartConfig = { type ChartContextProps (line 21) | type ChartContextProps = { function useChart (line 27) | function useChart() { function ChartContainer (line 37) | function ChartContainer({ function ChartTooltipContent (line 107) | function ChartTooltipContent({ function ChartLegendContent (line 253) | function ChartLegendContent({ function getPayloadConfigFromPayload (line 308) | function getPayloadConfigFromPayload( FILE: web/src/components/ui/checkbox.tsx function Checkbox (line 9) | function Checkbox({ FILE: web/src/components/ui/dialog.tsx function Dialog (line 9) | function Dialog({ function DialogTrigger (line 15) | function DialogTrigger({ function DialogPortal (line 21) | function DialogPortal({ function DialogClose (line 27) | function DialogClose({ function DialogOverlay (line 33) | function DialogOverlay({ function DialogContent (line 49) | function DialogContent({ function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div... function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div... function DialogTitle (line 106) | function DialogTitle({ function DialogDescription (line 119) | function DialogDescription({ FILE: web/src/components/ui/drawer.tsx function Drawer (line 8) | function Drawer({ function DrawerTrigger (line 14) | function DrawerTrigger({ function DrawerPortal (line 20) | function DrawerPortal({ function DrawerClose (line 26) | function DrawerClose({ function DrawerOverlay (line 32) | function DrawerOverlay({ function DrawerContent (line 48) | function DrawerContent({ function DrawerHeader (line 75) | function DrawerHeader({ className, ...props }: React.ComponentProps<"div... function DrawerFooter (line 88) | function DrawerFooter({ className, ...props }: React.ComponentProps<"div... function DrawerTitle (line 98) | function DrawerTitle({ function DrawerDescription (line 111) | function DrawerDescription({ FILE: web/src/components/ui/dropdown-menu.tsx function DropdownMenu (line 9) | function DropdownMenu({ function DropdownMenuPortal (line 15) | function DropdownMenuPortal({ function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({ function DropdownMenuContent (line 34) | function DropdownMenuContent({ function DropdownMenuGroup (line 54) | function DropdownMenuGroup({ function DropdownMenuItem (line 62) | function DropdownMenuItem({ function DropdownMenuCheckboxItem (line 85) | function DropdownMenuCheckboxItem({ function DropdownMenuRadioGroup (line 111) | function DropdownMenuRadioGroup({ function DropdownMenuRadioItem (line 122) | function DropdownMenuRadioItem({ function DropdownMenuLabel (line 146) | function DropdownMenuLabel({ function DropdownMenuSeparator (line 166) | function DropdownMenuSeparator({ function DropdownMenuShortcut (line 179) | function DropdownMenuShortcut({ function DropdownMenuSub (line 195) | function DropdownMenuSub({ function DropdownMenuSubTrigger (line 201) | function DropdownMenuSubTrigger({ function DropdownMenuSubContent (line 225) | function DropdownMenuSubContent({ FILE: web/src/components/ui/hover-card.tsx function HoverCard (line 8) | function HoverCard({ function HoverCardTrigger (line 14) | function HoverCardTrigger({ function HoverCardContent (line 22) | function HoverCardContent({ FILE: web/src/components/ui/input.tsx function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu... FILE: web/src/components/ui/label.tsx function Label (line 8) | function Label({ FILE: web/src/components/ui/loading.tsx type LoadingProps (line 5) | interface LoadingProps { function Loading (line 25) | function Loading({ function InlineLoading (line 51) | function InlineLoading({ message = "加载中...", size = 'sm' as const }) { function PageLoading (line 62) | function PageLoading({ message = "页面加载中..." }) { function Spinner (line 73) | function Spinner({ size = 'md', className = "" }: { size?: 'sm' | 'md' |... FILE: web/src/components/ui/mode-toggle.tsx function ModeToggle (line 15) | function ModeToggle() { FILE: web/src/components/ui/popover.tsx function Popover (line 8) | function Popover({ function PopoverTrigger (line 14) | function PopoverTrigger({ function PopoverContent (line 20) | function PopoverContent({ function PopoverAnchor (line 42) | function PopoverAnchor({ FILE: web/src/components/ui/select.tsx function Select (line 9) | function Select({ function SelectGroup (line 15) | function SelectGroup({ function SelectValue (line 21) | function SelectValue({ function SelectTrigger (line 27) | function SelectTrigger({ function SelectContent (line 53) | function SelectContent({ function SelectLabel (line 88) | function SelectLabel({ function SelectItem (line 101) | function SelectItem({ function SelectSeparator (line 125) | function SelectSeparator({ function SelectScrollUpButton (line 138) | function SelectScrollUpButton({ function SelectScrollDownButton (line 156) | function SelectScrollDownButton({ FILE: web/src/components/ui/separator.tsx function Separator (line 8) | function Separator({ FILE: web/src/components/ui/sheet.tsx function Sheet (line 9) | function Sheet({ ...props }: React.ComponentProps) { function SidebarMenuItem (line 465) | function SidebarMenuItem({ className, ...props }: React.ComponentProps<"... function SidebarMenuButton (line 498) | function SidebarMenuButton({ function SidebarMenuAction (line 548) | function SidebarMenuAction({ function SidebarMenuBadge (line 580) | function SidebarMenuBadge({ function SidebarMenuSkeleton (line 602) | function SidebarMenuSkeleton({ function SidebarMenuSub (line 640) | function SidebarMenuSub({ className, ...props }: React.ComponentProps<"u... function SidebarMenuSubItem (line 655) | function SidebarMenuSubItem({ function SidebarMenuSubButton (line 669) | function SidebarMenuSubButton({ FILE: web/src/components/ui/skeleton.tsx function Skeleton (line 3) | function Skeleton({ className, ...props }: React.ComponentProps<"div">) { FILE: web/src/components/ui/switch.tsx function Switch (line 8) | function Switch({ FILE: web/src/components/ui/table.tsx function Table (line 7) | function Table({ className, ...props }: React.ComponentProps<"table">) { function TableHeader (line 22) | function TableHeader({ className, ...props }: React.ComponentProps<"thea... function TableBody (line 32) | function TableBody({ className, ...props }: React.ComponentProps<"tbody"... function TableFooter (line 42) | function TableFooter({ className, ...props }: React.ComponentProps<"tfoo... function TableRow (line 55) | function TableRow({ className, ...props }: React.ComponentProps<"tr">) { function TableHead (line 68) | function TableHead({ className, ...props }: React.ComponentProps<"th">) { function TableCell (line 81) | function TableCell({ className, ...props }: React.ComponentProps<"td">) { function TableCaption (line 94) | function TableCaption({ FILE: web/src/components/ui/tabs.tsx function Tabs (line 8) | function Tabs({ function TabsList (line 21) | function TabsList({ function TabsTrigger (line 37) | function TabsTrigger({ function TabsContent (line 53) | function TabsContent({ FILE: web/src/components/ui/textarea.tsx type TextareaProps (line 5) | type TextareaProps = React.TextareaHTMLAttributes FILE: web/src/components/ui/toggle-group.tsx function ToggleGroup (line 17) | function ToggleGroup({ function ToggleGroupItem (line 43) | function ToggleGroupItem({ FILE: web/src/components/ui/toggle.tsx function Toggle (line 31) | function Toggle({ FILE: web/src/components/ui/tooltip.tsx function TooltipProvider (line 8) | function TooltipProvider({ function Tooltip (line 21) | function Tooltip({ function TooltipTrigger (line 31) | function TooltipTrigger({ function TooltipContent (line 37) | function TooltipContent({ FILE: web/src/constant/protocols.ts constant PROTOCOL_OPTIONS (line 1) | const PROTOCOL_OPTIONS = [ FILE: web/src/constant/settings-keys.ts constant PROXY_ENABLE (line 1) | const PROXY_ENABLE = "proxy_enable" constant PROXY_URL (line 2) | const PROXY_URL = "proxy_url" constant LOG_RETENTION_DAYS (line 4) | const LOG_RETENTION_DAYS = "log_retention_days" constant SUBCONV_URL (line 6) | const SUBCONV_URL = "subconv_url" constant SUBCONV_URL_PROXY (line 7) | const SUBCONV_URL_PROXY = "subconv_url_proxy" constant SUB_DISABLE_AUTO (line 9) | const SUB_DISABLE_AUTO = "sub_disable_auto" constant NODE_POOL_SIZE (line 11) | const NODE_POOL_SIZE = "node_pool_size" constant NODE_TEST_URL (line 12) | const NODE_TEST_URL = "node_test_url" constant NODE_TEST_TIMEOUT (line 13) | const NODE_TEST_TIMEOUT = "node_test_timeout" constant NODE_PROTOCOL_FILTER_ENABLE (line 15) | const NODE_PROTOCOL_FILTER_ENABLE = "node_protocol_filter_enable" constant NODE_PROTOCOL_FILTER_MODE (line 16) | const NODE_PROTOCOL_FILTER_MODE = "node_protocol_filter_mode" constant NODE_PROTOCOL_FILTER (line 17) | const NODE_PROTOCOL_FILTER = "node_protocol_filter" constant TASK_MAX_THREAD (line 19) | const TASK_MAX_THREAD = "task_max_thread" constant TASK_MAX_TIMEOUT (line 20) | const TASK_MAX_TIMEOUT = "task_max_timeout" constant TASK_MAX_RETRY (line 21) | const TASK_MAX_RETRY = "task_max_retry" constant NOTIFY_OPERATION (line 23) | const NOTIFY_OPERATION = "notify_operation" constant NOTIFY_ID (line 24) | const NOTIFY_ID = "notify_id" constant BOOLEAN_SETTING_KEYS (line 26) | const BOOLEAN_SETTING_KEYS = new Set([ constant NUMBER_SETTING_KEYS (line 33) | const NUMBER_SETTING_KEYS = new Set([ constant MULTI_SELECT_SETTING_KEYS (line 45) | const MULTI_SELECT_SETTING_KEYS = new Set([ FILE: web/src/lib/api/client.ts constant DEFAULT_REQUEST_HEADERS (line 5) | const DEFAULT_REQUEST_HEADERS: Record = {} class ApiError (line 7) | class ApiError extends Error { method constructor (line 8) | constructor( class ApiClient (line 17) | class ApiClient { method request (line 18) | private async request( method get (line 65) | async get(endpoint: string, requiresAuth: boolean = true): Promise<... method post (line 69) | async post(endpoint: string, data?: unknown, requiresAuth: boolean ... method delete (line 80) | async delete(endpoint: string, requiresAuth: boolean = true): Promi... method put (line 84) | async put(endpoint: string, data?: unknown, requiresAuth: boolean =... method login (line 98) | async login(username: string, password: string): Promise { method logout (line 107) | async logout(): Promise { method getUserInfo (line 111) | async getUserInfo(): Promise { method changePassword (line 116) | async changePassword(data: ChangePasswordRequest): Promise { method updateUsername (line 120) | async updateUsername(data: UpdateUserInfoRequest): Promise { method getSub (line 124) | async getSub(id?: number): Promise { method getChecks (line 129) | async getChecks(id?: number): Promise { method getCheckTypes (line 134) | async getCheckTypes(): Promise> { method refreshSubscription (line 138) | async refreshSubscription(id: number): Promise { method runCheck (line 141) | async runCheck(id: number): Promise { method createSubscription (line 144) | async createSubscription(data: SubRequest): Promise { method batchCreateSubscriptions (line 148) | async batchCreateSubscriptions(data: SubRequest[]): Promise { method createCheck (line 159) | async createCheck(data: CheckRequest): Promise { method updateCheck (line 163) | async updateCheck(id: number, data: CheckRequest): Promise { method deleteCheck (line 167) | async deleteCheck(id: number): Promise { method getSubNameAndID (line 170) | async getSubNameAndID(): Promise { method getNotifyChannels (line 174) | async getNotifyChannels(): Promise { method getNotifyChannelConfig (line 178) | async getNotifyChannelConfig(channel?: string): Promise { method createNotify (line 189) | async createNotify(data: NotifyRequest): Promise { method updateNotify (line 193) | async updateNotify(id: number, data: NotifyRequest): Promise { method testNotify (line 200) | async testNotify(data: NotifyRequest): Promise { method getNotifyTemplates (line 203) | async getNotifyTemplates(): Promise { method updateNotifyTemplate (line 207) | async updateNotifyTemplate(data: NotifyTemplate): Promise { method getShares (line 211) | async getShares(id?: number): Promise { method createShare (line 216) | async createShare(data: ShareRequest): Promise { method updateShare (line 220) | async updateShare(id: number, data: ShareRequest): Promise { method deleteShare (line 224) | async deleteShare(id: number): Promise { method getSettings (line 227) | async getSettings(): Promise { method updateSettings (line 231) | async updateSettings(data: Setting[]): Promise { method getLatestUpdates (line 235) | async getLatestUpdates(): Promise { method updateComponent (line 240) | async updateComponent(component: UpdateComponent): Promise { method getSystemVersion (line 244) | async getSystemVersion(): Promise { FILE: web/src/lib/api/token-manager.ts constant TOKEN_KEYS (line 3) | const TOKEN_KEYS = { constant LEGACY_KEYS (line 8) | const LEGACY_KEYS = ['refresh_token', 'refresh_expires_at'] as const class TokenManager (line 10) | class TokenManager { method isServer (line 11) | static isServer() { method getTokens (line 15) | static getTokens() { method setTokens (line 27) | static setTokens(tokens: LoginResponse) { method clearTokens (line 34) | static clearTokens() { method isExpired (line 40) | static isExpired(expiresAt: string): boolean { method getValidToken (line 45) | static async getValidToken(): Promise { FILE: web/src/lib/config/config.ts constant API_PATH (line 1) | const API_PATH = { constant APP_CONFIG (line 26) | const APP_CONFIG = { constant APP_ROUTES (line 33) | const APP_ROUTES = { FILE: web/src/lib/config/version.ts constant APP_VERSION (line 1) | const APP_VERSION = process.env.NEXT_PUBLIC_APP_VERSION || 'unknown'; FILE: web/src/lib/hooks/use-form-update.ts function useFormUpdate (line 3) | function useFormUpdate( FILE: web/src/lib/hooks/use-form.ts type FormState (line 4) | interface FormState { type FormActions (line 12) | interface FormActions { type FormConfig (line 23) | interface FormConfig { function useForm (line 29) | function useForm>( FILE: web/src/lib/hooks/use-mobile.ts constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768 function useIsMobile (line 5) | function useIsMobile() { FILE: web/src/lib/hooks/useOverflowDetection.ts type UseOverflowDetectionReturn (line 3) | interface UseOverflowDetectionReturn { function useOverflowDetection (line 10) | function useOverflowDetection(): Us... FILE: web/src/lib/queries/check-queries.ts function useChecks (line 13) | function useChecks(id?: number) { function useCheckTypes (line 22) | function useCheckTypes() { function useCreateCheck (line 31) | function useCreateCheck() { function useUpdateCheck (line 57) | function useUpdateCheck() { function useDeleteCheck (line 86) | function useDeleteCheck() { FILE: web/src/lib/queries/setting-queries.ts function useSettings (line 10) | function useSettings() { function useUpdateSettings (line 19) | function useUpdateSettings() { FILE: web/src/lib/queries/share-queries.ts function useShares (line 12) | function useShares() { function useCreateShare (line 21) | function useCreateShare() { function useUpdateShare (line 47) | function useUpdateShare() { function useDeleteShare (line 76) | function useDeleteShare() { FILE: web/src/lib/queries/sub-queries.ts function useSubs (line 12) | function useSubs() { function useCreateSub (line 21) | function useCreateSub() { function useUpdateSub (line 47) | function useUpdateSub() { function useDeleteSub (line 76) | function useDeleteSub() { function useRefreshSub (line 102) | function useRefreshSub() { function useBatchCreateSub (line 126) | function useBatchCreateSub() { FILE: web/src/router/core/context.tsx type Route (line 5) | interface Route { type RouteParams (line 14) | interface RouteParams { type QueryParams (line 18) | interface QueryParams { type NavigateOptions (line 22) | interface NavigateOptions { type RouterContextType (line 27) | interface RouterContextType { function useRouter (line 37) | function useRouter() { FILE: web/src/router/core/outlet.tsx type RouterOutletProps (line 9) | interface RouterOutletProps { function RouterOutlet (line 13) | function RouterOutlet({ fallback: Fallback }: RouterOutletProps) { FILE: web/src/router/core/router.tsx function parseRoute (line 7) | function parseRoute(hash: string): { path: string; params: RouteParams; ... function buildRoute (line 35) | function buildRoute(path: string, query?: QueryParams): string { function RouterProvider (line 53) | function RouterProvider({ children }: { children: ReactNode }) { FILE: web/src/router/hooks/use-navigation.tsx function useNavigation (line 5) | function useNavigation() { FILE: web/src/router/hooks/use-route-preloader.tsx function useRoutePreloader (line 9) | function useRoutePreloader() { function useLinkPreloader (line 92) | function useLinkPreloader() { function useSmartPreloader (line 120) | function useSmartPreloader() { FILE: web/src/router/hooks/use-route-title.tsx function useRouteTitle (line 7) | function useRouteTitle() { FILE: web/src/types/api.ts type ApiResponse (line 1) | interface ApiResponse { FILE: web/src/types/auth.ts type LoginRequest (line 8) | interface LoginRequest { type LoginResponse (line 16) | interface LoginResponse { type UserInfo (line 24) | interface UserInfo { type ChangePasswordRequest (line 33) | interface ChangePasswordRequest { type UpdateUserInfoRequest (line 42) | interface UpdateUserInfoRequest { FILE: web/src/types/check.ts type CheckRequest (line 1) | interface CheckRequest { type CheckResponse (line 7) | interface CheckResponse { type CheckResult (line 17) | interface CheckResult { type CheckTask (line 24) | interface CheckTask { FILE: web/src/types/common.ts type BaseEntity (line 8) | interface BaseEntity { type PaginationParams (line 17) | interface PaginationParams { type PaginatedResponse (line 27) | interface PaginatedResponse { type DynamicConfigItem (line 38) | interface DynamicConfigItem { type ConfigValue (line 51) | type ConfigValue = string | number | boolean type DynamicConfig (line 56) | interface DynamicConfig { type KeyValue (line 60) | interface KeyValue { FILE: web/src/types/notify.ts type NotifyRequest (line 10) | interface NotifyRequest { type NotifyResponse (line 19) | interface NotifyResponse { type NotifyTemplate (line 29) | interface NotifyTemplate { type NotifyChannel (line 41) | type NotifyChannel = string type NotifyChannelConfigResponse (line 46) | interface NotifyChannelConfigResponse { FILE: web/src/types/setting.ts type Setting (line 2) | interface Setting { type FormValue (line 7) | type FormValue = string | number | boolean | string[] type FormValues (line 9) | interface FormValues { FILE: web/src/types/share.ts type GenConfig (line 1) | interface GenConfig { type ShareRequest (line 8) | interface ShareRequest { type ShareResponse (line 17) | interface ShareResponse { type ShareFilter (line 28) | interface ShareFilter { FILE: web/src/types/sub.ts type SubConfig (line 1) | interface SubConfig { type SubRequest (line 10) | interface SubRequest { type SubResult (line 19) | interface SubResult { type SubNodeInfo (line 28) | interface SubNodeInfo { type SubResponse (line 36) | interface SubResponse { type SubNameAndID (line 50) | interface SubNameAndID { FILE: web/src/types/update.ts type LatestInfo (line 5) | interface LatestInfo { type UpdateResponse (line 14) | interface UpdateResponse { type UpdateComponent (line 18) | type UpdateComponent = 'bestsub' type SystemVersion (line 20) | interface SystemVersion { FILE: web/src/utils/cron.ts function getNextCronRunTime (line 10) | function getNextCronRunTime(cronExpr: string, enabled: boolean): string ... FILE: web/src/utils/format.ts function cn (line 11) | function cn(...inputs: ClassValue[]) { function formatDuration (line 18) | function formatDuration(milliseconds: number): string { function formatLastRunTime (line 35) | function formatLastRunTime(lastRun: string | undefined): string { function formatBooleanText (line 60) | function formatBooleanText(value: boolean): string { FILE: web/src/utils/time.ts function isZeroTime (line 8) | function isZeroTime(timeString: string | undefined | null): boolean { function formatTime (line 24) | function formatTime( function formatRelativeTime (line 44) | function formatRelativeTime(timeString: string | undefined | null): stri... FILE: web/src/utils/url.ts function getApiBaseUrl (line 8) | function getApiBaseUrl(): string { function buildApiUrl (line 24) | function buildApiUrl(endpoint: string): string { FILE: web/src/utils/validation.ts function validateTimeout (line 8) | function validateTimeout(value: string | number): number { function validateUrl (line 18) | function validateUrl(url: string): boolean { function validateCronExpr (line 31) | function validateCronExpr(cron: string): boolean {