add nipb0/blossom helpers.

This commit is contained in:
fiatjaf
2025-03-04 12:42:24 -03:00
parent 5bfaed2740
commit 5bafd1c778
8 changed files with 366 additions and 0 deletions

54
nipb0/blossom/client.go Normal file
View File

@@ -0,0 +1,54 @@
package blossom
import (
"time"
"github.com/nbd-wtf/go-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 {
return &Client{
mediaserver: mediaserver,
httpClient: createHTTPClient(),
signer: signer,
}
}
// createHTTPClient creates a properly configured HTTP client
func createHTTPClient() *fasthttp.Client {
readTimeout, _ := time.ParseDuration("10s")
writeTimeout, _ := time.ParseDuration("10s")
maxIdleConnDuration, _ := time.ParseDuration("1h")
return &fasthttp.Client{
ReadTimeout: readTimeout,
WriteTimeout: writeTimeout,
MaxIdleConnDuration: maxIdleConnDuration,
NoDefaultUserAgentHeader: true, // Don't send: User-Agent: fasthttp
DisableHeaderNamesNormalizing: true, // If you set the case on your headers correctly you can enable this
DisablePathNormalizing: true,
// 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
}