mulguard 1.1.7 → 1.1.9
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/LICENSE +3 -3
- package/README.md +21 -582
- package/adapters.d.ts +2 -0
- package/adapters.d.ts.map +1 -0
- package/adapters.js +1 -0
- package/index.d.ts +329 -0
- package/index.d.ts.map +1 -0
- package/index.js +145 -0
- package/jwt.d.ts +9 -0
- package/jwt.d.ts.map +1 -0
- package/jwt.js +8 -0
- package/lib/actions.d.ts +13 -0
- package/lib/actions.d.ts.map +1 -0
- package/lib/actions.js +86 -0
- package/lib/client.d.ts +104 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +95 -0
- package/lib/env.d.ts +12 -0
- package/lib/env.d.ts.map +1 -0
- package/lib/env.js +38 -0
- package/lib/index.d.ts +56 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +187 -0
- package/lib/types.d.ts +24 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +1 -0
- package/middleware.d.ts +9 -0
- package/middleware.d.ts.map +1 -0
- package/middleware.js +12 -0
- package/next.d.ts +9 -0
- package/next.d.ts.map +1 -0
- package/next.js +12 -0
- package/package.json +93 -102
- package/providers/42-school.d.ts +3 -0
- package/providers/42-school.d.ts.map +1 -0
- package/providers/42-school.js +2 -0
- package/providers/apple.d.ts +3 -0
- package/providers/apple.d.ts.map +1 -0
- package/providers/apple.js +2 -0
- package/providers/asgardeo.d.ts +3 -0
- package/providers/asgardeo.d.ts.map +1 -0
- package/providers/asgardeo.js +2 -0
- package/providers/atlassian.d.ts +3 -0
- package/providers/atlassian.d.ts.map +1 -0
- package/providers/atlassian.js +2 -0
- package/providers/auth0.d.ts +3 -0
- package/providers/auth0.d.ts.map +1 -0
- package/providers/auth0.js +2 -0
- package/providers/authentik.d.ts +3 -0
- package/providers/authentik.d.ts.map +1 -0
- package/providers/authentik.js +2 -0
- package/providers/azure-ad-b2c.d.ts +3 -0
- package/providers/azure-ad-b2c.d.ts.map +1 -0
- package/providers/azure-ad-b2c.js +2 -0
- package/providers/azure-ad.d.ts +3 -0
- package/providers/azure-ad.d.ts.map +1 -0
- package/providers/azure-ad.js +2 -0
- package/providers/azure-devops.d.ts +3 -0
- package/providers/azure-devops.d.ts.map +1 -0
- package/providers/azure-devops.js +2 -0
- package/providers/bankid-no.d.ts +3 -0
- package/providers/bankid-no.d.ts.map +1 -0
- package/providers/bankid-no.js +2 -0
- package/providers/battlenet.d.ts +3 -0
- package/providers/battlenet.d.ts.map +1 -0
- package/providers/battlenet.js +2 -0
- package/providers/beyondidentity.d.ts +3 -0
- package/providers/beyondidentity.d.ts.map +1 -0
- package/providers/beyondidentity.js +2 -0
- package/providers/bitbucket.d.ts +3 -0
- package/providers/bitbucket.d.ts.map +1 -0
- package/providers/bitbucket.js +2 -0
- package/providers/box.d.ts +3 -0
- package/providers/box.d.ts.map +1 -0
- package/providers/box.js +2 -0
- package/providers/boxyhq-saml.d.ts +3 -0
- package/providers/boxyhq-saml.d.ts.map +1 -0
- package/providers/boxyhq-saml.js +2 -0
- package/providers/bungie.d.ts +3 -0
- package/providers/bungie.d.ts.map +1 -0
- package/providers/bungie.js +2 -0
- package/providers/click-up.d.ts +3 -0
- package/providers/click-up.d.ts.map +1 -0
- package/providers/click-up.js +2 -0
- package/providers/cognito.d.ts +3 -0
- package/providers/cognito.d.ts.map +1 -0
- package/providers/cognito.js +2 -0
- package/providers/coinbase.d.ts +3 -0
- package/providers/coinbase.d.ts.map +1 -0
- package/providers/coinbase.js +2 -0
- package/providers/concept2.d.ts +3 -0
- package/providers/concept2.d.ts.map +1 -0
- package/providers/concept2.js +2 -0
- package/providers/credentials.d.ts +3 -0
- package/providers/credentials.d.ts.map +1 -0
- package/providers/credentials.js +2 -0
- package/providers/descope.d.ts +3 -0
- package/providers/descope.d.ts.map +1 -0
- package/providers/descope.js +2 -0
- package/providers/discord.d.ts +3 -0
- package/providers/discord.d.ts.map +1 -0
- package/providers/discord.js +2 -0
- package/providers/dribbble.d.ts +3 -0
- package/providers/dribbble.d.ts.map +1 -0
- package/providers/dribbble.js +2 -0
- package/providers/dropbox.d.ts +3 -0
- package/providers/dropbox.d.ts.map +1 -0
- package/providers/dropbox.js +2 -0
- package/providers/duende-identity-server6.d.ts +3 -0
- package/providers/duende-identity-server6.d.ts.map +1 -0
- package/providers/duende-identity-server6.js +2 -0
- package/providers/email.d.ts +3 -0
- package/providers/email.d.ts.map +1 -0
- package/providers/email.js +2 -0
- package/providers/eventbrite.d.ts +3 -0
- package/providers/eventbrite.d.ts.map +1 -0
- package/providers/eventbrite.js +2 -0
- package/providers/eveonline.d.ts +3 -0
- package/providers/eveonline.d.ts.map +1 -0
- package/providers/eveonline.js +2 -0
- package/providers/facebook.d.ts +3 -0
- package/providers/facebook.d.ts.map +1 -0
- package/providers/facebook.js +2 -0
- package/providers/faceit.d.ts +3 -0
- package/providers/faceit.d.ts.map +1 -0
- package/providers/faceit.js +2 -0
- package/providers/figma.d.ts +3 -0
- package/providers/figma.d.ts.map +1 -0
- package/providers/figma.js +2 -0
- package/providers/forwardemail.d.ts +3 -0
- package/providers/forwardemail.d.ts.map +1 -0
- package/providers/forwardemail.js +2 -0
- package/providers/foursquare.d.ts +3 -0
- package/providers/foursquare.d.ts.map +1 -0
- package/providers/foursquare.js +2 -0
- package/providers/freshbooks.d.ts +3 -0
- package/providers/freshbooks.d.ts.map +1 -0
- package/providers/freshbooks.js +2 -0
- package/providers/frontegg.d.ts +3 -0
- package/providers/frontegg.d.ts.map +1 -0
- package/providers/frontegg.js +2 -0
- package/providers/fusionauth.d.ts +3 -0
- package/providers/fusionauth.d.ts.map +1 -0
- package/providers/fusionauth.js +2 -0
- package/providers/github.d.ts +3 -0
- package/providers/github.d.ts.map +1 -0
- package/providers/github.js +2 -0
- package/providers/gitlab.d.ts +3 -0
- package/providers/gitlab.d.ts.map +1 -0
- package/providers/gitlab.js +2 -0
- package/providers/google.d.ts +3 -0
- package/providers/google.d.ts.map +1 -0
- package/providers/google.js +2 -0
- package/providers/hubspot.d.ts +3 -0
- package/providers/hubspot.d.ts.map +1 -0
- package/providers/hubspot.js +2 -0
- package/providers/huggingface.d.ts +3 -0
- package/providers/huggingface.d.ts.map +1 -0
- package/providers/huggingface.js +2 -0
- package/providers/identity-server4.d.ts +3 -0
- package/providers/identity-server4.d.ts.map +1 -0
- package/providers/identity-server4.js +2 -0
- package/providers/index.d.ts +2 -0
- package/providers/index.d.ts.map +1 -0
- package/providers/index.js +1 -0
- package/providers/instagram.d.ts +3 -0
- package/providers/instagram.d.ts.map +1 -0
- package/providers/instagram.js +2 -0
- package/providers/kakao.d.ts +3 -0
- package/providers/kakao.d.ts.map +1 -0
- package/providers/kakao.js +2 -0
- package/providers/keycloak.d.ts +3 -0
- package/providers/keycloak.d.ts.map +1 -0
- package/providers/keycloak.js +2 -0
- package/providers/kinde.d.ts +3 -0
- package/providers/kinde.d.ts.map +1 -0
- package/providers/kinde.js +2 -0
- package/providers/line.d.ts +3 -0
- package/providers/line.d.ts.map +1 -0
- package/providers/line.js +2 -0
- package/providers/linkedin.d.ts +3 -0
- package/providers/linkedin.d.ts.map +1 -0
- package/providers/linkedin.js +2 -0
- package/providers/logto.d.ts +3 -0
- package/providers/logto.d.ts.map +1 -0
- package/providers/logto.js +2 -0
- package/providers/loops.d.ts +3 -0
- package/providers/loops.d.ts.map +1 -0
- package/providers/loops.js +2 -0
- package/providers/mailchimp.d.ts +3 -0
- package/providers/mailchimp.d.ts.map +1 -0
- package/providers/mailchimp.js +2 -0
- package/providers/mailgun.d.ts +3 -0
- package/providers/mailgun.d.ts.map +1 -0
- package/providers/mailgun.js +2 -0
- package/providers/mailru.d.ts +3 -0
- package/providers/mailru.d.ts.map +1 -0
- package/providers/mailru.js +2 -0
- package/providers/mastodon.d.ts +3 -0
- package/providers/mastodon.d.ts.map +1 -0
- package/providers/mastodon.js +2 -0
- package/providers/mattermost.d.ts +3 -0
- package/providers/mattermost.d.ts.map +1 -0
- package/providers/mattermost.js +2 -0
- package/providers/medium.d.ts +3 -0
- package/providers/medium.d.ts.map +1 -0
- package/providers/medium.js +2 -0
- package/providers/microsoft-entra-id.d.ts +3 -0
- package/providers/microsoft-entra-id.d.ts.map +1 -0
- package/providers/microsoft-entra-id.js +2 -0
- package/providers/naver.d.ts +3 -0
- package/providers/naver.d.ts.map +1 -0
- package/providers/naver.js +2 -0
- package/providers/netlify.d.ts +3 -0
- package/providers/netlify.d.ts.map +1 -0
- package/providers/netlify.js +2 -0
- package/providers/netsuite.d.ts +3 -0
- package/providers/netsuite.d.ts.map +1 -0
- package/providers/netsuite.js +2 -0
- package/providers/nextcloud.d.ts +3 -0
- package/providers/nextcloud.d.ts.map +1 -0
- package/providers/nextcloud.js +2 -0
- package/providers/nodemailer.d.ts +3 -0
- package/providers/nodemailer.d.ts.map +1 -0
- package/providers/nodemailer.js +2 -0
- package/providers/notion.d.ts +3 -0
- package/providers/notion.d.ts.map +1 -0
- package/providers/notion.js +2 -0
- package/providers/okta.d.ts +3 -0
- package/providers/okta.d.ts.map +1 -0
- package/providers/okta.js +2 -0
- package/providers/onelogin.d.ts +3 -0
- package/providers/onelogin.d.ts.map +1 -0
- package/providers/onelogin.js +2 -0
- package/providers/ory-hydra.d.ts +3 -0
- package/providers/ory-hydra.d.ts.map +1 -0
- package/providers/ory-hydra.js +2 -0
- package/providers/osso.d.ts +3 -0
- package/providers/osso.d.ts.map +1 -0
- package/providers/osso.js +2 -0
- package/providers/osu.d.ts +3 -0
- package/providers/osu.d.ts.map +1 -0
- package/providers/osu.js +2 -0
- package/providers/passage.d.ts +3 -0
- package/providers/passage.d.ts.map +1 -0
- package/providers/passage.js +2 -0
- package/providers/passkey.d.ts +3 -0
- package/providers/passkey.d.ts.map +1 -0
- package/providers/passkey.js +2 -0
- package/providers/patreon.d.ts +3 -0
- package/providers/patreon.d.ts.map +1 -0
- package/providers/patreon.js +2 -0
- package/providers/ping-id.d.ts +3 -0
- package/providers/ping-id.d.ts.map +1 -0
- package/providers/ping-id.js +2 -0
- package/providers/pinterest.d.ts +3 -0
- package/providers/pinterest.d.ts.map +1 -0
- package/providers/pinterest.js +2 -0
- package/providers/pipedrive.d.ts +3 -0
- package/providers/pipedrive.d.ts.map +1 -0
- package/providers/pipedrive.js +2 -0
- package/providers/postmark.d.ts +3 -0
- package/providers/postmark.d.ts.map +1 -0
- package/providers/postmark.js +2 -0
- package/providers/reddit.d.ts +3 -0
- package/providers/reddit.d.ts.map +1 -0
- package/providers/reddit.js +2 -0
- package/providers/resend.d.ts +3 -0
- package/providers/resend.d.ts.map +1 -0
- package/providers/resend.js +2 -0
- package/providers/roblox.d.ts +3 -0
- package/providers/roblox.d.ts.map +1 -0
- package/providers/roblox.js +2 -0
- package/providers/salesforce.d.ts +3 -0
- package/providers/salesforce.d.ts.map +1 -0
- package/providers/salesforce.js +2 -0
- package/providers/sendgrid.d.ts +3 -0
- package/providers/sendgrid.d.ts.map +1 -0
- package/providers/sendgrid.js +2 -0
- package/providers/simplelogin.d.ts +3 -0
- package/providers/simplelogin.d.ts.map +1 -0
- package/providers/simplelogin.js +2 -0
- package/providers/slack.d.ts +3 -0
- package/providers/slack.d.ts.map +1 -0
- package/providers/slack.js +2 -0
- package/providers/spotify.d.ts +3 -0
- package/providers/spotify.d.ts.map +1 -0
- package/providers/spotify.js +2 -0
- package/providers/strava.d.ts +3 -0
- package/providers/strava.d.ts.map +1 -0
- package/providers/strava.js +2 -0
- package/providers/threads.d.ts +3 -0
- package/providers/threads.d.ts.map +1 -0
- package/providers/threads.js +2 -0
- package/providers/tiktok.d.ts +3 -0
- package/providers/tiktok.d.ts.map +1 -0
- package/providers/tiktok.js +2 -0
- package/providers/todoist.d.ts +3 -0
- package/providers/todoist.d.ts.map +1 -0
- package/providers/todoist.js +2 -0
- package/providers/trakt.d.ts +3 -0
- package/providers/trakt.d.ts.map +1 -0
- package/providers/trakt.js +2 -0
- package/providers/twitch.d.ts +3 -0
- package/providers/twitch.d.ts.map +1 -0
- package/providers/twitch.js +2 -0
- package/providers/twitter.d.ts +3 -0
- package/providers/twitter.d.ts.map +1 -0
- package/providers/twitter.js +2 -0
- package/providers/united-effects.d.ts +3 -0
- package/providers/united-effects.d.ts.map +1 -0
- package/providers/united-effects.js +2 -0
- package/providers/vipps.d.ts +3 -0
- package/providers/vipps.d.ts.map +1 -0
- package/providers/vipps.js +2 -0
- package/providers/vk.d.ts +3 -0
- package/providers/vk.d.ts.map +1 -0
- package/providers/vk.js +2 -0
- package/providers/webauthn.d.ts +3 -0
- package/providers/webauthn.d.ts.map +1 -0
- package/providers/webauthn.js +2 -0
- package/providers/webex.d.ts +3 -0
- package/providers/webex.d.ts.map +1 -0
- package/providers/webex.js +2 -0
- package/providers/wechat.d.ts +3 -0
- package/providers/wechat.d.ts.map +1 -0
- package/providers/wechat.js +2 -0
- package/providers/wikimedia.d.ts +3 -0
- package/providers/wikimedia.d.ts.map +1 -0
- package/providers/wikimedia.js +2 -0
- package/providers/wordpress.d.ts +3 -0
- package/providers/wordpress.d.ts.map +1 -0
- package/providers/wordpress.js +2 -0
- package/providers/workos.d.ts +3 -0
- package/providers/workos.d.ts.map +1 -0
- package/providers/workos.js +2 -0
- package/providers/yandex.d.ts +3 -0
- package/providers/yandex.d.ts.map +1 -0
- package/providers/yandex.js +2 -0
- package/providers/zitadel.d.ts +3 -0
- package/providers/zitadel.d.ts.map +1 -0
- package/providers/zitadel.js +2 -0
- package/providers/zoho.d.ts +3 -0
- package/providers/zoho.d.ts.map +1 -0
- package/providers/zoho.js +2 -0
- package/providers/zoom.d.ts +3 -0
- package/providers/zoom.d.ts.map +1 -0
- package/providers/zoom.js +2 -0
- package/react.d.ts +102 -0
- package/react.d.ts.map +1 -0
- package/react.js +361 -0
- package/src/adapters.ts +1 -0
- package/src/index.ts +430 -0
- package/src/jwt.ts +9 -0
- package/src/lib/actions.ts +144 -0
- package/src/lib/client.ts +245 -0
- package/src/lib/env.ts +36 -0
- package/src/lib/index.ts +313 -0
- package/src/lib/types.ts +30 -0
- package/src/middleware.ts +16 -0
- package/src/next.ts +16 -0
- package/src/providers/42-school.ts +2 -0
- package/src/providers/apple.ts +2 -0
- package/src/providers/asgardeo.ts +2 -0
- package/src/providers/atlassian.ts +2 -0
- package/src/providers/auth0.ts +2 -0
- package/src/providers/authentik.ts +2 -0
- package/src/providers/azure-ad-b2c.ts +2 -0
- package/src/providers/azure-ad.ts +2 -0
- package/src/providers/azure-devops.ts +2 -0
- package/src/providers/bankid-no.ts +2 -0
- package/src/providers/battlenet.ts +2 -0
- package/src/providers/beyondidentity.ts +2 -0
- package/src/providers/bitbucket.ts +2 -0
- package/src/providers/box.ts +2 -0
- package/src/providers/boxyhq-saml.ts +2 -0
- package/src/providers/bungie.ts +2 -0
- package/src/providers/click-up.ts +2 -0
- package/src/providers/cognito.ts +2 -0
- package/src/providers/coinbase.ts +2 -0
- package/src/providers/concept2.ts +2 -0
- package/src/providers/credentials.ts +2 -0
- package/src/providers/descope.ts +2 -0
- package/src/providers/discord.ts +2 -0
- package/src/providers/dribbble.ts +2 -0
- package/src/providers/dropbox.ts +2 -0
- package/src/providers/duende-identity-server6.ts +2 -0
- package/src/providers/email.ts +2 -0
- package/src/providers/eventbrite.ts +2 -0
- package/src/providers/eveonline.ts +2 -0
- package/src/providers/facebook.ts +2 -0
- package/src/providers/faceit.ts +2 -0
- package/src/providers/figma.ts +2 -0
- package/src/providers/forwardemail.ts +2 -0
- package/src/providers/foursquare.ts +2 -0
- package/src/providers/freshbooks.ts +2 -0
- package/src/providers/frontegg.ts +2 -0
- package/src/providers/fusionauth.ts +2 -0
- package/src/providers/github.ts +2 -0
- package/src/providers/gitlab.ts +2 -0
- package/src/providers/google.ts +2 -0
- package/src/providers/hubspot.ts +2 -0
- package/src/providers/huggingface.ts +2 -0
- package/src/providers/identity-server4.ts +2 -0
- package/src/providers/index.ts +1 -0
- package/src/providers/instagram.ts +2 -0
- package/src/providers/kakao.ts +2 -0
- package/src/providers/keycloak.ts +2 -0
- package/src/providers/kinde.ts +2 -0
- package/src/providers/line.ts +2 -0
- package/src/providers/linkedin.ts +2 -0
- package/src/providers/logto.ts +2 -0
- package/src/providers/loops.ts +2 -0
- package/src/providers/mailchimp.ts +2 -0
- package/src/providers/mailgun.ts +2 -0
- package/src/providers/mailru.ts +2 -0
- package/src/providers/mastodon.ts +2 -0
- package/src/providers/mattermost.ts +2 -0
- package/src/providers/medium.ts +2 -0
- package/src/providers/microsoft-entra-id.ts +2 -0
- package/src/providers/naver.ts +2 -0
- package/src/providers/netlify.ts +2 -0
- package/src/providers/netsuite.ts +2 -0
- package/src/providers/nextcloud.ts +2 -0
- package/src/providers/nodemailer.ts +2 -0
- package/src/providers/notion.ts +2 -0
- package/src/providers/okta.ts +2 -0
- package/src/providers/onelogin.ts +2 -0
- package/src/providers/ory-hydra.ts +2 -0
- package/src/providers/osso.ts +2 -0
- package/src/providers/osu.ts +2 -0
- package/src/providers/passage.ts +2 -0
- package/src/providers/passkey.ts +2 -0
- package/src/providers/patreon.ts +2 -0
- package/src/providers/ping-id.ts +2 -0
- package/src/providers/pinterest.ts +2 -0
- package/src/providers/pipedrive.ts +2 -0
- package/src/providers/postmark.ts +2 -0
- package/src/providers/reddit.ts +2 -0
- package/src/providers/resend.ts +2 -0
- package/src/providers/roblox.ts +2 -0
- package/src/providers/salesforce.ts +2 -0
- package/src/providers/sendgrid.ts +2 -0
- package/src/providers/simplelogin.ts +2 -0
- package/src/providers/slack.ts +2 -0
- package/src/providers/spotify.ts +2 -0
- package/src/providers/strava.ts +2 -0
- package/src/providers/threads.ts +2 -0
- package/src/providers/tiktok.ts +2 -0
- package/src/providers/todoist.ts +2 -0
- package/src/providers/trakt.ts +2 -0
- package/src/providers/twitch.ts +2 -0
- package/src/providers/twitter.ts +2 -0
- package/src/providers/united-effects.ts +2 -0
- package/src/providers/vipps.ts +2 -0
- package/src/providers/vk.ts +2 -0
- package/src/providers/webauthn.ts +2 -0
- package/src/providers/webex.ts +2 -0
- package/src/providers/wechat.ts +2 -0
- package/src/providers/wikimedia.ts +2 -0
- package/src/providers/wordpress.ts +2 -0
- package/src/providers/workos.ts +2 -0
- package/src/providers/yandex.ts +2 -0
- package/src/providers/zitadel.ts +2 -0
- package/src/providers/zoho.ts +2 -0
- package/src/providers/zoom.ts +2 -0
- package/src/react.tsx +546 -0
- package/src/webauthn.ts +152 -0
- package/webauthn.d.ts +9 -0
- package/webauthn.d.ts.map +1 -0
- package/webauthn.js +92 -0
- package/dist/actions-CMtg7FGv.js +0 -1
- package/dist/actions-CjQUKaXF.mjs +0 -200
- package/dist/client/index.js +0 -1
- package/dist/client/index.mjs +0 -484
- package/dist/components/AccountPicker.d.ts +0 -11
- package/dist/components/OAuthButton.d.ts +0 -11
- package/dist/components/PassKeyButton.d.ts +0 -11
- package/dist/components/PassKeyRegister.d.ts +0 -10
- package/dist/components/TwoFactorSetup.d.ts +0 -8
- package/dist/components/TwoFactorVerify.d.ts +0 -9
- package/dist/core/account-picker/encryption.d.ts +0 -22
- package/dist/core/account-picker/index.d.ts +0 -22
- package/dist/core/auth/email-password.d.ts +0 -145
- package/dist/core/auth/oauth/index.d.ts +0 -14
- package/dist/core/auth/oauth/oauth-handler.d.ts +0 -172
- package/dist/core/auth/oauth/pkce.d.ts +0 -168
- package/dist/core/auth/oauth/providers.d.ts +0 -198
- package/dist/core/auth/oauth/state-store-cookie.d.ts +0 -83
- package/dist/core/auth/oauth/state-store-redis.d.ts +0 -25
- package/dist/core/auth/oauth/state-store.d.ts +0 -48
- package/dist/core/auth/otp.d.ts +0 -184
- package/dist/core/auth/passkey.d.ts +0 -35
- package/dist/core/auth/password.d.ts +0 -22
- package/dist/core/auth/signin-unified.d.ts +0 -33
- package/dist/core/auth/two-factor.d.ts +0 -28
- package/dist/core/client/index.d.ts +0 -132
- package/dist/core/client/token-refresh-manager.d.ts +0 -48
- package/dist/core/errors/index.d.ts +0 -269
- package/dist/core/index.d.ts +0 -9
- package/dist/core/logger/index.d.ts +0 -147
- package/dist/core/mulguard/auth-handlers.d.ts +0 -100
- package/dist/core/mulguard/defaults.d.ts +0 -58
- package/dist/core/mulguard/index.d.ts +0 -9
- package/dist/core/mulguard/integration.d.ts +0 -104
- package/dist/core/mulguard/oauth-handler.d.ts +0 -93
- package/dist/core/mulguard/session-manager.d.ts +0 -94
- package/dist/core/security/csrf.d.ts +0 -46
- package/dist/core/security/headers.d.ts +0 -24
- package/dist/core/security/index.d.ts +0 -132
- package/dist/core/security/rate-limit.d.ts +0 -39
- package/dist/core/security/security-manager.d.ts +0 -236
- package/dist/core/security/validation.d.ts +0 -251
- package/dist/core/security/xss.d.ts +0 -20
- package/dist/core/session/index.d.ts +0 -35
- package/dist/core/session/session-manager.d.ts +0 -235
- package/dist/core/types/auth.d.ts +0 -290
- package/dist/core/types/errors.d.ts +0 -200
- package/dist/core/types/index.d.ts +0 -484
- package/dist/core/utils/auth-helpers.d.ts +0 -136
- package/dist/core/utils/logger.d.ts +0 -121
- package/dist/index/index.js +0 -1
- package/dist/index/index.mjs +0 -2736
- package/dist/index.d.ts +0 -18
- package/dist/mulguard.d.ts +0 -373
- package/dist/nextjs/client/hooks.d.ts +0 -122
- package/dist/nextjs/client/index.d.ts +0 -13
- package/dist/nextjs/client/provider.d.ts +0 -69
- package/dist/nextjs/client/server-actions-helper.d.ts +0 -22
- package/dist/nextjs/handlers/api.d.ts +0 -10
- package/dist/nextjs/handlers/index.d.ts +0 -9
- package/dist/nextjs/handlers/route.d.ts +0 -76
- package/dist/nextjs/index.d.ts +0 -15
- package/dist/nextjs/proxy/index.d.ts +0 -149
- package/dist/nextjs/proxy/security.d.ts +0 -9
- package/dist/nextjs/server/actions.d.ts +0 -30
- package/dist/nextjs/server/auth.d.ts +0 -65
- package/dist/nextjs/server/cookies.d.ts +0 -41
- package/dist/nextjs/server/index.d.ts +0 -18
- package/dist/nextjs/server/oauth-state.d.ts +0 -32
- package/dist/nextjs/server/session-helpers.d.ts +0 -24
- package/dist/nextjs/server/session.d.ts +0 -144
- package/dist/oauth-state-Drwz6fES.js +0 -1
- package/dist/oauth-state-pdypStuS.mjs +0 -210
- package/dist/server/index.js +0 -1
- package/dist/server/index.mjs +0 -29
package/react.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* MulGuard is the official integration of Auth.js for Next.js applications. It supports both
|
|
4
|
+
* [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the
|
|
5
|
+
* [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React
|
|
6
|
+
* Context provider to wrap your application and make session data available anywhere.
|
|
7
|
+
*
|
|
8
|
+
* For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods)
|
|
9
|
+
*
|
|
10
|
+
* @module react
|
|
11
|
+
*/
|
|
12
|
+
"use client";
|
|
13
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
+
import * as React from "react";
|
|
15
|
+
import { apiBaseUrl, ClientSessionError, fetchData, now, parseUrl, useOnline, } from "./lib/client.js";
|
|
16
|
+
// This behaviour mirrors the default behaviour for getting the site name that
|
|
17
|
+
// happens server side in server/index.js
|
|
18
|
+
// 1. An empty value is legitimate when the code is being invoked client side as
|
|
19
|
+
// relative URLs are valid in that context and so defaults to empty.
|
|
20
|
+
// 2. When invoked server side the value is picked up from an environment
|
|
21
|
+
// variable and defaults to 'http://localhost:3000'.
|
|
22
|
+
export const __MULGUARD = {
|
|
23
|
+
baseUrl: parseUrl(process.env.MULGUARD_URL ?? process.env.NEXTAUTH_URL ?? process.env.AUTH_URL ?? process.env.VERCEL_URL).origin,
|
|
24
|
+
basePath: parseUrl(process.env.MULGUARD_URL ?? process.env.NEXTAUTH_URL ?? process.env.AUTH_URL).path,
|
|
25
|
+
baseUrlServer: parseUrl(process.env.MULGUARD_URL_INTERNAL ??
|
|
26
|
+
process.env.NEXTAUTH_URL_INTERNAL ??
|
|
27
|
+
process.env.AUTH_URL ??
|
|
28
|
+
process.env.NEXTAUTH_URL ??
|
|
29
|
+
process.env.VERCEL_URL).origin,
|
|
30
|
+
basePathServer: parseUrl(process.env.MULGUARD_URL_INTERNAL ?? process.env.NEXTAUTH_URL_INTERNAL ?? process.env.AUTH_URL ?? process.env.NEXTAUTH_URL).path,
|
|
31
|
+
_lastSync: 0,
|
|
32
|
+
_session: undefined,
|
|
33
|
+
_getSession: () => { },
|
|
34
|
+
};
|
|
35
|
+
// Backward compatibility
|
|
36
|
+
export const __NEXTAUTH = __MULGUARD;
|
|
37
|
+
// https://github.com/mulguard/mulguard/pull/10762
|
|
38
|
+
let broadcastChannel = null;
|
|
39
|
+
function getNewBroadcastChannel() {
|
|
40
|
+
if (typeof BroadcastChannel === "undefined") {
|
|
41
|
+
return {
|
|
42
|
+
postMessage: () => { },
|
|
43
|
+
addEventListener: () => { },
|
|
44
|
+
removeEventListener: () => { },
|
|
45
|
+
name: "mulguard",
|
|
46
|
+
onmessage: null,
|
|
47
|
+
onmessageerror: null,
|
|
48
|
+
close: () => { },
|
|
49
|
+
dispatchEvent: () => false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return new BroadcastChannel("mulguard");
|
|
53
|
+
}
|
|
54
|
+
function broadcast() {
|
|
55
|
+
if (broadcastChannel === null) {
|
|
56
|
+
broadcastChannel = getNewBroadcastChannel();
|
|
57
|
+
}
|
|
58
|
+
return broadcastChannel;
|
|
59
|
+
}
|
|
60
|
+
// TODO:
|
|
61
|
+
const logger = {
|
|
62
|
+
debug: console.debug,
|
|
63
|
+
error: console.error,
|
|
64
|
+
warn: console.warn,
|
|
65
|
+
};
|
|
66
|
+
export const SessionContext = React.createContext?.(undefined);
|
|
67
|
+
/**
|
|
68
|
+
* React Hook that gives you access to the logged in user's session data and lets you modify it.
|
|
69
|
+
*
|
|
70
|
+
* :::info
|
|
71
|
+
* `useSession` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.
|
|
72
|
+
* :::
|
|
73
|
+
*/
|
|
74
|
+
export function useSession(options) {
|
|
75
|
+
if (!SessionContext) {
|
|
76
|
+
throw new Error("React Context is unavailable in Server Components");
|
|
77
|
+
}
|
|
78
|
+
// @ts-expect-error Satisfy TS if branch on line below
|
|
79
|
+
const value = React.useContext(SessionContext);
|
|
80
|
+
if (!value && process.env.NODE_ENV !== "production") {
|
|
81
|
+
throw new Error("[next-auth]: `useSession` must be wrapped in a <SessionProvider />");
|
|
82
|
+
}
|
|
83
|
+
const { required, onUnauthenticated } = options ?? {};
|
|
84
|
+
const requiredAndNotLoading = required && value.status === "unauthenticated";
|
|
85
|
+
React.useEffect(() => {
|
|
86
|
+
if (requiredAndNotLoading) {
|
|
87
|
+
const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({
|
|
88
|
+
error: "SessionRequired",
|
|
89
|
+
callbackUrl: window.location.href,
|
|
90
|
+
})}`;
|
|
91
|
+
if (onUnauthenticated)
|
|
92
|
+
onUnauthenticated();
|
|
93
|
+
else
|
|
94
|
+
window.location.href = url;
|
|
95
|
+
}
|
|
96
|
+
}, [requiredAndNotLoading, onUnauthenticated]);
|
|
97
|
+
if (requiredAndNotLoading) {
|
|
98
|
+
return {
|
|
99
|
+
data: value.data,
|
|
100
|
+
update: value.update,
|
|
101
|
+
status: "loading",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
export async function getSession(params) {
|
|
107
|
+
const session = await fetchData("session", __NEXTAUTH, logger, params);
|
|
108
|
+
if (params?.broadcast ?? true) {
|
|
109
|
+
// https://github.com/nextauthjs/next-auth/pull/11470
|
|
110
|
+
getNewBroadcastChannel().postMessage({
|
|
111
|
+
event: "session",
|
|
112
|
+
data: { trigger: "getSession" },
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return session;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns the current Cross-Site Request Forgery Token (CSRF Token)
|
|
119
|
+
* required to make requests that changes state. (e.g. signing in or out, or updating the session).
|
|
120
|
+
*
|
|
121
|
+
* [CSRF Prevention: Double Submit Cookie](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)
|
|
122
|
+
*/
|
|
123
|
+
export async function getCsrfToken() {
|
|
124
|
+
const response = await fetchData("csrf", __NEXTAUTH, logger);
|
|
125
|
+
return response?.csrfToken ?? "";
|
|
126
|
+
}
|
|
127
|
+
export async function getProviders() {
|
|
128
|
+
return fetchData("providers", __NEXTAUTH, logger);
|
|
129
|
+
}
|
|
130
|
+
export async function signIn(provider, options, authorizationParams) {
|
|
131
|
+
const { callbackUrl, ...rest } = options ?? {};
|
|
132
|
+
const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest;
|
|
133
|
+
const baseUrl = apiBaseUrl(__NEXTAUTH);
|
|
134
|
+
const providers = await getProviders();
|
|
135
|
+
if (!providers) {
|
|
136
|
+
const url = `${baseUrl}/error`;
|
|
137
|
+
window.location.href = url;
|
|
138
|
+
return; // TODO: Return error if `redirect: false`
|
|
139
|
+
}
|
|
140
|
+
if (!provider || !providers[provider]) {
|
|
141
|
+
const url = `${baseUrl}/signin?${new URLSearchParams({
|
|
142
|
+
callbackUrl: redirectTo,
|
|
143
|
+
})}`;
|
|
144
|
+
window.location.href = url;
|
|
145
|
+
return; // TODO: Return error if `redirect: false`
|
|
146
|
+
}
|
|
147
|
+
const providerType = providers[provider].type;
|
|
148
|
+
if (providerType === "webauthn") {
|
|
149
|
+
// TODO: Add docs link with explanation
|
|
150
|
+
throw new TypeError([
|
|
151
|
+
`Provider id "${provider}" refers to a WebAuthn provider.`,
|
|
152
|
+
'Please use `import { signIn } from "next-auth/webauthn"` instead.',
|
|
153
|
+
].join("\n"));
|
|
154
|
+
}
|
|
155
|
+
const signInUrl = `${baseUrl}/${providerType === "credentials" ? "callback" : "signin"}/${provider}`;
|
|
156
|
+
const csrfToken = await getCsrfToken();
|
|
157
|
+
const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, {
|
|
158
|
+
method: "post",
|
|
159
|
+
headers: {
|
|
160
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
161
|
+
"X-Auth-Return-Redirect": "1",
|
|
162
|
+
},
|
|
163
|
+
body: new URLSearchParams({
|
|
164
|
+
...signInParams,
|
|
165
|
+
csrfToken,
|
|
166
|
+
callbackUrl: redirectTo,
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
169
|
+
const data = await res.json();
|
|
170
|
+
if (redirect) {
|
|
171
|
+
const url = data.url ?? redirectTo;
|
|
172
|
+
window.location.href = url;
|
|
173
|
+
// If url contains a hash, the browser does not reload the page. We reload manually
|
|
174
|
+
if (url.includes("#"))
|
|
175
|
+
window.location.reload();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const error = new URL(data.url).searchParams.get("error") ?? undefined;
|
|
179
|
+
const code = new URL(data.url).searchParams.get("code") ?? undefined;
|
|
180
|
+
if (res.ok) {
|
|
181
|
+
await __NEXTAUTH._getSession({ event: "storage" });
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
error,
|
|
185
|
+
code,
|
|
186
|
+
status: res.status,
|
|
187
|
+
ok: res.ok,
|
|
188
|
+
url: error ? null : data.url,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export async function signOut(options) {
|
|
192
|
+
const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {};
|
|
193
|
+
const baseUrl = apiBaseUrl(__NEXTAUTH);
|
|
194
|
+
const csrfToken = await getCsrfToken();
|
|
195
|
+
const res = await fetch(`${baseUrl}/signout`, {
|
|
196
|
+
method: "post",
|
|
197
|
+
headers: {
|
|
198
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
199
|
+
"X-Auth-Return-Redirect": "1",
|
|
200
|
+
},
|
|
201
|
+
body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }),
|
|
202
|
+
});
|
|
203
|
+
const data = await res.json();
|
|
204
|
+
broadcast().postMessage({ event: "session", data: { trigger: "signout" } });
|
|
205
|
+
if (redirect) {
|
|
206
|
+
const url = data.url ?? redirectTo;
|
|
207
|
+
window.location.href = url;
|
|
208
|
+
// If url contains a hash, the browser does not reload the page. We reload manually
|
|
209
|
+
if (url.includes("#"))
|
|
210
|
+
window.location.reload();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
await __NEXTAUTH._getSession({ event: "storage" });
|
|
214
|
+
return data;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* [React Context](https://react.dev/learn/passing-data-deeply-with-context) provider to wrap the app (`pages/`) to make session data available anywhere.
|
|
218
|
+
*
|
|
219
|
+
* When used, the session state is automatically synchronized across all open tabs/windows and they are all updated whenever they gain or lose focus
|
|
220
|
+
* or the state changes (e.g. a user signs in or out) when {@link SessionProviderProps.refetchOnWindowFocus} is `true`.
|
|
221
|
+
*
|
|
222
|
+
* :::info
|
|
223
|
+
* `SessionProvider` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.
|
|
224
|
+
* :::
|
|
225
|
+
*/
|
|
226
|
+
export function SessionProvider(props) {
|
|
227
|
+
if (!SessionContext) {
|
|
228
|
+
throw new Error("React Context is unavailable in Server Components");
|
|
229
|
+
}
|
|
230
|
+
const { children, basePath, refetchInterval, refetchWhenOffline } = props;
|
|
231
|
+
if (basePath)
|
|
232
|
+
__NEXTAUTH.basePath = basePath;
|
|
233
|
+
/**
|
|
234
|
+
* If session was `null`, there was an attempt to fetch it,
|
|
235
|
+
* but it failed, but we still treat it as a valid initial value.
|
|
236
|
+
*/
|
|
237
|
+
const hasInitialSession = props.session !== undefined;
|
|
238
|
+
/** If session was passed, initialize as already synced */
|
|
239
|
+
__NEXTAUTH._lastSync = hasInitialSession ? now() : 0;
|
|
240
|
+
const [session, setSession] = React.useState(() => {
|
|
241
|
+
if (hasInitialSession)
|
|
242
|
+
__NEXTAUTH._session = props.session;
|
|
243
|
+
return props.session;
|
|
244
|
+
});
|
|
245
|
+
/** If session was passed, initialize as not loading */
|
|
246
|
+
const [loading, setLoading] = React.useState(!hasInitialSession);
|
|
247
|
+
React.useEffect(() => {
|
|
248
|
+
__NEXTAUTH._getSession = async ({ event } = {}) => {
|
|
249
|
+
try {
|
|
250
|
+
const storageEvent = event === "storage";
|
|
251
|
+
// We should always update if we don't have a client session yet
|
|
252
|
+
// or if there are events from other tabs/windows
|
|
253
|
+
if (storageEvent || __NEXTAUTH._session === undefined) {
|
|
254
|
+
__NEXTAUTH._lastSync = now();
|
|
255
|
+
__NEXTAUTH._session = await getSession({
|
|
256
|
+
broadcast: !storageEvent,
|
|
257
|
+
});
|
|
258
|
+
setSession(__NEXTAUTH._session);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (
|
|
262
|
+
// If there is no time defined for when a session should be considered
|
|
263
|
+
// stale, then it's okay to use the value we have until an event is
|
|
264
|
+
// triggered which updates it
|
|
265
|
+
!event ||
|
|
266
|
+
// If the client doesn't have a session then we don't need to call
|
|
267
|
+
// the server to check if it does (if they have signed in via another
|
|
268
|
+
// tab or window that will come through as a "stroage" event
|
|
269
|
+
// event anyway)
|
|
270
|
+
__NEXTAUTH._session === null ||
|
|
271
|
+
// Bail out early if the client session is not stale yet
|
|
272
|
+
now() < __NEXTAUTH._lastSync) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// An event or session staleness occurred, update the client session.
|
|
276
|
+
__NEXTAUTH._lastSync = now();
|
|
277
|
+
__NEXTAUTH._session = await getSession();
|
|
278
|
+
setSession(__NEXTAUTH._session);
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
logger.error(new ClientSessionError(error.message, error));
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
setLoading(false);
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
__NEXTAUTH._getSession();
|
|
288
|
+
return () => {
|
|
289
|
+
__NEXTAUTH._lastSync = 0;
|
|
290
|
+
__NEXTAUTH._session = undefined;
|
|
291
|
+
__NEXTAUTH._getSession = () => { };
|
|
292
|
+
};
|
|
293
|
+
}, []);
|
|
294
|
+
React.useEffect(() => {
|
|
295
|
+
const handle = () => __NEXTAUTH._getSession({ event: "storage" });
|
|
296
|
+
// Listen for storage events and update session if event fired from
|
|
297
|
+
// another window (but suppress firing another event to avoid a loop)
|
|
298
|
+
// Fetch new session data but tell it to not to fire another event to
|
|
299
|
+
// avoid an infinite loop.
|
|
300
|
+
// Note: We could pass session data through and do something like
|
|
301
|
+
// `setData(message.data)` but that can cause problems depending
|
|
302
|
+
// on how the session object is being used in the client; it is
|
|
303
|
+
// more robust to have each window/tab fetch it's own copy of the
|
|
304
|
+
// session object rather than share it across instances.
|
|
305
|
+
broadcast().addEventListener("message", handle);
|
|
306
|
+
return () => broadcast().removeEventListener("message", handle);
|
|
307
|
+
}, []);
|
|
308
|
+
React.useEffect(() => {
|
|
309
|
+
const { refetchOnWindowFocus = true } = props;
|
|
310
|
+
// Listen for when the page is visible, if the user switches tabs
|
|
311
|
+
// and makes our tab visible again, re-fetch the session, but only if
|
|
312
|
+
// this feature is not disabled.
|
|
313
|
+
const visibilityHandler = () => {
|
|
314
|
+
if (refetchOnWindowFocus && document.visibilityState === "visible")
|
|
315
|
+
__NEXTAUTH._getSession({ event: "visibilitychange" });
|
|
316
|
+
};
|
|
317
|
+
document.addEventListener("visibilitychange", visibilityHandler, false);
|
|
318
|
+
return () => document.removeEventListener("visibilitychange", visibilityHandler, false);
|
|
319
|
+
}, [props.refetchOnWindowFocus]);
|
|
320
|
+
const isOnline = useOnline();
|
|
321
|
+
// TODO: Flip this behavior in next major version
|
|
322
|
+
const shouldRefetch = refetchWhenOffline !== false || isOnline;
|
|
323
|
+
React.useEffect(() => {
|
|
324
|
+
if (refetchInterval && shouldRefetch) {
|
|
325
|
+
const refetchIntervalTimer = setInterval(() => {
|
|
326
|
+
if (__NEXTAUTH._session) {
|
|
327
|
+
__NEXTAUTH._getSession({ event: "poll" });
|
|
328
|
+
}
|
|
329
|
+
}, refetchInterval * 1000);
|
|
330
|
+
return () => clearInterval(refetchIntervalTimer);
|
|
331
|
+
}
|
|
332
|
+
}, [refetchInterval, shouldRefetch]);
|
|
333
|
+
const value = React.useMemo(() => ({
|
|
334
|
+
data: session,
|
|
335
|
+
status: loading
|
|
336
|
+
? "loading"
|
|
337
|
+
: session
|
|
338
|
+
? "authenticated"
|
|
339
|
+
: "unauthenticated",
|
|
340
|
+
async update(data) {
|
|
341
|
+
if (loading)
|
|
342
|
+
return;
|
|
343
|
+
setLoading(true);
|
|
344
|
+
const newSession = await fetchData("session", __NEXTAUTH, logger, typeof data === "undefined"
|
|
345
|
+
? undefined
|
|
346
|
+
: { body: { csrfToken: await getCsrfToken(), data } });
|
|
347
|
+
setLoading(false);
|
|
348
|
+
if (newSession) {
|
|
349
|
+
setSession(newSession);
|
|
350
|
+
broadcast().postMessage({
|
|
351
|
+
event: "session",
|
|
352
|
+
data: { trigger: "getSession" },
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return newSession;
|
|
356
|
+
},
|
|
357
|
+
}), [session, loading]);
|
|
358
|
+
return (
|
|
359
|
+
// @ts-expect-error
|
|
360
|
+
_jsx(SessionContext.Provider, { value: value, children: children }));
|
|
361
|
+
}
|
package/src/adapters.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type * from "@mulverse/mulguard-core/adapters"
|