@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/index.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* :::warning Experimental
|
|
4
|
+
* `@mulverse/mulguard-core` is under active development.
|
|
5
|
+
* :::
|
|
6
|
+
*
|
|
7
|
+
* This is the main entry point to the MulGuard library.
|
|
8
|
+
*
|
|
9
|
+
* Based on the {@link https://developer.mozilla.org/en-US/docs/Web/API/Request Request}
|
|
10
|
+
* and {@link https://developer.mozilla.org/en-US/docs/Web/API/Response Response} Web standard APIs.
|
|
11
|
+
* Primarily used to implement framework-specific packages,
|
|
12
|
+
* but it can also be used directly.
|
|
13
|
+
*
|
|
14
|
+
* ## Installation
|
|
15
|
+
*
|
|
16
|
+
* ```bash npm2yarn
|
|
17
|
+
* npm install @mulverse/mulguard-core
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* ## Usage
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { Auth } from "@mulverse/mulguard-core"
|
|
24
|
+
*
|
|
25
|
+
* const request = new Request("https://example.com")
|
|
26
|
+
* const response = await Auth(request, {...})
|
|
27
|
+
*
|
|
28
|
+
* console.log(response instanceof Response) // true
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* ## Resources
|
|
32
|
+
*
|
|
33
|
+
* - [Getting started](https://authjs.dev/getting-started)
|
|
34
|
+
* - [Guides](https://authjs.dev/guides)
|
|
35
|
+
*
|
|
36
|
+
* @module @mulverse/mulguard-core
|
|
37
|
+
*/
|
|
38
|
+
import { assertConfig } from "./lib/utils/assert.js";
|
|
39
|
+
import { AuthError, CredentialsSignin, ErrorPageLoop, isClientError, } from "./errors.js";
|
|
40
|
+
import { AuthInternal, raw, skipCSRFCheck } from "./lib/index.js";
|
|
41
|
+
import { setEnvDefaults, createActionURL } from "./lib/utils/env.js";
|
|
42
|
+
import renderPage from "./lib/pages/index.js";
|
|
43
|
+
import { setLogger } from "./lib/utils/logger.js";
|
|
44
|
+
import { toInternalRequest, toResponse } from "./lib/utils/web.js";
|
|
45
|
+
import { isAuthAction } from "./lib/utils/actions.js";
|
|
46
|
+
export { customFetch } from "./lib/symbols.js";
|
|
47
|
+
export { skipCSRFCheck, raw, setEnvDefaults, createActionURL, isAuthAction };
|
|
48
|
+
/**
|
|
49
|
+
* Core functionality provided by Auth.js.
|
|
50
|
+
*
|
|
51
|
+
* Receives a standard {@link Request} and returns a {@link Response}.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { Auth } from "@mulverse/mulguard-core"
|
|
56
|
+
*
|
|
57
|
+
* const request = new Request("https://example.com")
|
|
58
|
+
* const response = await Auth(request, {
|
|
59
|
+
* providers: [Google],
|
|
60
|
+
* secret: "...",
|
|
61
|
+
* trustHost: true,
|
|
62
|
+
* })
|
|
63
|
+
*```
|
|
64
|
+
* @see [Documentation](https://authjs.dev)
|
|
65
|
+
*/
|
|
66
|
+
export async function Auth(request, config) {
|
|
67
|
+
const logger = setLogger(config);
|
|
68
|
+
const internalRequest = await toInternalRequest(request, config);
|
|
69
|
+
// There was an error parsing the request
|
|
70
|
+
if (!internalRequest)
|
|
71
|
+
return Response.json(`Bad request.`, { status: 400 });
|
|
72
|
+
const warningsOrError = assertConfig(internalRequest, config);
|
|
73
|
+
if (Array.isArray(warningsOrError)) {
|
|
74
|
+
warningsOrError.forEach(logger.warn);
|
|
75
|
+
}
|
|
76
|
+
else if (warningsOrError) {
|
|
77
|
+
// If there's an error in the user config, bail out early
|
|
78
|
+
logger.error(warningsOrError);
|
|
79
|
+
const htmlPages = new Set([
|
|
80
|
+
"signin",
|
|
81
|
+
"signout",
|
|
82
|
+
"error",
|
|
83
|
+
"verify-request",
|
|
84
|
+
]);
|
|
85
|
+
if (!htmlPages.has(internalRequest.action) ||
|
|
86
|
+
internalRequest.method !== "GET") {
|
|
87
|
+
const message = "There was a problem with the server configuration. Check the server logs for more information.";
|
|
88
|
+
return Response.json({ message }, { status: 500 });
|
|
89
|
+
}
|
|
90
|
+
const { pages, theme } = config;
|
|
91
|
+
// If this is true, the config required auth on the error page
|
|
92
|
+
// which could cause a redirect loop
|
|
93
|
+
const authOnErrorPage = pages?.error &&
|
|
94
|
+
internalRequest.url.searchParams
|
|
95
|
+
.get("callbackUrl")
|
|
96
|
+
?.startsWith(pages.error);
|
|
97
|
+
// Either there was no error page configured or the configured one contains infinite redirects
|
|
98
|
+
if (!pages?.error || authOnErrorPage) {
|
|
99
|
+
if (authOnErrorPage) {
|
|
100
|
+
logger.error(new ErrorPageLoop(`The error page ${pages?.error} should not require authentication`));
|
|
101
|
+
}
|
|
102
|
+
const page = renderPage({ theme }).error("Configuration");
|
|
103
|
+
return toResponse(page);
|
|
104
|
+
}
|
|
105
|
+
const url = `${internalRequest.url.origin}${pages.error}?error=Configuration`;
|
|
106
|
+
return Response.redirect(url);
|
|
107
|
+
}
|
|
108
|
+
const isRedirect = request.headers?.has("X-Auth-Return-Redirect");
|
|
109
|
+
const isRaw = config.raw === raw;
|
|
110
|
+
try {
|
|
111
|
+
const internalResponse = await AuthInternal(internalRequest, config);
|
|
112
|
+
if (isRaw)
|
|
113
|
+
return internalResponse;
|
|
114
|
+
const response = toResponse(internalResponse);
|
|
115
|
+
const url = response.headers.get("Location");
|
|
116
|
+
if (!isRedirect || !url)
|
|
117
|
+
return response;
|
|
118
|
+
return Response.json({ url }, { headers: response.headers });
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
const error = e;
|
|
122
|
+
logger.error(error);
|
|
123
|
+
const isAuthError = error instanceof AuthError;
|
|
124
|
+
if (isAuthError && isRaw && !isRedirect)
|
|
125
|
+
throw error;
|
|
126
|
+
// If the CSRF check failed for POST/session, return a 400 status code.
|
|
127
|
+
// We should not redirect to a page as this is an API route
|
|
128
|
+
if (request.method === "POST" && internalRequest.action === "session")
|
|
129
|
+
return Response.json(null, { status: 400 });
|
|
130
|
+
const isClientSafeErrorType = isClientError(error);
|
|
131
|
+
const type = isClientSafeErrorType ? error.type : "Configuration";
|
|
132
|
+
const params = new URLSearchParams({ error: type });
|
|
133
|
+
if (error instanceof CredentialsSignin)
|
|
134
|
+
params.set("code", error.code);
|
|
135
|
+
const pageKind = (isAuthError && error.kind) || "error";
|
|
136
|
+
const pagePath = config.pages?.[pageKind] ?? `${config.basePath}/${pageKind.toLowerCase()}`;
|
|
137
|
+
const url = `${internalRequest.url.origin}${pagePath}?${params}`;
|
|
138
|
+
if (isRedirect)
|
|
139
|
+
return Response.json({ url });
|
|
140
|
+
return Response.redirect(url);
|
|
141
|
+
}
|
|
142
|
+
}
|
package/jwt.d.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
*
|
|
4
|
+
* This module contains functions and types
|
|
5
|
+
* to encode and decode {@link https://authjs.dev/concepts/session-strategies#jwt-session JWT}s
|
|
6
|
+
* issued and used by Auth.js.
|
|
7
|
+
*
|
|
8
|
+
* The JWT issued by Auth.js is _encrypted by default_, using the _A256CBC-HS512_ algorithm ({@link https://www.rfc-editor.org/rfc/rfc7518.html#section-5.2.5 JWE}).
|
|
9
|
+
* It uses the `AUTH_SECRET` environment variable or the passed `secret` property to derive a suitable encryption key.
|
|
10
|
+
*
|
|
11
|
+
* :::info Note
|
|
12
|
+
* Auth.js JWTs are meant to be used by the same app that issued them.
|
|
13
|
+
* If you need JWT authentication for your third-party API, you should rely on your Identity Provider instead.
|
|
14
|
+
* :::
|
|
15
|
+
*
|
|
16
|
+
* ## Installation
|
|
17
|
+
*
|
|
18
|
+
* ```bash npm2yarn
|
|
19
|
+
* npm install @auth/core
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* You can then import this submodule from `@auth/core/jwt`.
|
|
23
|
+
*
|
|
24
|
+
* ## Usage
|
|
25
|
+
*
|
|
26
|
+
* :::warning Warning
|
|
27
|
+
* This module *will* be refactored/changed. We do not recommend relying on it right now.
|
|
28
|
+
* :::
|
|
29
|
+
*
|
|
30
|
+
*
|
|
31
|
+
* ## Resources
|
|
32
|
+
*
|
|
33
|
+
* - [What is a JWT session strategy](https://authjs.dev/concepts/session-strategies#jwt-session)
|
|
34
|
+
* - [RFC7519 - JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519)
|
|
35
|
+
*
|
|
36
|
+
* @module jwt
|
|
37
|
+
*/
|
|
38
|
+
import { Awaitable } from "./types.js";
|
|
39
|
+
import type { LoggerInstance } from "./lib/utils/logger.js";
|
|
40
|
+
/** Issues a JWT. By default, the JWT is encrypted using "A256CBC-HS512". */
|
|
41
|
+
export declare function encode<Payload = JWT>(params: JWTEncodeParams<Payload>): Promise<string>;
|
|
42
|
+
/** Decodes an Auth.js issued JWT. */
|
|
43
|
+
export declare function decode<Payload = JWT>(params: JWTDecodeParams): Promise<Payload | null>;
|
|
44
|
+
type GetTokenParamsBase = {
|
|
45
|
+
secret?: JWTDecodeParams["secret"];
|
|
46
|
+
salt?: JWTDecodeParams["salt"];
|
|
47
|
+
};
|
|
48
|
+
export interface GetTokenParams<R extends boolean = false> extends GetTokenParamsBase {
|
|
49
|
+
/** The request containing the JWT either in the cookies or in the `Authorization` header. */
|
|
50
|
+
req: Request | {
|
|
51
|
+
headers: Headers | Record<string, string>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Use secure prefix for cookie name, unless URL in `NEXTAUTH_URL` is http://
|
|
55
|
+
* or not set (e.g. development or test instance) case use unprefixed name
|
|
56
|
+
*/
|
|
57
|
+
secureCookie?: boolean;
|
|
58
|
+
/** If the JWT is in the cookie, what name `getToken()` should look for. */
|
|
59
|
+
cookieName?: string;
|
|
60
|
+
/**
|
|
61
|
+
* `getToken()` will return the raw JWT if this is set to `true`
|
|
62
|
+
*
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
raw?: R;
|
|
66
|
+
decode?: JWTOptions["decode"];
|
|
67
|
+
logger?: LoggerInstance | Console;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Takes an Auth.js request (`req`) and returns either the Auth.js issued JWT's payload,
|
|
71
|
+
* or the raw JWT string. We look for the JWT in the either the cookies, or the `Authorization` header.
|
|
72
|
+
*/
|
|
73
|
+
export declare function getToken<R extends boolean = false>(params: GetTokenParams<R>): Promise<R extends true ? string : JWT | null>;
|
|
74
|
+
export interface DefaultJWT extends Record<string, unknown> {
|
|
75
|
+
name?: string | null;
|
|
76
|
+
email?: string | null;
|
|
77
|
+
picture?: string | null;
|
|
78
|
+
sub?: string;
|
|
79
|
+
iat?: number;
|
|
80
|
+
exp?: number;
|
|
81
|
+
jti?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Returned by the `jwt` callback when using JWT sessions
|
|
85
|
+
*
|
|
86
|
+
* [`jwt` callback](https://authjs.dev/reference/core/types#jwt)
|
|
87
|
+
*/
|
|
88
|
+
export interface JWT extends Record<string, unknown>, DefaultJWT {
|
|
89
|
+
}
|
|
90
|
+
export interface JWTEncodeParams<Payload = JWT> {
|
|
91
|
+
/**
|
|
92
|
+
* The maximum age of the Auth.js issued JWT in seconds.
|
|
93
|
+
*
|
|
94
|
+
* @default 30 * 24 * 60 * 60 // 30 days
|
|
95
|
+
*/
|
|
96
|
+
maxAge?: number;
|
|
97
|
+
/** Used in combination with `secret`, to derive the encryption secret for JWTs. */
|
|
98
|
+
salt: string;
|
|
99
|
+
/** Used in combination with `salt`, to derive the encryption secret for JWTs. */
|
|
100
|
+
secret: string | string[];
|
|
101
|
+
/** The JWT payload. */
|
|
102
|
+
token?: Payload;
|
|
103
|
+
}
|
|
104
|
+
export interface JWTDecodeParams {
|
|
105
|
+
/** Used in combination with `secret`, to derive the encryption secret for JWTs. */
|
|
106
|
+
salt: string;
|
|
107
|
+
/**
|
|
108
|
+
* Used in combination with `salt`, to derive the encryption secret for JWTs.
|
|
109
|
+
*
|
|
110
|
+
* @note
|
|
111
|
+
* You can also pass an array of secrets, in which case the first secret that successfully
|
|
112
|
+
* decrypts the JWT will be used. This is useful for rotating secrets without invalidating existing sessions.
|
|
113
|
+
* The newer secret should be added to the start of the array, which will be used for all new sessions.
|
|
114
|
+
*/
|
|
115
|
+
secret: string | string[];
|
|
116
|
+
/** The Auth.js issued JWT to be decoded */
|
|
117
|
+
token?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface JWTOptions {
|
|
120
|
+
/**
|
|
121
|
+
* The maximum age of the Auth.js issued JWT in seconds.
|
|
122
|
+
*
|
|
123
|
+
* @default 30 * 24 * 60 * 60 // 30 days
|
|
124
|
+
*/
|
|
125
|
+
maxAge: number;
|
|
126
|
+
/** Override this method to control the Auth.js issued JWT encoding. */
|
|
127
|
+
encode: (params: JWTEncodeParams) => Awaitable<string>;
|
|
128
|
+
/** Override this method to control the Auth.js issued JWT decoding. */
|
|
129
|
+
decode: (params: JWTDecodeParams) => Awaitable<JWT | null>;
|
|
130
|
+
}
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=jwt.d.ts.map
|
package/jwt.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["src/jwt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAa3D,4EAA4E;AAC5E,wBAAsB,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,mBAgB3E;AAED,qCAAqC;AACrC,wBAAsB,MAAM,CAAC,OAAO,GAAG,GAAG,EACxC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA+BzB;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,CACvD,SAAQ,kBAAkB;IAC1B,6FAA6F;IAC7F,GAAG,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC5D;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAA;CAClC;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,SAAS,OAAO,GAAG,KAAK,EACtD,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAA;AA0EhD,MAAM,WAAW,UAAW,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,GAAI,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU;CAAG;AAEnE,MAAM,WAAW,eAAe,CAAC,OAAO,GAAG,GAAG;IAC5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IAQzB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;IACtD,uEAAuE;IACvE,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;CAC3D"}
|
package/jwt.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
*
|
|
4
|
+
* This module contains functions and types
|
|
5
|
+
* to encode and decode {@link https://authjs.dev/concepts/session-strategies#jwt-session JWT}s
|
|
6
|
+
* issued and used by Auth.js.
|
|
7
|
+
*
|
|
8
|
+
* The JWT issued by Auth.js is _encrypted by default_, using the _A256CBC-HS512_ algorithm ({@link https://www.rfc-editor.org/rfc/rfc7518.html#section-5.2.5 JWE}).
|
|
9
|
+
* It uses the `AUTH_SECRET` environment variable or the passed `secret` property to derive a suitable encryption key.
|
|
10
|
+
*
|
|
11
|
+
* :::info Note
|
|
12
|
+
* Auth.js JWTs are meant to be used by the same app that issued them.
|
|
13
|
+
* If you need JWT authentication for your third-party API, you should rely on your Identity Provider instead.
|
|
14
|
+
* :::
|
|
15
|
+
*
|
|
16
|
+
* ## Installation
|
|
17
|
+
*
|
|
18
|
+
* ```bash npm2yarn
|
|
19
|
+
* npm install @auth/core
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* You can then import this submodule from `@auth/core/jwt`.
|
|
23
|
+
*
|
|
24
|
+
* ## Usage
|
|
25
|
+
*
|
|
26
|
+
* :::warning Warning
|
|
27
|
+
* This module *will* be refactored/changed. We do not recommend relying on it right now.
|
|
28
|
+
* :::
|
|
29
|
+
*
|
|
30
|
+
*
|
|
31
|
+
* ## Resources
|
|
32
|
+
*
|
|
33
|
+
* - [What is a JWT session strategy](https://authjs.dev/concepts/session-strategies#jwt-session)
|
|
34
|
+
* - [RFC7519 - JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519)
|
|
35
|
+
*
|
|
36
|
+
* @module jwt
|
|
37
|
+
*/
|
|
38
|
+
import { hkdf } from "@panva/hkdf";
|
|
39
|
+
import { EncryptJWT, base64url, calculateJwkThumbprint, jwtDecrypt } from "jose";
|
|
40
|
+
import { defaultCookies, SessionStore } from "./lib/utils/cookie.js";
|
|
41
|
+
import { MissingSecret } from "./errors.js";
|
|
42
|
+
import * as cookie from "./lib/vendored/cookie.js";
|
|
43
|
+
const { parse: parseCookie } = cookie;
|
|
44
|
+
const DEFAULT_MAX_AGE = 30 * 24 * 60 * 60; // 30 days
|
|
45
|
+
const now = () => (Date.now() / 1000) | 0;
|
|
46
|
+
const alg = "dir";
|
|
47
|
+
const enc = "A256CBC-HS512";
|
|
48
|
+
/** Issues a JWT. By default, the JWT is encrypted using "A256CBC-HS512". */
|
|
49
|
+
export async function encode(params) {
|
|
50
|
+
const { token = {}, secret, maxAge = DEFAULT_MAX_AGE, salt } = params;
|
|
51
|
+
const secrets = Array.isArray(secret) ? secret : [secret];
|
|
52
|
+
const encryptionSecret = await getDerivedEncryptionKey(enc, secrets[0], salt);
|
|
53
|
+
const thumbprint = await calculateJwkThumbprint({ kty: "oct", k: base64url.encode(encryptionSecret) }, `sha${encryptionSecret.byteLength << 3}`);
|
|
54
|
+
// @ts-expect-error `jose` allows any object as payload.
|
|
55
|
+
return await new EncryptJWT(token)
|
|
56
|
+
.setProtectedHeader({ alg, enc, kid: thumbprint })
|
|
57
|
+
.setIssuedAt()
|
|
58
|
+
.setExpirationTime(now() + maxAge)
|
|
59
|
+
.setJti(crypto.randomUUID())
|
|
60
|
+
.encrypt(encryptionSecret);
|
|
61
|
+
}
|
|
62
|
+
/** Decodes an Auth.js issued JWT. */
|
|
63
|
+
export async function decode(params) {
|
|
64
|
+
const { token, secret, salt } = params;
|
|
65
|
+
const secrets = Array.isArray(secret) ? secret : [secret];
|
|
66
|
+
if (!token)
|
|
67
|
+
return null;
|
|
68
|
+
const { payload } = await jwtDecrypt(token, async ({ kid, enc }) => {
|
|
69
|
+
for (const secret of secrets) {
|
|
70
|
+
const encryptionSecret = await getDerivedEncryptionKey(enc, secret, salt);
|
|
71
|
+
if (kid === undefined)
|
|
72
|
+
return encryptionSecret;
|
|
73
|
+
const thumbprint = await calculateJwkThumbprint({ kty: "oct", k: base64url.encode(encryptionSecret) }, `sha${encryptionSecret.byteLength << 3}`);
|
|
74
|
+
if (kid === thumbprint)
|
|
75
|
+
return encryptionSecret;
|
|
76
|
+
}
|
|
77
|
+
throw new Error("no matching decryption secret");
|
|
78
|
+
}, {
|
|
79
|
+
clockTolerance: 15,
|
|
80
|
+
keyManagementAlgorithms: [alg],
|
|
81
|
+
contentEncryptionAlgorithms: [enc, "A256GCM"],
|
|
82
|
+
});
|
|
83
|
+
return payload;
|
|
84
|
+
}
|
|
85
|
+
export async function getToken(params) {
|
|
86
|
+
const { secureCookie, cookieName = defaultCookies(secureCookie ?? false).sessionToken.name, decode: _decode = decode, salt = cookieName, secret, logger = console, raw, req, } = params;
|
|
87
|
+
if (!req)
|
|
88
|
+
throw new Error("Must pass `req` to JWT getToken()");
|
|
89
|
+
const headers = req.headers instanceof Headers ? req.headers : new Headers(req.headers);
|
|
90
|
+
const sessionStore = new SessionStore({ name: cookieName, options: { secure: secureCookie } }, parseCookie(headers.get("cookie") ?? ""), logger);
|
|
91
|
+
let token = sessionStore.value;
|
|
92
|
+
const authorizationHeader = headers.get("authorization");
|
|
93
|
+
if (!token && authorizationHeader?.split(" ")[0] === "Bearer") {
|
|
94
|
+
const urlEncodedToken = authorizationHeader.split(" ")[1];
|
|
95
|
+
token = decodeURIComponent(urlEncodedToken);
|
|
96
|
+
}
|
|
97
|
+
if (!token)
|
|
98
|
+
return null;
|
|
99
|
+
if (raw)
|
|
100
|
+
return token;
|
|
101
|
+
if (!secret)
|
|
102
|
+
throw new MissingSecret("Must pass `secret` if not set to JWT getToken()");
|
|
103
|
+
try {
|
|
104
|
+
return await _decode({ token, secret, salt });
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function getDerivedEncryptionKey(enc, keyMaterial, salt) {
|
|
111
|
+
let length;
|
|
112
|
+
switch (enc) {
|
|
113
|
+
case "A256CBC-HS512":
|
|
114
|
+
length = 64;
|
|
115
|
+
break;
|
|
116
|
+
case "A256GCM":
|
|
117
|
+
length = 32;
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
throw new Error("Unsupported JWT Content Encryption Algorithm");
|
|
121
|
+
}
|
|
122
|
+
return await hkdf("sha256", keyMaterial, salt, `Auth.js Generated Encryption Key (${salt})`, length);
|
|
123
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AdapterAccount, AdapterSession, AdapterUser } from "../../../adapters.js";
|
|
2
|
+
import type { Account, InternalOptions, User } from "../../../types.js";
|
|
3
|
+
import type { JWT } from "../../../jwt.js";
|
|
4
|
+
import type { SessionToken } from "../../utils/cookie.js";
|
|
5
|
+
/**
|
|
6
|
+
* This function handles the complex flow of signing users in, and either creating,
|
|
7
|
+
* linking (or not linking) accounts depending on if the user is currently logged
|
|
8
|
+
* in, if they have account already and the authentication mechanism they are using.
|
|
9
|
+
*
|
|
10
|
+
* It prevents insecure behaviour, such as linking OAuth accounts unless a user is
|
|
11
|
+
* signed in and authenticated with an existing valid account.
|
|
12
|
+
*
|
|
13
|
+
* All verification (e.g. OAuth flows or email address verification flows) are
|
|
14
|
+
* done prior to this handler being called to avoid additional complexity in this
|
|
15
|
+
* handler.
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleLoginOrRegister(sessionToken: SessionToken, _profile: User | AdapterUser | {
|
|
18
|
+
email: string;
|
|
19
|
+
}, _account: AdapterAccount | Account | null, options: InternalOptions): Promise<{
|
|
20
|
+
user: User;
|
|
21
|
+
account: Account;
|
|
22
|
+
session?: undefined;
|
|
23
|
+
isNewUser?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
session: AdapterSession | JWT | null;
|
|
26
|
+
user: AdapterUser;
|
|
27
|
+
isNewUser: boolean;
|
|
28
|
+
account: AdapterAccount;
|
|
29
|
+
} | {
|
|
30
|
+
session: AdapterSession | JWT | null;
|
|
31
|
+
user: AdapterUser;
|
|
32
|
+
isNewUser: boolean;
|
|
33
|
+
account?: undefined;
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=handle-login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-login.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/callback/handle-login.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,IAAI,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAChD,QAAQ,EAAE,cAAc,GAAG,OAAO,GAAG,IAAI,EACzC,OAAO,EAAE,eAAe;;;;;;;;;;;;;;;GAgTzB"}
|