@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.
- package/README.md +24 -0
- package/adapters.d.ts +522 -0
- package/adapters.d.ts.map +1 -0
- package/adapters.js +170 -0
- package/errors.d.ts +429 -0
- package/errors.d.ts.map +1 -0
- package/errors.js +473 -0
- package/index.d.ts +547 -0
- package/index.d.ts.map +1 -0
- package/index.js +142 -0
- package/jwt.d.ts +132 -0
- package/jwt.d.ts.map +1 -0
- package/jwt.js +123 -0
- package/lib/actions/callback/handle-login.d.ts +35 -0
- package/lib/actions/callback/handle-login.d.ts.map +1 -0
- package/lib/actions/callback/handle-login.js +275 -0
- package/lib/actions/callback/index.d.ts +5 -0
- package/lib/actions/callback/index.d.ts.map +1 -0
- package/lib/actions/callback/index.js +409 -0
- package/lib/actions/callback/oauth/callback.d.ts +36 -0
- package/lib/actions/callback/oauth/callback.d.ts.map +1 -0
- package/lib/actions/callback/oauth/callback.js +248 -0
- package/lib/actions/callback/oauth/checks.d.ts +70 -0
- package/lib/actions/callback/oauth/checks.d.ts.map +1 -0
- package/lib/actions/callback/oauth/checks.js +188 -0
- package/lib/actions/callback/oauth/csrf-token.d.ts +33 -0
- package/lib/actions/callback/oauth/csrf-token.d.ts.map +1 -0
- package/lib/actions/callback/oauth/csrf-token.js +39 -0
- package/lib/actions/index.d.ts +6 -0
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +5 -0
- package/lib/actions/session.d.ts +5 -0
- package/lib/actions/session.d.ts.map +1 -0
- package/lib/actions/session.js +127 -0
- package/lib/actions/signin/authorization-url.d.ts +12 -0
- package/lib/actions/signin/authorization-url.d.ts.map +1 -0
- package/lib/actions/signin/authorization-url.js +94 -0
- package/lib/actions/signin/index.d.ts +4 -0
- package/lib/actions/signin/index.d.ts.map +1 -0
- package/lib/actions/signin/index.js +22 -0
- package/lib/actions/signin/send-token.d.ts +10 -0
- package/lib/actions/signin/send-token.d.ts.map +1 -0
- package/lib/actions/signin/send-token.js +98 -0
- package/lib/actions/signout.d.ts +11 -0
- package/lib/actions/signout.d.ts.map +1 -0
- package/lib/actions/signout.js +30 -0
- package/lib/actions/webauthn-options.d.ts +8 -0
- package/lib/actions/webauthn-options.d.ts.map +1 -0
- package/lib/actions/webauthn-options.js +60 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +70 -0
- package/lib/init.d.ts +25 -0
- package/lib/init.d.ts.map +1 -0
- package/lib/init.js +172 -0
- package/lib/pages/error.d.ts +17 -0
- package/lib/pages/error.d.ts.map +1 -0
- package/lib/pages/error.js +40 -0
- package/lib/pages/index.d.ts +42 -0
- package/lib/pages/index.d.ts.map +1 -0
- package/lib/pages/index.js +136 -0
- package/lib/pages/signin.d.ts +10 -0
- package/lib/pages/signin.d.ts.map +1 -0
- package/lib/pages/signin.js +75 -0
- package/lib/pages/signout.d.ts +8 -0
- package/lib/pages/signout.d.ts.map +1 -0
- package/lib/pages/signout.js +17 -0
- package/lib/pages/styles.d.ts +3 -0
- package/lib/pages/styles.d.ts.map +1 -0
- package/lib/pages/styles.js +381 -0
- package/lib/pages/verify-request.d.ts +8 -0
- package/lib/pages/verify-request.d.ts.map +1 -0
- package/lib/pages/verify-request.js +11 -0
- package/lib/symbols.d.ts +50 -0
- package/lib/symbols.d.ts.map +1 -0
- package/lib/symbols.js +57 -0
- package/lib/utils/actions.d.ts +3 -0
- package/lib/utils/actions.d.ts.map +1 -0
- package/lib/utils/actions.js +14 -0
- package/lib/utils/assert.d.ts +14 -0
- package/lib/utils/assert.d.ts.map +1 -0
- package/lib/utils/assert.js +168 -0
- package/lib/utils/callback-url.d.ts +17 -0
- package/lib/utils/callback-url.d.ts.map +1 -0
- package/lib/utils/callback-url.js +27 -0
- package/lib/utils/cookie.d.ts +111 -0
- package/lib/utils/cookie.d.ts.map +1 -0
- package/lib/utils/cookie.js +205 -0
- package/lib/utils/date.d.ts +7 -0
- package/lib/utils/date.d.ts.map +1 -0
- package/lib/utils/date.js +8 -0
- package/lib/utils/email.d.ts +20 -0
- package/lib/utils/email.d.ts.map +1 -0
- package/lib/utils/email.js +57 -0
- package/lib/utils/env.d.ts +9 -0
- package/lib/utils/env.d.ts.map +1 -0
- package/lib/utils/env.js +96 -0
- package/lib/utils/logger.d.ts +18 -0
- package/lib/utils/logger.d.ts.map +1 -0
- package/lib/utils/logger.js +50 -0
- package/lib/utils/merge.d.ts +3 -0
- package/lib/utils/merge.d.ts.map +1 -0
- package/lib/utils/merge.js +23 -0
- package/lib/utils/providers.d.ts +19 -0
- package/lib/utils/providers.d.ts.map +1 -0
- package/lib/utils/providers.js +149 -0
- package/lib/utils/session.d.ts +7 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +29 -0
- package/lib/utils/web.d.ts +10 -0
- package/lib/utils/web.d.ts.map +1 -0
- package/lib/utils/web.js +109 -0
- package/lib/utils/webauthn-client.d.ts +30 -0
- package/lib/utils/webauthn-client.d.ts.map +1 -0
- package/lib/utils/webauthn-client.js +197 -0
- package/lib/utils/webauthn-utils.d.ts +81 -0
- package/lib/utils/webauthn-utils.d.ts.map +1 -0
- package/lib/utils/webauthn-utils.js +343 -0
- package/lib/vendored/cookie.d.ts +120 -0
- package/lib/vendored/cookie.d.ts.map +1 -0
- package/lib/vendored/cookie.js +237 -0
- package/package.json +118 -0
- package/providers/42-school.d.ts +240 -0
- package/providers/42-school.d.ts.map +1 -0
- package/providers/42-school.js +78 -0
- package/providers/apple.d.ts +149 -0
- package/providers/apple.d.ts.map +1 -0
- package/providers/apple.js +104 -0
- package/providers/asgardeo.d.ts +102 -0
- package/providers/asgardeo.d.ts.map +1 -0
- package/providers/asgardeo.js +93 -0
- package/providers/atlassian.d.ts +94 -0
- package/providers/atlassian.d.ts.map +1 -0
- package/providers/atlassian.js +84 -0
- package/providers/auth0.d.ts +116 -0
- package/providers/auth0.d.ts.map +1 -0
- package/providers/auth0.js +49 -0
- package/providers/authentik.d.ts +90 -0
- package/providers/authentik.d.ts.map +1 -0
- package/providers/authentik.js +65 -0
- package/providers/azure-ad-b2c.d.ts +104 -0
- package/providers/azure-ad-b2c.d.ts.map +1 -0
- package/providers/azure-ad-b2c.js +100 -0
- package/providers/azure-ad.d.ts +19 -0
- package/providers/azure-ad.d.ts.map +1 -0
- package/providers/azure-ad.js +23 -0
- package/providers/azure-devops.d.ts +128 -0
- package/providers/azure-devops.d.ts.map +1 -0
- package/providers/azure-devops.js +158 -0
- package/providers/bankid-no.d.ts +134 -0
- package/providers/bankid-no.d.ts.map +1 -0
- package/providers/bankid-no.js +65 -0
- package/providers/battlenet.d.ts +85 -0
- package/providers/battlenet.d.ts.map +1 -0
- package/providers/battlenet.js +81 -0
- package/providers/beyondidentity.d.ts +77 -0
- package/providers/beyondidentity.d.ts.map +1 -0
- package/providers/beyondidentity.js +84 -0
- package/providers/bitbucket.d.ts +89 -0
- package/providers/bitbucket.d.ts.map +1 -0
- package/providers/bitbucket.js +92 -0
- package/providers/box.d.ts +63 -0
- package/providers/box.d.ts.map +1 -0
- package/providers/box.js +73 -0
- package/providers/boxyhq-saml.d.ts +121 -0
- package/providers/boxyhq-saml.d.ts.map +1 -0
- package/providers/boxyhq-saml.js +127 -0
- package/providers/bungie.d.ts +167 -0
- package/providers/bungie.d.ts.map +1 -0
- package/providers/bungie.js +174 -0
- package/providers/click-up.d.ts +75 -0
- package/providers/click-up.d.ts.map +1 -0
- package/providers/click-up.js +89 -0
- package/providers/cognito.d.ts +81 -0
- package/providers/cognito.d.ts.map +1 -0
- package/providers/cognito.js +73 -0
- package/providers/coinbase.d.ts +69 -0
- package/providers/coinbase.d.ts.map +1 -0
- package/providers/coinbase.js +78 -0
- package/providers/concept2.d.ts +81 -0
- package/providers/concept2.d.ts.map +1 -0
- package/providers/concept2.js +86 -0
- package/providers/credentials.d.ts +132 -0
- package/providers/credentials.d.ts.map +1 -0
- package/providers/credentials.js +74 -0
- package/providers/descope.d.ts +91 -0
- package/providers/descope.d.ts.map +1 -0
- package/providers/descope.js +78 -0
- package/providers/discord.d.ts +139 -0
- package/providers/discord.d.ts.map +1 -0
- package/providers/discord.js +86 -0
- package/providers/dribbble.d.ts +88 -0
- package/providers/dribbble.d.ts.map +1 -0
- package/providers/dribbble.js +85 -0
- package/providers/dropbox.d.ts +65 -0
- package/providers/dropbox.d.ts.map +1 -0
- package/providers/dropbox.js +88 -0
- package/providers/duende-identity-server6.d.ts +91 -0
- package/providers/duende-identity-server6.d.ts.map +1 -0
- package/providers/duende-identity-server6.js +80 -0
- package/providers/email.d.ts +41 -0
- package/providers/email.d.ts.map +1 -0
- package/providers/email.js +18 -0
- package/providers/eventbrite.d.ts +78 -0
- package/providers/eventbrite.d.ts.map +1 -0
- package/providers/eventbrite.js +88 -0
- package/providers/eveonline.d.ts +94 -0
- package/providers/eveonline.d.ts.map +1 -0
- package/providers/eveonline.js +92 -0
- package/providers/facebook.d.ts +84 -0
- package/providers/facebook.d.ts.map +1 -0
- package/providers/facebook.js +93 -0
- package/providers/faceit.d.ts +64 -0
- package/providers/faceit.d.ts.map +1 -0
- package/providers/faceit.js +74 -0
- package/providers/figma.d.ts +75 -0
- package/providers/figma.d.ts.map +1 -0
- package/providers/figma.js +81 -0
- package/providers/forwardemail.d.ts +4 -0
- package/providers/forwardemail.d.ts.map +1 -0
- package/providers/forwardemail.js +32 -0
- package/providers/foursquare.d.ts +71 -0
- package/providers/foursquare.d.ts.map +1 -0
- package/providers/foursquare.js +91 -0
- package/providers/freshbooks.d.ts +66 -0
- package/providers/freshbooks.d.ts.map +1 -0
- package/providers/freshbooks.js +76 -0
- package/providers/frontegg.d.ts +95 -0
- package/providers/frontegg.d.ts.map +1 -0
- package/providers/frontegg.js +88 -0
- package/providers/fusionauth.d.ts +279 -0
- package/providers/fusionauth.d.ts.map +1 -0
- package/providers/fusionauth.js +292 -0
- package/providers/github.d.ts +127 -0
- package/providers/github.d.ts.map +1 -0
- package/providers/github.js +115 -0
- package/providers/gitlab.d.ts +115 -0
- package/providers/gitlab.d.ts.map +1 -0
- package/providers/gitlab.js +75 -0
- package/providers/google.d.ts +138 -0
- package/providers/google.d.ts.map +1 -0
- package/providers/google.js +119 -0
- package/providers/hubspot.d.ts +76 -0
- package/providers/hubspot.d.ts.map +1 -0
- package/providers/hubspot.js +93 -0
- package/providers/huggingface.d.ts +216 -0
- package/providers/huggingface.d.ts.map +1 -0
- package/providers/huggingface.js +101 -0
- package/providers/identity-server4.d.ts +69 -0
- package/providers/identity-server4.d.ts.map +1 -0
- package/providers/identity-server4.js +64 -0
- package/providers/index.d.ts +61 -0
- package/providers/index.d.ts.map +1 -0
- package/providers/index.js +3 -0
- package/providers/instagram.d.ts +74 -0
- package/providers/instagram.d.ts.map +1 -0
- package/providers/instagram.js +87 -0
- package/providers/kakao.d.ts +148 -0
- package/providers/kakao.d.ts.map +1 -0
- package/providers/kakao.js +103 -0
- package/providers/keycloak.d.ts +100 -0
- package/providers/keycloak.d.ts.map +1 -0
- package/providers/keycloak.js +73 -0
- package/providers/kinde.d.ts +73 -0
- package/providers/kinde.d.ts.map +1 -0
- package/providers/kinde.js +51 -0
- package/providers/line.d.ts +83 -0
- package/providers/line.d.ts.map +1 -0
- package/providers/line.js +73 -0
- package/providers/linkedin.d.ts +77 -0
- package/providers/linkedin.d.ts.map +1 -0
- package/providers/linkedin.js +65 -0
- package/providers/logto.d.ts +98 -0
- package/providers/logto.d.ts.map +1 -0
- package/providers/logto.js +81 -0
- package/providers/loops.d.ts +40 -0
- package/providers/loops.d.ts.map +1 -0
- package/providers/loops.js +59 -0
- package/providers/mailchimp.d.ts +66 -0
- package/providers/mailchimp.d.ts.map +1 -0
- package/providers/mailchimp.js +76 -0
- package/providers/mailgun.d.ts +55 -0
- package/providers/mailgun.d.ts.map +1 -0
- package/providers/mailgun.js +74 -0
- package/providers/mailru.d.ts +63 -0
- package/providers/mailru.d.ts.map +1 -0
- package/providers/mailru.js +61 -0
- package/providers/mastodon.d.ts +90 -0
- package/providers/mastodon.d.ts.map +1 -0
- package/providers/mastodon.js +75 -0
- package/providers/mattermost.d.ts +132 -0
- package/providers/mattermost.d.ts.map +1 -0
- package/providers/mattermost.js +83 -0
- package/providers/medium.d.ts +68 -0
- package/providers/medium.d.ts.map +1 -0
- package/providers/medium.js +84 -0
- package/providers/microsoft-entra-id.d.ts +428 -0
- package/providers/microsoft-entra-id.d.ts.map +1 -0
- package/providers/microsoft-entra-id.js +156 -0
- package/providers/naver.d.ts +80 -0
- package/providers/naver.d.ts.map +1 -0
- package/providers/naver.js +79 -0
- package/providers/netlify.d.ts +66 -0
- package/providers/netlify.d.ts.map +1 -0
- package/providers/netlify.js +85 -0
- package/providers/netsuite.d.ts +189 -0
- package/providers/netsuite.d.ts.map +1 -0
- package/providers/netsuite.js +170 -0
- package/providers/nextcloud.d.ts +150 -0
- package/providers/nextcloud.d.ts.map +1 -0
- package/providers/nextcloud.js +99 -0
- package/providers/nodemailer.d.ts +27 -0
- package/providers/nodemailer.d.ts.map +1 -0
- package/providers/nodemailer.js +34 -0
- package/providers/notion.d.ts +99 -0
- package/providers/notion.d.ts.map +1 -0
- package/providers/notion.js +110 -0
- package/providers/oauth.d.ts +188 -0
- package/providers/oauth.d.ts.map +1 -0
- package/providers/oauth.js +1 -0
- package/providers/okta.d.ts +99 -0
- package/providers/okta.d.ts.map +1 -0
- package/providers/okta.js +63 -0
- package/providers/onelogin.d.ts +65 -0
- package/providers/onelogin.d.ts.map +1 -0
- package/providers/onelogin.js +61 -0
- package/providers/ory-hydra.d.ts +79 -0
- package/providers/ory-hydra.d.ts.map +1 -0
- package/providers/ory-hydra.js +67 -0
- package/providers/osso.d.ts +79 -0
- package/providers/osso.d.ts.map +1 -0
- package/providers/osso.js +77 -0
- package/providers/osu.d.ts +116 -0
- package/providers/osu.d.ts.map +1 -0
- package/providers/osu.js +75 -0
- package/providers/passage.d.ts +88 -0
- package/providers/passage.d.ts.map +1 -0
- package/providers/passage.js +75 -0
- package/providers/passkey.d.ts +65 -0
- package/providers/passkey.d.ts.map +1 -0
- package/providers/passkey.js +87 -0
- package/providers/patreon.d.ts +73 -0
- package/providers/patreon.d.ts.map +1 -0
- package/providers/patreon.js +77 -0
- package/providers/ping-id.d.ts +57 -0
- package/providers/ping-id.d.ts.map +1 -0
- package/providers/ping-id.js +40 -0
- package/providers/pinterest.d.ts +79 -0
- package/providers/pinterest.d.ts.map +1 -0
- package/providers/pinterest.js +85 -0
- package/providers/pipedrive.d.ts +99 -0
- package/providers/pipedrive.d.ts.map +1 -0
- package/providers/pipedrive.js +71 -0
- package/providers/postmark.d.ts +4 -0
- package/providers/postmark.d.ts.map +1 -0
- package/providers/postmark.js +36 -0
- package/providers/provider-types.d.ts +3 -0
- package/providers/provider-types.d.ts.map +1 -0
- package/providers/provider-types.js +1 -0
- package/providers/reddit.d.ts +88 -0
- package/providers/reddit.d.ts.map +1 -0
- package/providers/reddit.js +90 -0
- package/providers/resend.d.ts +4 -0
- package/providers/resend.d.ts.map +1 -0
- package/providers/resend.js +32 -0
- package/providers/roblox.d.ts +67 -0
- package/providers/roblox.d.ts.map +1 -0
- package/providers/roblox.js +53 -0
- package/providers/salesforce.d.ts +59 -0
- package/providers/salesforce.d.ts.map +1 -0
- package/providers/salesforce.js +52 -0
- package/providers/sendgrid.d.ts +4 -0
- package/providers/sendgrid.d.ts.map +1 -0
- package/providers/sendgrid.js +35 -0
- package/providers/simplelogin.d.ts +87 -0
- package/providers/simplelogin.d.ts.map +1 -0
- package/providers/simplelogin.js +83 -0
- package/providers/slack.d.ts +102 -0
- package/providers/slack.d.ts.map +1 -0
- package/providers/slack.js +69 -0
- package/providers/spotify.d.ts +75 -0
- package/providers/spotify.d.ts.map +1 -0
- package/providers/spotify.js +73 -0
- package/providers/strava.d.ts +68 -0
- package/providers/strava.d.ts.map +1 -0
- package/providers/strava.js +80 -0
- package/providers/threads.d.ts +108 -0
- package/providers/threads.d.ts.map +1 -0
- package/providers/threads.js +89 -0
- package/providers/tiktok.d.ts +248 -0
- package/providers/tiktok.d.ts.map +1 -0
- package/providers/tiktok.js +195 -0
- package/providers/todoist.d.ts +76 -0
- package/providers/todoist.d.ts.map +1 -0
- package/providers/todoist.js +97 -0
- package/providers/trakt.d.ts +93 -0
- package/providers/trakt.d.ts.map +1 -0
- package/providers/trakt.js +91 -0
- package/providers/twitch.d.ts +71 -0
- package/providers/twitch.d.ts.map +1 -0
- package/providers/twitch.js +96 -0
- package/providers/twitter.d.ts +183 -0
- package/providers/twitter.d.ts.map +1 -0
- package/providers/twitter.js +100 -0
- package/providers/united-effects.d.ts +80 -0
- package/providers/united-effects.d.ts.map +1 -0
- package/providers/united-effects.js +72 -0
- package/providers/vipps.d.ts +71 -0
- package/providers/vipps.d.ts.map +1 -0
- package/providers/vipps.js +33 -0
- package/providers/vk.d.ts +334 -0
- package/providers/vk.d.ts.map +1 -0
- package/providers/vk.js +103 -0
- package/providers/webauthn.d.ts +148 -0
- package/providers/webauthn.d.ts.map +1 -0
- package/providers/webauthn.js +128 -0
- package/providers/webex.d.ts +78 -0
- package/providers/webex.d.ts.map +1 -0
- package/providers/webex.js +73 -0
- package/providers/wechat.d.ts +78 -0
- package/providers/wechat.d.ts.map +1 -0
- package/providers/wechat.js +105 -0
- package/providers/wikimedia.d.ts +99 -0
- package/providers/wikimedia.d.ts.map +1 -0
- package/providers/wikimedia.js +90 -0
- package/providers/wordpress.d.ts +65 -0
- package/providers/wordpress.d.ts.map +1 -0
- package/providers/wordpress.js +71 -0
- package/providers/workos.d.ts +154 -0
- package/providers/workos.d.ts.map +1 -0
- package/providers/workos.js +143 -0
- package/providers/yandex.d.ts +131 -0
- package/providers/yandex.d.ts.map +1 -0
- package/providers/yandex.js +80 -0
- package/providers/zitadel.d.ts +117 -0
- package/providers/zitadel.d.ts.map +1 -0
- package/providers/zitadel.js +95 -0
- package/providers/zoho.d.ts +63 -0
- package/providers/zoho.d.ts.map +1 -0
- package/providers/zoho.js +79 -0
- package/providers/zoom.d.ts +93 -0
- package/providers/zoom.d.ts.map +1 -0
- package/providers/zoom.js +82 -0
- package/src/adapters/server-actions-helpers.ts +126 -0
- package/src/adapters.ts +603 -0
- package/src/errors.ts +551 -0
- package/src/index.ts +689 -0
- package/src/jwt.ts +283 -0
- package/src/lib/actions/callback/handle-login.ts +334 -0
- package/src/lib/actions/callback/index.ts +554 -0
- package/src/lib/actions/callback/oauth/callback.ts +347 -0
- package/src/lib/actions/callback/oauth/checks.ts +258 -0
- package/src/lib/actions/callback/oauth/csrf-token.ts +60 -0
- package/src/lib/actions/index.ts +5 -0
- package/src/lib/actions/session.ts +167 -0
- package/src/lib/actions/signin/authorization-url.ts +123 -0
- package/src/lib/actions/signin/index.ts +37 -0
- package/src/lib/actions/signin/send-token.ts +124 -0
- package/src/lib/actions/signout.ts +38 -0
- package/src/lib/actions/webauthn-options.ts +100 -0
- package/src/lib/index.ts +97 -0
- package/src/lib/init.ts +236 -0
- package/src/lib/pages/error.tsx +106 -0
- package/src/lib/pages/index.ts +181 -0
- package/src/lib/pages/signin.tsx +255 -0
- package/src/lib/pages/signout.tsx +49 -0
- package/src/lib/pages/styles.css +377 -0
- package/src/lib/pages/styles.ts +381 -0
- package/src/lib/pages/verify-request.tsx +36 -0
- package/src/lib/symbols.ts +60 -0
- package/src/lib/utils/actions.ts +17 -0
- package/src/lib/utils/assert.ts +259 -0
- package/src/lib/utils/callback-url.ts +42 -0
- package/src/lib/utils/cookie.ts +248 -0
- package/src/lib/utils/date.ts +8 -0
- package/src/lib/utils/email.ts +65 -0
- package/src/lib/utils/env.ts +113 -0
- package/src/lib/utils/logger.ts +75 -0
- package/src/lib/utils/merge.ts +30 -0
- package/src/lib/utils/providers.ts +203 -0
- package/src/lib/utils/session.ts +41 -0
- package/src/lib/utils/web.ts +151 -0
- package/src/lib/utils/webauthn-client.js +229 -0
- package/src/lib/utils/webauthn-utils.ts +531 -0
- package/src/lib/vendored/cookie.ts +383 -0
- package/src/providers/42-school.ts +256 -0
- package/src/providers/apple.ts +206 -0
- package/src/providers/asgardeo.ts +118 -0
- package/src/providers/atlassian.ts +120 -0
- package/src/providers/auth0.ts +127 -0
- package/src/providers/authentik.ts +100 -0
- package/src/providers/azure-ad-b2c.ts +124 -0
- package/src/providers/azure-ad.ts +30 -0
- package/src/providers/azure-devops.ts +184 -0
- package/src/providers/bankid-no.ts +161 -0
- package/src/providers/battlenet.ts +107 -0
- package/src/providers/beyondidentity.ts +102 -0
- package/src/providers/bitbucket.ts +122 -0
- package/src/providers/box.ts +87 -0
- package/src/providers/boxyhq-saml.ts +148 -0
- package/src/providers/bungie.ts +192 -0
- package/src/providers/click-up.ts +104 -0
- package/src/providers/cognito.ts +94 -0
- package/src/providers/coinbase.ts +93 -0
- package/src/providers/concept2.ts +108 -0
- package/src/providers/credentials.ts +157 -0
- package/src/providers/descope.ts +105 -0
- package/src/providers/discord.ts +176 -0
- package/src/providers/dribbble.ts +122 -0
- package/src/providers/dropbox.ts +102 -0
- package/src/providers/duende-identity-server6.ts +101 -0
- package/src/providers/email.ts +60 -0
- package/src/providers/eventbrite.ts +105 -0
- package/src/providers/eveonline.ts +117 -0
- package/src/providers/facebook.ts +119 -0
- package/src/providers/faceit.ts +90 -0
- package/src/providers/figma.ts +105 -0
- package/src/providers/forwardemail.ts +37 -0
- package/src/providers/foursquare.ts +105 -0
- package/src/providers/freshbooks.ts +90 -0
- package/src/providers/frontegg.ts +111 -0
- package/src/providers/fusionauth.ts +336 -0
- package/src/providers/github.ts +187 -0
- package/src/providers/gitlab.ts +140 -0
- package/src/providers/google.ts +152 -0
- package/src/providers/hubspot.ts +117 -0
- package/src/providers/huggingface.ts +234 -0
- package/src/providers/identity-server4.ts +78 -0
- package/src/providers/index.ts +115 -0
- package/src/providers/instagram.ts +103 -0
- package/src/providers/kakao.ts +184 -0
- package/src/providers/keycloak.ts +111 -0
- package/src/providers/kinde.ts +85 -0
- package/src/providers/line.ts +99 -0
- package/src/providers/linkedin.ts +91 -0
- package/src/providers/logto.ts +122 -0
- package/src/providers/loops.ts +79 -0
- package/src/providers/mailchimp.ts +90 -0
- package/src/providers/mailgun.ts +98 -0
- package/src/providers/mailru.ts +75 -0
- package/src/providers/mastodon.ts +112 -0
- package/src/providers/mattermost.ts +154 -0
- package/src/providers/medium.ts +89 -0
- package/src/providers/microsoft-entra-id.ts +497 -0
- package/src/providers/naver.ts +102 -0
- package/src/providers/netlify.ts +90 -0
- package/src/providers/netsuite.ts +225 -0
- package/src/providers/nextcloud.ts +207 -0
- package/src/providers/nodemailer.ts +84 -0
- package/src/providers/notion.ts +166 -0
- package/src/providers/oauth.ts +310 -0
- package/src/providers/okta.ts +111 -0
- package/src/providers/onelogin.ts +75 -0
- package/src/providers/ory-hydra.ts +93 -0
- package/src/providers/osso.ts +91 -0
- package/src/providers/osu.ts +138 -0
- package/src/providers/passage.ts +103 -0
- package/src/providers/passkey.ts +94 -0
- package/src/providers/patreon.ts +98 -0
- package/src/providers/ping-id.ts +68 -0
- package/src/providers/pinterest.ts +106 -0
- package/src/providers/pipedrive.ts +120 -0
- package/src/providers/postmark.ts +38 -0
- package/src/providers/provider-types.ts +107 -0
- package/src/providers/reddit.ts +104 -0
- package/src/providers/resend.ts +35 -0
- package/src/providers/roblox.ts +94 -0
- package/src/providers/salesforce.ts +73 -0
- package/src/providers/sendgrid.ts +36 -0
- package/src/providers/simplelogin.ts +107 -0
- package/src/providers/slack.ts +115 -0
- package/src/providers/spotify.ts +99 -0
- package/src/providers/strava.ts +101 -0
- package/src/providers/threads.ts +135 -0
- package/src/providers/tiktok.ts +319 -0
- package/src/providers/todoist.ts +122 -0
- package/src/providers/trakt.ts +120 -0
- package/src/providers/twitch.ts +121 -0
- package/src/providers/twitter.ts +207 -0
- package/src/providers/united-effects.ts +89 -0
- package/src/providers/vipps.ts +86 -0
- package/src/providers/vk.ts +401 -0
- package/src/providers/webauthn.ts +296 -0
- package/src/providers/webex.ts +102 -0
- package/src/providers/wechat.ts +141 -0
- package/src/providers/wikimedia.ts +258 -0
- package/src/providers/wordpress.ts +86 -0
- package/src/providers/workos.ts +180 -0
- package/src/providers/yandex.ts +159 -0
- package/src/providers/zitadel.ts +128 -0
- package/src/providers/zoho.ts +84 -0
- package/src/providers/zoom.ts +119 -0
- package/src/types.ts +430 -0
- package/src/warnings.ts +21 -0
- package/types.d.ts +309 -0
- package/types.d.ts.map +1 -0
- package/types.js +53 -0
- package/warnings.d.ts +17 -0
- package/warnings.d.ts.map +1 -0
- 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
|
+
}
|