{"id":21635248,"url":"https://github.com/kravetsone/elysia-oauth2","last_synced_at":"2026-03-16T21:04:29.888Z","repository":{"id":232987382,"uuid":"732771184","full_name":"kravetsone/elysia-oauth2","owner":"kravetsone","description":"Elysia plugin for OAuth 2.0 Authorization Flow with more than 42 providers","archived":false,"fork":false,"pushed_at":"2024-12-06T12:10:53.000Z","size":48,"stargazers_count":45,"open_issues_count":3,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-06T13:40:54.306Z","etag":null,"topics":["auth","authorization","elysia","google","oauth2"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kravetsone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-12-17T19:17:19.000Z","updated_at":"2024-12-06T12:10:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"096f88c5-269d-49ea-9d82-60ed87de509c","html_url":"https://github.com/kravetsone/elysia-oauth2","commit_stats":null,"previous_names":["kravetsone/elysia-oauth2"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kravetsone%2Felysia-oauth2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kravetsone%2Felysia-oauth2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kravetsone%2Felysia-oauth2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kravetsone%2Felysia-oauth2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kravetsone","download_url":"https://codeload.github.com/kravetsone/elysia-oauth2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230561013,"owners_count":18245324,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["auth","authorization","elysia","google","oauth2"],"created_at":"2024-11-25T03:20:22.962Z","updated_at":"2026-03-16T21:04:29.857Z","avatar_url":"https://github.com/kravetsone.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# elysia-oauth2\n\n\u003cdiv align=\"center\"\u003e\n\n[![npm](https://img.shields.io/npm/v/elysia-oauth2?logo=npm\u0026style=flat\u0026labelColor=000\u0026color=3b82f6)](https://www.npmjs.org/package/elysia-oauth2)\n[![npm downloads](https://img.shields.io/npm/dw/elysia-oauth2?logo=npm\u0026style=flat\u0026labelColor=000\u0026color=3b82f6)](https://www.npmjs.org/package/elysia-oauth2)\n\n\u003c!-- [![JSR](https://jsr.io/badges/elysia-oauth2)](https://jsr.io/elysia-oauth2)\n[![JSR Score](https://jsr.io/badges/elysia-oauth2/score)](https://jsr.io/elysia-oauth2) --\u003e\n\n\u003c/div\u003e\n\n[Elysia](https://elysiajs.com/) plugin for [OAuth 2.0](https://en.wikipedia.org/wiki/OAuth) Authorization Flow.\n\nPowered by [Arctic@2](https://arcticjs.dev/) with more than **63** oauth2 providers!\n\n## Installation\n\n```bash\nbun install elysia-oauth2 arctic\n```\n\n### Update\n\nif [Arctic](https://arcticjs.dev/) will release some new providers, you can update it with\n\n```bash\nbun install arctic@latest\n```\n\n## Example\n\n```ts\nimport { Elysia } from \"elysia\";\nimport { oauth2 } from \"elysia-oauth2\";\n\nnew Elysia()\n    .use(\n        oauth2({\n            VK: [\n                \"clientID\",\n                \"clientSecret\",\n                \"https://example.com/auth/vk/callback\",\n            ],\n        })\n    )\n    .get(\"/auth/vk\", ({ oauth2 }) =\u003e oauth2.redirect(\"VK\"))\n    .get(\"/auth/vk/callback\", async ({ oauth2 }) =\u003e {\n        const tokens = await oauth2.authorize(\"VK\");\n\n        const accessToken = tokens.accessToken();\n\n        // send request to API with token\n    })\n    .listen(3000);\n```\n\n\u003e [!IMPORTANT]\n\u003e You should return `oauth2.redirect` from the handler, because it relies on elysia's [redirect()](https://elysiajs.com/essential/handler.html#redirect) which need to return `Response`\n\n### CreateURL example\n\n```ts\nimport { Elysia } from \"elysia\";\nimport { oauth2 } from \"elysia-oauth2\";\n\nnew Elysia()\n    .use(\n        oauth2({\n            Google: [\n                \"clientID\",\n                \"clientSecret\",\n                \"https://example.com/auth/google/callback\",\n            ],\n        })\n    )\n    .get(\"/auth/google\", async ({ oauth2, redirect }) =\u003e {\n        const url = oauth2.createURL(\"Google\", [\"email\"]);\n        url.searchParams.set(\"access_type\", \"offline\");\n\n        return redirect(url.href);\n    })\n    .get(\"/auth/google/callback\", async ({ oauth2 }) =\u003e {\n        const tokens = await oauth2.authorize(\"Google\");\n\n        const accessToken = tokens.accessToken();\n\n        // send request to API with token\n    })\n    .listen(3000);\n```\n\n## Options\n\nYou can configure plugin by providing options object in second argument.\n\n```ts\nimport { Elysia } from \"elysia\";\nimport { oauth2 } from \"elysia-oauth2\";\n\nnew Elysia().use(\n    oauth2(\n        {},\n        {\n            cookie: {\n                // defaults\n                secure: true,\n                sameSite: \"lax\",\n                path: \"/\",\n                httpOnly: true,\n                maxAge: 60 * 30, // 30 min\n            },\n        }\n    )\n);\n```\n\n## Supported providers\n\n- [42 School](https://arcticjs.dev/providers/42)\n- [Amazon Cognito](https://arcticjs.dev/providers/amazon-cognito)\n- [AniList](https://arcticjs.dev/providers/anilist)\n- [Apple](https://arcticjs.dev/providers/apple)\n- [Atlassian](https://arcticjs.dev/providers/atlassian)\n- [Auth0](https://arcticjs.dev/providers/auth0)\n- [Authentik](https://arcticjs.dev/providers/authentik)\n- [Autodesk Platform Services](https://arcticjs.dev/providers/autodesk)\n- [Battle.net](https://arcticjs.dev/providers/battlenet)\n- [Bitbucket](https://arcticjs.dev/providers/bitbucket)\n- [Box](https://arcticjs.dev/providers/box)\n- [Bungie](https://arcticjs.dev/providers/bungie)\n- [Coinbase](https://arcticjs.dev/providers/coinbase)\n- [Discord](https://arcticjs.dev/providers/discord)\n- [DonationAlerts](https://arcticjs.dev/providers/donation-alerts)\n- [Dribbble](https://arcticjs.dev/providers/dribbble)\n- [Dropbox](https://arcticjs.dev/providers/dropbox)\n- [Epic Games](https://arcticjs.dev/providers/epicgames)\n- [Etsy](https://arcticjs.dev/providers/etsy)\n- [Facebook](https://arcticjs.dev/providers/facebook)\n- [Figma](https://arcticjs.dev/providers/figma)\n- [Gitea](https://arcticjs.dev/providers/gitea)\n- [GitHub](https://arcticjs.dev/providers/github)\n- [GitLab](https://arcticjs.dev/providers/gitlab)\n- [Google](https://arcticjs.dev/providers/google)\n- [Intuit](https://arcticjs.dev/providers/intuit)\n- [Kakao](https://arcticjs.dev/providers/kakao)\n- [KeyCloak](https://arcticjs.dev/providers/keycloak)\n- [Kick](https://arcticjs.dev/providers/kick)\n- [Lichess](https://arcticjs.dev/providers/lichess)\n- [Line](https://arcticjs.dev/providers/line)\n- [Linear](https://arcticjs.dev/providers/linear)\n- [LinkedIn](https://arcticjs.dev/providers/linkedin)\n- [Mastodon](https://arcticjs.dev/providers/mastodon)\n- [MercadoLibre](https://arcticjs.dev/providers/mercadolibre)\n- [MercadoPago](https://arcticjs.dev/providers/mercadopago)\n- [Microsoft Entra ID](https://arcticjs.dev/providers/microsoft-entra-id)\n- [MyAnimeList](https://arcticjs.dev/providers/myanimelist)\n- [Naver](https://arcticjs.dev/providers/naver)\n- [Notion](https://arcticjs.dev/providers/notion)\n- [Okta](https://arcticjs.dev/providers/okta)\n- [osu!](https://arcticjs.dev/providers/osu)\n- [Patreon](https://arcticjs.dev/providers/patreon)\n- [Polar](https://arcticjs.dev/providers/polar)\n- [Reddit](https://arcticjs.dev/providers/reddit)\n- [Roblox](https://arcticjs.dev/providers/roblox)\n- [Salesforce](https://arcticjs.dev/providers/salesforce)\n- [Shikimori](https://arcticjs.dev/providers/shikimori)\n- [Slack](https://arcticjs.dev/providers/slack)\n- [Spotify](https://arcticjs.dev/providers/spotify)\n- [Start.gg](https://arcticjs.dev/providers/startgg)\n- [Strava](https://arcticjs.dev/providers/strava)\n- [Synology](https://arcticjs.dev/providers/synology)\n- [TikTok](https://arcticjs.dev/providers/tiktok)\n- [Tiltify](https://arcticjs.dev/providers/tiltify)\n- [Tumblr](https://arcticjs.dev/providers/tumblr)\n- [Twitch](https://arcticjs.dev/providers/twitch)\n- [Twitter](https://arcticjs.dev/providers/twitter)\n- [VK](https://arcticjs.dev/providers/vk)\n- [WorkOS](https://arcticjs.dev/providers/workos)\n- [Yahoo](https://arcticjs.dev/providers/yahoo)\n- [Yandex](https://arcticjs.dev/providers/yandex)\n- [Zoom](https://arcticjs.dev/providers/zoom)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkravetsone%2Felysia-oauth2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkravetsone%2Felysia-oauth2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkravetsone%2Felysia-oauth2/lists"}