func New(options ...*Options) (runner *Runner) {
	opts := &Options{
		FilterRegex:       "",
		IncludeSubdomains: false,
		SourcesToExclude:  make([]string, 0),
		SourcesToUse:      scraping.SourcesList,
	}
	if len(options) > 0 {
		opts = options[0]
	}
	runner = &Runner{
		Options: opts,
	}
	if opts.FilterRegex != "" {
		runner.FilterRegex = regexp.MustCompile(opts.FilterRegex)
	}
	runner.Passive = passive.New(opts.SourcesToUse, opts.SourcesToExclude)
	return
}
New creates a new Runner struct instance by parsing
the configuration options, configuring sources, etc.
package sigurlfind3r
import (
	"context"
	"fmt"
	"net/url"
	"regexp"
	"github.com/enenumxela/urlx/pkg/urlx"
	"github.com/signedsecurity/sigurlfind3r/pkg/sigurlfind3r/passive"
	"github.com/signedsecurity/sigurlfind3r/pkg/sigurlfind3r/scraping"
	"github.com/signedsecurity/sigurlfind3r/pkg/sigurlfind3r/session"
)
type Runner struct {
	FilterRegex *regexp.Regexp
	Passive     *passive.Agent
	Options     *Options
}
type Options struct {
	FilterRegex       string
	SourcesToExclude  []string
	SourcesToUse      []string
	IncludeSubdomains bool
	Keys              *session.Keys
}