@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/lib/init.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
import { AdapterError, EventError } from "../errors.js";
|
|
6
|
+
import parseProviders from "./utils/providers.js";
|
|
7
|
+
import { setLogger } from "./utils/logger.js";
|
|
8
|
+
import { merge } from "./utils/merge.js";
|
|
9
|
+
import { createServerActionsAdapter } from "../adapters/server-actions-helpers.js";
|
|
10
|
+
export const defaultCallbacks = {
|
|
11
|
+
signIn() {
|
|
12
|
+
return true;
|
|
13
|
+
},
|
|
14
|
+
redirect({ url, baseUrl }) {
|
|
15
|
+
if (url.startsWith("/"))
|
|
16
|
+
return `${baseUrl}${url}`;
|
|
17
|
+
else if (new URL(url).origin === baseUrl)
|
|
18
|
+
return url;
|
|
19
|
+
return baseUrl;
|
|
20
|
+
},
|
|
21
|
+
session({ session }) {
|
|
22
|
+
return {
|
|
23
|
+
user: {
|
|
24
|
+
name: session.user?.name,
|
|
25
|
+
email: session.user?.email,
|
|
26
|
+
image: session.user?.image,
|
|
27
|
+
},
|
|
28
|
+
expires: session.expires?.toISOString?.() ?? session.expires,
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
jwt({ token }) {
|
|
32
|
+
return token;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
/** Initialize all internal options and cookies. */
|
|
36
|
+
export async function init({ authOptions: config, providerId, action, url, cookies: reqCookies, callbackUrl: reqCallbackUrl, csrfToken: reqCsrfToken, csrfDisabled, isPost, }) {
|
|
37
|
+
const logger = setLogger(config);
|
|
38
|
+
const { providers, provider } = parseProviders({ url, providerId, config });
|
|
39
|
+
const maxAge = 30 * 24 * 60 * 60; // Sessions expire after 30 days of being idle by default
|
|
40
|
+
let isOnRedirectProxy = false;
|
|
41
|
+
if ((provider?.type === "oauth" || provider?.type === "oidc") &&
|
|
42
|
+
provider.redirectProxyUrl) {
|
|
43
|
+
try {
|
|
44
|
+
isOnRedirectProxy =
|
|
45
|
+
new URL(provider.redirectProxyUrl).origin === url.origin;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw new TypeError(`redirectProxyUrl must be a valid URL. Received: ${provider.redirectProxyUrl}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// User provided options are overridden by other options,
|
|
52
|
+
// except for the options with special handling above
|
|
53
|
+
const options = {
|
|
54
|
+
debug: false,
|
|
55
|
+
pages: {},
|
|
56
|
+
theme: {
|
|
57
|
+
colorScheme: "auto",
|
|
58
|
+
logo: "",
|
|
59
|
+
brandColor: "",
|
|
60
|
+
buttonText: "",
|
|
61
|
+
},
|
|
62
|
+
// Custom options override defaults
|
|
63
|
+
...config,
|
|
64
|
+
// These computed settings can have values in userOptions but we override them
|
|
65
|
+
// and are request-specific.
|
|
66
|
+
url,
|
|
67
|
+
action,
|
|
68
|
+
// @ts-expect-errors
|
|
69
|
+
provider,
|
|
70
|
+
cookies: merge(cookie.defaultCookies(config.useSecureCookies ?? url.protocol === "https:"), config.cookies),
|
|
71
|
+
providers,
|
|
72
|
+
// Session options
|
|
73
|
+
session: {
|
|
74
|
+
// If no adapter or serverActions specified, force use of JSON Web Tokens (stateless)
|
|
75
|
+
strategy: (config.adapter || config.serverActions) ? "database" : "jwt",
|
|
76
|
+
maxAge,
|
|
77
|
+
updateAge: 24 * 60 * 60,
|
|
78
|
+
generateSessionToken: () => crypto.randomUUID(),
|
|
79
|
+
...config.session,
|
|
80
|
+
},
|
|
81
|
+
// JWT options
|
|
82
|
+
jwt: {
|
|
83
|
+
secret: config.secret,
|
|
84
|
+
maxAge: config.session?.maxAge ?? maxAge,
|
|
85
|
+
encode: jwt.encode,
|
|
86
|
+
decode: jwt.decode,
|
|
87
|
+
...config.jwt,
|
|
88
|
+
},
|
|
89
|
+
// Event messages
|
|
90
|
+
events: eventsErrorHandler(config.events ?? {}, logger),
|
|
91
|
+
adapter: adapterErrorHandler(config.adapter || (config.serverActions ? createServerActionsAdapter(config.serverActions) : undefined), logger),
|
|
92
|
+
// Callback functions
|
|
93
|
+
callbacks: { ...defaultCallbacks, ...config.callbacks },
|
|
94
|
+
logger,
|
|
95
|
+
callbackUrl: url.origin,
|
|
96
|
+
isOnRedirectProxy,
|
|
97
|
+
experimental: {
|
|
98
|
+
...config.experimental,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
// Init cookies
|
|
102
|
+
const cookies = [];
|
|
103
|
+
if (csrfDisabled) {
|
|
104
|
+
options.csrfTokenVerified = true;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const { csrfToken, cookie: csrfCookie, csrfTokenVerified, } = await createCSRFToken({
|
|
108
|
+
options,
|
|
109
|
+
cookieValue: reqCookies?.[options.cookies.csrfToken.name],
|
|
110
|
+
isPost,
|
|
111
|
+
bodyValue: reqCsrfToken,
|
|
112
|
+
});
|
|
113
|
+
options.csrfToken = csrfToken;
|
|
114
|
+
options.csrfTokenVerified = csrfTokenVerified;
|
|
115
|
+
if (csrfCookie) {
|
|
116
|
+
cookies.push({
|
|
117
|
+
name: options.cookies.csrfToken.name,
|
|
118
|
+
value: csrfCookie,
|
|
119
|
+
options: options.cookies.csrfToken.options,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const { callbackUrl, callbackUrlCookie } = await createCallbackUrl({
|
|
124
|
+
options,
|
|
125
|
+
cookieValue: reqCookies?.[options.cookies.callbackUrl.name],
|
|
126
|
+
paramValue: reqCallbackUrl,
|
|
127
|
+
});
|
|
128
|
+
options.callbackUrl = callbackUrl;
|
|
129
|
+
if (callbackUrlCookie) {
|
|
130
|
+
cookies.push({
|
|
131
|
+
name: options.cookies.callbackUrl.name,
|
|
132
|
+
value: callbackUrlCookie,
|
|
133
|
+
options: options.cookies.callbackUrl.options,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return { options, cookies };
|
|
137
|
+
}
|
|
138
|
+
/** Wraps an object of methods and adds error handling. */
|
|
139
|
+
function eventsErrorHandler(methods, logger) {
|
|
140
|
+
return Object.keys(methods).reduce((acc, name) => {
|
|
141
|
+
acc[name] = async (...args) => {
|
|
142
|
+
try {
|
|
143
|
+
const method = methods[name];
|
|
144
|
+
return await method(...args);
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
logger.error(new EventError(e));
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
return acc;
|
|
151
|
+
}, {});
|
|
152
|
+
}
|
|
153
|
+
/** Handles adapter induced errors. */
|
|
154
|
+
function adapterErrorHandler(adapter, logger) {
|
|
155
|
+
if (!adapter)
|
|
156
|
+
return;
|
|
157
|
+
return Object.keys(adapter).reduce((acc, name) => {
|
|
158
|
+
acc[name] = async (...args) => {
|
|
159
|
+
try {
|
|
160
|
+
logger.debug(`adapter_${name}`, { args });
|
|
161
|
+
const method = adapter[name];
|
|
162
|
+
return await method(...args);
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
const error = new AdapterError(e);
|
|
166
|
+
logger.error(error);
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
return acc;
|
|
171
|
+
}, {});
|
|
172
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ErrorPageParam, Theme } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The following errors are passed as error query parameters to the default or overridden error page.
|
|
4
|
+
*
|
|
5
|
+
* [Documentation](https://authjs.dev/guides/pages/error)
|
|
6
|
+
*/
|
|
7
|
+
export interface ErrorProps {
|
|
8
|
+
url?: URL;
|
|
9
|
+
theme?: Theme;
|
|
10
|
+
error?: ErrorPageParam;
|
|
11
|
+
}
|
|
12
|
+
/** Renders an error page. */
|
|
13
|
+
export default function ErrorPage(props: ErrorProps): {
|
|
14
|
+
status: number;
|
|
15
|
+
html: import("preact").JSX.Element;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/lib/pages/error.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3D;;;;GAIG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AASD,6BAA6B;AAC7B,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,UAAU;;;EAmFlD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
/** Renders an error page. */
|
|
3
|
+
export default function ErrorPage(props) {
|
|
4
|
+
const { url, error = "default", theme } = props;
|
|
5
|
+
const signinPageUrl = `${url}/signin`;
|
|
6
|
+
const errors = {
|
|
7
|
+
default: {
|
|
8
|
+
status: 200,
|
|
9
|
+
heading: "Error",
|
|
10
|
+
message: (_jsx("p", { children: _jsx("a", { className: "site", href: url?.origin, children: url?.host }) })),
|
|
11
|
+
},
|
|
12
|
+
Configuration: {
|
|
13
|
+
status: 500,
|
|
14
|
+
heading: "Server error",
|
|
15
|
+
message: (_jsxs("div", { children: [_jsx("p", { children: "There is a problem with the server configuration." }), _jsx("p", { children: "Check the server logs for more information." })] })),
|
|
16
|
+
},
|
|
17
|
+
AccessDenied: {
|
|
18
|
+
status: 403,
|
|
19
|
+
heading: "Access Denied",
|
|
20
|
+
message: (_jsxs("div", { children: [_jsx("p", { children: "You do not have permission to sign in." }), _jsx("p", { children: _jsx("a", { className: "button", href: signinPageUrl, children: "Sign in" }) })] })),
|
|
21
|
+
},
|
|
22
|
+
Verification: {
|
|
23
|
+
status: 403,
|
|
24
|
+
heading: "Unable to sign in",
|
|
25
|
+
message: (_jsxs("div", { children: [_jsx("p", { children: "The sign in link is no longer valid." }), _jsx("p", { children: "It may have been used already or it may have expired." })] })),
|
|
26
|
+
signin: (_jsx("a", { className: "button", href: signinPageUrl, children: "Sign in" })),
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
const { status, heading, message, signin } = errors[error] ?? errors.default;
|
|
30
|
+
return {
|
|
31
|
+
status,
|
|
32
|
+
html: (_jsxs("div", { className: "error", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
|
|
33
|
+
__html: `
|
|
34
|
+
:root {
|
|
35
|
+
--brand-color: ${theme?.brandColor}
|
|
36
|
+
}
|
|
37
|
+
`,
|
|
38
|
+
} })), _jsxs("div", { className: "card", children: [theme?.logo && _jsx("img", { src: theme?.logo, alt: "Logo", className: "logo" }), _jsx("h1", { children: heading }), _jsx("div", { className: "message", children: message }), signin] })] })),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { InternalOptions, RequestInternal, ResponseInternal, InternalProvider, PublicProvider } from "../../types.js";
|
|
2
|
+
import type { Cookie } from "../utils/cookie.js";
|
|
3
|
+
type RenderPageParams = {
|
|
4
|
+
query?: RequestInternal["query"];
|
|
5
|
+
cookies?: Cookie[];
|
|
6
|
+
} & Partial<Pick<InternalOptions, "url" | "callbackUrl" | "csrfToken" | "providers" | "theme" | "pages">>;
|
|
7
|
+
/**
|
|
8
|
+
* Unless the user defines their [own pages](https://authjs.dev/reference/core#pages),
|
|
9
|
+
* we render a set of default ones, using Preact SSR.
|
|
10
|
+
*/
|
|
11
|
+
export default function renderPage(params: RenderPageParams): {
|
|
12
|
+
csrf(skip: boolean, options: InternalOptions, cookies: Cookie[]): {
|
|
13
|
+
headers: {
|
|
14
|
+
"Content-Type": string;
|
|
15
|
+
"Cache-Control": string;
|
|
16
|
+
Expires: string;
|
|
17
|
+
Pragma: string;
|
|
18
|
+
};
|
|
19
|
+
body: {
|
|
20
|
+
csrfToken: string | undefined;
|
|
21
|
+
};
|
|
22
|
+
cookies: Cookie[];
|
|
23
|
+
status?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
status: number;
|
|
26
|
+
cookies: Cookie[];
|
|
27
|
+
headers?: undefined;
|
|
28
|
+
body?: undefined;
|
|
29
|
+
};
|
|
30
|
+
providers(providers: InternalProvider[]): {
|
|
31
|
+
headers: {
|
|
32
|
+
"Content-Type": string;
|
|
33
|
+
};
|
|
34
|
+
body: Record<string, PublicProvider>;
|
|
35
|
+
};
|
|
36
|
+
signin(providerId?: string, error?: any): ResponseInternal<any>;
|
|
37
|
+
signout(): ResponseInternal<any>;
|
|
38
|
+
verifyRequest(props?: any): ResponseInternal<any>;
|
|
39
|
+
error(error?: string): ResponseInternal<any>;
|
|
40
|
+
};
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/pages/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAsBhD,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,GAAG,OAAO,CACT,IAAI,CACF,eAAe,EACf,KAAK,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CACtE,CACF,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAM,EAAE,gBAAgB;eAI5C,OAAO,WAAW,eAAe,WAAW,MAAM,EAAE;;;;;;;;;;;;;;;;;;yBAqB1C,gBAAgB,EAAE;;;;;;wBAYnB,MAAM,UAAU,GAAG;;0BA6DjB,GAAG;kBAaX,MAAM;EAkBvB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
function send({ html, title, status, cookies, theme, headTags, }) {
|
|
9
|
+
return {
|
|
10
|
+
cookies,
|
|
11
|
+
status,
|
|
12
|
+
headers: { "Content-Type": "text/html" },
|
|
13
|
+
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>${headTags ?? ""}</head><body class="__next-auth-theme-${theme?.colorScheme ?? "auto"}"><div class="page">${renderToString(html)}</div></body></html>`,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Unless the user defines their [own pages](https://authjs.dev/reference/core#pages),
|
|
18
|
+
* we render a set of default ones, using Preact SSR.
|
|
19
|
+
*/
|
|
20
|
+
export default function renderPage(params) {
|
|
21
|
+
const { url, theme, query, cookies, pages, providers } = params;
|
|
22
|
+
return {
|
|
23
|
+
csrf(skip, options, cookies) {
|
|
24
|
+
if (!skip) {
|
|
25
|
+
return {
|
|
26
|
+
headers: {
|
|
27
|
+
"Content-Type": "application/json",
|
|
28
|
+
"Cache-Control": "private, no-cache, no-store",
|
|
29
|
+
Expires: "0",
|
|
30
|
+
Pragma: "no-cache",
|
|
31
|
+
},
|
|
32
|
+
body: { csrfToken: options.csrfToken },
|
|
33
|
+
cookies,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
options.logger.warn("csrf-disabled");
|
|
37
|
+
cookies.push({
|
|
38
|
+
name: options.cookies.csrfToken.name,
|
|
39
|
+
value: "",
|
|
40
|
+
options: { ...options.cookies.csrfToken.options, maxAge: 0 },
|
|
41
|
+
});
|
|
42
|
+
return { status: 404, cookies };
|
|
43
|
+
},
|
|
44
|
+
providers(providers) {
|
|
45
|
+
return {
|
|
46
|
+
headers: { "Content-Type": "application/json" },
|
|
47
|
+
body: providers.reduce((acc, { id, name, type, signinUrl, callbackUrl }) => {
|
|
48
|
+
acc[id] = { id, name, type, signinUrl, callbackUrl };
|
|
49
|
+
return acc;
|
|
50
|
+
}, {}),
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
signin(providerId, error) {
|
|
54
|
+
if (providerId)
|
|
55
|
+
throw new UnknownAction("Unsupported action");
|
|
56
|
+
if (pages?.signIn) {
|
|
57
|
+
let signinUrl = `${pages.signIn}${pages.signIn.includes("?") ? "&" : "?"}${new URLSearchParams({ callbackUrl: params.callbackUrl ?? "/" })}`;
|
|
58
|
+
if (error)
|
|
59
|
+
signinUrl = `${signinUrl}&${new URLSearchParams({ error })}`;
|
|
60
|
+
return { redirect: signinUrl, cookies };
|
|
61
|
+
}
|
|
62
|
+
// If we have a webauthn provider with conditional UI and
|
|
63
|
+
// a simpleWebAuthnBrowserScript is defined, we need to
|
|
64
|
+
// render the script in the page.
|
|
65
|
+
const webauthnProvider = providers?.find((p) => p.type === "webauthn" &&
|
|
66
|
+
p.enableConditionalUI &&
|
|
67
|
+
!!p.simpleWebAuthnBrowserVersion);
|
|
68
|
+
let simpleWebAuthnBrowserScript = "";
|
|
69
|
+
if (webauthnProvider) {
|
|
70
|
+
const { simpleWebAuthnBrowserVersion } = webauthnProvider;
|
|
71
|
+
simpleWebAuthnBrowserScript = `<script src="https://unpkg.com/@simplewebauthn/browser@${simpleWebAuthnBrowserVersion}/dist/bundle/index.umd.min.js" crossorigin="anonymous"></script>`;
|
|
72
|
+
}
|
|
73
|
+
return send({
|
|
74
|
+
cookies,
|
|
75
|
+
theme,
|
|
76
|
+
html: SigninPage({
|
|
77
|
+
csrfToken: params.csrfToken,
|
|
78
|
+
// We only want to render providers
|
|
79
|
+
providers: params.providers?.filter((provider) =>
|
|
80
|
+
// Always render oauth and email type providers
|
|
81
|
+
["email", "oauth", "oidc"].includes(provider.type) ||
|
|
82
|
+
// Only render credentials type provider if credentials are defined
|
|
83
|
+
(provider.type === "credentials" && provider.credentials) ||
|
|
84
|
+
// Only render webauthn type provider if formFields are defined
|
|
85
|
+
(provider.type === "webauthn" && provider.formFields) ||
|
|
86
|
+
// Don't render other provider types
|
|
87
|
+
false),
|
|
88
|
+
callbackUrl: params.callbackUrl,
|
|
89
|
+
theme: params.theme,
|
|
90
|
+
error,
|
|
91
|
+
...query,
|
|
92
|
+
}),
|
|
93
|
+
title: "Sign In",
|
|
94
|
+
headTags: simpleWebAuthnBrowserScript,
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
signout() {
|
|
98
|
+
if (pages?.signOut)
|
|
99
|
+
return { redirect: pages.signOut, cookies };
|
|
100
|
+
return send({
|
|
101
|
+
cookies,
|
|
102
|
+
theme,
|
|
103
|
+
html: SignoutPage({ csrfToken: params.csrfToken, url, theme }),
|
|
104
|
+
title: "Sign Out",
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
verifyRequest(props) {
|
|
108
|
+
if (pages?.verifyRequest)
|
|
109
|
+
return {
|
|
110
|
+
redirect: `${pages.verifyRequest}${url?.search ?? ""}`,
|
|
111
|
+
cookies,
|
|
112
|
+
};
|
|
113
|
+
return send({
|
|
114
|
+
cookies,
|
|
115
|
+
theme,
|
|
116
|
+
html: VerifyRequestPage({ url, theme, ...props }),
|
|
117
|
+
title: "Verify Request",
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
error(error) {
|
|
121
|
+
if (pages?.error) {
|
|
122
|
+
return {
|
|
123
|
+
redirect: `${pages.error}${pages.error.includes("?") ? "&" : "?"}error=${error}`,
|
|
124
|
+
cookies,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return send({
|
|
128
|
+
cookies,
|
|
129
|
+
theme,
|
|
130
|
+
// @ts-expect-error fix error type
|
|
131
|
+
...ErrorPage({ url, theme, error }),
|
|
132
|
+
title: "Error",
|
|
133
|
+
});
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InternalProvider, SignInPageErrorParam, Theme } from "../../types.js";
|
|
2
|
+
export default function SigninPage(props: {
|
|
3
|
+
csrfToken?: string;
|
|
4
|
+
providers?: InternalProvider[];
|
|
5
|
+
callbackUrl?: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
error?: SignInPageErrorParam;
|
|
8
|
+
theme?: Theme;
|
|
9
|
+
}): import("preact").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=signin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signin.d.ts","sourceRoot":"","sources":["../../src/lib/pages/signin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,EACN,MAAM,gBAAgB,CAAA;AAgCvB,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAK,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,gCAmNA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
import { webauthnScript } from "../utils/webauthn-client.js";
|
|
3
|
+
const signinErrors = {
|
|
4
|
+
default: "Unable to sign in.",
|
|
5
|
+
Signin: "Try signing in with a different account.",
|
|
6
|
+
OAuthSignin: "Try signing in with a different account.",
|
|
7
|
+
OAuthCallbackError: "Try signing in with a different account.",
|
|
8
|
+
OAuthCreateAccount: "Try signing in with a different account.",
|
|
9
|
+
EmailCreateAccount: "Try signing in with a different account.",
|
|
10
|
+
Callback: "Try signing in with a different account.",
|
|
11
|
+
OAuthAccountNotLinked: "To confirm your identity, sign in with the same account you used originally.",
|
|
12
|
+
EmailSignin: "The e-mail could not be sent.",
|
|
13
|
+
CredentialsSignin: "Sign in failed. Check the details you provided are correct.",
|
|
14
|
+
SessionRequired: "Please sign in to access this page.",
|
|
15
|
+
};
|
|
16
|
+
function ConditionalUIScript(providerID) {
|
|
17
|
+
const startConditionalUIScript = `
|
|
18
|
+
const currentURL = window.location.href;
|
|
19
|
+
const authURL = currentURL.substring(0, currentURL.lastIndexOf('/'));
|
|
20
|
+
(${webauthnScript})(authURL, "${providerID}");
|
|
21
|
+
`;
|
|
22
|
+
return (_jsx(_Fragment, { children: _jsx("script", { dangerouslySetInnerHTML: { __html: startConditionalUIScript } }) }));
|
|
23
|
+
}
|
|
24
|
+
export default function SigninPage(props) {
|
|
25
|
+
const { csrfToken, providers = [], callbackUrl, theme, email, error: errorType, } = props;
|
|
26
|
+
if (typeof document !== "undefined" && theme?.brandColor) {
|
|
27
|
+
document.documentElement.style.setProperty("--brand-color", theme.brandColor);
|
|
28
|
+
}
|
|
29
|
+
if (typeof document !== "undefined" && theme?.buttonText) {
|
|
30
|
+
document.documentElement.style.setProperty("--button-text-color", theme.buttonText);
|
|
31
|
+
}
|
|
32
|
+
const error = errorType && (signinErrors[errorType] ?? signinErrors.default);
|
|
33
|
+
const providerLogoPath = "https://authjs.dev/img/providers";
|
|
34
|
+
const conditionalUIProviderID = providers.find((provider) => provider.type === "webauthn" && provider.enableConditionalUI)?.id;
|
|
35
|
+
return (_jsxs("div", { className: "signin", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
|
|
36
|
+
__html: `:root {--brand-color: ${theme.brandColor}}`,
|
|
37
|
+
} })), theme?.buttonText && (_jsx("style", { dangerouslySetInnerHTML: {
|
|
38
|
+
__html: `
|
|
39
|
+
:root {
|
|
40
|
+
--button-text-color: ${theme.buttonText}
|
|
41
|
+
}
|
|
42
|
+
`,
|
|
43
|
+
} })), _jsxs("div", { className: "card", children: [error && (_jsx("div", { className: "error", children: _jsx("p", { children: error }) })), theme?.logo && _jsx("img", { src: theme.logo, alt: "Logo", className: "logo" }), providers.map((provider, i) => {
|
|
44
|
+
let bg, brandColor, logo;
|
|
45
|
+
if (provider.type === "oauth" || provider.type === "oidc") {
|
|
46
|
+
;
|
|
47
|
+
({
|
|
48
|
+
bg = "#fff",
|
|
49
|
+
brandColor,
|
|
50
|
+
logo = `${providerLogoPath}/${provider.id}.svg`,
|
|
51
|
+
} = provider.style ?? {});
|
|
52
|
+
}
|
|
53
|
+
const color = brandColor ?? bg ?? "#fff";
|
|
54
|
+
return (_jsxs("div", { className: "provider", children: [provider.type === "oauth" || provider.type === "oidc" ? (_jsxs("form", { action: provider.signinUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), callbackUrl && (_jsx("input", { type: "hidden", name: "callbackUrl", value: callbackUrl })), _jsxs("button", { type: "submit", className: "button", style: {
|
|
55
|
+
"--provider-brand-color": color,
|
|
56
|
+
}, tabIndex: 0, children: [_jsxs("span", { style: {
|
|
57
|
+
filter: "invert(1) grayscale(1) brightness(1.3) contrast(9000)",
|
|
58
|
+
"mix-blend-mode": "luminosity",
|
|
59
|
+
opacity: 0.95,
|
|
60
|
+
}, children: ["Sign in with ", provider.name] }), logo && _jsx("img", { loading: "lazy", height: 24, src: logo })] })] })) : null, (provider.type === "email" ||
|
|
61
|
+
provider.type === "credentials" ||
|
|
62
|
+
provider.type === "webauthn") &&
|
|
63
|
+
i > 0 &&
|
|
64
|
+
providers[i - 1].type !== "email" &&
|
|
65
|
+
providers[i - 1].type !== "credentials" &&
|
|
66
|
+
providers[i - 1].type !== "webauthn" && _jsx("hr", {}), provider.type === "email" && (_jsxs("form", { action: provider.signinUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), _jsx("label", { className: "section-header", htmlFor: `input-email-for-${provider.id}-provider`, children: "Email" }), _jsx("input", { id: `input-email-for-${provider.id}-provider`, autoFocus: true, type: "email", name: "email", value: email, placeholder: "email@example.com", required: true }), _jsxs("button", { id: "submitButton", type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), provider.type === "credentials" && (_jsxs("form", { action: provider.callbackUrl, method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), Object.keys(provider.credentials).map((credential) => {
|
|
67
|
+
return (_jsxs("div", { children: [_jsx("label", { className: "section-header", htmlFor: `input-${credential}-for-${provider.id}-provider`, children: provider.credentials[credential].label ?? credential }), _jsx("input", { name: credential, id: `input-${credential}-for-${provider.id}-provider`, type: provider.credentials[credential].type ?? "text", placeholder: provider.credentials[credential].placeholder ?? "", ...provider.credentials[credential] })] }, `input-group-${provider.id}`));
|
|
68
|
+
}), _jsxs("button", { id: "submitButton", type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), provider.type === "webauthn" && (_jsxs("form", { action: provider.callbackUrl, method: "POST", id: `${provider.id}-form`, children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), Object.keys(provider.formFields).map((field) => {
|
|
69
|
+
return (_jsxs("div", { children: [_jsx("label", { className: "section-header", htmlFor: `input-${field}-for-${provider.id}-provider`, children: provider.formFields[field].label ?? field }), _jsx("input", { name: field, "data-form-field": true, id: `input-${field}-for-${provider.id}-provider`, type: provider.formFields[field].type ?? "text", placeholder: provider.formFields[field].placeholder ?? "", ...provider.formFields[field] })] }, `input-group-${provider.id}`));
|
|
70
|
+
}), _jsxs("button", { id: `submitButton-${provider.id}`, type: "submit", tabIndex: 0, children: ["Sign in with ", provider.name] })] })), (provider.type === "email" ||
|
|
71
|
+
provider.type === "credentials" ||
|
|
72
|
+
provider.type === "webauthn") &&
|
|
73
|
+
i + 1 < providers.length && _jsx("hr", {})] }, provider.id));
|
|
74
|
+
})] }), conditionalUIProviderID && ConditionalUIScript(conditionalUIProviderID)] }));
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signout.d.ts","sourceRoot":"","sources":["../../src/lib/pages/signout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,YAAY,gCAwCtD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
|
|
2
|
+
export default function SignoutPage(props) {
|
|
3
|
+
const { url, csrfToken, theme } = props;
|
|
4
|
+
return (_jsxs("div", { className: "signout", children: [theme?.brandColor && (_jsx("style", { dangerouslySetInnerHTML: {
|
|
5
|
+
__html: `
|
|
6
|
+
:root {
|
|
7
|
+
--brand-color: ${theme.brandColor}
|
|
8
|
+
}
|
|
9
|
+
`,
|
|
10
|
+
} })), theme?.buttonText && (_jsx("style", { dangerouslySetInnerHTML: {
|
|
11
|
+
__html: `
|
|
12
|
+
:root {
|
|
13
|
+
--button-text-color: ${theme.buttonText}
|
|
14
|
+
}
|
|
15
|
+
`,
|
|
16
|
+
} })), _jsxs("div", { className: "card", children: [theme?.logo && _jsx("img", { src: theme.logo, alt: "Logo", className: "logo" }), _jsx("h1", { children: "Signout" }), _jsx("p", { children: "Are you sure you want to sign out?" }), _jsxs("form", { action: url?.toString(), method: "POST", children: [_jsx("input", { type: "hidden", name: "csrfToken", value: csrfToken }), _jsx("button", { id: "submitButton", type: "submit", children: "Sign out" })] })] })] }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const _default: ":root {\n --border-width: 1px;\n --border-radius: 0.5rem;\n --color-error: #c94b4b;\n --color-info: #157efb;\n --color-info-hover: #0f6ddb;\n --color-info-text: #fff;\n}\n\n.__next-auth-theme-auto,\n.__next-auth-theme-light {\n --color-background: #ececec;\n --color-background-hover: rgba(236, 236, 236, 0.8);\n --color-background-card: #fff;\n --color-text: #000;\n --color-primary: #444;\n --color-control-border: #bbb;\n --color-button-active-background: #f9f9f9;\n --color-button-active-border: #aaa;\n --color-separator: #ccc;\n --provider-bg: #fff;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #fff\n );\n}\n\n.__next-auth-theme-dark {\n --color-background: #161b22;\n --color-background-hover: rgba(22, 27, 34, 0.8);\n --color-background-card: #0d1117;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-separator: #444;\n --provider-bg: #161b22;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #000\n );\n}\n\n.__next-auth-theme-dark img[src$=\"42-school.svg\"],\n .__next-auth-theme-dark img[src$=\"apple.svg\"],\n .__next-auth-theme-dark img[src$=\"boxyhq-saml.svg\"],\n .__next-auth-theme-dark img[src$=\"eveonline.svg\"],\n .__next-auth-theme-dark img[src$=\"github.svg\"],\n .__next-auth-theme-dark img[src$=\"mailchimp.svg\"],\n .__next-auth-theme-dark img[src$=\"medium.svg\"],\n .__next-auth-theme-dark img[src$=\"okta.svg\"],\n .__next-auth-theme-dark img[src$=\"patreon.svg\"],\n .__next-auth-theme-dark img[src$=\"ping-id.svg\"],\n .__next-auth-theme-dark img[src$=\"roblox.svg\"],\n .__next-auth-theme-dark img[src$=\"threads.svg\"],\n .__next-auth-theme-dark img[src$=\"wikimedia.svg\"] {\n filter: invert(1);\n }\n\n.__next-auth-theme-dark #submitButton {\n background-color: var(--provider-bg, var(--color-info));\n }\n\n@media (prefers-color-scheme: dark) {\n .__next-auth-theme-auto {\n --color-background: #161b22;\n --color-background-hover: rgba(22, 27, 34, 0.8);\n --color-background-card: #0d1117;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-separator: #444;\n --provider-bg: #161b22;\n --provider-bg-hover: color-mix(\n in srgb,\n var(--provider-brand-color) 30%,\n #000\n );\n }\n .__next-auth-theme-auto img[src$=\"42-school.svg\"],\n .__next-auth-theme-auto img[src$=\"apple.svg\"],\n .__next-auth-theme-auto img[src$=\"boxyhq-saml.svg\"],\n .__next-auth-theme-auto img[src$=\"eveonline.svg\"],\n .__next-auth-theme-auto img[src$=\"github.svg\"],\n .__next-auth-theme-auto img[src$=\"mailchimp.svg\"],\n .__next-auth-theme-auto img[src$=\"medium.svg\"],\n .__next-auth-theme-auto img[src$=\"okta.svg\"],\n .__next-auth-theme-auto img[src$=\"patreon.svg\"],\n .__next-auth-theme-auto img[src$=\"ping-id.svg\"],\n .__next-auth-theme-auto img[src$=\"roblox.svg\"],\n .__next-auth-theme-auto img[src$=\"threads.svg\"],\n .__next-auth-theme-auto img[src$=\"wikimedia.svg\"] {\n filter: invert(1);\n }\n .__next-auth-theme-auto #submitButton {\n background-color: var(--provider-bg, var(--color-info));\n }\n}\n\nhtml {\n box-sizing: border-box;\n}\n\n*,\n*:before,\n*:after {\n box-sizing: inherit;\n margin: 0;\n padding: 0;\n}\n\nbody {\n background-color: var(--color-background);\n margin: 0;\n padding: 0;\n font-family:\n ui-sans-serif,\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n \"Segoe UI\",\n Roboto,\n \"Helvetica Neue\",\n Arial,\n \"Noto Sans\",\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\";\n}\n\nh1 {\n margin-bottom: 1.5rem;\n padding: 0 1rem;\n font-weight: 400;\n color: var(--color-text);\n}\n\np {\n margin-bottom: 1.5rem;\n padding: 0 1rem;\n color: var(--color-text);\n}\n\nform {\n margin: 0;\n padding: 0;\n}\n\nlabel {\n font-weight: 500;\n text-align: left;\n margin-bottom: 0.25rem;\n display: block;\n color: var(--color-text);\n}\n\ninput[type] {\n box-sizing: border-box;\n display: block;\n width: 100%;\n padding: 0.5rem 1rem;\n border: var(--border-width) solid var(--color-control-border);\n background: var(--color-background-card);\n font-size: 1rem;\n border-radius: var(--border-radius);\n color: var(--color-text);\n}\n\np {\n font-size: 1.1rem;\n line-height: 2rem;\n}\n\na.button {\n text-decoration: none;\n line-height: 1rem;\n}\n\na.button:link,\n a.button:visited {\n background-color: var(--color-background);\n color: var(--color-primary);\n }\n\nbutton,\na.button {\n padding: 0.75rem 1rem;\n color: var(--provider-color, var(--color-primary));\n background-color: var(--provider-bg, var(--color-background));\n border: 1px solid #00000031;\n font-size: 0.9rem;\n height: 50px;\n border-radius: var(--border-radius);\n transition: background-color 250ms ease-in-out;\n font-weight: 300;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n:is(button,a.button):hover {\n background-color: var(--provider-bg-hover, var(--color-background-hover));\n cursor: pointer;\n }\n\n:is(button,a.button):active {\n cursor: pointer;\n }\n\n:is(button,a.button) span {\n color: var(--provider-bg);\n }\n\n#submitButton {\n color: var(--button-text-color, var(--color-info-text));\n background-color: var(--brand-color, var(--color-info));\n width: 100%;\n}\n\n#submitButton:hover {\n background-color: var(\n --button-hover-bg,\n var(--color-info-hover)\n ) !important;\n }\n\na.site {\n color: var(--color-primary);\n text-decoration: none;\n font-size: 1rem;\n line-height: 2rem;\n}\n\na.site:hover {\n text-decoration: underline;\n }\n\n.page {\n position: absolute;\n width: 100%;\n height: 100%;\n display: grid;\n place-items: center;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n.page > div {\n text-align: center;\n }\n\n.error a.button {\n padding-left: 2rem;\n padding-right: 2rem;\n margin-top: 0.5rem;\n }\n\n.error .message {\n margin-bottom: 1.5rem;\n }\n\n.signin input[type=\"text\"] {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n\n.signin hr {\n display: block;\n border: 0;\n border-top: 1px solid var(--color-separator);\n margin: 2rem auto 1rem auto;\n overflow: visible;\n }\n\n.signin hr::before {\n content: \"or\";\n background: var(--color-background-card);\n color: #888;\n padding: 0 0.4rem;\n position: relative;\n top: -0.7rem;\n }\n\n.signin .error {\n background: #f5f5f5;\n font-weight: 500;\n border-radius: 0.3rem;\n background: var(--color-error);\n }\n\n.signin .error p {\n text-align: left;\n padding: 0.5rem 1rem;\n font-size: 0.9rem;\n line-height: 1.2rem;\n color: var(--color-info-text);\n }\n\n.signin > div,\n .signin form {\n display: block;\n }\n\n.signin > div input[type], .signin form input[type] {\n margin-bottom: 0.5rem;\n }\n\n.signin > div button, .signin form button {\n width: 100%;\n }\n\n.signin .provider + .provider {\n margin-top: 1rem;\n }\n\n.logo {\n display: inline-block;\n max-width: 150px;\n margin: 1.25rem 0;\n max-height: 70px;\n}\n\n.card {\n background-color: var(--color-background-card);\n border-radius: 1rem;\n padding: 1.25rem 2rem;\n}\n\n.card .header {\n color: var(--color-primary);\n }\n\n.card input[type]::-moz-placeholder {\n color: color-mix(\n in srgb,\n var(--color-text) 20%,\n var(--color-button-active-background)\n );\n }\n\n.card input[type]::placeholder {\n color: color-mix(\n in srgb,\n var(--color-text) 20%,\n var(--color-button-active-background)\n );\n }\n\n.card input[type] {\n background: color-mix(in srgb, var(--color-background-card) 95%, black);\n }\n\n.section-header {\n color: var(--color-text);\n}\n\n@media screen and (min-width: 450px) {\n .card {\n margin: 2rem 0;\n width: 368px;\n }\n}\n\n@media screen and (max-width: 450px) {\n .card {\n margin: 1rem 0;\n width: 343px;\n }\n}\n";
|
|
2
|
+
export default _default;
|
|
3
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/lib/pages/styles.ts"],"names":[],"mappings":";AACA,wBA2XC"}
|