browserutils / kooky

Go code to read cookies from browser cookie stores.
MIT License
204 stars 41 forks source link

Iterator Preview #81

Open srlehn opened 3 months ago

srlehn commented 3 months ago

Iterator Preview

Set the env var GOEXPERIMENT=rangefunc for enabling for ranges over functions.

Please test and comment!

srlehn commented 2 months ago

With iterators this PR provides the following API:

func TraverseCookies(ctx context.Context, filters ...Filter) CookieSeq
func AllCookies(filters ...Filter) Cookies
func ReadCookies(ctx context.Context, filters ...Filter) (Cookies, error)

type BrowserInfo interface {...}
type Cookie struct {..., Browser   BrowserInfo}
type Cookies []*Cookie
func (c Cookies) Seq() CookieSeq
type CookieSeq iter.Seq2[*Cookie, error]
func MergeCookieSeqs(seqs ...CookieSeq) CookieSeq
func (s CookieSeq) Merge(seqs ...CookieSeq) CookieSeq
func (s CookieSeq) Chan(ctx context.Context) <-chan *Cookie
func (s CookieSeq) Collect(ctx context.Context) Cookies
func (s CookieSeq) Export(ctx context.Context, w io.Writer)
func (s CookieSeq) Filter(ctx context.Context, filters ...Filter) CookieSeq
func (s CookieSeq) FirstMatch(ctx context.Context, filters ...Filter) *Cookie
func (s CookieSeq) OnlyCookies() CookieSeq
func (s CookieSeq) ReadAllCookies(ctx context.Context) (Cookies, error)

func FilterCookies[S CookieSeq | ~[]*Cookie | ~[]*http.Cookie](ctx context.Context, cookies S, filters ...Filter) CookieSeq
func FilterCookie[T Cookie | http.Cookie](ctx context.Context, cookie *T, filters ...Filter) bool

func ExportCookies[S CookieSeq | []*Cookie | []*http.Cookie](ctx context.Context, w io.Writer, cookies S)

func RegisterFinder(browser string, finder CookieStoreFinder)
type CookieStore interface {BrowserInfo, ...}
func FindAllCookieStores(ctx context.Context) []CookieStore
type CookieStoreFinder interface {FindCookieStores() CookieStoreSeq}
type CookieStoreSeq iter.Seq2[CookieStore, error]
func TraverseCookieStores(ctx context.Context) CookieStoreSeq
func (s CookieStoreSeq) AllCookieStores(ctx context.Context) []CookieStore
func (s CookieStoreSeq) TraverseCookies(ctx context.Context, filters ...Filter) CookieSeq