From b99d06a2dec986d15094c8ba6b4cb5a31ea22220 Mon Sep 17 00:00:00 2001 From: nite Date: Tue, 28 Oct 2025 22:07:44 +1100 Subject: [PATCH] u --- client.go | 28 +++++++---- endpoint/age_rating_categories.go | 5 +- endpoint/age_rating_content_descriptions.go | 5 +- .../age_rating_content_descriptions_v2.go | 5 +- endpoint/age_rating_organizations.go | 5 +- endpoint/age_ratings.go | 5 +- endpoint/alternative_names.go | 5 +- endpoint/artworks.go | 5 +- endpoint/base.go | 35 +++++++------- endpoint/character_genders.go | 5 +- endpoint/character_mug_shots.go | 5 +- endpoint/character_species.go | 5 +- endpoint/characters.go | 5 +- endpoint/collection_membership_types.go | 5 +- endpoint/collection_memberships.go | 5 +- endpoint/collection_relation_types.go | 5 +- endpoint/collection_relations.go | 5 +- endpoint/collection_types.go | 5 +- endpoint/collections.go | 5 +- endpoint/companies.go | 5 +- endpoint/company_logos.go | 5 +- endpoint/company_statuses.go | 5 +- endpoint/company_websites.go | 5 +- endpoint/covers.go | 5 +- endpoint/date_formats.go | 5 +- endpoint/event_logos.go | 5 +- endpoint/event_networks.go | 5 +- endpoint/events.go | 5 +- endpoint/external_game_sources.go | 5 +- endpoint/external_games.go | 5 +- endpoint/franchises.go | 7 +-- endpoint/game_engine_logos.go | 5 +- endpoint/game_engines.go | 7 +-- endpoint/game_localizations.go | 7 +-- endpoint/game_modes.go | 7 +-- endpoint/game_release_formats.go | 7 +-- endpoint/game_statuses.go | 7 +-- endpoint/game_time_to_beats.go | 7 +-- endpoint/game_types.go | 7 +-- endpoint/game_version_feature_values.go | 7 +-- endpoint/game_version_features.go | 7 +-- endpoint/game_versions.go | 7 +-- endpoint/game_videos.go | 7 +-- endpoint/games.go | 7 +-- endpoint/genres.go | 7 +-- endpoint/involved_companies.go | 7 +-- endpoint/keywords.go | 7 +-- endpoint/language_support_types.go | 5 +- endpoint/language_supports.go | 7 +-- endpoint/languages.go | 7 +-- endpoint/multiplayer_modes.go | 7 +-- endpoint/network_types.go | 7 +-- endpoint/platform_families.go | 7 +-- endpoint/platform_logos.go | 7 +-- endpoint/platform_types.go | 7 +-- endpoint/platform_version_companies.go | 7 +-- endpoint/platform_version_release_dates.go | 7 +-- endpoint/platform_versions.go | 7 +-- endpoint/platform_websites.go | 7 +-- endpoint/platforms.go | 5 +- endpoint/player_perspectives.go | 7 +-- endpoint/popularity_primitives.go | 5 +- endpoint/popularity_types.go | 7 +-- endpoint/regions.go | 7 +-- endpoint/release_date_regions.go | 7 +-- endpoint/release_date_statuses.go | 7 +-- endpoint/release_dates.go | 7 +-- endpoint/screenshots.go | 7 +-- endpoint/search.go | 5 +- endpoint/themes.go | 7 +-- endpoint/webhooks.go | 17 +++---- endpoint/website_types.go | 7 +-- endpoint/websites.go | 7 +-- go.mod | 1 + go.sum | 4 +- rate_limiter.go | 48 ------------------- request.go | 26 +++++----- token.go | 15 +++--- 78 files changed, 315 insertions(+), 283 deletions(-) delete mode 100644 rate_limiter.go diff --git a/client.go b/client.go index db6c77b..7b28ee6 100644 --- a/client.go +++ b/client.go @@ -1,20 +1,23 @@ package igdb import ( + "context" "fmt" "strings" "github.com/bestnite/go-flaresolverr" "github.com/bestnite/go-igdb/endpoint" + "golang.org/x/time/rate" "github.com/go-resty/resty/v2" ) type Client struct { clientID string - token *TwitchToken + token *twitchToken flaresolverr *flaresolverr.Flaresolverr - limiter *rateLimiter + restyClient *resty.Client + limiter *rate.Limiter AgeRatingCategories *endpoint.AgeRatingCategories AgeRatingContentDescriptions *endpoint.AgeRatingContentDescriptions @@ -92,11 +95,11 @@ type Client struct { func New(clientID, clientSecret string) *Client { c := &Client{ clientID: clientID, - limiter: newRateLimiter(4), - token: NewTwitchToken(clientID, clientSecret), + restyClient: NewRestyClient(), + token: newTwitchToken(clientID, clientSecret), flaresolverr: nil, + limiter: rate.NewLimiter(rate.Limit(4), 4), } - registerAllEndpoints(c) return c @@ -110,21 +113,28 @@ func NewWithFlaresolverr(clientID, clientSecret string, f *flaresolverr.Flaresol return c } -func (g *Client) Request(method string, URL string, dataBody any) (*resty.Response, error) { - g.limiter.wait() +func (g *Client) Request(ctx context.Context, method string, URL string, dataBody any) (*resty.Response, error) { + err := g.limiter.Wait(ctx) + if err != nil { + return nil, fmt.Errorf("failed to get rate limiter token: %w", err) + } - t, err := g.token.getToken() + t, err := g.token.GetToken(ctx) if err != nil { return nil, fmt.Errorf("failed to get twitch token: %w", err) } - resp, err := request().SetBody(dataBody).SetHeaders(map[string]string{ + resp, err := g.restyClient.R().SetContext(ctx).SetBody(dataBody).SetHeaders(map[string]string{ "Client-ID": g.clientID, "Authorization": "Bearer " + t, "User-Agent": "", "Content-Type": "text/plain", }).Execute(strings.ToUpper(method), URL) + if resp.StatusCode() != 200 { + return nil, fmt.Errorf("failed to request, expected 200 but got: %v", resp.StatusCode()) + } + if err != nil { return nil, fmt.Errorf("failed to request: %s: %w", URL, err) } diff --git a/endpoint/age_rating_categories.go b/endpoint/age_rating_categories.go index 2aef63c..d333539 100644 --- a/endpoint/age_rating_categories.go +++ b/endpoint/age_rating_categories.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAgeRatingCategories(request RequestFunc) *AgeRatingCategories { return a } -func (a *AgeRatingCategories) Query(query string) ([]*pb.AgeRatingCategory, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AgeRatingCategories) Query(ctx context.Context, query string) ([]*pb.AgeRatingCategory, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/age_rating_content_descriptions.go b/endpoint/age_rating_content_descriptions.go index 53b9022..bbfc2de 100644 --- a/endpoint/age_rating_content_descriptions.go +++ b/endpoint/age_rating_content_descriptions.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAgeRatingContentDescriptions(request RequestFunc) *AgeRatingContentDescr return a } -func (a *AgeRatingContentDescriptions) Query(query string) ([]*pb.AgeRatingContentDescription, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AgeRatingContentDescriptions) Query(ctx context.Context, query string) ([]*pb.AgeRatingContentDescription, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/age_rating_content_descriptions_v2.go b/endpoint/age_rating_content_descriptions_v2.go index fd16747..cd878dc 100644 --- a/endpoint/age_rating_content_descriptions_v2.go +++ b/endpoint/age_rating_content_descriptions_v2.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAgeRatingContentDescriptionsV2(request RequestFunc) *AgeRatingContentDes return a } -func (a *AgeRatingContentDescriptionsV2) Query(query string) ([]*pb.AgeRatingContentDescriptionV2, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AgeRatingContentDescriptionsV2) Query(ctx context.Context, query string) ([]*pb.AgeRatingContentDescriptionV2, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/age_rating_organizations.go b/endpoint/age_rating_organizations.go index 12c1a19..0fda8c9 100644 --- a/endpoint/age_rating_organizations.go +++ b/endpoint/age_rating_organizations.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAgeRatingOrganizations(request RequestFunc) *AgeRatingOrganizations { return a } -func (a *AgeRatingOrganizations) Query(query string) ([]*pb.AgeRatingOrganization, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AgeRatingOrganizations) Query(ctx context.Context, query string) ([]*pb.AgeRatingOrganization, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/age_ratings.go b/endpoint/age_ratings.go index df2ee7d..3e13528 100644 --- a/endpoint/age_ratings.go +++ b/endpoint/age_ratings.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAgeRatings(request RequestFunc) *AgeRatings { return a } -func (a *AgeRatings) Query(query string) ([]*pb.AgeRating, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AgeRatings) Query(ctx context.Context, query string) ([]*pb.AgeRating, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/alternative_names.go b/endpoint/alternative_names.go index fa7bc7f..b546eb1 100644 --- a/endpoint/alternative_names.go +++ b/endpoint/alternative_names.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewAlternativeNames(request RequestFunc) *AlternativeNames { return a } -func (a *AlternativeNames) Query(query string) ([]*pb.AlternativeName, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *AlternativeNames) Query(ctx context.Context, query string) ([]*pb.AlternativeName, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/artworks.go b/endpoint/artworks.go index 95aca8e..3913910 100644 --- a/endpoint/artworks.go +++ b/endpoint/artworks.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewArtworks(request RequestFunc) *Artworks { return a } -func (a *Artworks) Query(query string) ([]*pb.Artwork, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Artworks) Query(ctx context.Context, query string) ([]*pb.Artwork, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/base.go b/endpoint/base.go index 192139c..af5b29f 100644 --- a/endpoint/base.go +++ b/endpoint/base.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" "strconv" "strings" @@ -11,27 +12,27 @@ import ( "github.com/go-resty/resty/v2" ) -type RequestFunc func(method string, URL string, dataBody any) (*resty.Response, error) +type RequestFunc func(ctx context.Context, method string, URL string, dataBody any) (*resty.Response, error) type BaseEndpoint[T any] struct { request RequestFunc endpointName Name - queryFunc func(string) ([]*T, error) + queryFunc func(context.Context, string) ([]*T, error) } func (b *BaseEndpoint[T]) GetEndpointName() Name { return b.endpointName } -func (b *BaseEndpoint[T]) Query(query string) ([]*T, error) { +func (b *BaseEndpoint[T]) Query(ctx context.Context, query string) ([]*T, error) { if b.queryFunc == nil { return nil, fmt.Errorf("query method must be implemented by specific endpoint") } - return b.queryFunc(query) + return b.queryFunc(ctx, query) } -func (b *BaseEndpoint[T]) GetByID(id uint64) (*T, error) { - res, err := b.Query(fmt.Sprintf("where id = %d; fields *;", id)) +func (b *BaseEndpoint[T]) GetByID(ctx context.Context, id uint64) (*T, error) { + res, err := b.Query(ctx, fmt.Sprintf("where id = %d; fields *;", id)) if err != nil { return nil, err } @@ -41,7 +42,7 @@ func (b *BaseEndpoint[T]) GetByID(id uint64) (*T, error) { return res[0], nil } -func (b *BaseEndpoint[T]) GetByIDs(ids []uint64) ([]*T, error) { +func (b *BaseEndpoint[T]) GetByIDs(ctx context.Context, ids []uint64) ([]*T, error) { if len(ids) == 0 { return nil, fmt.Errorf("ids cant be empty") } @@ -59,7 +60,7 @@ func (b *BaseEndpoint[T]) GetByIDs(ids []uint64) ([]*T, error) { } builder.WriteString(strconv.FormatUint(v, 10)) } - batchRes, err := b.Query(fmt.Sprintf("where id = (%s); fields *; limit 500;", builder.String())) + batchRes, err := b.Query(ctx, fmt.Sprintf("where id = (%s); fields *; limit 500;", builder.String())) if err != nil { return nil, err } @@ -68,8 +69,8 @@ func (b *BaseEndpoint[T]) GetByIDs(ids []uint64) ([]*T, error) { return res, nil } -func (b *BaseEndpoint[T]) Count() (uint64, error) { - resp, err := b.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s/count.pb", b.endpointName), "") +func (b *BaseEndpoint[T]) Count(ctx context.Context) (uint64, error) { + resp, err := b.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s/count.pb", b.endpointName), "") if err != nil { return 0, fmt.Errorf("failed to request: %w", err) } @@ -82,15 +83,15 @@ func (b *BaseEndpoint[T]) Count() (uint64, error) { return uint64(res.Count), nil } -func (b *BaseEndpoint[T]) Paginated(offset, limit uint64) ([]*T, error) { - return b.Query(fmt.Sprintf("offset %d; limit %d; fields *; sort id asc;", offset, limit)) +func (b *BaseEndpoint[T]) Paginated(ctx context.Context, offset, limit uint64) ([]*T, error) { + return b.Query(ctx, fmt.Sprintf("offset %d; limit %d; fields *; sort id asc;", offset, limit)) } type EntityEndpoint[T any] interface { GetEndpointName() Name - Query(string) ([]*T, error) - GetByID(uint64) (*T, error) - GetByIDs([]uint64) ([]*T, error) - Count() (uint64, error) - Paginated(uint64, uint64) ([]*T, error) + Query(context.Context, string) ([]*T, error) + GetByID(context.Context, uint64) (*T, error) + GetByIDs(context.Context, []uint64) ([]*T, error) + Count(context.Context) (uint64, error) + Paginated(context.Context, uint64, uint64) ([]*T, error) } diff --git a/endpoint/character_genders.go b/endpoint/character_genders.go index 123be40..c885b1c 100644 --- a/endpoint/character_genders.go +++ b/endpoint/character_genders.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCharacterGenders(request RequestFunc) *CharacterGenders { return a } -func (a *CharacterGenders) Query(query string) ([]*pb.CharacterGender, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CharacterGenders) Query(ctx context.Context, query string) ([]*pb.CharacterGender, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/character_mug_shots.go b/endpoint/character_mug_shots.go index 5f88b4a..fb42385 100644 --- a/endpoint/character_mug_shots.go +++ b/endpoint/character_mug_shots.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCharacterMugShots(request RequestFunc) *CharacterMugShots { return a } -func (a *CharacterMugShots) Query(query string) ([]*pb.CharacterMugShot, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CharacterMugShots) Query(ctx context.Context, query string) ([]*pb.CharacterMugShot, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/character_species.go b/endpoint/character_species.go index c27f0ae..3dc10c3 100644 --- a/endpoint/character_species.go +++ b/endpoint/character_species.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCharacterSpecies(request RequestFunc) *CharacterSpecies { return a } -func (a *CharacterSpecies) Query(query string) ([]*pb.CharacterSpecie, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CharacterSpecies) Query(ctx context.Context, query string) ([]*pb.CharacterSpecie, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/characters.go b/endpoint/characters.go index 26f6992..9aa70e8 100644 --- a/endpoint/characters.go +++ b/endpoint/characters.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCharacters(request RequestFunc) *Characters { return a } -func (a *Characters) Query(query string) ([]*pb.Character, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Characters) Query(ctx context.Context, query string) ([]*pb.Character, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collection_membership_types.go b/endpoint/collection_membership_types.go index cf9ed5c..4b37f3a 100644 --- a/endpoint/collection_membership_types.go +++ b/endpoint/collection_membership_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollectionMembershipTypes(request RequestFunc) *CollectionMembershipType return a } -func (a *CollectionMembershipTypes) Query(query string) ([]*pb.CollectionMembershipType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CollectionMembershipTypes) Query(ctx context.Context, query string) ([]*pb.CollectionMembershipType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collection_memberships.go b/endpoint/collection_memberships.go index e983d4e..6b8c7f9 100644 --- a/endpoint/collection_memberships.go +++ b/endpoint/collection_memberships.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollectionMemberships(request RequestFunc) *CollectionMemberships { return a } -func (a *CollectionMemberships) Query(query string) ([]*pb.CollectionMembership, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CollectionMemberships) Query(ctx context.Context, query string) ([]*pb.CollectionMembership, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collection_relation_types.go b/endpoint/collection_relation_types.go index c8f6c2f..cf08e0b 100644 --- a/endpoint/collection_relation_types.go +++ b/endpoint/collection_relation_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollectionRelationTypes(request RequestFunc) *CollectionRelationTypes { return a } -func (a *CollectionRelationTypes) Query(query string) ([]*pb.CollectionRelationType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CollectionRelationTypes) Query(ctx context.Context, query string) ([]*pb.CollectionRelationType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collection_relations.go b/endpoint/collection_relations.go index b46a8aa..b475891 100644 --- a/endpoint/collection_relations.go +++ b/endpoint/collection_relations.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollectionRelations(request RequestFunc) *CollectionRelations { return a } -func (a *CollectionRelations) Query(query string) ([]*pb.CollectionRelation, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CollectionRelations) Query(ctx context.Context, query string) ([]*pb.CollectionRelation, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collection_types.go b/endpoint/collection_types.go index f9d7f0d..1665cef 100644 --- a/endpoint/collection_types.go +++ b/endpoint/collection_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollectionTypes(request RequestFunc) *CollectionTypes { return a } -func (a *CollectionTypes) Query(query string) ([]*pb.CollectionType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CollectionTypes) Query(ctx context.Context, query string) ([]*pb.CollectionType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/collections.go b/endpoint/collections.go index 8d55cd7..dd2d3a2 100644 --- a/endpoint/collections.go +++ b/endpoint/collections.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCollections(request RequestFunc) *Collections { return a } -func (a *Collections) Query(query string) ([]*pb.Collection, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Collections) Query(ctx context.Context, query string) ([]*pb.Collection, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/companies.go b/endpoint/companies.go index 30f35fe..d4847b5 100644 --- a/endpoint/companies.go +++ b/endpoint/companies.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "errors" "fmt" @@ -24,8 +25,8 @@ func NewCompanies(request RequestFunc) *Companies { return a } -func (a *Companies) Query(query string) ([]*pb.Company, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Companies) Query(ctx context.Context, query string) ([]*pb.Company, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/company_logos.go b/endpoint/company_logos.go index d131ea2..548862c 100644 --- a/endpoint/company_logos.go +++ b/endpoint/company_logos.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCompanyLogos(request RequestFunc) *CompanyLogos { return a } -func (a *CompanyLogos) Query(query string) ([]*pb.CompanyLogo, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CompanyLogos) Query(ctx context.Context, query string) ([]*pb.CompanyLogo, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/company_statuses.go b/endpoint/company_statuses.go index b51b563..0b56f7d 100644 --- a/endpoint/company_statuses.go +++ b/endpoint/company_statuses.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCompanyStatuses(request RequestFunc) *CompanyStatuses { return a } -func (a *CompanyStatuses) Query(query string) ([]*pb.CompanyStatus, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CompanyStatuses) Query(ctx context.Context, query string) ([]*pb.CompanyStatus, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/company_websites.go b/endpoint/company_websites.go index ecf6a64..2b9ef40 100644 --- a/endpoint/company_websites.go +++ b/endpoint/company_websites.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCompanyWebsites(request RequestFunc) *CompanyWebsites { return a } -func (a *CompanyWebsites) Query(query string) ([]*pb.CompanyWebsite, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *CompanyWebsites) Query(ctx context.Context, query string) ([]*pb.CompanyWebsite, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/covers.go b/endpoint/covers.go index a1f5452..e6a4392 100644 --- a/endpoint/covers.go +++ b/endpoint/covers.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewCovers(request RequestFunc) *Covers { return a } -func (a *Covers) Query(query string) ([]*pb.Cover, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Covers) Query(ctx context.Context, query string) ([]*pb.Cover, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/date_formats.go b/endpoint/date_formats.go index e904a38..0b7df21 100644 --- a/endpoint/date_formats.go +++ b/endpoint/date_formats.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewDateFormats(request RequestFunc) *DateFormats { return a } -func (a *DateFormats) Query(query string) ([]*pb.DateFormat, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *DateFormats) Query(ctx context.Context, query string) ([]*pb.DateFormat, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/event_logos.go b/endpoint/event_logos.go index 4cee043..f2aca90 100644 --- a/endpoint/event_logos.go +++ b/endpoint/event_logos.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewEventLogos(request RequestFunc) *EventLogos { return a } -func (a *EventLogos) Query(query string) ([]*pb.EventLogo, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *EventLogos) Query(ctx context.Context, query string) ([]*pb.EventLogo, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/event_networks.go b/endpoint/event_networks.go index 82f75c2..2af5aa4 100644 --- a/endpoint/event_networks.go +++ b/endpoint/event_networks.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewEventNetworks(request RequestFunc) *EventNetworks { return a } -func (a *EventNetworks) Query(query string) ([]*pb.EventNetwork, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *EventNetworks) Query(ctx context.Context, query string) ([]*pb.EventNetwork, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/events.go b/endpoint/events.go index 9a53a7e..64902d1 100644 --- a/endpoint/events.go +++ b/endpoint/events.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewEvents(request RequestFunc) *Events { return a } -func (a *Events) Query(query string) ([]*pb.Event, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Events) Query(ctx context.Context, query string) ([]*pb.Event, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/external_game_sources.go b/endpoint/external_game_sources.go index db6b1df..5c3fbbe 100644 --- a/endpoint/external_game_sources.go +++ b/endpoint/external_game_sources.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewExternalGameSources(request RequestFunc) *ExternalGameSources { return a } -func (a *ExternalGameSources) Query(query string) ([]*pb.ExternalGameSource, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *ExternalGameSources) Query(ctx context.Context, query string) ([]*pb.ExternalGameSource, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/external_games.go b/endpoint/external_games.go index eb35d0f..3e6f6c6 100644 --- a/endpoint/external_games.go +++ b/endpoint/external_games.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewExternalGames(request RequestFunc) *ExternalGames { return a } -func (a *ExternalGames) Query(query string) ([]*pb.ExternalGame, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *ExternalGames) Query(ctx context.Context, query string) ([]*pb.ExternalGame, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/franchises.go b/endpoint/franchises.go index 955e13d..ac2ab38 100644 --- a/endpoint/franchises.go +++ b/endpoint/franchises.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Franchises struct { func NewFranchises(request RequestFunc) *Franchises { a := &Franchises{ - BaseEndpoint[pb.Franchise]{ + BaseEndpoint: BaseEndpoint[pb.Franchise]{ endpointName: EPFranchises, request: request, }, @@ -23,8 +24,8 @@ func NewFranchises(request RequestFunc) *Franchises { return a } -func (a *Franchises) Query(query string) ([]*pb.Franchise, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Franchises) Query(ctx context.Context, query string) ([]*pb.Franchise, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_engine_logos.go b/endpoint/game_engine_logos.go index 0e8e21f..a9a3747 100644 --- a/endpoint/game_engine_logos.go +++ b/endpoint/game_engine_logos.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewGameEngineLogos(request RequestFunc) *GameEngineLogos { return a } -func (a *GameEngineLogos) Query(query string) ([]*pb.GameEngineLogo, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameEngineLogos) Query(ctx context.Context, query string) ([]*pb.GameEngineLogo, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_engines.go b/endpoint/game_engines.go index a13e87b..74e1e04 100644 --- a/endpoint/game_engines.go +++ b/endpoint/game_engines.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameEngines struct { func NewGameEngines(request RequestFunc) *GameEngines { a := &GameEngines{ - BaseEndpoint[pb.GameEngine]{ + BaseEndpoint: BaseEndpoint[pb.GameEngine]{ endpointName: EPGameEngines, request: request, }, @@ -23,8 +24,8 @@ func NewGameEngines(request RequestFunc) *GameEngines { return a } -func (a *GameEngines) Query(query string) ([]*pb.GameEngine, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameEngines) Query(ctx context.Context, query string) ([]*pb.GameEngine, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_localizations.go b/endpoint/game_localizations.go index f474c5c..b5496a3 100644 --- a/endpoint/game_localizations.go +++ b/endpoint/game_localizations.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameLocalizations struct { func NewGameLocalizations(request RequestFunc) *GameLocalizations { a := &GameLocalizations{ - BaseEndpoint[pb.GameLocalization]{ + BaseEndpoint: BaseEndpoint[pb.GameLocalization]{ endpointName: EPGameLocalizations, request: request, }, @@ -23,8 +24,8 @@ func NewGameLocalizations(request RequestFunc) *GameLocalizations { return a } -func (a *GameLocalizations) Query(query string) ([]*pb.GameLocalization, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameLocalizations) Query(ctx context.Context, query string) ([]*pb.GameLocalization, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_modes.go b/endpoint/game_modes.go index 8e4d856..ea5ff4f 100644 --- a/endpoint/game_modes.go +++ b/endpoint/game_modes.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameModes struct { func NewGameModes(request RequestFunc) *GameModes { a := &GameModes{ - BaseEndpoint[pb.GameMode]{ + BaseEndpoint: BaseEndpoint[pb.GameMode]{ endpointName: EPGameModes, request: request, }, @@ -23,8 +24,8 @@ func NewGameModes(request RequestFunc) *GameModes { return a } -func (a *GameModes) Query(query string) ([]*pb.GameMode, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameModes) Query(ctx context.Context, query string) ([]*pb.GameMode, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_release_formats.go b/endpoint/game_release_formats.go index 1bff4f0..f24e648 100644 --- a/endpoint/game_release_formats.go +++ b/endpoint/game_release_formats.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameReleaseFormats struct { func NewGameReleaseFormats(request RequestFunc) *GameReleaseFormats { a := &GameReleaseFormats{ - BaseEndpoint[pb.GameReleaseFormat]{ + BaseEndpoint: BaseEndpoint[pb.GameReleaseFormat]{ endpointName: EPGameReleaseFormats, request: request, }, @@ -23,8 +24,8 @@ func NewGameReleaseFormats(request RequestFunc) *GameReleaseFormats { return a } -func (a *GameReleaseFormats) Query(query string) ([]*pb.GameReleaseFormat, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameReleaseFormats) Query(ctx context.Context, query string) ([]*pb.GameReleaseFormat, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_statuses.go b/endpoint/game_statuses.go index f4e357a..7744a16 100644 --- a/endpoint/game_statuses.go +++ b/endpoint/game_statuses.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameStatuses struct { func NewGameStatuses(request RequestFunc) *GameStatuses { a := &GameStatuses{ - BaseEndpoint[pb.GameStatus]{ + BaseEndpoint: BaseEndpoint[pb.GameStatus]{ endpointName: EPGameStatuses, request: request, }, @@ -23,8 +24,8 @@ func NewGameStatuses(request RequestFunc) *GameStatuses { return a } -func (a *GameStatuses) Query(query string) ([]*pb.GameStatus, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameStatuses) Query(ctx context.Context, query string) ([]*pb.GameStatus, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_time_to_beats.go b/endpoint/game_time_to_beats.go index 519744d..b2d0ded 100644 --- a/endpoint/game_time_to_beats.go +++ b/endpoint/game_time_to_beats.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameTimeToBeats struct { func NewGameTimeToBeats(request RequestFunc) *GameTimeToBeats { a := &GameTimeToBeats{ - BaseEndpoint[pb.GameTimeToBeat]{ + BaseEndpoint: BaseEndpoint[pb.GameTimeToBeat]{ endpointName: EPGameTimeToBeats, request: request, }, @@ -23,8 +24,8 @@ func NewGameTimeToBeats(request RequestFunc) *GameTimeToBeats { return a } -func (a *GameTimeToBeats) Query(query string) ([]*pb.GameTimeToBeat, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameTimeToBeats) Query(ctx context.Context, query string) ([]*pb.GameTimeToBeat, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_types.go b/endpoint/game_types.go index 92d83e4..e2f5c7f 100644 --- a/endpoint/game_types.go +++ b/endpoint/game_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameTypes struct { func NewGameTypes(request RequestFunc) *GameTypes { a := &GameTypes{ - BaseEndpoint[pb.GameType]{ + BaseEndpoint: BaseEndpoint[pb.GameType]{ endpointName: EPGameTypes, request: request, }, @@ -23,8 +24,8 @@ func NewGameTypes(request RequestFunc) *GameTypes { return a } -func (a *GameTypes) Query(query string) ([]*pb.GameType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameTypes) Query(ctx context.Context, query string) ([]*pb.GameType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_version_feature_values.go b/endpoint/game_version_feature_values.go index b43065d..70ef38b 100644 --- a/endpoint/game_version_feature_values.go +++ b/endpoint/game_version_feature_values.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameVersionFeatureValues struct { func NewGameVersionFeatureValues(request RequestFunc) *GameVersionFeatureValues { a := &GameVersionFeatureValues{ - BaseEndpoint[pb.GameVersionFeatureValue]{ + BaseEndpoint: BaseEndpoint[pb.GameVersionFeatureValue]{ endpointName: EPGameVersionFeatureValues, request: request, }, @@ -23,8 +24,8 @@ func NewGameVersionFeatureValues(request RequestFunc) *GameVersionFeatureValues return a } -func (a *GameVersionFeatureValues) Query(query string) ([]*pb.GameVersionFeatureValue, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameVersionFeatureValues) Query(ctx context.Context, query string) ([]*pb.GameVersionFeatureValue, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_version_features.go b/endpoint/game_version_features.go index 7b49123..f5d2158 100644 --- a/endpoint/game_version_features.go +++ b/endpoint/game_version_features.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameVersionFeatures struct { func NewGameVersionFeatures(request RequestFunc) *GameVersionFeatures { a := &GameVersionFeatures{ - BaseEndpoint[pb.GameVersionFeature]{ + BaseEndpoint: BaseEndpoint[pb.GameVersionFeature]{ endpointName: EPGameVersionFeatures, request: request, }, @@ -23,8 +24,8 @@ func NewGameVersionFeatures(request RequestFunc) *GameVersionFeatures { return a } -func (a *GameVersionFeatures) Query(query string) ([]*pb.GameVersionFeature, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameVersionFeatures) Query(ctx context.Context, query string) ([]*pb.GameVersionFeature, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_versions.go b/endpoint/game_versions.go index 091759f..104255d 100644 --- a/endpoint/game_versions.go +++ b/endpoint/game_versions.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameVersions struct { func NewGameVersions(request RequestFunc) *GameVersions { a := &GameVersions{ - BaseEndpoint[pb.GameVersion]{ + BaseEndpoint: BaseEndpoint[pb.GameVersion]{ endpointName: EPGameVersions, request: request, }, @@ -23,8 +24,8 @@ func NewGameVersions(request RequestFunc) *GameVersions { return a } -func (a *GameVersions) Query(query string) ([]*pb.GameVersion, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameVersions) Query(ctx context.Context, query string) ([]*pb.GameVersion, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/game_videos.go b/endpoint/game_videos.go index 540e1e3..fdfc4f9 100644 --- a/endpoint/game_videos.go +++ b/endpoint/game_videos.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type GameVideos struct { func NewGameVideos(request RequestFunc) *GameVideos { a := &GameVideos{ - BaseEndpoint[pb.GameVideo]{ + BaseEndpoint: BaseEndpoint[pb.GameVideo]{ endpointName: EPGameVideos, request: request, }, @@ -23,8 +24,8 @@ func NewGameVideos(request RequestFunc) *GameVideos { return a } -func (a *GameVideos) Query(query string) ([]*pb.GameVideo, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *GameVideos) Query(ctx context.Context, query string) ([]*pb.GameVideo, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/games.go b/endpoint/games.go index 3b46c4c..c14d1a6 100644 --- a/endpoint/games.go +++ b/endpoint/games.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Games struct { func NewGames(request RequestFunc) *Games { a := &Games{ - BaseEndpoint[pb.Game]{ + BaseEndpoint: BaseEndpoint[pb.Game]{ endpointName: EPGames, request: request, }, @@ -23,8 +24,8 @@ func NewGames(request RequestFunc) *Games { return a } -func (a *Games) Query(query string) ([]*pb.Game, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Games) Query(ctx context.Context, query string) ([]*pb.Game, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/genres.go b/endpoint/genres.go index 01bb18a..c2d86e2 100644 --- a/endpoint/genres.go +++ b/endpoint/genres.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Genres struct { func NewGenres(request RequestFunc) *Genres { a := &Genres{ - BaseEndpoint[pb.Genre]{ + BaseEndpoint: BaseEndpoint[pb.Genre]{ endpointName: EPGenres, request: request, }, @@ -23,8 +24,8 @@ func NewGenres(request RequestFunc) *Genres { return a } -func (a *Genres) Query(query string) ([]*pb.Genre, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Genres) Query(ctx context.Context, query string) ([]*pb.Genre, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/involved_companies.go b/endpoint/involved_companies.go index b19b98e..0ae0462 100644 --- a/endpoint/involved_companies.go +++ b/endpoint/involved_companies.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type InvolvedCompanies struct { func NewInvolvedCompanies(request RequestFunc) *InvolvedCompanies { a := &InvolvedCompanies{ - BaseEndpoint[pb.InvolvedCompany]{ + BaseEndpoint: BaseEndpoint[pb.InvolvedCompany]{ endpointName: EPInvolvedCompanies, request: request, }, @@ -23,8 +24,8 @@ func NewInvolvedCompanies(request RequestFunc) *InvolvedCompanies { return a } -func (a *InvolvedCompanies) Query(query string) ([]*pb.InvolvedCompany, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *InvolvedCompanies) Query(ctx context.Context, query string) ([]*pb.InvolvedCompany, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/keywords.go b/endpoint/keywords.go index 40a0e93..dd4b7ff 100644 --- a/endpoint/keywords.go +++ b/endpoint/keywords.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Keywords struct { func NewKeywords(request RequestFunc) *Keywords { a := &Keywords{ - BaseEndpoint[pb.Keyword]{ + BaseEndpoint: BaseEndpoint[pb.Keyword]{ endpointName: EPKeywords, request: request, }, @@ -23,8 +24,8 @@ func NewKeywords(request RequestFunc) *Keywords { return a } -func (a *Keywords) Query(query string) ([]*pb.Keyword, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Keywords) Query(ctx context.Context, query string) ([]*pb.Keyword, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/language_support_types.go b/endpoint/language_support_types.go index f831f5b..375b5a3 100644 --- a/endpoint/language_support_types.go +++ b/endpoint/language_support_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewLanguageSupportTypes(request RequestFunc) *LanguageSupportTypes { return a } -func (a *LanguageSupportTypes) Query(query string) ([]*pb.LanguageSupportType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *LanguageSupportTypes) Query(ctx context.Context, query string) ([]*pb.LanguageSupportType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/language_supports.go b/endpoint/language_supports.go index 8652147..9c953c2 100644 --- a/endpoint/language_supports.go +++ b/endpoint/language_supports.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type LanguageSupports struct { func NewLanguageSupports(request RequestFunc) *LanguageSupports { a := &LanguageSupports{ - BaseEndpoint[pb.LanguageSupport]{ + BaseEndpoint: BaseEndpoint[pb.LanguageSupport]{ endpointName: EPLanguageSupports, request: request, }, @@ -23,8 +24,8 @@ func NewLanguageSupports(request RequestFunc) *LanguageSupports { return a } -func (a *LanguageSupports) Query(query string) ([]*pb.LanguageSupport, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *LanguageSupports) Query(ctx context.Context, query string) ([]*pb.LanguageSupport, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/languages.go b/endpoint/languages.go index 7e9eae5..a41a993 100644 --- a/endpoint/languages.go +++ b/endpoint/languages.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Languages struct { func NewLanguages(request RequestFunc) *Languages { a := &Languages{ - BaseEndpoint[pb.Language]{ + BaseEndpoint: BaseEndpoint[pb.Language]{ endpointName: EPLanguages, request: request, }, @@ -23,8 +24,8 @@ func NewLanguages(request RequestFunc) *Languages { return a } -func (a *Languages) Query(query string) ([]*pb.Language, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Languages) Query(ctx context.Context, query string) ([]*pb.Language, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/multiplayer_modes.go b/endpoint/multiplayer_modes.go index b07c094..31c441e 100644 --- a/endpoint/multiplayer_modes.go +++ b/endpoint/multiplayer_modes.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type MultiplayerModes struct { func NewMultiplayerModes(request RequestFunc) *MultiplayerModes { a := &MultiplayerModes{ - BaseEndpoint[pb.MultiplayerMode]{ + BaseEndpoint: BaseEndpoint[pb.MultiplayerMode]{ endpointName: EPMultiplayerModes, request: request, }, @@ -23,8 +24,8 @@ func NewMultiplayerModes(request RequestFunc) *MultiplayerModes { return a } -func (a *MultiplayerModes) Query(query string) ([]*pb.MultiplayerMode, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *MultiplayerModes) Query(ctx context.Context, query string) ([]*pb.MultiplayerMode, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/network_types.go b/endpoint/network_types.go index cadd860..cae9e0b 100644 --- a/endpoint/network_types.go +++ b/endpoint/network_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type NetworkTypes struct { func NewNetworkTypes(request RequestFunc) *NetworkTypes { a := &NetworkTypes{ - BaseEndpoint[pb.NetworkType]{ + BaseEndpoint: BaseEndpoint[pb.NetworkType]{ endpointName: EPNetworkTypes, request: request, }, @@ -23,8 +24,8 @@ func NewNetworkTypes(request RequestFunc) *NetworkTypes { return a } -func (a *NetworkTypes) Query(query string) ([]*pb.NetworkType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *NetworkTypes) Query(ctx context.Context, query string) ([]*pb.NetworkType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_families.go b/endpoint/platform_families.go index 0b901b6..de8a698 100644 --- a/endpoint/platform_families.go +++ b/endpoint/platform_families.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformFamilies struct { func NewPlatformFamilies(request RequestFunc) *PlatformFamilies { a := &PlatformFamilies{ - BaseEndpoint[pb.PlatformFamily]{ + BaseEndpoint: BaseEndpoint[pb.PlatformFamily]{ endpointName: EPPlatformFamilies, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformFamilies(request RequestFunc) *PlatformFamilies { return a } -func (a *PlatformFamilies) Query(query string) ([]*pb.PlatformFamily, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformFamilies) Query(ctx context.Context, query string) ([]*pb.PlatformFamily, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_logos.go b/endpoint/platform_logos.go index 9d1eeac..5895814 100644 --- a/endpoint/platform_logos.go +++ b/endpoint/platform_logos.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformLogos struct { func NewPlatformLogos(request RequestFunc) *PlatformLogos { a := &PlatformLogos{ - BaseEndpoint[pb.PlatformLogo]{ + BaseEndpoint: BaseEndpoint[pb.PlatformLogo]{ endpointName: EPPlatformLogos, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformLogos(request RequestFunc) *PlatformLogos { return a } -func (a *PlatformLogos) Query(query string) ([]*pb.PlatformLogo, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformLogos) Query(ctx context.Context, query string) ([]*pb.PlatformLogo, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_types.go b/endpoint/platform_types.go index b020497..f14880a 100644 --- a/endpoint/platform_types.go +++ b/endpoint/platform_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformTypes struct { func NewPlatformTypes(request RequestFunc) *PlatformTypes { a := &PlatformTypes{ - BaseEndpoint[pb.PlatformType]{ + BaseEndpoint: BaseEndpoint[pb.PlatformType]{ endpointName: EPPlatformTypes, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformTypes(request RequestFunc) *PlatformTypes { return a } -func (a *PlatformTypes) Query(query string) ([]*pb.PlatformType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformTypes) Query(ctx context.Context, query string) ([]*pb.PlatformType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_version_companies.go b/endpoint/platform_version_companies.go index 07caae2..1c17f92 100644 --- a/endpoint/platform_version_companies.go +++ b/endpoint/platform_version_companies.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformVersionCompanies struct { func NewPlatformVersionCompanies(request RequestFunc) *PlatformVersionCompanies { a := &PlatformVersionCompanies{ - BaseEndpoint[pb.PlatformVersionCompany]{ + BaseEndpoint: BaseEndpoint[pb.PlatformVersionCompany]{ endpointName: EPPlatformVersionCompanies, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformVersionCompanies(request RequestFunc) *PlatformVersionCompanies return a } -func (a *PlatformVersionCompanies) Query(query string) ([]*pb.PlatformVersionCompany, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformVersionCompanies) Query(ctx context.Context, query string) ([]*pb.PlatformVersionCompany, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_version_release_dates.go b/endpoint/platform_version_release_dates.go index 4070ec4..98a51d4 100644 --- a/endpoint/platform_version_release_dates.go +++ b/endpoint/platform_version_release_dates.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformVersionReleaseDates struct { func NewPlatformVersionReleaseDates(request RequestFunc) *PlatformVersionReleaseDates { a := &PlatformVersionReleaseDates{ - BaseEndpoint[pb.PlatformVersionReleaseDate]{ + BaseEndpoint: BaseEndpoint[pb.PlatformVersionReleaseDate]{ endpointName: EPPlatformVersionReleaseDates, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformVersionReleaseDates(request RequestFunc) *PlatformVersionRelease return a } -func (a *PlatformVersionReleaseDates) Query(query string) ([]*pb.PlatformVersionReleaseDate, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformVersionReleaseDates) Query(ctx context.Context, query string) ([]*pb.PlatformVersionReleaseDate, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_versions.go b/endpoint/platform_versions.go index 03355df..b1b24a0 100644 --- a/endpoint/platform_versions.go +++ b/endpoint/platform_versions.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformVersions struct { func NewPlatformVersions(request RequestFunc) *PlatformVersions { a := &PlatformVersions{ - BaseEndpoint[pb.PlatformVersion]{ + BaseEndpoint: BaseEndpoint[pb.PlatformVersion]{ endpointName: EPPlatformVersions, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformVersions(request RequestFunc) *PlatformVersions { return a } -func (a *PlatformVersions) Query(query string) ([]*pb.PlatformVersion, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformVersions) Query(ctx context.Context, query string) ([]*pb.PlatformVersion, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platform_websites.go b/endpoint/platform_websites.go index 815cf7d..7ba2504 100644 --- a/endpoint/platform_websites.go +++ b/endpoint/platform_websites.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlatformWebsites struct { func NewPlatformWebsites(request RequestFunc) *PlatformWebsites { a := &PlatformWebsites{ - BaseEndpoint[pb.PlatformWebsite]{ + BaseEndpoint: BaseEndpoint[pb.PlatformWebsite]{ endpointName: EPPlatformWebsites, request: request, }, @@ -23,8 +24,8 @@ func NewPlatformWebsites(request RequestFunc) *PlatformWebsites { return a } -func (a *PlatformWebsites) Query(query string) ([]*pb.PlatformWebsite, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlatformWebsites) Query(ctx context.Context, query string) ([]*pb.PlatformWebsite, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/platforms.go b/endpoint/platforms.go index 1a5ba53..ed2c084 100644 --- a/endpoint/platforms.go +++ b/endpoint/platforms.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewPlatforms(request RequestFunc) *Platforms { return a } -func (a *Platforms) Query(query string) ([]*pb.Platform, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Platforms) Query(ctx context.Context, query string) ([]*pb.Platform, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/player_perspectives.go b/endpoint/player_perspectives.go index ddbb98c..043b554 100644 --- a/endpoint/player_perspectives.go +++ b/endpoint/player_perspectives.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PlayerPerspectives struct { func NewPlayerPerspectives(request RequestFunc) *PlayerPerspectives { a := &PlayerPerspectives{ - BaseEndpoint[pb.PlayerPerspective]{ + BaseEndpoint: BaseEndpoint[pb.PlayerPerspective]{ endpointName: EPPlayerPerspectives, request: request, }, @@ -23,8 +24,8 @@ func NewPlayerPerspectives(request RequestFunc) *PlayerPerspectives { return a } -func (a *PlayerPerspectives) Query(query string) ([]*pb.PlayerPerspective, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PlayerPerspectives) Query(ctx context.Context, query string) ([]*pb.PlayerPerspective, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/popularity_primitives.go b/endpoint/popularity_primitives.go index 5aaad99..26a5456 100644 --- a/endpoint/popularity_primitives.go +++ b/endpoint/popularity_primitives.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -23,8 +24,8 @@ func NewPopularityPrimitives(request RequestFunc) *PopularityPrimitives { return a } -func (a *PopularityPrimitives) Query(query string) ([]*pb.PopularityPrimitive, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PopularityPrimitives) Query(ctx context.Context, query string) ([]*pb.PopularityPrimitive, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/popularity_types.go b/endpoint/popularity_types.go index 3c34b89..11ec807 100644 --- a/endpoint/popularity_types.go +++ b/endpoint/popularity_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type PopularityTypes struct { func NewPopularityTypes(request RequestFunc) *PopularityTypes { a := &PopularityTypes{ - BaseEndpoint[pb.PopularityType]{ + BaseEndpoint: BaseEndpoint[pb.PopularityType]{ endpointName: EPPopularityTypes, request: request, }, @@ -23,8 +24,8 @@ func NewPopularityTypes(request RequestFunc) *PopularityTypes { return a } -func (a *PopularityTypes) Query(query string) ([]*pb.PopularityType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *PopularityTypes) Query(ctx context.Context, query string) ([]*pb.PopularityType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/regions.go b/endpoint/regions.go index e44721b..7c72150 100644 --- a/endpoint/regions.go +++ b/endpoint/regions.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Regions struct { func NewRegions(request RequestFunc) *Regions { a := &Regions{ - BaseEndpoint[pb.Region]{ + BaseEndpoint: BaseEndpoint[pb.Region]{ endpointName: EPRegions, request: request, }, @@ -23,8 +24,8 @@ func NewRegions(request RequestFunc) *Regions { return a } -func (a *Regions) Query(query string) ([]*pb.Region, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Regions) Query(ctx context.Context, query string) ([]*pb.Region, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/release_date_regions.go b/endpoint/release_date_regions.go index c3321dc..ecb8ae3 100644 --- a/endpoint/release_date_regions.go +++ b/endpoint/release_date_regions.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type ReleaseDateRegions struct { func NewReleaseDateRegions(request RequestFunc) *ReleaseDateRegions { a := &ReleaseDateRegions{ - BaseEndpoint[pb.ReleaseDateRegion]{ + BaseEndpoint: BaseEndpoint[pb.ReleaseDateRegion]{ endpointName: EPReleaseDateRegions, request: request, }, @@ -23,8 +24,8 @@ func NewReleaseDateRegions(request RequestFunc) *ReleaseDateRegions { return a } -func (a *ReleaseDateRegions) Query(query string) ([]*pb.ReleaseDateRegion, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *ReleaseDateRegions) Query(ctx context.Context, query string) ([]*pb.ReleaseDateRegion, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/release_date_statuses.go b/endpoint/release_date_statuses.go index 7709b02..3c90fe4 100644 --- a/endpoint/release_date_statuses.go +++ b/endpoint/release_date_statuses.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type ReleaseDateStatuses struct { func NewReleaseDateStatuses(request RequestFunc) *ReleaseDateStatuses { a := &ReleaseDateStatuses{ - BaseEndpoint[pb.ReleaseDateStatus]{ + BaseEndpoint: BaseEndpoint[pb.ReleaseDateStatus]{ endpointName: EPReleaseDateStatuses, request: request, }, @@ -23,8 +24,8 @@ func NewReleaseDateStatuses(request RequestFunc) *ReleaseDateStatuses { return a } -func (a *ReleaseDateStatuses) Query(query string) ([]*pb.ReleaseDateStatus, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *ReleaseDateStatuses) Query(ctx context.Context, query string) ([]*pb.ReleaseDateStatus, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/release_dates.go b/endpoint/release_dates.go index 6fc7974..516e32a 100644 --- a/endpoint/release_dates.go +++ b/endpoint/release_dates.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type ReleaseDates struct { func NewReleaseDates(request RequestFunc) *ReleaseDates { a := &ReleaseDates{ - BaseEndpoint[pb.ReleaseDate]{ + BaseEndpoint: BaseEndpoint[pb.ReleaseDate]{ endpointName: EPReleaseDates, request: request, }, @@ -23,8 +24,8 @@ func NewReleaseDates(request RequestFunc) *ReleaseDates { return a } -func (a *ReleaseDates) Query(query string) ([]*pb.ReleaseDate, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *ReleaseDates) Query(ctx context.Context, query string) ([]*pb.ReleaseDate, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/screenshots.go b/endpoint/screenshots.go index e9eb967..90bceb1 100644 --- a/endpoint/screenshots.go +++ b/endpoint/screenshots.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Screenshots struct { func NewScreenshots(request RequestFunc) *Screenshots { a := &Screenshots{ - BaseEndpoint[pb.Screenshot]{ + BaseEndpoint: BaseEndpoint[pb.Screenshot]{ endpointName: EPScreenshots, request: request, }, @@ -23,8 +24,8 @@ func NewScreenshots(request RequestFunc) *Screenshots { return a } -func (a *Screenshots) Query(query string) ([]*pb.Screenshot, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Screenshots) Query(ctx context.Context, query string) ([]*pb.Screenshot, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/search.go b/endpoint/search.go index 19038d5..aa16db5 100644 --- a/endpoint/search.go +++ b/endpoint/search.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "encoding/json" "fmt" "io" @@ -34,8 +35,8 @@ func NewSearch(request RequestFunc) *Search { } } -func (a *Search) Search(query string) ([]*pb.Search, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Search) Search(ctx context.Context, query string) ([]*pb.Search, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/themes.go b/endpoint/themes.go index 011ab73..1d9bfab 100644 --- a/endpoint/themes.go +++ b/endpoint/themes.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Themes struct { func NewThemes(request RequestFunc) *Themes { a := &Themes{ - BaseEndpoint[pb.Theme]{ + BaseEndpoint: BaseEndpoint[pb.Theme]{ endpointName: EPThemes, request: request, }, @@ -23,8 +24,8 @@ func NewThemes(request RequestFunc) *Themes { return a } -func (a *Themes) Query(query string) ([]*pb.Theme, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Themes) Query(ctx context.Context, query string) ([]*pb.Theme, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/webhooks.go b/endpoint/webhooks.go index f04ca3c..e5eed61 100644 --- a/endpoint/webhooks.go +++ b/endpoint/webhooks.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "encoding/json" "fmt" "net/http" @@ -37,13 +38,13 @@ type WebhookResponse struct { UpdatedAt string `json:"updated_at"` } -func (a *Webhooks) Register(endpoint Name, secret, callbackUrl string, method WebhookMethod) (*WebhookResponse, error) { +func (a *Webhooks) Register(ctx context.Context, endpoint Name, secret, callbackUrl string, method WebhookMethod) (*WebhookResponse, error) { dataBody := url.Values{} dataBody.Set("url", callbackUrl) dataBody.Set("secret", secret) dataBody.Set("method", string(method)) - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s/webhooks/", endpoint), dataBody.Encode()) + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s/webhooks/", endpoint), dataBody.Encode()) if err != nil { return nil, fmt.Errorf("failed to make request: %s: %w", callbackUrl, err) @@ -61,8 +62,8 @@ func (a *Webhooks) Register(endpoint Name, secret, callbackUrl string, method We return &data, fmt.Errorf("failed to activate webhook: %s: %s", callbackUrl, resp.String()) } -func (a *Webhooks) Unregister(webhookId uint64) error { - resp, err := a.request("DELETE", fmt.Sprintf("https://api.igdb.com/v4/webhooks/%v", webhookId), "") +func (a *Webhooks) Unregister(ctx context.Context, webhookId uint64) error { + resp, err := a.request(ctx, "DELETE", fmt.Sprintf("https://api.igdb.com/v4/webhooks/%v", webhookId), "") if err != nil { return fmt.Errorf("failed to make request: %w", err) } @@ -74,8 +75,8 @@ func (a *Webhooks) Unregister(webhookId uint64) error { return fmt.Errorf("failed to unregister webhook: %s", resp.String()) } -func (a *Webhooks) List() ([]*WebhookResponse, error) { - resp, err := a.request("GET", "https://api.igdb.com/v4/webhooks/", "") +func (a *Webhooks) List(ctx context.Context) ([]*WebhookResponse, error) { + resp, err := a.request(ctx, "GET", "https://api.igdb.com/v4/webhooks/", "") if err != nil { return nil, fmt.Errorf("failed to make request: %w", err) } @@ -88,8 +89,8 @@ func (a *Webhooks) List() ([]*WebhookResponse, error) { return data, nil } -func (a *Webhooks) Get(webhookId uint64) (*WebhookResponse, error) { - resp, err := a.request("GET", fmt.Sprintf("https://api.igdb.com/v4/webhooks/%v", webhookId), "") +func (a *Webhooks) Get(ctx context.Context, webhookId uint64) (*WebhookResponse, error) { + resp, err := a.request(ctx, "GET", fmt.Sprintf("https://api.igdb.com/v4/webhooks/%v", webhookId), "") if err != nil { return nil, fmt.Errorf("failed to make request: %w", err) } diff --git a/endpoint/website_types.go b/endpoint/website_types.go index 54abad2..86567db 100644 --- a/endpoint/website_types.go +++ b/endpoint/website_types.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type WebsiteTypes struct { func NewWebsiteTypes(request RequestFunc) *WebsiteTypes { a := &WebsiteTypes{ - BaseEndpoint[pb.WebsiteType]{ + BaseEndpoint: BaseEndpoint[pb.WebsiteType]{ endpointName: EPWebsiteTypes, request: request, }, @@ -23,8 +24,8 @@ func NewWebsiteTypes(request RequestFunc) *WebsiteTypes { return a } -func (a *WebsiteTypes) Query(query string) ([]*pb.WebsiteType, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *WebsiteTypes) Query(ctx context.Context, query string) ([]*pb.WebsiteType, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/endpoint/websites.go b/endpoint/websites.go index 89632db..228116f 100644 --- a/endpoint/websites.go +++ b/endpoint/websites.go @@ -1,6 +1,7 @@ package endpoint import ( + "context" "fmt" pb "github.com/bestnite/go-igdb/proto" @@ -14,7 +15,7 @@ type Websites struct { func NewWebsites(request RequestFunc) *Websites { a := &Websites{ - BaseEndpoint[pb.Website]{ + BaseEndpoint: BaseEndpoint[pb.Website]{ endpointName: EPWebsites, request: request, }, @@ -23,8 +24,8 @@ func NewWebsites(request RequestFunc) *Websites { return a } -func (a *Websites) Query(query string) ([]*pb.Website, error) { - resp, err := a.request("POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) +func (a *Websites) Query(ctx context.Context, query string) ([]*pb.Website, error) { + resp, err := a.request(ctx, "POST", fmt.Sprintf("https://api.igdb.com/v4/%s.pb", a.endpointName), query) if err != nil { return nil, fmt.Errorf("failed to request: %w", err) } diff --git a/go.mod b/go.mod index 4e560d1..cefcd0f 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/PuerkitoBio/goquery v1.10.2 github.com/bestnite/go-flaresolverr v0.0.0-20250404141941-4644c2e66727 github.com/go-resty/resty/v2 v2.16.5 + golang.org/x/time v0.14.0 google.golang.org/protobuf v1.36.6 ) diff --git a/go.sum b/go.sum index 882dead..4485727 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/rate_limiter.go b/rate_limiter.go deleted file mode 100644 index 6bd1b90..0000000 --- a/rate_limiter.go +++ /dev/null @@ -1,48 +0,0 @@ -package igdb - -import ( - "sync" - "time" -) - -type rateLimiter struct { - mu sync.Mutex - rate int - interval time.Duration - tokens int - lastRefill time.Time -} - -func newRateLimiter(rate int) *rateLimiter { - return &rateLimiter{ - rate: rate, - interval: time.Second, - tokens: rate, - lastRefill: time.Now(), - } -} - -func (r *rateLimiter) wait() { - r.mu.Lock() - defer r.mu.Unlock() - - now := time.Now() - elapsed := now.Sub(r.lastRefill) - - if elapsed >= r.interval { - r.tokens = r.rate - r.lastRefill = now - } - - if r.tokens <= 0 { - waitTime := r.interval - elapsed - r.mu.Unlock() - time.Sleep(waitTime) - r.mu.Lock() - r.tokens = r.rate - 1 - r.lastRefill = time.Now() - return - } - - r.tokens-- -} diff --git a/request.go b/request.go index 0ebf223..8c20b78 100644 --- a/request.go +++ b/request.go @@ -7,23 +7,19 @@ import ( "github.com/go-resty/resty/v2" ) -var client *resty.Client +type SilentLogger struct{} -func init() { - client = resty.New() - client.SetRetryCount(3).SetRetryWaitTime(3 * time.Second).AddRetryCondition( +func (s SilentLogger) Errorf(string, ...any) {} +func (s SilentLogger) Warnf(string, ...any) {} +func (s SilentLogger) Debugf(string, ...any) {} + +func NewRestyClient() *resty.Client { + return resty.New().SetRetryCount(10).SetRetryWaitTime(3 * time.Second).AddRetryCondition( func(r *resty.Response, err error) bool { - return err != nil || r.StatusCode() == http.StatusTooManyRequests + if err != nil || r.StatusCode() == http.StatusTooManyRequests { + return true + } + return false }, ) } - -func request() *resty.Request { - return client.R().SetLogger(disableLogger{}).SetHeader("Accept-Charset", "utf-8").SetHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:133.0) Gecko/20100101 Firefox/133.0") -} - -type disableLogger struct{} - -func (d disableLogger) Errorf(string, ...interface{}) {} -func (d disableLogger) Warnf(string, ...interface{}) {} -func (d disableLogger) Debugf(string, ...interface{}) {} diff --git a/token.go b/token.go index ff37e2c..926b8c5 100644 --- a/token.go +++ b/token.go @@ -1,31 +1,32 @@ package igdb import ( + "context" "encoding/json" "fmt" "net/url" "time" ) -type TwitchToken struct { +type twitchToken struct { clientID string clientSecret string token string expires time.Time } -func NewTwitchToken(clientID, clientSecret string) *TwitchToken { - return &TwitchToken{ +func newTwitchToken(clientID, clientSecret string) *twitchToken { + return &twitchToken{ clientID: clientID, clientSecret: clientSecret, } } -func (t *TwitchToken) getToken() (string, error) { +func (t *twitchToken) GetToken(ctx context.Context) (string, error) { if t.token != "" && time.Now().Before(t.expires) { return t.token, nil } - token, expires, err := t.loginTwitch() + token, expires, err := t.LoginTwitch(ctx) if err != nil { return "", fmt.Errorf("failed to login twitch: %w", err) } @@ -34,7 +35,7 @@ func (t *TwitchToken) getToken() (string, error) { return token, nil } -func (t *TwitchToken) loginTwitch() (string, time.Duration, error) { +func (t *twitchToken) LoginTwitch(ctx context.Context) (string, time.Duration, error) { baseURL, _ := url.Parse("https://id.twitch.tv/oauth2/token") params := url.Values{} params.Add("client_id", t.clientID) @@ -42,7 +43,7 @@ func (t *TwitchToken) loginTwitch() (string, time.Duration, error) { params.Add("grant_type", "client_credentials") baseURL.RawQuery = params.Encode() - resp, err := request().SetHeader("User-Agent", "").Post(baseURL.String()) + resp, err := NewRestyClient().R().SetContext(ctx).SetHeader("User-Agent", "").Post(baseURL.String()) if err != nil { return "", 0, fmt.Errorf("failed to make request: %s: %w", baseURL.String(), err) }