2026-08-12 14:04:30 +03:00
|
|
|
package rudder
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"net/http"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const DefaultBaseURL = "https://api.rudder.build"
|
|
|
|
|
|
|
|
|
|
type Config struct {
|
2026-08-25 13:59:30 +03:00
|
|
|
AdminKey string
|
2026-08-12 14:04:30 +03:00
|
|
|
BaseURL string
|
|
|
|
|
Timeout time.Duration
|
|
|
|
|
HTTPClient *http.Client
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Client struct {
|
|
|
|
|
Players *PlayersService
|
|
|
|
|
Leaderboards *LeaderboardsService
|
|
|
|
|
Wallet *WalletService
|
2026-08-13 08:47:14 +03:00
|
|
|
Inventory *InventoryService
|
2026-08-25 16:25:29 +03:00
|
|
|
Quests *QuestsService
|
2026-08-26 18:30:28 +03:00
|
|
|
Storage *StorageService
|
|
|
|
|
Metrics *MetricsService
|
2026-08-12 23:58:34 +03:00
|
|
|
|
2026-08-26 18:30:28 +03:00
|
|
|
transport *transport
|
2026-08-12 14:04:30 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New(config Config) (*Client, error) {
|
2026-08-25 13:59:30 +03:00
|
|
|
if config.AdminKey == "" {
|
|
|
|
|
return nil, &APIError{Code: ErrorCodeInvalidOptions, Message: "AdminKey is required"}
|
2026-08-12 14:04:30 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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,
|
2026-08-25 13:59:30 +03:00
|
|
|
apiKey: config.AdminKey,
|
2026-08-12 14:04:30 +03:00
|
|
|
httpClient: config.HTTPClient,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return &Client{
|
|
|
|
|
Players: &PlayersService{transport: transport},
|
|
|
|
|
Leaderboards: &LeaderboardsService{transport: transport},
|
|
|
|
|
Wallet: &WalletService{transport: transport},
|
2026-08-13 08:47:14 +03:00
|
|
|
Inventory: &InventoryService{transport: transport},
|
2026-08-25 16:25:29 +03:00
|
|
|
Quests: &QuestsService{transport: transport},
|
2026-08-26 18:30:28 +03:00
|
|
|
Storage: &StorageService{transport: transport},
|
|
|
|
|
Metrics: &MetricsService{transport: transport},
|
2026-08-12 23:58:34 +03:00
|
|
|
|
2026-08-26 18:30:28 +03:00
|
|
|
transport: transport,
|
2026-08-12 14:04:30 +03:00
|
|
|
}, nil
|
|
|
|
|
}
|
2026-08-26 18:30:28 +03:00
|
|
|
|
|
|
|
|
func (c *Client) Player(playerID string) *PlayerHandle {
|
|
|
|
|
return &PlayerHandle{
|
|
|
|
|
playerID: playerID,
|
|
|
|
|
transport: c.transport,
|
|
|
|
|
players: c.Players,
|
|
|
|
|
wallet: c.Wallet,
|
|
|
|
|
inventory: c.Inventory,
|
|
|
|
|
quests: c.Quests,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) Leaderboard(slug string) *LeaderboardHandle {
|
|
|
|
|
return &LeaderboardHandle{
|
|
|
|
|
slug: slug,
|
|
|
|
|
transport: c.transport,
|
|
|
|
|
leaderboards: c.Leaderboards,
|
|
|
|
|
}
|
|
|
|
|
}
|