30 lines
1.1 KiB
Go
30 lines
1.1 KiB
Go
package domain
|
|
|
|
import "context"
|
|
|
|
// Repository persists accounts + oauth states.
|
|
type Repository interface {
|
|
Insert(ctx context.Context, a *Account) error
|
|
Update(ctx context.Context, a *Account) error
|
|
FindByID(ctx context.Context, id string) (*Account, error)
|
|
// FindByOwnerAndThreadsUser returns existing binding for reconnect upsert.
|
|
FindByOwnerAndThreadsUser(ctx context.Context, ownerUID int64, threadsUserID string) (*Account, error)
|
|
ListByOwner(ctx context.Context, ownerUID int64) ([]*Account, error)
|
|
Delete(ctx context.Context, id string) error
|
|
|
|
SaveState(ctx context.Context, st *OAuthState) error
|
|
TakeState(ctx context.Context, state string) (*OAuthState, error) // consume once
|
|
}
|
|
|
|
// Provider abstracts Meta / fake OAuth.
|
|
type Provider interface {
|
|
// Name for logs
|
|
Name() string
|
|
// AuthorizeURL builds browser redirect URL for given state.
|
|
AuthorizeURL(state, redirectURI string) string
|
|
// ExchangeCode trades code for tokens + profile.
|
|
ExchangeCode(ctx context.Context, code, redirectURI string) (*TokenPair, error)
|
|
// Refresh extends session.
|
|
Refresh(ctx context.Context, refreshToken string) (*TokenPair, error)
|
|
}
|