package auth type Client struct { clientId string clientSecret string redirectUri string stateStorage StateStorage } func NewClient(clientId string, clientSecret string, redirectUri string) *Client { return &Client{ clientId: clientId, clientSecret: clientSecret, redirectUri: redirectUri, stateStorage: NewHttpCookieStateStorage(StateStorageCookie), } } // GetToken exchanges an authorization code for an access token. // // https://dev.twitch.tv/docs/authentication/getting-tokens-oidc/#oidc-authorization-code-grant-flow func (c *Client) GetToken(code string) (*Token, error) { return GetToken(&GetTokenParams{ ClientId: c.clientId, ClientSecret: c.clientSecret, Code: code, GrantType: "authorization_code", RedirectUri: c.redirectUri, }) } // RefreshToken exchanges a refresh token for an access token. // // https://dev.twitch.tv/docs/authentication/refresh-tokens/ func (c *Client) RefreshToken(token *Token) (*Token, error) { return GetToken(&GetTokenParams{ ClientId: c.clientId, ClientSecret: c.clientSecret, Code: token.RefreshToken, GrantType: "refresh_token", RedirectUri: c.redirectUri, }) } // WithStateStorage sets the instance's state storage, // which is used to store the state parameter between requests. // // By default, the http cookie state storage is used. func (c *Client) WithStateStorage(storage StateStorage) *Client { c.stateStorage = storage return c }