55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package blossom
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"fiatjaf.com/nostr"
|
|
"github.com/valyala/fasthttp"
|
|
)
|
|
|
|
// Client represents a Blossom client for interacting with a media server
|
|
type Client struct {
|
|
mediaserver string
|
|
httpClient *fasthttp.Client
|
|
signer nostr.Signer
|
|
}
|
|
|
|
// NewClient creates a new Blossom client
|
|
func NewClient(mediaserver string, signer nostr.Signer) *Client {
|
|
mediaserver = "http" + nostr.NormalizeURL(mediaserver)[2:]
|
|
|
|
return &Client{
|
|
mediaserver: strings.TrimSuffix(mediaserver, "/") + "/",
|
|
httpClient: createHTTPClient(),
|
|
signer: signer,
|
|
}
|
|
}
|
|
|
|
// createHTTPClient creates a properly configured HTTP client
|
|
func createHTTPClient() *fasthttp.Client {
|
|
return &fasthttp.Client{
|
|
MaxIdleConnDuration: time.Hour,
|
|
DisableHeaderNamesNormalizing: true, // because our headers are properly constructed
|
|
DisablePathNormalizing: true,
|
|
|
|
Name: "nl-b", // user-agent
|
|
|
|
// increase DNS cache time to an hour instead of default minute
|
|
Dial: (&fasthttp.TCPDialer{
|
|
Concurrency: 4096,
|
|
DNSCacheDuration: time.Hour,
|
|
}).Dial,
|
|
}
|
|
}
|
|
|
|
// GetSigner returns the client's signer
|
|
func (c *Client) GetSigner() nostr.Signer {
|
|
return c.signer
|
|
}
|
|
|
|
// GetMediaServer returns the client's media server URL
|
|
func (c *Client) GetMediaServer() string {
|
|
return c.mediaserver
|
|
}
|