@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
package/src/lib/init.ts
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import * as jwt from "../jwt.js"
|
|
2
|
+
import { createCallbackUrl } from "./utils/callback-url.js"
|
|
3
|
+
import * as cookie from "./utils/cookie.js"
|
|
4
|
+
import { createCSRFToken } from "./actions/callback/oauth/csrf-token.js"
|
|
5
|
+
|
|
6
|
+
import { AdapterError, EventError } from "../errors.js"
|
|
7
|
+
import parseProviders from "./utils/providers.js"
|
|
8
|
+
import { setLogger, type LoggerInstance } from "./utils/logger.js"
|
|
9
|
+
import { merge } from "./utils/merge.js"
|
|
10
|
+
|
|
11
|
+
import type { InternalOptions, RequestInternal } from "../types.js"
|
|
12
|
+
import type { AuthConfig } from "../index.js"
|
|
13
|
+
import { createServerActionsAdapter } from "../adapters/server-actions-helpers.js"
|
|
14
|
+
|
|
15
|
+
interface InitParams {
|
|
16
|
+
url: URL
|
|
17
|
+
authOptions: AuthConfig
|
|
18
|
+
providerId?: string
|
|
19
|
+
action: InternalOptions["action"]
|
|
20
|
+
/** Callback URL value extracted from the incoming request. */
|
|
21
|
+
callbackUrl?: string
|
|
22
|
+
/** CSRF token value extracted from the incoming request. From body if POST, from query if GET */
|
|
23
|
+
csrfToken?: string
|
|
24
|
+
/** Is the incoming request a POST request? */
|
|
25
|
+
csrfDisabled: boolean
|
|
26
|
+
isPost: boolean
|
|
27
|
+
cookies: RequestInternal["cookies"]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const defaultCallbacks: InternalOptions["callbacks"] = {
|
|
31
|
+
signIn() {
|
|
32
|
+
return true
|
|
33
|
+
},
|
|
34
|
+
redirect({ url, baseUrl }) {
|
|
35
|
+
if (url.startsWith("/")) return `${baseUrl}${url}`
|
|
36
|
+
else if (new URL(url).origin === baseUrl) return url
|
|
37
|
+
return baseUrl
|
|
38
|
+
},
|
|
39
|
+
session({ session }) {
|
|
40
|
+
return {
|
|
41
|
+
user: {
|
|
42
|
+
name: session.user?.name,
|
|
43
|
+
email: session.user?.email,
|
|
44
|
+
image: session.user?.image,
|
|
45
|
+
},
|
|
46
|
+
expires: session.expires?.toISOString?.() ?? session.expires,
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
jwt({ token }) {
|
|
50
|
+
return token
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Initialize all internal options and cookies. */
|
|
55
|
+
export async function init({
|
|
56
|
+
authOptions: config,
|
|
57
|
+
providerId,
|
|
58
|
+
action,
|
|
59
|
+
url,
|
|
60
|
+
cookies: reqCookies,
|
|
61
|
+
callbackUrl: reqCallbackUrl,
|
|
62
|
+
csrfToken: reqCsrfToken,
|
|
63
|
+
csrfDisabled,
|
|
64
|
+
isPost,
|
|
65
|
+
}: InitParams): Promise<{
|
|
66
|
+
options: InternalOptions
|
|
67
|
+
cookies: cookie.Cookie[]
|
|
68
|
+
}> {
|
|
69
|
+
const logger = setLogger(config)
|
|
70
|
+
const { providers, provider } = parseProviders({ url, providerId, config })
|
|
71
|
+
|
|
72
|
+
const maxAge = 30 * 24 * 60 * 60 // Sessions expire after 30 days of being idle by default
|
|
73
|
+
|
|
74
|
+
let isOnRedirectProxy = false
|
|
75
|
+
if (
|
|
76
|
+
(provider?.type === "oauth" || provider?.type === "oidc") &&
|
|
77
|
+
provider.redirectProxyUrl
|
|
78
|
+
) {
|
|
79
|
+
try {
|
|
80
|
+
isOnRedirectProxy =
|
|
81
|
+
new URL(provider.redirectProxyUrl).origin === url.origin
|
|
82
|
+
} catch {
|
|
83
|
+
throw new TypeError(
|
|
84
|
+
`redirectProxyUrl must be a valid URL. Received: ${provider.redirectProxyUrl}`
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// User provided options are overridden by other options,
|
|
90
|
+
// except for the options with special handling above
|
|
91
|
+
const options: InternalOptions = {
|
|
92
|
+
debug: false,
|
|
93
|
+
pages: {},
|
|
94
|
+
theme: {
|
|
95
|
+
colorScheme: "auto",
|
|
96
|
+
logo: "",
|
|
97
|
+
brandColor: "",
|
|
98
|
+
buttonText: "",
|
|
99
|
+
},
|
|
100
|
+
// Custom options override defaults
|
|
101
|
+
...config,
|
|
102
|
+
// These computed settings can have values in userOptions but we override them
|
|
103
|
+
// and are request-specific.
|
|
104
|
+
url,
|
|
105
|
+
action,
|
|
106
|
+
// @ts-expect-errors
|
|
107
|
+
provider,
|
|
108
|
+
cookies: merge(
|
|
109
|
+
cookie.defaultCookies(
|
|
110
|
+
config.useSecureCookies ?? url.protocol === "https:"
|
|
111
|
+
),
|
|
112
|
+
config.cookies
|
|
113
|
+
),
|
|
114
|
+
providers,
|
|
115
|
+
// Session options
|
|
116
|
+
session: {
|
|
117
|
+
// If no adapter or serverActions specified, force use of JSON Web Tokens (stateless)
|
|
118
|
+
strategy: (config.adapter || config.serverActions) ? "database" : "jwt",
|
|
119
|
+
maxAge,
|
|
120
|
+
updateAge: 24 * 60 * 60,
|
|
121
|
+
generateSessionToken: () => crypto.randomUUID(),
|
|
122
|
+
...config.session,
|
|
123
|
+
},
|
|
124
|
+
// JWT options
|
|
125
|
+
jwt: {
|
|
126
|
+
secret: config.secret!, // Asserted in assert.ts
|
|
127
|
+
maxAge: config.session?.maxAge ?? maxAge, // default to same as `session.maxAge`
|
|
128
|
+
encode: jwt.encode,
|
|
129
|
+
decode: jwt.decode,
|
|
130
|
+
...config.jwt,
|
|
131
|
+
},
|
|
132
|
+
// Event messages
|
|
133
|
+
events: eventsErrorHandler(config.events ?? {}, logger),
|
|
134
|
+
adapter: adapterErrorHandler(
|
|
135
|
+
config.adapter || (config.serverActions ? createServerActionsAdapter(config.serverActions) : undefined),
|
|
136
|
+
logger
|
|
137
|
+
),
|
|
138
|
+
// Callback functions
|
|
139
|
+
callbacks: { ...defaultCallbacks, ...config.callbacks },
|
|
140
|
+
logger,
|
|
141
|
+
callbackUrl: url.origin,
|
|
142
|
+
isOnRedirectProxy,
|
|
143
|
+
experimental: {
|
|
144
|
+
...config.experimental,
|
|
145
|
+
},
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Init cookies
|
|
149
|
+
|
|
150
|
+
const cookies: cookie.Cookie[] = []
|
|
151
|
+
|
|
152
|
+
if (csrfDisabled) {
|
|
153
|
+
options.csrfTokenVerified = true
|
|
154
|
+
} else {
|
|
155
|
+
const {
|
|
156
|
+
csrfToken,
|
|
157
|
+
cookie: csrfCookie,
|
|
158
|
+
csrfTokenVerified,
|
|
159
|
+
} = await createCSRFToken({
|
|
160
|
+
options,
|
|
161
|
+
cookieValue: reqCookies?.[options.cookies.csrfToken.name],
|
|
162
|
+
isPost,
|
|
163
|
+
bodyValue: reqCsrfToken,
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
options.csrfToken = csrfToken
|
|
167
|
+
options.csrfTokenVerified = csrfTokenVerified
|
|
168
|
+
|
|
169
|
+
if (csrfCookie) {
|
|
170
|
+
cookies.push({
|
|
171
|
+
name: options.cookies.csrfToken.name,
|
|
172
|
+
value: csrfCookie,
|
|
173
|
+
options: options.cookies.csrfToken.options,
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const { callbackUrl, callbackUrlCookie } = await createCallbackUrl({
|
|
179
|
+
options,
|
|
180
|
+
cookieValue: reqCookies?.[options.cookies.callbackUrl.name],
|
|
181
|
+
paramValue: reqCallbackUrl,
|
|
182
|
+
})
|
|
183
|
+
options.callbackUrl = callbackUrl
|
|
184
|
+
if (callbackUrlCookie) {
|
|
185
|
+
cookies.push({
|
|
186
|
+
name: options.cookies.callbackUrl.name,
|
|
187
|
+
value: callbackUrlCookie,
|
|
188
|
+
options: options.cookies.callbackUrl.options,
|
|
189
|
+
})
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return { options, cookies }
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
type Method = (...args: any[]) => Promise<any>
|
|
196
|
+
|
|
197
|
+
/** Wraps an object of methods and adds error handling. */
|
|
198
|
+
function eventsErrorHandler(
|
|
199
|
+
methods: Partial<InternalOptions["events"]>,
|
|
200
|
+
logger: LoggerInstance
|
|
201
|
+
): Partial<InternalOptions["events"]> {
|
|
202
|
+
return Object.keys(methods).reduce<any>((acc, name) => {
|
|
203
|
+
acc[name] = async (...args: any[]) => {
|
|
204
|
+
try {
|
|
205
|
+
const method: Method = methods[name as keyof Method]
|
|
206
|
+
return await method(...args)
|
|
207
|
+
} catch (e) {
|
|
208
|
+
logger.error(new EventError(e as Error))
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return acc
|
|
212
|
+
}, {})
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Handles adapter induced errors. */
|
|
216
|
+
function adapterErrorHandler(
|
|
217
|
+
adapter: AuthConfig["adapter"],
|
|
218
|
+
logger: LoggerInstance
|
|
219
|
+
) {
|
|
220
|
+
if (!adapter) return
|
|
221
|
+
|
|
222
|
+
return Object.keys(adapter).reduce<any>((acc, name) => {
|
|
223
|
+
acc[name] = async (...args: any[]) => {
|
|
224
|
+
try {
|
|
225
|
+
logger.debug(`adapter_${name}`, { args })
|
|
226
|
+
const method: Method = adapter[name as keyof Method]
|
|
227
|
+
return await method(...args)
|
|
228
|
+
} catch (e) {
|
|
229
|
+
const error = new AdapterError(e as Error)
|
|
230
|
+
logger.error(error)
|
|
231
|
+
throw error
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return acc
|
|
235
|
+
}, {})
|
|
236
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { ErrorPageParam, Theme } from "../../types.js"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The following errors are passed as error query parameters to the default or overridden error page.
|
|
5
|
+
*
|
|
6
|
+
* [Documentation](https://authjs.dev/guides/pages/error)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface ErrorProps {
|
|
10
|
+
url?: URL
|
|
11
|
+
theme?: Theme
|
|
12
|
+
error?: ErrorPageParam
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface ErrorView {
|
|
16
|
+
status: number
|
|
17
|
+
heading: string
|
|
18
|
+
message: JSX.Element
|
|
19
|
+
signin?: JSX.Element
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Renders an error page. */
|
|
23
|
+
export default function ErrorPage(props: ErrorProps) {
|
|
24
|
+
const { url, error = "default", theme } = props
|
|
25
|
+
const signinPageUrl = `${url}/signin`
|
|
26
|
+
|
|
27
|
+
const errors: Record<ErrorPageParam | "default", ErrorView> = {
|
|
28
|
+
default: {
|
|
29
|
+
status: 200,
|
|
30
|
+
heading: "Error",
|
|
31
|
+
message: (
|
|
32
|
+
<p>
|
|
33
|
+
<a className="site" href={url?.origin}>
|
|
34
|
+
{url?.host}
|
|
35
|
+
</a>
|
|
36
|
+
</p>
|
|
37
|
+
),
|
|
38
|
+
},
|
|
39
|
+
Configuration: {
|
|
40
|
+
status: 500,
|
|
41
|
+
heading: "Server error",
|
|
42
|
+
message: (
|
|
43
|
+
<div>
|
|
44
|
+
<p>There is a problem with the server configuration.</p>
|
|
45
|
+
<p>Check the server logs for more information.</p>
|
|
46
|
+
</div>
|
|
47
|
+
),
|
|
48
|
+
},
|
|
49
|
+
AccessDenied: {
|
|
50
|
+
status: 403,
|
|
51
|
+
heading: "Access Denied",
|
|
52
|
+
message: (
|
|
53
|
+
<div>
|
|
54
|
+
<p>You do not have permission to sign in.</p>
|
|
55
|
+
<p>
|
|
56
|
+
<a className="button" href={signinPageUrl}>
|
|
57
|
+
Sign in
|
|
58
|
+
</a>
|
|
59
|
+
</p>
|
|
60
|
+
</div>
|
|
61
|
+
),
|
|
62
|
+
},
|
|
63
|
+
Verification: {
|
|
64
|
+
status: 403,
|
|
65
|
+
heading: "Unable to sign in",
|
|
66
|
+
message: (
|
|
67
|
+
<div>
|
|
68
|
+
<p>The sign in link is no longer valid.</p>
|
|
69
|
+
<p>It may have been used already or it may have expired.</p>
|
|
70
|
+
</div>
|
|
71
|
+
),
|
|
72
|
+
signin: (
|
|
73
|
+
<a className="button" href={signinPageUrl}>
|
|
74
|
+
Sign in
|
|
75
|
+
</a>
|
|
76
|
+
),
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const { status, heading, message, signin } = errors[error] ?? errors.default
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
status,
|
|
84
|
+
html: (
|
|
85
|
+
<div className="error">
|
|
86
|
+
{theme?.brandColor && (
|
|
87
|
+
<style
|
|
88
|
+
dangerouslySetInnerHTML={{
|
|
89
|
+
__html: `
|
|
90
|
+
:root {
|
|
91
|
+
--brand-color: ${theme?.brandColor}
|
|
92
|
+
}
|
|
93
|
+
`,
|
|
94
|
+
}}
|
|
95
|
+
/>
|
|
96
|
+
)}
|
|
97
|
+
<div className="card">
|
|
98
|
+
{theme?.logo && <img src={theme?.logo} alt="Logo" className="logo" />}
|
|
99
|
+
<h1>{heading}</h1>
|
|
100
|
+
<div className="message">{message}</div>
|
|
101
|
+
{signin}
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
),
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { renderToString } from "preact-render-to-string"
|
|
2
|
+
import ErrorPage from "./error.js"
|
|
3
|
+
import SigninPage from "./signin.js"
|
|
4
|
+
import SignoutPage from "./signout.js"
|
|
5
|
+
import css from "./styles.js"
|
|
6
|
+
import VerifyRequestPage from "./verify-request.js"
|
|
7
|
+
import { UnknownAction } from "../../errors.js"
|
|
8
|
+
|
|
9
|
+
import type {
|
|
10
|
+
InternalOptions,
|
|
11
|
+
RequestInternal,
|
|
12
|
+
ResponseInternal,
|
|
13
|
+
InternalProvider,
|
|
14
|
+
PublicProvider,
|
|
15
|
+
} from "../../types.js"
|
|
16
|
+
import type { Cookie } from "../utils/cookie.js"
|
|
17
|
+
|
|
18
|
+
function send({
|
|
19
|
+
html,
|
|
20
|
+
title,
|
|
21
|
+
status,
|
|
22
|
+
cookies,
|
|
23
|
+
theme,
|
|
24
|
+
headTags,
|
|
25
|
+
}: any): ResponseInternal {
|
|
26
|
+
return {
|
|
27
|
+
cookies,
|
|
28
|
+
status,
|
|
29
|
+
headers: { "Content-Type": "text/html" },
|
|
30
|
+
body: `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>${css}</style><title>${title}</title>${
|
|
31
|
+
headTags ?? ""
|
|
32
|
+
}</head><body class="__next-auth-theme-${
|
|
33
|
+
theme?.colorScheme ?? "auto"
|
|
34
|
+
}"><div class="page">${renderToString(html)}</div></body></html>`,
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type RenderPageParams = {
|
|
39
|
+
query?: RequestInternal["query"]
|
|
40
|
+
cookies?: Cookie[]
|
|
41
|
+
} & Partial<
|
|
42
|
+
Pick<
|
|
43
|
+
InternalOptions,
|
|
44
|
+
"url" | "callbackUrl" | "csrfToken" | "providers" | "theme" | "pages"
|
|
45
|
+
>
|
|
46
|
+
>
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Unless the user defines their [own pages](https://authjs.dev/reference/core#pages),
|
|
50
|
+
* we render a set of default ones, using Preact SSR.
|
|
51
|
+
*/
|
|
52
|
+
export default function renderPage(params: RenderPageParams) {
|
|
53
|
+
const { url, theme, query, cookies, pages, providers } = params
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
csrf(skip: boolean, options: InternalOptions, cookies: Cookie[]) {
|
|
57
|
+
if (!skip) {
|
|
58
|
+
return {
|
|
59
|
+
headers: {
|
|
60
|
+
"Content-Type": "application/json",
|
|
61
|
+
"Cache-Control": "private, no-cache, no-store",
|
|
62
|
+
Expires: "0",
|
|
63
|
+
Pragma: "no-cache",
|
|
64
|
+
},
|
|
65
|
+
body: { csrfToken: options.csrfToken },
|
|
66
|
+
cookies,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
options.logger.warn("csrf-disabled")
|
|
70
|
+
cookies.push({
|
|
71
|
+
name: options.cookies.csrfToken.name,
|
|
72
|
+
value: "",
|
|
73
|
+
options: { ...options.cookies.csrfToken.options, maxAge: 0 },
|
|
74
|
+
})
|
|
75
|
+
return { status: 404, cookies }
|
|
76
|
+
},
|
|
77
|
+
providers(providers: InternalProvider[]) {
|
|
78
|
+
return {
|
|
79
|
+
headers: { "Content-Type": "application/json" },
|
|
80
|
+
body: providers.reduce<Record<string, PublicProvider>>(
|
|
81
|
+
(acc, { id, name, type, signinUrl, callbackUrl }) => {
|
|
82
|
+
acc[id] = { id, name, type, signinUrl, callbackUrl }
|
|
83
|
+
return acc
|
|
84
|
+
},
|
|
85
|
+
{}
|
|
86
|
+
),
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
signin(providerId?: string, error?: any) {
|
|
90
|
+
if (providerId) throw new UnknownAction("Unsupported action")
|
|
91
|
+
if (pages?.signIn) {
|
|
92
|
+
let signinUrl = `${pages.signIn}${
|
|
93
|
+
pages.signIn.includes("?") ? "&" : "?"
|
|
94
|
+
}${new URLSearchParams({ callbackUrl: params.callbackUrl ?? "/" })}`
|
|
95
|
+
if (error) signinUrl = `${signinUrl}&${new URLSearchParams({ error })}`
|
|
96
|
+
return { redirect: signinUrl, cookies }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// If we have a webauthn provider with conditional UI and
|
|
100
|
+
// a simpleWebAuthnBrowserScript is defined, we need to
|
|
101
|
+
// render the script in the page.
|
|
102
|
+
const webauthnProvider = providers?.find(
|
|
103
|
+
(p): p is InternalProvider<"webauthn"> =>
|
|
104
|
+
p.type === "webauthn" &&
|
|
105
|
+
p.enableConditionalUI &&
|
|
106
|
+
!!p.simpleWebAuthnBrowserVersion
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
let simpleWebAuthnBrowserScript = ""
|
|
110
|
+
if (webauthnProvider) {
|
|
111
|
+
const { simpleWebAuthnBrowserVersion } = webauthnProvider
|
|
112
|
+
simpleWebAuthnBrowserScript = `<script src="https://unpkg.com/@simplewebauthn/browser@${simpleWebAuthnBrowserVersion}/dist/bundle/index.umd.min.js" crossorigin="anonymous"></script>`
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return send({
|
|
116
|
+
cookies,
|
|
117
|
+
theme,
|
|
118
|
+
html: SigninPage({
|
|
119
|
+
csrfToken: params.csrfToken,
|
|
120
|
+
// We only want to render providers
|
|
121
|
+
providers: params.providers?.filter(
|
|
122
|
+
(provider) =>
|
|
123
|
+
// Always render oauth and email type providers
|
|
124
|
+
["email", "oauth", "oidc"].includes(provider.type) ||
|
|
125
|
+
// Only render credentials type provider if credentials are defined
|
|
126
|
+
(provider.type === "credentials" && provider.credentials) ||
|
|
127
|
+
// Only render webauthn type provider if formFields are defined
|
|
128
|
+
(provider.type === "webauthn" && provider.formFields) ||
|
|
129
|
+
// Don't render other provider types
|
|
130
|
+
false
|
|
131
|
+
),
|
|
132
|
+
callbackUrl: params.callbackUrl,
|
|
133
|
+
theme: params.theme,
|
|
134
|
+
error,
|
|
135
|
+
...query,
|
|
136
|
+
}),
|
|
137
|
+
title: "Sign In",
|
|
138
|
+
headTags: simpleWebAuthnBrowserScript,
|
|
139
|
+
})
|
|
140
|
+
},
|
|
141
|
+
signout() {
|
|
142
|
+
if (pages?.signOut) return { redirect: pages.signOut, cookies }
|
|
143
|
+
return send({
|
|
144
|
+
cookies,
|
|
145
|
+
theme,
|
|
146
|
+
html: SignoutPage({ csrfToken: params.csrfToken, url, theme }),
|
|
147
|
+
title: "Sign Out",
|
|
148
|
+
})
|
|
149
|
+
},
|
|
150
|
+
verifyRequest(props?: any) {
|
|
151
|
+
if (pages?.verifyRequest)
|
|
152
|
+
return {
|
|
153
|
+
redirect: `${pages.verifyRequest}${url?.search ?? ""}`,
|
|
154
|
+
cookies,
|
|
155
|
+
}
|
|
156
|
+
return send({
|
|
157
|
+
cookies,
|
|
158
|
+
theme,
|
|
159
|
+
html: VerifyRequestPage({ url, theme, ...props }),
|
|
160
|
+
title: "Verify Request",
|
|
161
|
+
})
|
|
162
|
+
},
|
|
163
|
+
error(error?: string) {
|
|
164
|
+
if (pages?.error) {
|
|
165
|
+
return {
|
|
166
|
+
redirect: `${pages.error}${
|
|
167
|
+
pages.error.includes("?") ? "&" : "?"
|
|
168
|
+
}error=${error}`,
|
|
169
|
+
cookies,
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return send({
|
|
173
|
+
cookies,
|
|
174
|
+
theme,
|
|
175
|
+
// @ts-expect-error fix error type
|
|
176
|
+
...ErrorPage({ url, theme, error }),
|
|
177
|
+
title: "Error",
|
|
178
|
+
})
|
|
179
|
+
},
|
|
180
|
+
}
|
|
181
|
+
}
|