@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,401 @@
1
+ /**
2
+ * <div class="provider" style={{backgroundColor: "#000", display: "flex", justifyContent: "space-between", color: "#fff", padding: 16}}>
3
+ * <span>Built-in <b>VK</b> integration.</span>
4
+ * <a href="https://vk.com/">
5
+ * <img style={{display: "block"}} src="https://authjs.dev/img/providers/vk.svg" height="48" />
6
+ * </a>
7
+ * </div>
8
+ *
9
+ * @module providers/vk
10
+ */
11
+ import type { OAuthConfig, OAuthUserConfig } from "./index.js"
12
+
13
+ /** https://dev.vk.com/reference/objects/user */
14
+ export interface VkProfile {
15
+ id: number
16
+ first_name: string
17
+ last_name: string
18
+ photo_100: string
19
+ can_access_closed: boolean
20
+ is_closed: boolean
21
+ deactivated?: string
22
+ sex?: 0 | 1 | 2
23
+ screen_name?: string
24
+ photo_50?: string
25
+ online?: 0 | 1
26
+ online_mobile?: 0 | 1
27
+ online_app?: number
28
+ verified?: 0 | 1
29
+ trending?: 0 | 1
30
+ friend_status?: 0 | 1 | 2 | 3
31
+ first_name_nom?: string
32
+ first_name_gen?: string
33
+ first_name_dat?: string
34
+ first_name_acc?: string
35
+ first_name_ins?: string
36
+ first_name_abl?: string
37
+ last_name_nom?: string
38
+ last_name_gen?: string
39
+ last_name_dat?: string
40
+ last_name_acc?: string
41
+ last_name_ins?: string
42
+ last_name_abl?: string
43
+ nickname?: string
44
+ maiden_name?: string
45
+ domain?: string
46
+ bdate?: string
47
+ city?: {
48
+ id: number
49
+ title: string
50
+ }
51
+ country?: {
52
+ id: number
53
+ title: string
54
+ }
55
+ timezone?: number
56
+ photo_200?: string
57
+ photo_max?: string
58
+ photo_200_orig?: string
59
+ photo_400_orig?: string
60
+ photo_max_orig?: string
61
+ photo_id?: string
62
+ has_photo?: 0 | 1
63
+ has_mobile?: 0 | 1
64
+ is_friend?: 0 | 1
65
+ can_post?: 0 | 1
66
+ can_see_all_posts?: 0 | 1
67
+ can_see_audio?: 0 | 1
68
+ connections?: {
69
+ facebook?: string
70
+ skype?: string
71
+ twitter?: string
72
+ livejournal?: string
73
+ instagram?: string
74
+ }
75
+ photo_400?: string
76
+ wall_default?: "owner" | "all"
77
+ interests?: string
78
+ books?: string
79
+ tv?: string
80
+ quotes?: string
81
+ about?: string
82
+ games?: string
83
+ movies?: string
84
+ activities?: string
85
+ music?: string
86
+ can_write_private_message?: 0 | 1
87
+ can_send_friend_request?: 0 | 1
88
+ contacts?: {
89
+ mobile_phone?: string
90
+ home_phone?: string
91
+ }
92
+ site?: string
93
+ status_audio?: {
94
+ access_key?: string
95
+ artist: string
96
+ id: number
97
+ owner_id: number
98
+ title: string
99
+ url?: string
100
+ duration: number
101
+ date?: number
102
+ album_id?: number
103
+ genre_id?: number
104
+ performer?: string
105
+ }
106
+ status?: string
107
+ last_seen?: {
108
+ platform?: 1 | 2 | 3 | 4 | 5 | 6 | 7
109
+ time?: number
110
+ }
111
+ exports?: {
112
+ facebook?: number
113
+ livejournal?: number
114
+ twitter?: number
115
+ instagram?: number
116
+ }
117
+ crop_photo?: {
118
+ photo: {
119
+ access_key?: string
120
+ album_id: number
121
+ date: number
122
+ height?: number
123
+ id: number
124
+ images?: Array<{
125
+ height?: number
126
+ type?: "s" | "m" | "x" | "l" | "o" | "p" | "q" | "r" | "y" | "z" | "w"
127
+ url?: string
128
+ width?: number
129
+ }>
130
+ lat?: number
131
+ long?: number
132
+ owner_id: number
133
+ photo_256?: string
134
+ can_comment?: 0 | 1
135
+ place?: string
136
+ post_id?: number
137
+ sizes?: Array<{
138
+ height: number
139
+ url: string
140
+ src?: string
141
+ type:
142
+ | "s"
143
+ | "m"
144
+ | "x"
145
+ | "o"
146
+ | "p"
147
+ | "q"
148
+ | "r"
149
+ | "k"
150
+ | "l"
151
+ | "y"
152
+ | "z"
153
+ | "c"
154
+ | "w"
155
+ | "a"
156
+ | "b"
157
+ | "e"
158
+ | "i"
159
+ | "d"
160
+ | "j"
161
+ | "temp"
162
+ | "h"
163
+ | "g"
164
+ | "n"
165
+ | "f"
166
+ | "max"
167
+ width: number
168
+ }>
169
+ text?: string
170
+ user_id?: number
171
+ width?: number
172
+ has_tags: boolean
173
+ }
174
+ crop: {
175
+ x: number
176
+ y: number
177
+ x2: number
178
+ y2: number
179
+ }
180
+ rect: {
181
+ x: number
182
+ y: number
183
+ x2: number
184
+ y2: number
185
+ }
186
+ }
187
+ followers_count?: number
188
+ blacklisted?: 0 | 1
189
+ blacklisted_by_me?: 0 | 1
190
+ is_favorite?: 0 | 1
191
+ is_hidden_from_feed?: 0 | 1
192
+ common_count?: number
193
+ occupation?: {
194
+ id?: number
195
+ name?: string
196
+ type?: "work" | "school" | "university"
197
+ }
198
+ career?: {
199
+ group_id?: number
200
+ company?: string
201
+ country_id?: number
202
+ city_id?: number
203
+ city_name?: string
204
+ from?: number
205
+ until?: number
206
+ position?: string
207
+ }
208
+ military?: {
209
+ country_id: number
210
+ from?: number
211
+ unit: string
212
+ unit_id: number
213
+ until?: number
214
+ }
215
+ education?: {
216
+ university?: number
217
+ university_name?: string
218
+ faculty?: number
219
+ faculty_name?: string
220
+ graduation?: number
221
+ }
222
+ home_town?: string
223
+ relation?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
224
+ relation_partner?: {
225
+ deactivated?: string
226
+ first_name: string
227
+ hidden?: number
228
+ id: number
229
+ last_name: string
230
+ can_access_closed?: boolean
231
+ is_closed?: boolean
232
+ }
233
+ personal?: {
234
+ alcohol?: 1 | 2 | 3 | 4 | 5
235
+ inspired_by?: string
236
+ langs?: string[]
237
+ life_main?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
238
+ people_main?: 1 | 2 | 3 | 4 | 5 | 6
239
+ political?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
240
+ religion?: string
241
+ smoking?: 1 | 2 | 3 | 4 | 5
242
+ }
243
+ universities?: Array<{
244
+ chair?: number
245
+ chair_name?: string
246
+ city?: number
247
+ country?: number
248
+ education_form?: string
249
+ education_status?: string
250
+ faculty?: number
251
+ faculty_name?: string
252
+ graduation?: number
253
+ id?: number
254
+ name?: string
255
+ university_group_id?: number
256
+ }>
257
+ schools?: Array<{
258
+ city?: number
259
+ class?: string
260
+ country?: number
261
+ id?: string
262
+ name?: string
263
+ type?: number
264
+ type_str?: string
265
+ year_from?: number
266
+ year_graduated?: number
267
+ year_to?: number
268
+ speciality?: string
269
+ }>
270
+ relatives?: Array<{
271
+ id?: number
272
+ name?: string
273
+ type: "parent" | "child" | "grandparent" | "grandchild" | "sibling"
274
+ }>
275
+ counters?: {
276
+ albums?: number
277
+ videos?: number
278
+ audios?: number
279
+ photos?: number
280
+ notes?: number
281
+ friends?: number
282
+ groups?: number
283
+ online_friends?: number
284
+ mutual_friends?: number
285
+ user_videos?: number
286
+ followers?: number
287
+ pages?: number
288
+ }
289
+ is_no_index?: 0 | 1
290
+ // Expand from token https://dev.vk.com/en/reference/access-rights?ref=old_portal
291
+ email?: string
292
+ }
293
+
294
+ /**
295
+ * Add VK login to your page.
296
+ *
297
+ * ### Setup
298
+ *
299
+ * #### Callback URL
300
+ * ```
301
+ * https://example.com/api/auth/callback/vk
302
+ * ```
303
+ *
304
+ * #### Configuration
305
+ *```ts
306
+ * import { Auth } from "@auth/core"
307
+ * import VK from "@auth/core/providers/vk"
308
+ *
309
+ * const request = new Request(origin)
310
+ * const response = await Auth(request, {
311
+ * providers: [VK({ clientId: VK_CLIENT_ID, clientSecret: VK_CLIENT_SECRET })],
312
+ * })
313
+ * ```
314
+ *
315
+ * ### Resources
316
+ *
317
+ * - [VK API documentation](https://vk.com/dev/first_guide)
318
+ * - [VK App configuration](https://vk.com/apps?act=manage)
319
+ *
320
+ * ### Notes
321
+ *
322
+ * By default, Auth.js assumes that the VK provider is
323
+ * based on the [OAuth 2](https://www.rfc-editor.org/rfc/rfc6749.html) specification.
324
+ *
325
+ * :::tip
326
+ *
327
+ * The VK provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/vk.ts).
328
+ * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/configuring-oauth-providers).
329
+ *
330
+ * :::
331
+ *
332
+ * :::note
333
+ *
334
+ * By default the provider uses 5.126 version of the API. See https://vk.com/dev/versions for more info.
335
+ * If you want to use a different version, you can pass it to provider's options object:
336
+ * ```ts
337
+ * const apiVersion = "5.126"
338
+ * providers: [
339
+ * Vk({
340
+ * accessTokenUrl: `https://oauth.vk.com/access_token?v=${apiVersion}`,
341
+ * requestTokenUrl: `https://oauth.vk.com/access_token?v=${apiVersion}`,
342
+ * authorizationUrl:
343
+ * `https://oauth.vk.com/authorize?response_type=code&v=${apiVersion}`,
344
+ * profileUrl: `https://api.vk.com/method/users.get?fields=photo_100&v=${apiVersion}`,
345
+ * })
346
+ * ]
347
+ * ```
348
+ *
349
+ * :::
350
+ *
351
+ * :::info **Disclaimer**
352
+ *
353
+ * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue).
354
+ *
355
+ * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from
356
+ * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec,
357
+ * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions).
358
+ *
359
+ * :::
360
+ */
361
+ export default function VK<P extends Record<string, any> = VkProfile>(
362
+ options: OAuthUserConfig<P>
363
+ ): OAuthConfig<P> {
364
+ const apiVersion = "5.131" // https://vk.com/dev/versions
365
+
366
+ return {
367
+ id: "vk",
368
+ name: "VK",
369
+ type: "oauth",
370
+ authorization: `https://oauth.vk.com/authorize?scope=email&v=${apiVersion}`,
371
+ client: {
372
+ token_endpoint_auth_method: "client_secret_post",
373
+ },
374
+ token: `https://oauth.vk.com/access_token?v=${apiVersion}`,
375
+ userinfo: {
376
+ url: `https://api.vk.com/method/users.get?fields=photo_100&v=${apiVersion}`,
377
+ async request({ tokens, provider }) {
378
+ const profile = await fetch(provider.userinfo?.url as URL, {
379
+ headers: {
380
+ Authorization: `Bearer ${tokens.access_token}`,
381
+ "User-Agent": "authjs",
382
+ },
383
+ }).then(async (res) => await res.json())
384
+
385
+ profile.response[0].email = tokens.email ? tokens.email : null
386
+
387
+ return profile.response[0]
388
+ },
389
+ },
390
+ profile(profile: P) {
391
+ return {
392
+ id: profile.id,
393
+ name: [profile.first_name, profile.last_name].filter(Boolean).join(" "),
394
+ email: profile.email ?? null,
395
+ image: profile.photo_100,
396
+ }
397
+ },
398
+ style: { bg: "#07F", text: "#fff" },
399
+ options,
400
+ }
401
+ }
@@ -0,0 +1,296 @@
1
+ import {
2
+ generateAuthenticationOptions,
3
+ generateRegistrationOptions,
4
+ verifyAuthenticationResponse,
5
+ verifyRegistrationResponse,
6
+ } from "@simplewebauthn/server"
7
+ import { MissingAdapter } from "../errors.js"
8
+
9
+ import type { CommonProviderOptions, CredentialInput } from "./index.js"
10
+ import type {
11
+ GenerateRegistrationOptionsOpts,
12
+ GenerateAuthenticationOptionsOpts,
13
+ VerifyAuthenticationResponseOpts,
14
+ VerifyRegistrationResponseOpts,
15
+ } from "@simplewebauthn/server"
16
+
17
+ import type {
18
+ InternalOptions,
19
+ RequestInternal,
20
+ SemverString,
21
+ User,
22
+ } from "../types.js"
23
+
24
+ export type WebAuthnProviderType = "webauthn"
25
+
26
+ export const DEFAULT_WEBAUTHN_TIMEOUT = 5 * 60 * 1000 // 5 minutes
27
+ export const DEFAULT_SIMPLEWEBAUTHN_BROWSER_VERSION: SemverString = "v9.0.1"
28
+
29
+ export type RelayingParty = {
30
+ /** Relaying Party ID. Use the website's domain name. */
31
+ id: string
32
+ /** Relaying Party name. Use the website's name. */
33
+ name: string
34
+ /** Relaying Party origin. Use the website's origin. */
35
+ origin: string
36
+ }
37
+
38
+ type RelayingPartyArray = {
39
+ /** Relaying Party ID. Use the website's domain name. */
40
+ id: string | string[]
41
+ /** Relaying Party name. Use the website's name. */
42
+ name: string | string[]
43
+ /** Relaying Party origin. Use the website's origin. */
44
+ origin: string | string[]
45
+ }
46
+
47
+ export type GetUserInfo = (
48
+ options: InternalOptions<WebAuthnProviderType>,
49
+ request: RequestInternal
50
+ ) => Promise<
51
+ | { user: User; exists: true }
52
+ | { user: Omit<User, "id">; exists: false }
53
+ | null
54
+ >
55
+
56
+ type ConfigurableAuthenticationOptions = Omit<
57
+ GenerateAuthenticationOptionsOpts,
58
+ "rpID" | "allowCredentials" | "challenge"
59
+ >
60
+ type ConfigurableRegistrationOptions = Omit<
61
+ GenerateRegistrationOptionsOpts,
62
+ | "rpName"
63
+ | "rpID"
64
+ | "userID"
65
+ | "userName"
66
+ | "challenge"
67
+ | "userDisplayName"
68
+ | "excludeCredentials"
69
+ >
70
+ type ConfigurableVerifyAuthenticationOptions = Omit<
71
+ VerifyAuthenticationResponseOpts,
72
+ | "expectedChallenge"
73
+ | "expectedOrigin"
74
+ | "expectedRPID"
75
+ | "authenticator"
76
+ | "response"
77
+ >
78
+ type ConfigurableVerifyRegistrationOptions = Omit<
79
+ VerifyRegistrationResponseOpts,
80
+ "expectedChallenge" | "expectedOrigin" | "expectedRPID" | "response"
81
+ >
82
+
83
+ export interface WebAuthnConfig extends CommonProviderOptions {
84
+ type: WebAuthnProviderType
85
+ /**
86
+ * Relaying party (RP) configuration
87
+ *
88
+ * If not provided, the request URL will be used.
89
+ **/
90
+ relayingParty?: Partial<RelayingPartyArray>
91
+ /**
92
+ * Function that returns the relaying party for the current request.
93
+ */
94
+ getRelayingParty: (
95
+ options: InternalOptions<WebAuthnProviderType>,
96
+ request: RequestInternal
97
+ ) => RelayingParty
98
+ /**
99
+ * Enable conditional UI.
100
+ *
101
+ * NOTE: Only one provider can have this option enabled at a time. Defaults to `true`.
102
+ */
103
+ enableConditionalUI: boolean
104
+ /**
105
+ * Version of SimpleWebAuthn browser script to load in the sign in page.
106
+ *
107
+ * This is only loaded if the provider has conditional UI enabled. If set to false, it won't load any script.
108
+ * Defaults to `v9.0.0`.
109
+ */
110
+ simpleWebAuthnBrowserVersion: SemverString | false
111
+ /** Form fields displayed in the default Passkey sign in/up form.
112
+ * These are not validated or enforced beyond the default Auth.js authentication page.
113
+ *
114
+ * By default it displays an email field.
115
+ */
116
+ formFields: Record<string, CredentialInput>
117
+ /**
118
+ * Authentication options that are passed to @simplewebauthn during authentication.
119
+ */
120
+ authenticationOptions?: Partial<ConfigurableAuthenticationOptions>
121
+ /**
122
+ * Registration options that are passed to @simplewebauthn during registration.
123
+ */
124
+ registrationOptions: Partial<ConfigurableRegistrationOptions>
125
+ /**
126
+ * Verify Authentication options that are passed to @simplewebauthn during authentication.
127
+ */
128
+ verifyAuthenticationOptions?: Partial<ConfigurableVerifyAuthenticationOptions>
129
+ /**
130
+ * Verify Registration options that are passed to @simplewebauthn during registration.
131
+ */
132
+ verifyRegistrationOptions?: Partial<ConfigurableVerifyRegistrationOptions>
133
+ /**
134
+ * Function that returns the user info that the authenticator will use during registration and authentication.
135
+ *
136
+ * - It accepts the provider options, the request object, and returns the user info.
137
+ * - If the request contains an existing user's data (e.g. email address), the function must return the existing user and `exists` must be `true`.
138
+ * - If the request contains enough information to create a new user, the function must return a new user info and `exists` must be `false`.
139
+ * - If the request does not contain enough information to create a new user, the function must return `null`.
140
+ *
141
+ * It should not have any side effects (i.e. it shall not modify the database).
142
+ *
143
+ * During passkey creation:
144
+ * - The passkey's user ID will be a random string.
145
+ * - The passkey's user name will be user.email
146
+ * - The passkey's user display name will be user.name, if present, or user.email
147
+ *
148
+ * By default, it looks for and uses the "email" request parameter to look up the user in the database.
149
+ */
150
+ getUserInfo: GetUserInfo
151
+ /** SimpleWebAuthn instance to use for registration and authentication. */
152
+ simpleWebAuthn: {
153
+ verifyAuthenticationResponse: typeof verifyAuthenticationResponse
154
+ verifyRegistrationResponse: typeof verifyRegistrationResponse
155
+ generateAuthenticationOptions: typeof generateAuthenticationOptions
156
+ generateRegistrationOptions: typeof generateRegistrationOptions
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Add WebAuthn login to your page.
162
+ *
163
+ * ### Setup
164
+ *
165
+ * #### Configuration
166
+ * ```ts
167
+ * import { Auth } from "@auth/core"
168
+ * import WebAuthn from "@auth/core/providers/webauthn"
169
+ *
170
+ * const request = new Request(origin)
171
+ * const response = await Auth(request, {
172
+ * providers: [WebAuthn],
173
+ * })
174
+ * ```
175
+ * ### Resources
176
+ *
177
+ * - [SimpleWebAuthn - Server side](https://simplewebauthn.dev/docs/packages/server)
178
+ * - [SimpleWebAuthn - Client side](https://simplewebauthn.dev/docs/packages/client)
179
+ * - [Source code](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/webauthn.ts)
180
+ *
181
+ * :::tip
182
+ *
183
+ * The WebAuthn provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/webauthn.ts).
184
+ * To override the defaults for your use case, check out [customizing the built-in WebAuthn provider](https://authjs.dev/guides/configuring-oauth-providers).
185
+ *
186
+ * :::
187
+ *
188
+ * :::info **Disclaimer**
189
+ *
190
+ * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue).
191
+ *
192
+ * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from
193
+ * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec,
194
+ * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions).
195
+ *
196
+ * :::
197
+ */
198
+ export default function WebAuthn(
199
+ config: Partial<WebAuthnConfig>
200
+ ): WebAuthnConfig {
201
+ return {
202
+ id: "webauthn",
203
+ name: "WebAuthn",
204
+ enableConditionalUI: true,
205
+ simpleWebAuthn: {
206
+ generateAuthenticationOptions,
207
+ generateRegistrationOptions,
208
+ verifyAuthenticationResponse,
209
+ verifyRegistrationResponse,
210
+ },
211
+ authenticationOptions: { timeout: DEFAULT_WEBAUTHN_TIMEOUT },
212
+ registrationOptions: { timeout: DEFAULT_WEBAUTHN_TIMEOUT },
213
+ formFields: {
214
+ email: {
215
+ label: "Email",
216
+ required: true,
217
+ autocomplete: "username webauthn",
218
+ },
219
+ },
220
+ simpleWebAuthnBrowserVersion: DEFAULT_SIMPLEWEBAUTHN_BROWSER_VERSION,
221
+ getUserInfo,
222
+ getRelayingParty,
223
+ ...config,
224
+ type: "webauthn",
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Retrieves user information for the WebAuthn provider.
230
+ *
231
+ * It looks for the "email" query parameter and uses it to look up the user in the database.
232
+ * It also accepts a "name" query parameter to set the user's display name.
233
+ *
234
+ * @param options - The internaloptions object.
235
+ * @param request - The request object containing the query parameters.
236
+ * @returns The existing or new user info.
237
+ * @throws {MissingAdapter} If the adapter is missing.
238
+ * @throws {EmailSignInError} If the email address is not provided.
239
+ */
240
+ const getUserInfo: GetUserInfo = async (options, request) => {
241
+ const { adapter } = options
242
+ if (!adapter)
243
+ throw new MissingAdapter(
244
+ "WebAuthn provider requires a database adapter to be configured"
245
+ )
246
+
247
+ // Get email address from the query.
248
+ const { query, body, method } = request
249
+ const email = (method === "POST" ? body?.email : query?.email) as unknown
250
+
251
+ // If email is not provided, return null
252
+ if (!email || typeof email !== "string") return null
253
+
254
+ const existingUser = await adapter.getUserByEmail(email)
255
+ if (existingUser) {
256
+ return { user: existingUser, exists: true }
257
+ }
258
+
259
+ // If the user does not exist, return a new user info.
260
+ return { user: { email }, exists: false }
261
+ }
262
+
263
+ /**
264
+ * Retrieves the relaying party information based on the provided options.
265
+ * If the relaying party information is not provided, it falls back to using the URL information.
266
+ */
267
+ function getRelayingParty(
268
+ /** The options object containing the provider and URL information. */
269
+ options: InternalOptions<WebAuthnProviderType>
270
+ ): RelayingParty {
271
+ const { provider, url } = options
272
+ const { relayingParty } = provider
273
+
274
+ const id = relayingParty
275
+ ? (Array.isArray(relayingParty.id)
276
+ ? relayingParty.id[0]
277
+ : relayingParty.id)
278
+ : undefined
279
+
280
+ const name = relayingParty
281
+ ? (Array.isArray(relayingParty.name)
282
+ ? relayingParty.name[0]
283
+ : relayingParty.name)
284
+ : undefined
285
+ const origin = relayingParty
286
+ ? (Array.isArray(relayingParty.origin)
287
+ ? relayingParty.origin[0]
288
+ : relayingParty.origin)
289
+ : undefined
290
+
291
+ return {
292
+ id: id ?? url.hostname,
293
+ name: name ?? url.host,
294
+ origin: origin ?? url.origin,
295
+ }
296
+ }