// Package client provides a client for interacting with the ImageKit API. package client import ( "context" "fmt" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/fshttp" "github.com/rclone/rclone/lib/rest" ) // ImageKit main struct type ImageKit struct { Prefix string UploadPrefix string Timeout int64 UploadTimeout int64 PrivateKey string PublicKey string URLEndpoint string HTTPClient *rest.Client } // NewParams is a struct to define parameters to imagekit type NewParams struct { PrivateKey string PublicKey string URLEndpoint string } // New returns ImageKit object from environment variables func New(ctx context.Context, params NewParams) (*ImageKit, error) { privateKey := params.PrivateKey publicKey := params.PublicKey endpointURL := params.URLEndpoint switch { case privateKey == "": return nil, fmt.Errorf("ImageKit.io URL endpoint is required") case publicKey == "": return nil, fmt.Errorf("ImageKit.io public key is required") case endpointURL == "": return nil, fmt.Errorf("ImageKit.io private key is required") } cliCtx, cliCfg := fs.AddConfig(ctx) cliCfg.UserAgent = "rclone/imagekit" client := rest.NewClient(fshttp.NewClient(cliCtx)) client.SetUserPass(privateKey, "") client.SetHeader("Accept", "application/json") return &ImageKit{ Prefix: "https://api.imagekit.io/v2", UploadPrefix: "https://upload.imagekit.io/api/v2", Timeout: 60, UploadTimeout: 3600, PrivateKey: params.PrivateKey, PublicKey: params.PublicKey, URLEndpoint: params.URLEndpoint, HTTPClient: client, }, nil }