{"id":38713437,"url":"https://github.com/ergofriend/remix-auth-twitch","last_synced_at":"2026-01-17T11:01:22.150Z","repository":{"id":57677147,"uuid":"489343596","full_name":"ergofriend/remix-auth-twitch","owner":"ergofriend","description":"Remix Auth Plugin for Twitch","archived":false,"fork":false,"pushed_at":"2024-02-10T08:22:35.000Z","size":492,"stargazers_count":4,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T15:02:07.680Z","etag":null,"topics":["authentication","oauth","oauth2","remix","remix-auth","remix-auth-twitch","remix-run","twitch","twitch-api"],"latest_commit_sha":null,"homepage":"https://remix-auth-twitch.pages.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ergofriend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-06T12:20:31.000Z","updated_at":"2023-12-13T21:12:04.000Z","dependencies_parsed_at":"2024-10-26T01:41:14.621Z","dependency_job_id":"737918a9-b50b-48b7-bd80-f3c812f1fbc5","html_url":"https://github.com/ergofriend/remix-auth-twitch","commit_stats":{"total_commits":87,"total_committers":4,"mean_commits":21.75,"dds":0.04597701149425293,"last_synced_commit":"feeef54b8197fe1ab7172081b25f896372341d57"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":"sergiodxa/remix-auth-strategy-template","purl":"pkg:github/ergofriend/remix-auth-twitch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergofriend%2Fremix-auth-twitch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergofriend%2Fremix-auth-twitch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergofriend%2Fremix-auth-twitch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergofriend%2Fremix-auth-twitch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ergofriend","download_url":"https://codeload.github.com/ergofriend/remix-auth-twitch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergofriend%2Fremix-auth-twitch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28506593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T10:25:30.148Z","status":"ssl_error","status_checked_at":"2026-01-17T10:25:29.718Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","oauth","oauth2","remix","remix-auth","remix-auth-twitch","remix-run","twitch","twitch-api"],"created_at":"2026-01-17T11:01:19.847Z","updated_at":"2026-01-17T11:01:21.629Z","avatar_url":"https://github.com/ergofriend.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Remix Auth Twitch\n\nDemo app: https://remix-auth-twitch.pages.dev/\n\nsee also [example/README.md](example/README.md)\n\n## Remix Auth plugin for Twitch\n\n[Authentication | Twitch Developers](https://dev.twitch.tv/docs/authentication)\n\n## Supported runtimes\n\n| Runtime    | Has Support |\n| ---------- | ----------- |\n| Node.js    | ✅          |\n| Cloudflare | ✅          |\n\n## How to use\n\n### Installation\n\nInstall remix-auth-twitch npm module along with remix-auth:\n\n```\nnpm install remix-auth-twitch remix-auth\n\nyarn add remix-auth-twitch remix-auth\n```\n\n### Prerequisites\n\n- Your app is registered to Twitch and has consumer key and secret issued https://dev.twitch.tv/docs/authentication/register-app\n- Your app has [remix-auth](https://github.com/sergiodxa/remix-auth) set up and `authenticator` is provided:\n  ```typescript\n  // app/services/auth.server.ts\n  export let authenticator = ...;\n  ```\n\n### Add remix project\n\nSee also [na2hiro/remix-auth-twitter: Remix Auth plugin for Twitter OAuth 1.0a](https://github.com/na2hiro/remix-auth-twitter)\n\n```typescript\nconst twitchClientId = process.env.TWITCH_API_CLIENT\nconst twitchClientSecret = process.env.TWITCH_API_SECRET\nconst twitchStrategy = new TwitchStrategy(\n  {\n    clientId: twitchClientId,\n    clientSecret: twitchClientSecret,\n    callbackURL: 'http://localhost:3000/login/callback',\n    includeEmail: true,\n  },\n  async ({ profile, token }) =\u003e {\n    return {\n      id: profile.id,\n      screen_name: profile.display_name,\n      name: profile.login,\n      email: profile.email,\n      accessToken: token.access_token,\n    }\n  }\n)\nauthenticator.use(twitchStrategy, 'twitch')\n```\n\n### [Validating Tokens | Twitch Developers](https://dev.twitch.tv/docs/authentication/validate-tokens)\n\n\u003e Any third-party app that calls the Twitch APIs and maintains an OAuth session must call the /validate endpoint to verify that the access token is still valid. This includes web apps, mobile apps, desktop apps, extensions, and chatbots. Your app must validate the OAuth token when it starts and on an hourly basis thereafter.\n\nFirst Validation is build-in TwitchStrategy, but Your application must validate it on an hourly basis.\n\n```ts\ntry {\n  await twitchStrategy.validate({ token: accessToken })\n} catch {\n  authenticator.logout(request, { redirectTo: '/login' })\n}\n```\n\n## Related\n\n- [@na2hiro](https://github.com/na2hiro) [remix-auth-twitter: Remix Auth plugin for Twitter OAuth 1.0a](https://github.com/na2hiro/remix-auth-twitter)\n- [@sergiodxa](https://github.com/sergiodxa) [remix-auth-strategy-template: A template for creating a new Remix Auth strategy.](https://github.com/sergiodxa/remix-auth-strategy-template)\n- [@FezVrasta](https://github.com/FezVrasta) [Firebase Twitch OAuth Flow (Cloud Functions implementation)](https://gist.github.com/FezVrasta/57d29cd2bbc4ed80e169780035f748cf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergofriend%2Fremix-auth-twitch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fergofriend%2Fremix-auth-twitch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergofriend%2Fremix-auth-twitch/lists"}