account

package
v0.0.0-...-34846eb Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2025 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AccountProviderSet = wire.NewSet(NewRedisManager)
View Source
var ErrAccountNotFoundInContext = errors.New("account not found in context")
View Source
var (
	ErrNoAvailableAccount = errors.New("no available account in redis")
)

Functions

func NewContextWithAccount

func NewContextWithAccount(ctx context.Context, acc *Account) context.Context

NewContextWithAccount 将一个 Account 对象注入到父 context 中。

Types

type Account

type Account struct {
	Username         string        `json:"username"`
	CookieJSON       string        `json:"cookie_json"`
	UserAgent        string        `json:"user_agent"`
	Status           AccountStatus `json:"status"`
	LoginURL         string        `json:"login_url"`
	BaseURL          string        `json:"base_url"`
	Timeout          int           `json:"timeout"`
	Message          string        `json:"message"`
	LastUsedAt       int64         `json:"last_used_at"`
	RestUntil        int64         `json:"rest_until,omitempty"`
	RestrictedQueues []string      `json:"restricted_queues,omitempty"`
}

Account 是账号实体,包含了认证、状态和元数据信息。

func FromContext

func FromContext(ctx context.Context) (*Account, error)

FromContext 从 context 中安全地提取唯一的 Account 对象。

func (*Account) FormatCookieHeader

func (a *Account) FormatCookieHeader() (string, error)

FormatCookieHeader 将存储的CookieJSON解析并格式化为标准的HTTP Cookie头字符串。 例如:"name1=value1; name2=value2"

func (*Account) FormatCookiesForHeadless

func (a *Account) FormatCookiesForHeadless() ([]*network.CookieParam, error)

FormatCookiesForHeadless 将存储的CookieJSON解析并格式化为 Headless 浏览器(chromedp)所需的格式。

type AccountStatus

type AccountStatus string

AccountStatus 定义了账号可能存在的几种状态。

const (
	// StatusHealthy 表示账号健康,随时可以被调度使用。
	StatusHealthy AccountStatus = "healthy"
	// StatusWorking 表示账号当前正在被一个Worker使用。
	StatusWorking AccountStatus = "working"
	// StatusResting 表示账号处于强制休息状态,暂时不可用。
	StatusResting AccountStatus = "resting"
	// StatusExpired 表示账号的Cookie已失效,需要重新登录。
	StatusExpired AccountStatus = "expired"
	// StatusRequiresManualIntervention 表示账号登录需要人工介入(如输入验证码)。
	StatusRequiresManualIntervention AccountStatus = "requires_manual_intervention"
	// StatusBanned 表示账号已被平台封禁。
	StatusBanned AccountStatus = "banned"
)

type Manager

type Manager interface {
	AcquireAccount(ctx context.Context) (*Account, error)
	AcquireAccountFor(ctx context.Context, baseURL string) (*Account, error)
	ReleaseAccount(ctx context.Context, username string, newStatus AccountStatus, message ...string) error
	RestAccount(ctx context.Context, username string, restDuration time.Duration) error
	UpdateAccount(ctx context.Context, account *Account) error
	GetAllAccounts(ctx context.Context) ([]*Account, error)
	GetAccount(ctx context.Context, username string) (*Account, error)
	AddRestrictedQueue(ctx context.Context, username, queueName string) error
	IsRestricted(ctx context.Context, username, queueName string) (bool, error)
	GetRestrictedQueues(ctx context.Context, username string) ([]string, error)
	UpdateAccountStatus(ctx context.Context, username string, status AccountStatus) error
}

ResourceManager 是唯一的资源管理器接口

func NewRedisManager

func NewRedisManager(rdb redis.Cmdable, logger log.Logger) (Manager, error)

NewRedisManager 是 redisManager 的构造函数。

Jump to

Keyboard shortcuts

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