@mulverse/mulguard-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. package/README.md +24 -0
  2. package/adapters.d.ts +522 -0
  3. package/adapters.d.ts.map +1 -0
  4. package/adapters.js +170 -0
  5. package/errors.d.ts +429 -0
  6. package/errors.d.ts.map +1 -0
  7. package/errors.js +473 -0
  8. package/index.d.ts +547 -0
  9. package/index.d.ts.map +1 -0
  10. package/index.js +142 -0
  11. package/jwt.d.ts +132 -0
  12. package/jwt.d.ts.map +1 -0
  13. package/jwt.js +123 -0
  14. package/lib/actions/callback/handle-login.d.ts +35 -0
  15. package/lib/actions/callback/handle-login.d.ts.map +1 -0
  16. package/lib/actions/callback/handle-login.js +275 -0
  17. package/lib/actions/callback/index.d.ts +5 -0
  18. package/lib/actions/callback/index.d.ts.map +1 -0
  19. package/lib/actions/callback/index.js +409 -0
  20. package/lib/actions/callback/oauth/callback.d.ts +36 -0
  21. package/lib/actions/callback/oauth/callback.d.ts.map +1 -0
  22. package/lib/actions/callback/oauth/callback.js +248 -0
  23. package/lib/actions/callback/oauth/checks.d.ts +70 -0
  24. package/lib/actions/callback/oauth/checks.d.ts.map +1 -0
  25. package/lib/actions/callback/oauth/checks.js +188 -0
  26. package/lib/actions/callback/oauth/csrf-token.d.ts +33 -0
  27. package/lib/actions/callback/oauth/csrf-token.d.ts.map +1 -0
  28. package/lib/actions/callback/oauth/csrf-token.js +39 -0
  29. package/lib/actions/index.d.ts +6 -0
  30. package/lib/actions/index.d.ts.map +1 -0
  31. package/lib/actions/index.js +5 -0
  32. package/lib/actions/session.d.ts +5 -0
  33. package/lib/actions/session.d.ts.map +1 -0
  34. package/lib/actions/session.js +127 -0
  35. package/lib/actions/signin/authorization-url.d.ts +12 -0
  36. package/lib/actions/signin/authorization-url.d.ts.map +1 -0
  37. package/lib/actions/signin/authorization-url.js +94 -0
  38. package/lib/actions/signin/index.d.ts +4 -0
  39. package/lib/actions/signin/index.d.ts.map +1 -0
  40. package/lib/actions/signin/index.js +22 -0
  41. package/lib/actions/signin/send-token.d.ts +10 -0
  42. package/lib/actions/signin/send-token.d.ts.map +1 -0
  43. package/lib/actions/signin/send-token.js +98 -0
  44. package/lib/actions/signout.d.ts +11 -0
  45. package/lib/actions/signout.d.ts.map +1 -0
  46. package/lib/actions/signout.js +30 -0
  47. package/lib/actions/webauthn-options.d.ts +8 -0
  48. package/lib/actions/webauthn-options.d.ts.map +1 -0
  49. package/lib/actions/webauthn-options.js +60 -0
  50. package/lib/index.d.ts +2 -0
  51. package/lib/index.d.ts.map +1 -0
  52. package/lib/index.js +70 -0
  53. package/lib/init.d.ts +25 -0
  54. package/lib/init.d.ts.map +1 -0
  55. package/lib/init.js +172 -0
  56. package/lib/pages/error.d.ts +17 -0
  57. package/lib/pages/error.d.ts.map +1 -0
  58. package/lib/pages/error.js +40 -0
  59. package/lib/pages/index.d.ts +42 -0
  60. package/lib/pages/index.d.ts.map +1 -0
  61. package/lib/pages/index.js +136 -0
  62. package/lib/pages/signin.d.ts +10 -0
  63. package/lib/pages/signin.d.ts.map +1 -0
  64. package/lib/pages/signin.js +75 -0
  65. package/lib/pages/signout.d.ts +8 -0
  66. package/lib/pages/signout.d.ts.map +1 -0
  67. package/lib/pages/signout.js +17 -0
  68. package/lib/pages/styles.d.ts +3 -0
  69. package/lib/pages/styles.d.ts.map +1 -0
  70. package/lib/pages/styles.js +381 -0
  71. package/lib/pages/verify-request.d.ts +8 -0
  72. package/lib/pages/verify-request.d.ts.map +1 -0
  73. package/lib/pages/verify-request.js +11 -0
  74. package/lib/symbols.d.ts +50 -0
  75. package/lib/symbols.d.ts.map +1 -0
  76. package/lib/symbols.js +57 -0
  77. package/lib/utils/actions.d.ts +3 -0
  78. package/lib/utils/actions.d.ts.map +1 -0
  79. package/lib/utils/actions.js +14 -0
  80. package/lib/utils/assert.d.ts +14 -0
  81. package/lib/utils/assert.d.ts.map +1 -0
  82. package/lib/utils/assert.js +168 -0
  83. package/lib/utils/callback-url.d.ts +17 -0
  84. package/lib/utils/callback-url.d.ts.map +1 -0
  85. package/lib/utils/callback-url.js +27 -0
  86. package/lib/utils/cookie.d.ts +111 -0
  87. package/lib/utils/cookie.d.ts.map +1 -0
  88. package/lib/utils/cookie.js +205 -0
  89. package/lib/utils/date.d.ts +7 -0
  90. package/lib/utils/date.d.ts.map +1 -0
  91. package/lib/utils/date.js +8 -0
  92. package/lib/utils/email.d.ts +20 -0
  93. package/lib/utils/email.d.ts.map +1 -0
  94. package/lib/utils/email.js +57 -0
  95. package/lib/utils/env.d.ts +9 -0
  96. package/lib/utils/env.d.ts.map +1 -0
  97. package/lib/utils/env.js +96 -0
  98. package/lib/utils/logger.d.ts +18 -0
  99. package/lib/utils/logger.d.ts.map +1 -0
  100. package/lib/utils/logger.js +50 -0
  101. package/lib/utils/merge.d.ts +3 -0
  102. package/lib/utils/merge.d.ts.map +1 -0
  103. package/lib/utils/merge.js +23 -0
  104. package/lib/utils/providers.d.ts +19 -0
  105. package/lib/utils/providers.d.ts.map +1 -0
  106. package/lib/utils/providers.js +149 -0
  107. package/lib/utils/session.d.ts +7 -0
  108. package/lib/utils/session.d.ts.map +1 -0
  109. package/lib/utils/session.js +29 -0
  110. package/lib/utils/web.d.ts +10 -0
  111. package/lib/utils/web.d.ts.map +1 -0
  112. package/lib/utils/web.js +109 -0
  113. package/lib/utils/webauthn-client.d.ts +30 -0
  114. package/lib/utils/webauthn-client.d.ts.map +1 -0
  115. package/lib/utils/webauthn-client.js +197 -0
  116. package/lib/utils/webauthn-utils.d.ts +81 -0
  117. package/lib/utils/webauthn-utils.d.ts.map +1 -0
  118. package/lib/utils/webauthn-utils.js +343 -0
  119. package/lib/vendored/cookie.d.ts +120 -0
  120. package/lib/vendored/cookie.d.ts.map +1 -0
  121. package/lib/vendored/cookie.js +237 -0
  122. package/package.json +118 -0
  123. package/providers/42-school.d.ts +240 -0
  124. package/providers/42-school.d.ts.map +1 -0
  125. package/providers/42-school.js +78 -0
  126. package/providers/apple.d.ts +149 -0
  127. package/providers/apple.d.ts.map +1 -0
  128. package/providers/apple.js +104 -0
  129. package/providers/asgardeo.d.ts +102 -0
  130. package/providers/asgardeo.d.ts.map +1 -0
  131. package/providers/asgardeo.js +93 -0
  132. package/providers/atlassian.d.ts +94 -0
  133. package/providers/atlassian.d.ts.map +1 -0
  134. package/providers/atlassian.js +84 -0
  135. package/providers/auth0.d.ts +116 -0
  136. package/providers/auth0.d.ts.map +1 -0
  137. package/providers/auth0.js +49 -0
  138. package/providers/authentik.d.ts +90 -0
  139. package/providers/authentik.d.ts.map +1 -0
  140. package/providers/authentik.js +65 -0
  141. package/providers/azure-ad-b2c.d.ts +104 -0
  142. package/providers/azure-ad-b2c.d.ts.map +1 -0
  143. package/providers/azure-ad-b2c.js +100 -0
  144. package/providers/azure-ad.d.ts +19 -0
  145. package/providers/azure-ad.d.ts.map +1 -0
  146. package/providers/azure-ad.js +23 -0
  147. package/providers/azure-devops.d.ts +128 -0
  148. package/providers/azure-devops.d.ts.map +1 -0
  149. package/providers/azure-devops.js +158 -0
  150. package/providers/bankid-no.d.ts +134 -0
  151. package/providers/bankid-no.d.ts.map +1 -0
  152. package/providers/bankid-no.js +65 -0
  153. package/providers/battlenet.d.ts +85 -0
  154. package/providers/battlenet.d.ts.map +1 -0
  155. package/providers/battlenet.js +81 -0
  156. package/providers/beyondidentity.d.ts +77 -0
  157. package/providers/beyondidentity.d.ts.map +1 -0
  158. package/providers/beyondidentity.js +84 -0
  159. package/providers/bitbucket.d.ts +89 -0
  160. package/providers/bitbucket.d.ts.map +1 -0
  161. package/providers/bitbucket.js +92 -0
  162. package/providers/box.d.ts +63 -0
  163. package/providers/box.d.ts.map +1 -0
  164. package/providers/box.js +73 -0
  165. package/providers/boxyhq-saml.d.ts +121 -0
  166. package/providers/boxyhq-saml.d.ts.map +1 -0
  167. package/providers/boxyhq-saml.js +127 -0
  168. package/providers/bungie.d.ts +167 -0
  169. package/providers/bungie.d.ts.map +1 -0
  170. package/providers/bungie.js +174 -0
  171. package/providers/click-up.d.ts +75 -0
  172. package/providers/click-up.d.ts.map +1 -0
  173. package/providers/click-up.js +89 -0
  174. package/providers/cognito.d.ts +81 -0
  175. package/providers/cognito.d.ts.map +1 -0
  176. package/providers/cognito.js +73 -0
  177. package/providers/coinbase.d.ts +69 -0
  178. package/providers/coinbase.d.ts.map +1 -0
  179. package/providers/coinbase.js +78 -0
  180. package/providers/concept2.d.ts +81 -0
  181. package/providers/concept2.d.ts.map +1 -0
  182. package/providers/concept2.js +86 -0
  183. package/providers/credentials.d.ts +132 -0
  184. package/providers/credentials.d.ts.map +1 -0
  185. package/providers/credentials.js +74 -0
  186. package/providers/descope.d.ts +91 -0
  187. package/providers/descope.d.ts.map +1 -0
  188. package/providers/descope.js +78 -0
  189. package/providers/discord.d.ts +139 -0
  190. package/providers/discord.d.ts.map +1 -0
  191. package/providers/discord.js +86 -0
  192. package/providers/dribbble.d.ts +88 -0
  193. package/providers/dribbble.d.ts.map +1 -0
  194. package/providers/dribbble.js +85 -0
  195. package/providers/dropbox.d.ts +65 -0
  196. package/providers/dropbox.d.ts.map +1 -0
  197. package/providers/dropbox.js +88 -0
  198. package/providers/duende-identity-server6.d.ts +91 -0
  199. package/providers/duende-identity-server6.d.ts.map +1 -0
  200. package/providers/duende-identity-server6.js +80 -0
  201. package/providers/email.d.ts +41 -0
  202. package/providers/email.d.ts.map +1 -0
  203. package/providers/email.js +18 -0
  204. package/providers/eventbrite.d.ts +78 -0
  205. package/providers/eventbrite.d.ts.map +1 -0
  206. package/providers/eventbrite.js +88 -0
  207. package/providers/eveonline.d.ts +94 -0
  208. package/providers/eveonline.d.ts.map +1 -0
  209. package/providers/eveonline.js +92 -0
  210. package/providers/facebook.d.ts +84 -0
  211. package/providers/facebook.d.ts.map +1 -0
  212. package/providers/facebook.js +93 -0
  213. package/providers/faceit.d.ts +64 -0
  214. package/providers/faceit.d.ts.map +1 -0
  215. package/providers/faceit.js +74 -0
  216. package/providers/figma.d.ts +75 -0
  217. package/providers/figma.d.ts.map +1 -0
  218. package/providers/figma.js +81 -0
  219. package/providers/forwardemail.d.ts +4 -0
  220. package/providers/forwardemail.d.ts.map +1 -0
  221. package/providers/forwardemail.js +32 -0
  222. package/providers/foursquare.d.ts +71 -0
  223. package/providers/foursquare.d.ts.map +1 -0
  224. package/providers/foursquare.js +91 -0
  225. package/providers/freshbooks.d.ts +66 -0
  226. package/providers/freshbooks.d.ts.map +1 -0
  227. package/providers/freshbooks.js +76 -0
  228. package/providers/frontegg.d.ts +95 -0
  229. package/providers/frontegg.d.ts.map +1 -0
  230. package/providers/frontegg.js +88 -0
  231. package/providers/fusionauth.d.ts +279 -0
  232. package/providers/fusionauth.d.ts.map +1 -0
  233. package/providers/fusionauth.js +292 -0
  234. package/providers/github.d.ts +127 -0
  235. package/providers/github.d.ts.map +1 -0
  236. package/providers/github.js +115 -0
  237. package/providers/gitlab.d.ts +115 -0
  238. package/providers/gitlab.d.ts.map +1 -0
  239. package/providers/gitlab.js +75 -0
  240. package/providers/google.d.ts +138 -0
  241. package/providers/google.d.ts.map +1 -0
  242. package/providers/google.js +119 -0
  243. package/providers/hubspot.d.ts +76 -0
  244. package/providers/hubspot.d.ts.map +1 -0
  245. package/providers/hubspot.js +93 -0
  246. package/providers/huggingface.d.ts +216 -0
  247. package/providers/huggingface.d.ts.map +1 -0
  248. package/providers/huggingface.js +101 -0
  249. package/providers/identity-server4.d.ts +69 -0
  250. package/providers/identity-server4.d.ts.map +1 -0
  251. package/providers/identity-server4.js +64 -0
  252. package/providers/index.d.ts +61 -0
  253. package/providers/index.d.ts.map +1 -0
  254. package/providers/index.js +3 -0
  255. package/providers/instagram.d.ts +74 -0
  256. package/providers/instagram.d.ts.map +1 -0
  257. package/providers/instagram.js +87 -0
  258. package/providers/kakao.d.ts +148 -0
  259. package/providers/kakao.d.ts.map +1 -0
  260. package/providers/kakao.js +103 -0
  261. package/providers/keycloak.d.ts +100 -0
  262. package/providers/keycloak.d.ts.map +1 -0
  263. package/providers/keycloak.js +73 -0
  264. package/providers/kinde.d.ts +73 -0
  265. package/providers/kinde.d.ts.map +1 -0
  266. package/providers/kinde.js +51 -0
  267. package/providers/line.d.ts +83 -0
  268. package/providers/line.d.ts.map +1 -0
  269. package/providers/line.js +73 -0
  270. package/providers/linkedin.d.ts +77 -0
  271. package/providers/linkedin.d.ts.map +1 -0
  272. package/providers/linkedin.js +65 -0
  273. package/providers/logto.d.ts +98 -0
  274. package/providers/logto.d.ts.map +1 -0
  275. package/providers/logto.js +81 -0
  276. package/providers/loops.d.ts +40 -0
  277. package/providers/loops.d.ts.map +1 -0
  278. package/providers/loops.js +59 -0
  279. package/providers/mailchimp.d.ts +66 -0
  280. package/providers/mailchimp.d.ts.map +1 -0
  281. package/providers/mailchimp.js +76 -0
  282. package/providers/mailgun.d.ts +55 -0
  283. package/providers/mailgun.d.ts.map +1 -0
  284. package/providers/mailgun.js +74 -0
  285. package/providers/mailru.d.ts +63 -0
  286. package/providers/mailru.d.ts.map +1 -0
  287. package/providers/mailru.js +61 -0
  288. package/providers/mastodon.d.ts +90 -0
  289. package/providers/mastodon.d.ts.map +1 -0
  290. package/providers/mastodon.js +75 -0
  291. package/providers/mattermost.d.ts +132 -0
  292. package/providers/mattermost.d.ts.map +1 -0
  293. package/providers/mattermost.js +83 -0
  294. package/providers/medium.d.ts +68 -0
  295. package/providers/medium.d.ts.map +1 -0
  296. package/providers/medium.js +84 -0
  297. package/providers/microsoft-entra-id.d.ts +428 -0
  298. package/providers/microsoft-entra-id.d.ts.map +1 -0
  299. package/providers/microsoft-entra-id.js +156 -0
  300. package/providers/naver.d.ts +80 -0
  301. package/providers/naver.d.ts.map +1 -0
  302. package/providers/naver.js +79 -0
  303. package/providers/netlify.d.ts +66 -0
  304. package/providers/netlify.d.ts.map +1 -0
  305. package/providers/netlify.js +85 -0
  306. package/providers/netsuite.d.ts +189 -0
  307. package/providers/netsuite.d.ts.map +1 -0
  308. package/providers/netsuite.js +170 -0
  309. package/providers/nextcloud.d.ts +150 -0
  310. package/providers/nextcloud.d.ts.map +1 -0
  311. package/providers/nextcloud.js +99 -0
  312. package/providers/nodemailer.d.ts +27 -0
  313. package/providers/nodemailer.d.ts.map +1 -0
  314. package/providers/nodemailer.js +34 -0
  315. package/providers/notion.d.ts +99 -0
  316. package/providers/notion.d.ts.map +1 -0
  317. package/providers/notion.js +110 -0
  318. package/providers/oauth.d.ts +188 -0
  319. package/providers/oauth.d.ts.map +1 -0
  320. package/providers/oauth.js +1 -0
  321. package/providers/okta.d.ts +99 -0
  322. package/providers/okta.d.ts.map +1 -0
  323. package/providers/okta.js +63 -0
  324. package/providers/onelogin.d.ts +65 -0
  325. package/providers/onelogin.d.ts.map +1 -0
  326. package/providers/onelogin.js +61 -0
  327. package/providers/ory-hydra.d.ts +79 -0
  328. package/providers/ory-hydra.d.ts.map +1 -0
  329. package/providers/ory-hydra.js +67 -0
  330. package/providers/osso.d.ts +79 -0
  331. package/providers/osso.d.ts.map +1 -0
  332. package/providers/osso.js +77 -0
  333. package/providers/osu.d.ts +116 -0
  334. package/providers/osu.d.ts.map +1 -0
  335. package/providers/osu.js +75 -0
  336. package/providers/passage.d.ts +88 -0
  337. package/providers/passage.d.ts.map +1 -0
  338. package/providers/passage.js +75 -0
  339. package/providers/passkey.d.ts +65 -0
  340. package/providers/passkey.d.ts.map +1 -0
  341. package/providers/passkey.js +87 -0
  342. package/providers/patreon.d.ts +73 -0
  343. package/providers/patreon.d.ts.map +1 -0
  344. package/providers/patreon.js +77 -0
  345. package/providers/ping-id.d.ts +57 -0
  346. package/providers/ping-id.d.ts.map +1 -0
  347. package/providers/ping-id.js +40 -0
  348. package/providers/pinterest.d.ts +79 -0
  349. package/providers/pinterest.d.ts.map +1 -0
  350. package/providers/pinterest.js +85 -0
  351. package/providers/pipedrive.d.ts +99 -0
  352. package/providers/pipedrive.d.ts.map +1 -0
  353. package/providers/pipedrive.js +71 -0
  354. package/providers/postmark.d.ts +4 -0
  355. package/providers/postmark.d.ts.map +1 -0
  356. package/providers/postmark.js +36 -0
  357. package/providers/provider-types.d.ts +3 -0
  358. package/providers/provider-types.d.ts.map +1 -0
  359. package/providers/provider-types.js +1 -0
  360. package/providers/reddit.d.ts +88 -0
  361. package/providers/reddit.d.ts.map +1 -0
  362. package/providers/reddit.js +90 -0
  363. package/providers/resend.d.ts +4 -0
  364. package/providers/resend.d.ts.map +1 -0
  365. package/providers/resend.js +32 -0
  366. package/providers/roblox.d.ts +67 -0
  367. package/providers/roblox.d.ts.map +1 -0
  368. package/providers/roblox.js +53 -0
  369. package/providers/salesforce.d.ts +59 -0
  370. package/providers/salesforce.d.ts.map +1 -0
  371. package/providers/salesforce.js +52 -0
  372. package/providers/sendgrid.d.ts +4 -0
  373. package/providers/sendgrid.d.ts.map +1 -0
  374. package/providers/sendgrid.js +35 -0
  375. package/providers/simplelogin.d.ts +87 -0
  376. package/providers/simplelogin.d.ts.map +1 -0
  377. package/providers/simplelogin.js +83 -0
  378. package/providers/slack.d.ts +102 -0
  379. package/providers/slack.d.ts.map +1 -0
  380. package/providers/slack.js +69 -0
  381. package/providers/spotify.d.ts +75 -0
  382. package/providers/spotify.d.ts.map +1 -0
  383. package/providers/spotify.js +73 -0
  384. package/providers/strava.d.ts +68 -0
  385. package/providers/strava.d.ts.map +1 -0
  386. package/providers/strava.js +80 -0
  387. package/providers/threads.d.ts +108 -0
  388. package/providers/threads.d.ts.map +1 -0
  389. package/providers/threads.js +89 -0
  390. package/providers/tiktok.d.ts +248 -0
  391. package/providers/tiktok.d.ts.map +1 -0
  392. package/providers/tiktok.js +195 -0
  393. package/providers/todoist.d.ts +76 -0
  394. package/providers/todoist.d.ts.map +1 -0
  395. package/providers/todoist.js +97 -0
  396. package/providers/trakt.d.ts +93 -0
  397. package/providers/trakt.d.ts.map +1 -0
  398. package/providers/trakt.js +91 -0
  399. package/providers/twitch.d.ts +71 -0
  400. package/providers/twitch.d.ts.map +1 -0
  401. package/providers/twitch.js +96 -0
  402. package/providers/twitter.d.ts +183 -0
  403. package/providers/twitter.d.ts.map +1 -0
  404. package/providers/twitter.js +100 -0
  405. package/providers/united-effects.d.ts +80 -0
  406. package/providers/united-effects.d.ts.map +1 -0
  407. package/providers/united-effects.js +72 -0
  408. package/providers/vipps.d.ts +71 -0
  409. package/providers/vipps.d.ts.map +1 -0
  410. package/providers/vipps.js +33 -0
  411. package/providers/vk.d.ts +334 -0
  412. package/providers/vk.d.ts.map +1 -0
  413. package/providers/vk.js +103 -0
  414. package/providers/webauthn.d.ts +148 -0
  415. package/providers/webauthn.d.ts.map +1 -0
  416. package/providers/webauthn.js +128 -0
  417. package/providers/webex.d.ts +78 -0
  418. package/providers/webex.d.ts.map +1 -0
  419. package/providers/webex.js +73 -0
  420. package/providers/wechat.d.ts +78 -0
  421. package/providers/wechat.d.ts.map +1 -0
  422. package/providers/wechat.js +105 -0
  423. package/providers/wikimedia.d.ts +99 -0
  424. package/providers/wikimedia.d.ts.map +1 -0
  425. package/providers/wikimedia.js +90 -0
  426. package/providers/wordpress.d.ts +65 -0
  427. package/providers/wordpress.d.ts.map +1 -0
  428. package/providers/wordpress.js +71 -0
  429. package/providers/workos.d.ts +154 -0
  430. package/providers/workos.d.ts.map +1 -0
  431. package/providers/workos.js +143 -0
  432. package/providers/yandex.d.ts +131 -0
  433. package/providers/yandex.d.ts.map +1 -0
  434. package/providers/yandex.js +80 -0
  435. package/providers/zitadel.d.ts +117 -0
  436. package/providers/zitadel.d.ts.map +1 -0
  437. package/providers/zitadel.js +95 -0
  438. package/providers/zoho.d.ts +63 -0
  439. package/providers/zoho.d.ts.map +1 -0
  440. package/providers/zoho.js +79 -0
  441. package/providers/zoom.d.ts +93 -0
  442. package/providers/zoom.d.ts.map +1 -0
  443. package/providers/zoom.js +82 -0
  444. package/src/adapters/server-actions-helpers.ts +126 -0
  445. package/src/adapters.ts +603 -0
  446. package/src/errors.ts +551 -0
  447. package/src/index.ts +689 -0
  448. package/src/jwt.ts +283 -0
  449. package/src/lib/actions/callback/handle-login.ts +334 -0
  450. package/src/lib/actions/callback/index.ts +554 -0
  451. package/src/lib/actions/callback/oauth/callback.ts +347 -0
  452. package/src/lib/actions/callback/oauth/checks.ts +258 -0
  453. package/src/lib/actions/callback/oauth/csrf-token.ts +60 -0
  454. package/src/lib/actions/index.ts +5 -0
  455. package/src/lib/actions/session.ts +167 -0
  456. package/src/lib/actions/signin/authorization-url.ts +123 -0
  457. package/src/lib/actions/signin/index.ts +37 -0
  458. package/src/lib/actions/signin/send-token.ts +124 -0
  459. package/src/lib/actions/signout.ts +38 -0
  460. package/src/lib/actions/webauthn-options.ts +100 -0
  461. package/src/lib/index.ts +97 -0
  462. package/src/lib/init.ts +236 -0
  463. package/src/lib/pages/error.tsx +106 -0
  464. package/src/lib/pages/index.ts +181 -0
  465. package/src/lib/pages/signin.tsx +255 -0
  466. package/src/lib/pages/signout.tsx +49 -0
  467. package/src/lib/pages/styles.css +377 -0
  468. package/src/lib/pages/styles.ts +381 -0
  469. package/src/lib/pages/verify-request.tsx +36 -0
  470. package/src/lib/symbols.ts +60 -0
  471. package/src/lib/utils/actions.ts +17 -0
  472. package/src/lib/utils/assert.ts +259 -0
  473. package/src/lib/utils/callback-url.ts +42 -0
  474. package/src/lib/utils/cookie.ts +248 -0
  475. package/src/lib/utils/date.ts +8 -0
  476. package/src/lib/utils/email.ts +65 -0
  477. package/src/lib/utils/env.ts +113 -0
  478. package/src/lib/utils/logger.ts +75 -0
  479. package/src/lib/utils/merge.ts +30 -0
  480. package/src/lib/utils/providers.ts +203 -0
  481. package/src/lib/utils/session.ts +41 -0
  482. package/src/lib/utils/web.ts +151 -0
  483. package/src/lib/utils/webauthn-client.js +229 -0
  484. package/src/lib/utils/webauthn-utils.ts +531 -0
  485. package/src/lib/vendored/cookie.ts +383 -0
  486. package/src/providers/42-school.ts +256 -0
  487. package/src/providers/apple.ts +206 -0
  488. package/src/providers/asgardeo.ts +118 -0
  489. package/src/providers/atlassian.ts +120 -0
  490. package/src/providers/auth0.ts +127 -0
  491. package/src/providers/authentik.ts +100 -0
  492. package/src/providers/azure-ad-b2c.ts +124 -0
  493. package/src/providers/azure-ad.ts +30 -0
  494. package/src/providers/azure-devops.ts +184 -0
  495. package/src/providers/bankid-no.ts +161 -0
  496. package/src/providers/battlenet.ts +107 -0
  497. package/src/providers/beyondidentity.ts +102 -0
  498. package/src/providers/bitbucket.ts +122 -0
  499. package/src/providers/box.ts +87 -0
  500. package/src/providers/boxyhq-saml.ts +148 -0
  501. package/src/providers/bungie.ts +192 -0
  502. package/src/providers/click-up.ts +104 -0
  503. package/src/providers/cognito.ts +94 -0
  504. package/src/providers/coinbase.ts +93 -0
  505. package/src/providers/concept2.ts +108 -0
  506. package/src/providers/credentials.ts +157 -0
  507. package/src/providers/descope.ts +105 -0
  508. package/src/providers/discord.ts +176 -0
  509. package/src/providers/dribbble.ts +122 -0
  510. package/src/providers/dropbox.ts +102 -0
  511. package/src/providers/duende-identity-server6.ts +101 -0
  512. package/src/providers/email.ts +60 -0
  513. package/src/providers/eventbrite.ts +105 -0
  514. package/src/providers/eveonline.ts +117 -0
  515. package/src/providers/facebook.ts +119 -0
  516. package/src/providers/faceit.ts +90 -0
  517. package/src/providers/figma.ts +105 -0
  518. package/src/providers/forwardemail.ts +37 -0
  519. package/src/providers/foursquare.ts +105 -0
  520. package/src/providers/freshbooks.ts +90 -0
  521. package/src/providers/frontegg.ts +111 -0
  522. package/src/providers/fusionauth.ts +336 -0
  523. package/src/providers/github.ts +187 -0
  524. package/src/providers/gitlab.ts +140 -0
  525. package/src/providers/google.ts +152 -0
  526. package/src/providers/hubspot.ts +117 -0
  527. package/src/providers/huggingface.ts +234 -0
  528. package/src/providers/identity-server4.ts +78 -0
  529. package/src/providers/index.ts +115 -0
  530. package/src/providers/instagram.ts +103 -0
  531. package/src/providers/kakao.ts +184 -0
  532. package/src/providers/keycloak.ts +111 -0
  533. package/src/providers/kinde.ts +85 -0
  534. package/src/providers/line.ts +99 -0
  535. package/src/providers/linkedin.ts +91 -0
  536. package/src/providers/logto.ts +122 -0
  537. package/src/providers/loops.ts +79 -0
  538. package/src/providers/mailchimp.ts +90 -0
  539. package/src/providers/mailgun.ts +98 -0
  540. package/src/providers/mailru.ts +75 -0
  541. package/src/providers/mastodon.ts +112 -0
  542. package/src/providers/mattermost.ts +154 -0
  543. package/src/providers/medium.ts +89 -0
  544. package/src/providers/microsoft-entra-id.ts +497 -0
  545. package/src/providers/naver.ts +102 -0
  546. package/src/providers/netlify.ts +90 -0
  547. package/src/providers/netsuite.ts +225 -0
  548. package/src/providers/nextcloud.ts +207 -0
  549. package/src/providers/nodemailer.ts +84 -0
  550. package/src/providers/notion.ts +166 -0
  551. package/src/providers/oauth.ts +310 -0
  552. package/src/providers/okta.ts +111 -0
  553. package/src/providers/onelogin.ts +75 -0
  554. package/src/providers/ory-hydra.ts +93 -0
  555. package/src/providers/osso.ts +91 -0
  556. package/src/providers/osu.ts +138 -0
  557. package/src/providers/passage.ts +103 -0
  558. package/src/providers/passkey.ts +94 -0
  559. package/src/providers/patreon.ts +98 -0
  560. package/src/providers/ping-id.ts +68 -0
  561. package/src/providers/pinterest.ts +106 -0
  562. package/src/providers/pipedrive.ts +120 -0
  563. package/src/providers/postmark.ts +38 -0
  564. package/src/providers/provider-types.ts +107 -0
  565. package/src/providers/reddit.ts +104 -0
  566. package/src/providers/resend.ts +35 -0
  567. package/src/providers/roblox.ts +94 -0
  568. package/src/providers/salesforce.ts +73 -0
  569. package/src/providers/sendgrid.ts +36 -0
  570. package/src/providers/simplelogin.ts +107 -0
  571. package/src/providers/slack.ts +115 -0
  572. package/src/providers/spotify.ts +99 -0
  573. package/src/providers/strava.ts +101 -0
  574. package/src/providers/threads.ts +135 -0
  575. package/src/providers/tiktok.ts +319 -0
  576. package/src/providers/todoist.ts +122 -0
  577. package/src/providers/trakt.ts +120 -0
  578. package/src/providers/twitch.ts +121 -0
  579. package/src/providers/twitter.ts +207 -0
  580. package/src/providers/united-effects.ts +89 -0
  581. package/src/providers/vipps.ts +86 -0
  582. package/src/providers/vk.ts +401 -0
  583. package/src/providers/webauthn.ts +296 -0
  584. package/src/providers/webex.ts +102 -0
  585. package/src/providers/wechat.ts +141 -0
  586. package/src/providers/wikimedia.ts +258 -0
  587. package/src/providers/wordpress.ts +86 -0
  588. package/src/providers/workos.ts +180 -0
  589. package/src/providers/yandex.ts +159 -0
  590. package/src/providers/zitadel.ts +128 -0
  591. package/src/providers/zoho.ts +84 -0
  592. package/src/providers/zoom.ts +119 -0
  593. package/src/types.ts +430 -0
  594. package/src/warnings.ts +21 -0
  595. package/types.d.ts +309 -0
  596. package/types.d.ts.map +1 -0
  597. package/types.js +53 -0
  598. package/warnings.d.ts +17 -0
  599. package/warnings.d.ts.map +1 -0
  600. package/warnings.js +1 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * <div style={{display: "flex", justifyContent: "space-between", alignItems: "center"}}>
3
+ * <span style={{fontSize: "1.35rem" }}>
4
+ * Built-in sign in with <b>Frontegg</b> integration.
5
+ * </span>
6
+ * <a href="https://frontegg.com" style={{backgroundColor: "black", padding: "12px", borderRadius: "100%" }}>
7
+ * <img style={{display: "block"}} src="https://authjs.dev/img/providers/frontegg.svg" width="24"/>
8
+ * </a>
9
+ * </div>
10
+ *
11
+ * @module providers/frontegg
12
+ */
13
+
14
+ import type { OIDCConfig, OIDCUserConfig } from "./index.js"
15
+
16
+ /** The returned user profile from Frontegg when using the profile callback. [Reference](https://docs.frontegg.com/docs/admin-portal-profile). */
17
+ export interface FronteggProfile {
18
+ /** The user's unique Frontegg ID */
19
+ sub: string
20
+ /** The user's name */
21
+ name: string
22
+ /** The user's email */
23
+ email: string
24
+ /** A boolean indicating if the user's email is verified */
25
+ email_verified: boolean
26
+ /** The user's picture */
27
+ profilePictureUrl: string
28
+ /** The user's roles */
29
+ roles: string[]
30
+ /** The user's custom attributes */
31
+ [claim: string]: unknown
32
+ }
33
+
34
+ /**
35
+ *
36
+ * ### Setup
37
+ *
38
+ * #### Callback URL
39
+ * ```
40
+ * https://example.com/api/auth/callback/frontegg
41
+ * ```
42
+ *
43
+ * #### Configuration
44
+ * ```ts
45
+ * import { Auth } from "@auth/core"
46
+ * import Frontegg from "@auth/core/providers/frontegg"
47
+ *
48
+ * const request = new Request(origin)
49
+ * const response = await Auth(request, {
50
+ * providers: [
51
+ * Frontegg({
52
+ * clientId: AUTH_FRONTEGG_ID,
53
+ * clientSecret: AUTH_FRONTEGG_SECRET,
54
+ * issuer: AUTH_FRONTEGG_ISSUER
55
+ * }),
56
+ * ],
57
+ * })
58
+ * ```
59
+ *
60
+ * ### Configuring Frontegg
61
+ *
62
+ * Follow these steps:
63
+ *
64
+ * Log into the [Frontegg portal](https://portal.frontegg.com)
65
+ *
66
+ * Authentication > Login method > Hosted login > Add your callback url here
67
+ *
68
+ * Then, create a `.env.local` file in the project root add the following entries:
69
+ *
70
+ * Get the following from the Frontegg's portal:
71
+ * ```
72
+ * AUTH_FRONTEGG_ID="<Client ID>" # Environments > Your environment > Env settings
73
+ * AUTH_FRONTEGG_SECRET="<API KEY>" # Environments > Your environment > Env settings
74
+ * AUTH_FRONTEGG_ISSUER="<https://[YOUR_SUBDOMAIN].frontegg.com>" # Environments > Your environment > Env settings > Domains > Domain name
75
+ * ```
76
+ *
77
+ * ### Resources
78
+ *
79
+ * - [Frontegg Docs](https://docs.frontegg.com/docs/how-to-use-our-docs)
80
+ *
81
+ * ### Notes
82
+ *
83
+ * The Frontegg provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/frontegg.ts). To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/configuring-oauth-providers).
84
+ *
85
+ * :::info
86
+ * By default, Auth.js assumes that the Frontegg provider is based on the [OIDC](https://openid.net/specs/openid-connect-core-1_0.html) spec
87
+ * :::
88
+ *
89
+ * ## Help
90
+ *
91
+ * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue).
92
+ *
93
+ * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from
94
+ * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec,
95
+ * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions).
96
+ */
97
+ export default function Frontegg(
98
+ options: OIDCUserConfig<FronteggProfile>
99
+ ): OIDCConfig<FronteggProfile> {
100
+ return {
101
+ id: "frontegg",
102
+ name: "Frontegg",
103
+ type: "oidc",
104
+ authorization: `${options.issuer}/oauth/authorize`,
105
+ token: `${options.issuer}/oauth/token`,
106
+ userinfo: `${options.issuer}/identity/resources/users/v2/me`,
107
+ wellKnown: `${options.issuer}/oauth/.well-known/openid-configuration`,
108
+ issuer: options.issuer,
109
+ options,
110
+ }
111
+ }
@@ -0,0 +1,336 @@
1
+ /**
2
+ * <div class="provider" style={{backgroundColor: "#000", display: "flex", justifyContent: "space-between", color: "#fff", padding: 16}}>
3
+ * <span>Built-in <b>FusionAuth</b> integration.</span>
4
+ * <a href="https://fusionauth.com">
5
+ * <img style={{display: "block"}} src="https://authjs.dev/img/providers/fushionauth.svg" height="48" width="48"/>
6
+ * </a>
7
+ * </div>
8
+ *
9
+ * @module providers/fusionauth
10
+ */
11
+ import type { OAuthConfig, OAuthUserConfig } from "./oauth.js"
12
+
13
+ /**
14
+ * This is the default openid signature returned from FusionAuth
15
+ * it can be customized using [lambda functions](https://fusionauth.io/docs/v1/tech/lambdas)
16
+ */
17
+ export interface FusionAuthProfile extends Record<string, any> {
18
+ aud: string
19
+ exp: number
20
+ iat: number
21
+ iss: string
22
+ sub: string
23
+ jti: string
24
+ authenticationType: string
25
+ email: string
26
+ email_verified: boolean
27
+ preferred_username?: string
28
+ name?: string
29
+ given_name?: string
30
+ middle_name?: string
31
+ family_name?: string
32
+ at_hash: string
33
+ c_hash: string
34
+ scope: string
35
+ sid: string
36
+ picture?: string
37
+ }
38
+
39
+ /**
40
+ * Add FusionAuth login to your page.
41
+ *
42
+ * ### Setup
43
+ *
44
+ * #### Callback URL
45
+ * ```
46
+ * https://example.com/api/auth/callback/fusionauth
47
+ * ```
48
+ *
49
+ * #### Configuration
50
+ *```ts
51
+ * import { Auth } from "@auth/core"
52
+ * import FusionAuth from "@auth/core/providers/fusionauth"
53
+ *
54
+ * const request = new Request(origin)
55
+ * const response = await Auth(request, {
56
+ * providers: [
57
+ * FusionAuth({
58
+ * clientId: FUSIONAUTH_CLIENT_ID,
59
+ * clientSecret: FUSIONAUTH_CLIENT_SECRET,
60
+ * tenantId: FUSIONAUTH_TENANT_ID,
61
+ * issuer: FUSIONAUTH_ISSUER,
62
+ * }),
63
+ * ],
64
+ * })
65
+ * ```
66
+ * :::warning
67
+ * If you're using multi-tenancy, you need to pass in the tenantId option to apply the proper theme.
68
+ * :::
69
+ *
70
+ * ### Resources
71
+ *
72
+ * - [FusionAuth OAuth documentation](https://fusionauth.io/docs/lifecycle/authenticate-users/oauth/)
73
+ *
74
+ * ### Notes
75
+ *
76
+ * By default, Auth.js assumes that the FusionAuth provider is
77
+ * based on the [OAuth 2](https://www.rfc-editor.org/rfc/rfc6749.html) specification.
78
+ *
79
+ * ## Configuration
80
+ * :::tip
81
+ * An application can be created at https://your-fusionauth-server-url/admin/application.
82
+ *
83
+ * For more information, follow the [FusionAuth 5-minute setup guide](https://fusionauth.io/docs/v1/tech/5-minute-setup-guide).
84
+ * :::
85
+ *
86
+ * In the OAuth settings for your application, configure the following.
87
+ *
88
+ * - Redirect URL
89
+ * - https://localhost:3000/api/auth/callback/fusionauth
90
+ * - Enabled grants
91
+ * - Make sure _Authorization Code_ is enabled.
92
+ *
93
+ * If using JSON Web Tokens, you need to make sure the signing algorithm is RS256, you can create an RS256 key pair by
94
+ * going to Settings, Key Master, generate RSA and choosing SHA-256 as algorithm. After that, go to the JWT settings of
95
+ * your application and select this key as Access Token signing key and Id Token signing key.
96
+ * :::tip
97
+ *
98
+ * The FusionAuth provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/fusionauth.ts).
99
+ * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/configuring-oauth-providers).
100
+ *
101
+ * :::
102
+ *
103
+ * :::info **Disclaimer**
104
+ *
105
+ * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue).
106
+ *
107
+ * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from
108
+ * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec,
109
+ * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions).
110
+ *
111
+ * :::
112
+ *
113
+ *
114
+ * It is highly recommended to follow this example call when using the provider in Next.js
115
+ * so that you can access both the access_token and id_token on the server.
116
+ *
117
+ * ```ts
118
+ * /// <reference types="next-auth" />
119
+ import NextAuth from 'next-auth';
120
+ export const { handlers, auth, signIn, signOut } = NextAuth({
121
+ providers: [
122
+ {
123
+ id: 'fusionauth',
124
+ name: 'FusionAuth',
125
+ type: 'oidc',
126
+ issuer: process.env.AUTH_FUSIONAUTH_ISSUER!,
127
+ clientId: process.env.AUTH_FUSIONAUTH_CLIENT_ID!,
128
+ clientSecret: process.env.AUTH_FUSIONAUTH_CLIENT_SECRET!,
129
+ authorization: {
130
+ params: {
131
+ scope: 'offline_access email openid profile',
132
+ tenantId: process.env.AUTH_FUSIONAUTH_TENANT_ID!,
133
+ },
134
+ },
135
+ userinfo: `${process.env.AUTH_FUSIONAUTH_ISSUER}/oauth2/userinfo`,
136
+ // This is due to a known processing issue
137
+ // TODO: https://github.com/nextauthjs/next-auth/issues/8745#issuecomment-1907799026
138
+ token: {
139
+ url: `${process.env.AUTH_FUSIONAUTH_ISSUER}/oauth2/token`,
140
+ conform: async (response: Response) => {
141
+ if (response.status === 401) return response;
142
+
143
+ const newHeaders = Array.from(response.headers.entries())
144
+ .filter(([key]) => key.toLowerCase() !== 'www-authenticate')
145
+ .reduce(
146
+ (headers, [key, value]) => (headers.append(key, value), headers),
147
+ new Headers()
148
+ );
149
+
150
+ return new Response(response.body, {
151
+ status: response.status,
152
+ statusText: response.statusText,
153
+ headers: newHeaders,
154
+ });
155
+ },
156
+ },
157
+ },
158
+ ],
159
+ session: {
160
+ strategy: 'jwt',
161
+ },
162
+ // Required to get the account object in the session and enable
163
+ // the ability to call API's externally that rely on JWT tokens.
164
+ callbacks: {
165
+ async jwt(params) {
166
+ const { token, user, account } = params;
167
+ if (account) {
168
+ // First-time login, save the `access_token`, its expiry and the `refresh_token`
169
+ return {
170
+ ...token,
171
+ ...account,
172
+ };
173
+ } else if (
174
+ token.expires_at &&
175
+ Date.now() < (token.expires_at as number) * 1000
176
+ ) {
177
+ // Subsequent logins, but the `access_token` is still valid
178
+ return token;
179
+ } else {
180
+ // Subsequent logins, but the `access_token` has expired, try to refresh it
181
+ if (!token.refresh_token) throw new TypeError('Missing refresh_token');
182
+
183
+ try {
184
+ const refreshResponse = await fetch(
185
+ `${process.env.AUTH_FUSIONAUTH_ISSUER}/oauth2/token`,
186
+ {
187
+ method: 'POST',
188
+ headers: {
189
+ 'Content-Type': 'application/x-www-form-urlencoded',
190
+ },
191
+ body: new URLSearchParams({
192
+ client_id: process.env.AUTH_FUSIONAUTH_CLIENT_ID!,
193
+ client_secret: process.env.AUTH_FUSIONAUTH_CLIENT_SECRET!,
194
+ grant_type: 'refresh_token',
195
+ refresh_token: token.refresh_token as string,
196
+ }),
197
+ }
198
+ );
199
+
200
+ if (!refreshResponse.ok) {
201
+ throw new Error('Failed to refresh token');
202
+ }
203
+
204
+ const tokensOrError = await refreshResponse.json();
205
+
206
+ if (!refreshResponse.ok) throw tokensOrError;
207
+
208
+ const newTokens = tokensOrError as {
209
+ access_token: string;
210
+ expires_in: number;
211
+ refresh_token?: string;
212
+ };
213
+
214
+ return {
215
+ ...token,
216
+ access_token: newTokens.access_token,
217
+ expires_at: Math.floor(Date.now() / 1000 + newTokens.expires_in),
218
+ // Some providers only issue refresh tokens once, so preserve if we did not get a new one
219
+ refresh_token: newTokens.refresh_token
220
+ ? newTokens.refresh_token
221
+ : token.refresh_token,
222
+ };
223
+ } catch (error) {
224
+ console.error('Error refreshing access_token', error);
225
+ // If we fail to refresh the token, return an error so we can handle it on the page
226
+ token.error = 'RefreshTokenError';
227
+ return token;
228
+ }
229
+ }
230
+ },
231
+ async session(params) {
232
+ const { session, token } = params;
233
+ return { ...session, ...token };
234
+ },
235
+ },
236
+ });
237
+
238
+ declare module 'next-auth' {
239
+ interface Session {
240
+ access_token: string;
241
+ expires_in: number;
242
+ id_token?: string;
243
+ expires_at: number;
244
+ refresh_token?: string;
245
+ refresh_token_id?: string;
246
+ error?: 'RefreshTokenError';
247
+ scope: string;
248
+ token_type: string;
249
+ userId: string;
250
+ provider: string;
251
+ type: string;
252
+ providerAccountId: string;
253
+ }
254
+ }
255
+
256
+ declare module 'next-auth' {
257
+ interface JWT {
258
+ access_token: string;
259
+ expires_in: number;
260
+ id_token?: string;
261
+ expires_at: number;
262
+ refresh_token?: string;
263
+ refresh_token_id?: string;
264
+ error?: 'RefreshTokenError';
265
+ scope: string;
266
+ token_type: string;
267
+ userId: string;
268
+ provider: string;
269
+ type: string;
270
+ providerAccountId: string;
271
+ }
272
+ }
273
+ ```
274
+ *
275
+ *
276
+ *
277
+ */
278
+ export default function FusionAuth<P extends FusionAuthProfile>(
279
+ // tenantId only needed if there is more than one tenant configured on the server
280
+ options: OAuthUserConfig<P> & { tenantId?: string }
281
+ ): OAuthConfig<P> {
282
+ return {
283
+ id: "fusionauth",
284
+ name: "FusionAuth",
285
+ type: "oidc",
286
+ issuer: options.issuer,
287
+ clientId: options.clientId,
288
+ clientSecret: options.clientSecret,
289
+ wellKnown: options?.tenantId
290
+ ? `${options.issuer}/.well-known/openid-configuration?tenantId=${options.tenantId}`
291
+ : `${options.issuer}/.well-known/openid-configuration`,
292
+ authorization: {
293
+ params: {
294
+ scope: "openid offline_access email profile",
295
+ ...(options?.tenantId && { tenantId: options.tenantId }),
296
+ },
297
+ },
298
+ userinfo: `${options.issuer}/oauth2/userinfo`,
299
+ // This is due to a known processing issue
300
+ // TODO: https://github.com/nextauthjs/next-auth/issues/8745#issuecomment-1907799026
301
+ token: {
302
+ url: `${options.issuer}/oauth2/token`,
303
+ conform: async (response: Response) => {
304
+ if (response.status === 401) return response
305
+
306
+ const newHeaders = Array.from(response.headers.entries())
307
+ .filter(([key]) => key.toLowerCase() !== "www-authenticate")
308
+ .reduce(
309
+ (headers, [key, value]) => (headers.append(key, value), headers),
310
+ new Headers()
311
+ )
312
+
313
+ return new Response(response.body, {
314
+ status: response.status,
315
+ statusText: response.statusText,
316
+ headers: newHeaders,
317
+ })
318
+ },
319
+ },
320
+ checks: ["pkce", "state"],
321
+ profile(profile) {
322
+ return {
323
+ id: profile.sub,
324
+ email: profile.email,
325
+ name:
326
+ profile.name ??
327
+ profile.preferred_username ??
328
+ [profile.given_name, profile.middle_name, profile.family_name]
329
+ .filter((x) => x)
330
+ .join(" "),
331
+ image: profile.picture,
332
+ }
333
+ },
334
+ options,
335
+ }
336
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * <div class="provider" style={{backgroundColor: "#24292f", display: "flex", justifyContent: "space-between", color: "#fff", padding: 16}}>
3
+ * <span>Built-in <b>GitHub</b> integration.</span>
4
+ * <a href="https://github.com">
5
+ * <img style={{display: "block"}} src="https://authjs.dev/img/providers/github.svg" height="48" width="48"/>
6
+ * </a>
7
+ * </div>
8
+ *
9
+ * @module providers/github
10
+ */
11
+
12
+ import type { OAuthConfig, OAuthUserConfig } from "./index.js"
13
+
14
+ export interface GitHubEmail {
15
+ email: string
16
+ primary: boolean
17
+ verified: boolean
18
+ visibility: "public" | "private"
19
+ }
20
+
21
+ /** @see [Get the authenticated user](https://docs.github.com/en/rest/users/users#get-the-authenticated-user) */
22
+ export interface GitHubProfile {
23
+ login: string
24
+ id: number
25
+ node_id: string
26
+ avatar_url: string
27
+ gravatar_id: string | null
28
+ url: string
29
+ html_url: string
30
+ followers_url: string
31
+ following_url: string
32
+ gists_url: string
33
+ starred_url: string
34
+ subscriptions_url: string
35
+ organizations_url: string
36
+ repos_url: string
37
+ events_url: string
38
+ received_events_url: string
39
+ type: string
40
+ site_admin: boolean
41
+ name: string | null
42
+ company: string | null
43
+ blog: string | null
44
+ location: string | null
45
+ email: string | null
46
+ hireable: boolean | null
47
+ bio: string | null
48
+ twitter_username?: string | null
49
+ public_repos: number
50
+ public_gists: number
51
+ followers: number
52
+ following: number
53
+ created_at: string
54
+ updated_at: string
55
+ private_gists?: number
56
+ total_private_repos?: number
57
+ owned_private_repos?: number
58
+ disk_usage?: number
59
+ suspended_at?: string | null
60
+ collaborators?: number
61
+ two_factor_authentication: boolean
62
+ plan?: {
63
+ collaborators: number
64
+ name: string
65
+ space: number
66
+ private_repos: number
67
+ }
68
+ [claim: string]: unknown
69
+ }
70
+
71
+ /**
72
+ * Add GitHub login to your page and make requests to [GitHub APIs](https://docs.github.com/en/rest).
73
+ *
74
+ * ### Setup
75
+ *
76
+ * #### Callback URL
77
+ * ```
78
+ * https://example.com/api/auth/callback/github
79
+ * ```
80
+ *
81
+ * #### Configuration
82
+ * ```ts
83
+ * import { Auth } from "@auth/core"
84
+ * import GitHub from "@auth/core/providers/github"
85
+ *
86
+ * const request = new Request(origin)
87
+ * const response = await Auth(request, {
88
+ * providers: [
89
+ * GitHub({ clientId: GITHUB_CLIENT_ID, clientSecret: GITHUB_CLIENT_SECRET }),
90
+ * ],
91
+ * })
92
+ * ```
93
+ *
94
+ * ### Resources
95
+ *
96
+ * - [GitHub - Creating an OAuth App](https://docs.github.com/en/developers/apps/building-oauth-apps/creating-an-oauth-app)
97
+ * - [GitHub - Authorizing OAuth Apps](https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps)
98
+ * - [GitHub - Configure your GitHub OAuth Apps](https://github.com/settings/developers)
99
+ * - [Learn more about OAuth](https://authjs.dev/concepts/oauth)
100
+ * - [Source code](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/github.ts)
101
+ *
102
+ * ### Notes
103
+ *
104
+ * By default, Auth.js assumes that the GitHub provider is
105
+ * based on the [OAuth 2](https://www.rfc-editor.org/rfc/rfc6749.html) specification.
106
+ *
107
+ * :::tip
108
+ *
109
+ * The GitHub provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/github.ts).
110
+ * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/configuring-oauth-providers).
111
+ *
112
+ * :::
113
+ *
114
+ * :::info **Disclaimer**
115
+ *
116
+ * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue).
117
+ *
118
+ * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from
119
+ * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec,
120
+ * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions).
121
+ *
122
+ * :::
123
+ */
124
+ export default function GitHub(
125
+ config: OAuthUserConfig<GitHubProfile> & {
126
+ /** Configuration for usage with [GitHub Enterprise Server](https://docs.github.com/en/enterprise-server/get-started). */
127
+ enterprise?: {
128
+ /** The base URL of your GitHub Enterprise Server instance. */
129
+ baseUrl?: string
130
+ }
131
+ }
132
+ ): OAuthConfig<GitHubProfile> {
133
+ const baseUrl = config?.enterprise?.baseUrl ?? "https://github.com"
134
+ const apiBaseUrl = config?.enterprise?.baseUrl
135
+ ? `${config?.enterprise?.baseUrl}/api/v3`
136
+ : "https://api.github.com"
137
+
138
+ return {
139
+ id: "github",
140
+ name: "GitHub",
141
+ type: "oauth",
142
+ authorization: {
143
+ url: `${baseUrl}/login/oauth/authorize`,
144
+ params: { scope: "read:user user:email" },
145
+ },
146
+ token: `${baseUrl}/login/oauth/access_token`,
147
+ userinfo: {
148
+ url: `${apiBaseUrl}/user`,
149
+ async request({ tokens, provider }) {
150
+ const profile = await fetch(provider.userinfo?.url as URL, {
151
+ headers: {
152
+ Authorization: `Bearer ${tokens.access_token}`,
153
+ "User-Agent": "authjs",
154
+ },
155
+ }).then(async (res) => await res.json())
156
+
157
+ if (!profile.email) {
158
+ // If the user does not have a public email, get another via the GitHub API
159
+ // See https://docs.github.com/en/rest/users/emails#list-public-email-addresses-for-the-authenticated-user
160
+ const res = await fetch(`${apiBaseUrl}/user/emails`, {
161
+ headers: {
162
+ Authorization: `Bearer ${tokens.access_token}`,
163
+ "User-Agent": "authjs",
164
+ },
165
+ })
166
+
167
+ if (res.ok) {
168
+ const emails: GitHubEmail[] = await res.json()
169
+ profile.email = (emails.find((e) => e.primary) ?? emails[0]).email
170
+ }
171
+ }
172
+
173
+ return profile
174
+ },
175
+ },
176
+ profile(profile) {
177
+ return {
178
+ id: profile.id.toString(),
179
+ name: profile.name ?? profile.login,
180
+ email: profile.email,
181
+ image: profile.avatar_url,
182
+ }
183
+ },
184
+ style: { bg: "#24292f", text: "#fff" },
185
+ options: config,
186
+ }
187
+ }