func New(provider storage.Provider, documentLoader ld.DocumentLoader, wfClient webfingerClient, opts ...Opt) (*Client, error) {  
	store, err := provider.OpenStore(storeName)
	if err != nil {
		return nil, fmt.Errorf("open store: %w", err)
	}
	err = provider.SetStoreConfig(storeName, storage.StoreConfiguration{TagNames: []string{tagNotConfirmed}})
	if err != nil {
		return nil, fmt.Errorf("failed to set store configuration: %w", err)
	}
	client := &Client{
		documentLoader: documentLoader,
		store:          store,
		ticker:         time.NewTicker(time.Second),
		http:           &http.Client{Timeout: time.Minute},
		wfClient:       wfClient,
	}
	for _, opt := range opts {
		opt(client)
	}
	go client.worker()
	return client, nil
}
New returns monitoring client.
package monitoring
import (
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"net/http"
	"time"
	"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
	"github.com/hyperledger/aries-framework-go/spi/storage"
	"github.com/piprate/json-gold/ld"
	"github.com/sirupsen/logrus"
	"github.com/trustbloc/vct/pkg/client/vct"
	"github.com/trustbloc/orb/pkg/webfinger/model"
)
var logger = logrus.New()
const (
	storeName       = "monitoring"
	keyPrefix       = "queue"
	tagNotConfirmed = "not_confirmed"
)
type httpClient interface {
	Do(req *http.Request) (*http.Response, error)
}
type webfingerClient interface {
	GetLedgerType(domain string) (string, error)
}
type Client struct {
	documentLoader ld.DocumentLoader
	store          storage.Store
	http           httpClient
	ticker         *time.Ticker
	wfClient       webfingerClient
}
type Opt func(*Client)
func WithHTTPClient(client httpClient) Opt {
	return func(o *Client) {
		o.http = client
	}
}