package rudder import ( "net/http" "time" ) const DefaultBaseURL = "https://api.rudder.build" type Config struct { AdminKey string BaseURL string Timeout time.Duration HTTPClient *http.Client } type Client struct { Players *PlayersService Wallet *WalletService Storage *StorageService Resources *ResourcesService Modules *ModulesService transport *transport } func New(config Config) (*Client, error) { if config.AdminKey == "" { return nil, &APIError{Code: ErrorCodeInvalidOptions, Message: "AdminKey is required"} } if config.BaseURL == "" { config.BaseURL = DefaultBaseURL } if config.Timeout == 0 { config.Timeout = 30 * time.Second } if config.HTTPClient == nil { config.HTTPClient = &http.Client{Timeout: config.Timeout} } transport := &transport{ baseURL: config.BaseURL, apiKey: config.AdminKey, httpClient: config.HTTPClient, } return &Client{ Players: &PlayersService{transport: transport}, Wallet: &WalletService{transport: transport}, Storage: &StorageService{transport: transport}, Resources: &ResourcesService{transport: transport}, Modules: &ModulesService{transport: transport}, transport: transport, }, nil } func (c *Client) Player(playerID string) *PlayerHandle { return &PlayerHandle{ playerID: playerID, transport: c.transport, players: c.Players, wallet: c.Wallet, } }