mulguard 1.1.7 → 1.1.8
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 +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 +117 -126
- 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/LICENSE +0 -70
- 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/index.d.ts
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MulGuard - Authentication for Next.js with Backend-First Architecture
|
|
3
|
+
*
|
|
4
|
+
* ## Installation
|
|
5
|
+
*
|
|
6
|
+
* ```bash npm2yarn
|
|
7
|
+
* npm install mulguard
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* ## Environment variable inference
|
|
11
|
+
*
|
|
12
|
+
* `MULGUARD_URL` and `MULGUARD_SECRET` are automatically inferred.
|
|
13
|
+
*
|
|
14
|
+
* MulGuard can also automatically infer environment variables that are prefixed with `AUTH_`.
|
|
15
|
+
*
|
|
16
|
+
* For example `AUTH_GITHUB_ID` and `AUTH_GITHUB_SECRET` will be used as the `clientId` and `clientSecret` options for the GitHub provider.
|
|
17
|
+
*
|
|
18
|
+
* :::tip
|
|
19
|
+
* The environment variable name inferring has the following format for OAuth providers: `AUTH_{PROVIDER}_{ID|SECRET}`.
|
|
20
|
+
*
|
|
21
|
+
* `PROVIDER` is the uppercase snake case version of the provider's id, followed by either `ID` or `SECRET` respectively.
|
|
22
|
+
* :::
|
|
23
|
+
*
|
|
24
|
+
* `AUTH_SECRET` and `AUTH_URL` are also supported for backward compatibility.
|
|
25
|
+
*
|
|
26
|
+
* To add social login to your app, the configuration becomes:
|
|
27
|
+
*
|
|
28
|
+
* ```ts title="auth.ts"
|
|
29
|
+
* import MulGuard from "mulguard"
|
|
30
|
+
* import GitHub from "mulguard/providers/github"
|
|
31
|
+
* export const { handlers, auth } = MulGuard({ providers: [ GitHub ] })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* And the `.env.local` file:
|
|
35
|
+
*
|
|
36
|
+
* ```sh title=".env.local"
|
|
37
|
+
* AUTH_GITHUB_ID=...
|
|
38
|
+
* AUTH_GITHUB_SECRET=...
|
|
39
|
+
* AUTH_SECRET=...
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* :::tip
|
|
43
|
+
* In production, `AUTH_SECRET` is a required environment variable - if not set, MulGuard will throw an error. See [MissingSecretError](https://authjs.dev/reference/core/errors#missingsecret) for more details.
|
|
44
|
+
* :::
|
|
45
|
+
*
|
|
46
|
+
* If you need to override the default values for a provider, you can still call it as a function `GitHub({...})` as before.
|
|
47
|
+
*
|
|
48
|
+
* ## Lazy initialization
|
|
49
|
+
* You can also initialize MulGuard lazily, which allows you to access the request context in the configuration in some cases, like Route Handlers, Middleware, API Routes or `getServerSideProps`.
|
|
50
|
+
* The above example becomes:
|
|
51
|
+
*
|
|
52
|
+
* ```ts title="auth.ts"
|
|
53
|
+
* import MulGuard from "mulguard"
|
|
54
|
+
* import GitHub from "mulguard/providers/github"
|
|
55
|
+
* export const { handlers, auth } = MulGuard(req => {
|
|
56
|
+
* if (req) {
|
|
57
|
+
* console.log(req) // do something with the request
|
|
58
|
+
* }
|
|
59
|
+
* return { providers: [ GitHub ] }
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* :::tip
|
|
64
|
+
* This is useful if you want to customize the configuration based on the request, for example, to add a different provider in staging/dev environments.
|
|
65
|
+
* :::
|
|
66
|
+
*
|
|
67
|
+
* @module mulguard
|
|
68
|
+
*/
|
|
69
|
+
import { customFetch } from "@mulverse/mulguard-core";
|
|
70
|
+
import type { Awaitable, Session } from "@mulverse/mulguard-core/types";
|
|
71
|
+
import type { ProviderId } from "@mulverse/mulguard-core/providers";
|
|
72
|
+
import type { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next";
|
|
73
|
+
import type { AppRouteHandlerFn, AppRouteHandlerFnContext } from "./lib/types.js";
|
|
74
|
+
import type { NextRequest, NextMiddleware } from "next/server";
|
|
75
|
+
import type { MulGuardConfig, MulGuardRequest, MulGuardMiddleware } from "./lib/index.js";
|
|
76
|
+
type NextAuthConfig = MulGuardConfig;
|
|
77
|
+
type NextAuthRequest = MulGuardRequest;
|
|
78
|
+
type NextAuthMiddleware = MulGuardMiddleware;
|
|
79
|
+
export type { MulGuardConfig, MulGuardRequest, MulGuardMiddleware };
|
|
80
|
+
export type { NextAuthConfig, NextAuthRequest, NextAuthMiddleware };
|
|
81
|
+
export { AuthError, CredentialsSignin } from "@mulverse/mulguard-core/errors";
|
|
82
|
+
export { customFetch };
|
|
83
|
+
export type { Session, Account, Profile, DefaultSession, User, } from "@mulverse/mulguard-core/types";
|
|
84
|
+
export type { ServerActionsAdapter } from "@mulverse/mulguard-core/adapters";
|
|
85
|
+
type AppRouteHandlers = Record<"GET" | "POST", (req: NextRequest) => Promise<Response>>;
|
|
86
|
+
/**
|
|
87
|
+
* The result of invoking {@link MulGuard|MulGuard}, initialized with the {@link MulGuardConfig}.
|
|
88
|
+
* It contains methods to set up and interact with MulGuard in your Next.js app.
|
|
89
|
+
*/
|
|
90
|
+
export interface MulGuardResult {
|
|
91
|
+
/**
|
|
92
|
+
* The MulGuard [Route Handler](https://beta.nextjs.org/docs/routing/route-handlers) methods. These are used to expose an endpoint for OAuth/Email providers,
|
|
93
|
+
* as well as REST API endpoints (such as `/api/auth/session`) that can be contacted from the client.
|
|
94
|
+
*
|
|
95
|
+
* After initializing MulGuard in `auth.ts`,
|
|
96
|
+
* re-export these methods.
|
|
97
|
+
*
|
|
98
|
+
* In `app/api/auth/[...mulguard]/route.ts`:
|
|
99
|
+
*
|
|
100
|
+
* ```ts title="app/api/auth/[...mulguard]/route.ts"
|
|
101
|
+
* export { GET, POST } from "../../../../auth"
|
|
102
|
+
* export const runtime = "edge" // optional
|
|
103
|
+
* ```
|
|
104
|
+
* Then `auth.ts`:
|
|
105
|
+
* ```ts title="auth.ts"
|
|
106
|
+
* // ...
|
|
107
|
+
* export const { handlers: { GET, POST }, auth } = MulGuard({...})
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
handlers: AppRouteHandlers;
|
|
111
|
+
/**
|
|
112
|
+
* A universal method to interact with MulGuard in your Next.js app.
|
|
113
|
+
* After initializing MulGuard in `auth.ts`, use this method in Middleware, Server Components, Route Handlers (`app/`), and Edge or Node.js API Routes (`pages/`).
|
|
114
|
+
*
|
|
115
|
+
* ##### In Middleware
|
|
116
|
+
*
|
|
117
|
+
* :::info
|
|
118
|
+
* Adding `auth` to your Middleware is optional, but recommended to keep the user session alive.
|
|
119
|
+
* :::
|
|
120
|
+
*
|
|
121
|
+
* Authentication is done by the {@link MulGuardConfig.callbacks|callbacks.authorized} callback.
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts title="middleware.ts"
|
|
124
|
+
* export { auth as middleware } from "./auth"
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* Alternatively you can wrap your own middleware with `auth`, where `req` is extended with `auth`:
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts title="middleware.ts"
|
|
130
|
+
* import { auth } from "./auth"
|
|
131
|
+
* export default auth((req) => {
|
|
132
|
+
* // req.auth
|
|
133
|
+
* })
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* ```ts
|
|
137
|
+
* // Optionally, don't invoke Middleware on some paths
|
|
138
|
+
* // Read more: https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher
|
|
139
|
+
* export const config = {
|
|
140
|
+
* matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
|
|
141
|
+
* }
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* ##### In Server Components
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts title="app/page.ts"
|
|
148
|
+
* import { auth } from "../auth"
|
|
149
|
+
*
|
|
150
|
+
* export default async function Page() {
|
|
151
|
+
* const { user } = await auth()
|
|
152
|
+
* return <p>Hello {user?.name}</p>
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*
|
|
156
|
+
* ##### In Route Handlers
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts title="app/api/route.ts"
|
|
159
|
+
* import { auth } from "../../auth"
|
|
160
|
+
*
|
|
161
|
+
* export const POST = auth((req) => {
|
|
162
|
+
* // req.auth
|
|
163
|
+
* })
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* ##### In Edge API Routes
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```ts title="pages/api/protected.ts"
|
|
170
|
+
* import { auth } from "../../auth"
|
|
171
|
+
*
|
|
172
|
+
* export default auth((req) => {
|
|
173
|
+
* // req.auth
|
|
174
|
+
* })
|
|
175
|
+
*
|
|
176
|
+
* export const config = { runtime: "edge" }
|
|
177
|
+
* ```
|
|
178
|
+
*
|
|
179
|
+
* ##### In API Routes
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts title="pages/api/protected.ts"
|
|
183
|
+
* import { auth } from "../auth"
|
|
184
|
+
* import type { NextApiRequest, NextApiResponse } from "next"
|
|
185
|
+
*
|
|
186
|
+
* export default async (req: NextApiRequest, res: NextApiResponse) => {
|
|
187
|
+
* const session = await auth(req, res)
|
|
188
|
+
* if (session) {
|
|
189
|
+
* // Do something with the session
|
|
190
|
+
* return res.json("This is protected content.")
|
|
191
|
+
* }
|
|
192
|
+
* res.status(401).json("You must be signed in.")
|
|
193
|
+
* }
|
|
194
|
+
* ```
|
|
195
|
+
*
|
|
196
|
+
* ##### In `getServerSideProps`
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```ts title="pages/protected-ssr.ts"
|
|
200
|
+
* import { auth } from "../auth"
|
|
201
|
+
*
|
|
202
|
+
* export const getServerSideProps: GetServerSideProps = async (context) => {
|
|
203
|
+
* const session = await auth(context)
|
|
204
|
+
*
|
|
205
|
+
* if (session) {
|
|
206
|
+
* // Do something with the session
|
|
207
|
+
* return { props: { session, content: (await res.json()).content } }
|
|
208
|
+
* }
|
|
209
|
+
*
|
|
210
|
+
* return { props: {} }
|
|
211
|
+
* }
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
auth: ((...args: [NextApiRequest, NextApiResponse]) => Promise<Session | null>) & ((...args: []) => Promise<Session | null>) & ((...args: [GetServerSidePropsContext]) => Promise<Session | null>) & ((...args: [
|
|
215
|
+
(req: NextAuthRequest, ctx: AppRouteHandlerFnContext) => ReturnType<AppRouteHandlerFn>
|
|
216
|
+
]) => AppRouteHandlerFn) & ((...args: [NextAuthMiddleware]) => NextMiddleware);
|
|
217
|
+
/**
|
|
218
|
+
* Sign in with a provider. If no provider is specified, the user will be redirected to the sign in page.
|
|
219
|
+
*
|
|
220
|
+
* By default, the user is redirected to the current page after signing in. You can override this behavior by setting the `redirectTo` option with a relative path.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```ts title="app/layout.tsx"
|
|
224
|
+
* import { signIn } from "../auth"
|
|
225
|
+
*
|
|
226
|
+
* export default function Layout() {
|
|
227
|
+
* return (
|
|
228
|
+
* <form action={async () => {
|
|
229
|
+
* "use server"
|
|
230
|
+
* await signIn("github")
|
|
231
|
+
* }}>
|
|
232
|
+
* <button>Sign in with GitHub</button>
|
|
233
|
+
* </form>
|
|
234
|
+
* )
|
|
235
|
+
* ```
|
|
236
|
+
*
|
|
237
|
+
* If an error occurs during signin, an instance of {@link AuthError} will be thrown. You can catch it like this:
|
|
238
|
+
* ```ts title="app/layout.tsx"
|
|
239
|
+
* import { AuthError } from "mulguard"
|
|
240
|
+
* import { signIn } from "../auth"
|
|
241
|
+
*
|
|
242
|
+
* export default function Layout() {
|
|
243
|
+
* return (
|
|
244
|
+
* <form action={async (formData) => {
|
|
245
|
+
* "use server"
|
|
246
|
+
* try {
|
|
247
|
+
* await signIn("credentials", formData)
|
|
248
|
+
* } catch(error) {
|
|
249
|
+
* if (error instanceof AuthError) // Handle auth errors
|
|
250
|
+
* throw error // Rethrow all other errors
|
|
251
|
+
* }
|
|
252
|
+
* }}>
|
|
253
|
+
* <button>Sign in</button>
|
|
254
|
+
* </form>
|
|
255
|
+
* )
|
|
256
|
+
* }
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
*/
|
|
260
|
+
signIn: <P extends ProviderId, R extends boolean = true>(
|
|
261
|
+
/** Provider to sign in to */
|
|
262
|
+
provider?: P, // See: https://github.com/microsoft/TypeScript/issues/29729
|
|
263
|
+
options?: FormData | ({
|
|
264
|
+
/** The relative path to redirect to after signing in. By default, the user is redirected to the current page. */
|
|
265
|
+
redirectTo?: string;
|
|
266
|
+
/** If set to `false`, the `signIn` method will return the URL to redirect to instead of redirecting automatically. */
|
|
267
|
+
redirect?: R;
|
|
268
|
+
} & Record<string, any>), authorizationParams?: string[][] | Record<string, string> | string | URLSearchParams) => Promise<R extends false ? any : never>;
|
|
269
|
+
/**
|
|
270
|
+
* Sign out the user. If the session was created using a database strategy, the session will be removed from the database and the related cookie is invalidated.
|
|
271
|
+
* If the session was created using a JWT, the cookie is invalidated.
|
|
272
|
+
*
|
|
273
|
+
* By default the user is redirected to the current page after signing out. You can override this behavior by setting the `redirectTo` option with a relative path.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```ts title="app/layout.tsx"
|
|
277
|
+
* import { signOut } from "../auth"
|
|
278
|
+
*
|
|
279
|
+
* export default function Layout() {
|
|
280
|
+
* return (
|
|
281
|
+
* <form action={async () => {
|
|
282
|
+
* "use server"
|
|
283
|
+
* await signOut()
|
|
284
|
+
* }}>
|
|
285
|
+
* <button>Sign out</button>
|
|
286
|
+
* </form>
|
|
287
|
+
* )
|
|
288
|
+
* ```
|
|
289
|
+
*
|
|
290
|
+
*
|
|
291
|
+
*/
|
|
292
|
+
signOut: <R extends boolean = true>(options?: {
|
|
293
|
+
/** The relative path to redirect to after signing out. By default, the user is redirected to the current page. */
|
|
294
|
+
redirectTo?: string;
|
|
295
|
+
/** If set to `false`, the `signOut` method will return the URL to redirect to instead of redirecting automatically. */
|
|
296
|
+
redirect?: R;
|
|
297
|
+
}) => Promise<R extends false ? any : never>;
|
|
298
|
+
unstable_update: (data: Partial<Session | {
|
|
299
|
+
user: Partial<Session["user"]>;
|
|
300
|
+
}>) => Promise<Session | null>;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Initialize MulGuard.
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```ts title="auth.ts"
|
|
307
|
+
* import MulGuard from "mulguard"
|
|
308
|
+
* import GitHub from "@mulverse/mulguard-core/providers/github"
|
|
309
|
+
*
|
|
310
|
+
* export const { handlers, auth } = MulGuard({ providers: [GitHub] })
|
|
311
|
+
* ```
|
|
312
|
+
*
|
|
313
|
+
* Lazy initialization:
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```ts title="auth.ts"
|
|
317
|
+
* import MulGuard from "mulguard"
|
|
318
|
+
* import GitHub from "@mulverse/mulguard-core/providers/github"
|
|
319
|
+
*
|
|
320
|
+
* export const { handlers, auth } = MulGuard(async (req) => {
|
|
321
|
+
* console.log(req) // do something with the request
|
|
322
|
+
* return {
|
|
323
|
+
* providers: [GitHub],
|
|
324
|
+
* },
|
|
325
|
+
* })
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
export default function MulGuard(config: MulGuardConfig | ((request: NextRequest | undefined) => Awaitable<MulGuardConfig>)): MulGuardResult;
|
|
329
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"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"}
|
package/index.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MulGuard - Authentication for Next.js with Backend-First Architecture
|
|
3
|
+
*
|
|
4
|
+
* ## Installation
|
|
5
|
+
*
|
|
6
|
+
* ```bash npm2yarn
|
|
7
|
+
* npm install mulguard
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* ## Environment variable inference
|
|
11
|
+
*
|
|
12
|
+
* `MULGUARD_URL` and `MULGUARD_SECRET` are automatically inferred.
|
|
13
|
+
*
|
|
14
|
+
* MulGuard can also automatically infer environment variables that are prefixed with `AUTH_`.
|
|
15
|
+
*
|
|
16
|
+
* For example `AUTH_GITHUB_ID` and `AUTH_GITHUB_SECRET` will be used as the `clientId` and `clientSecret` options for the GitHub provider.
|
|
17
|
+
*
|
|
18
|
+
* :::tip
|
|
19
|
+
* The environment variable name inferring has the following format for OAuth providers: `AUTH_{PROVIDER}_{ID|SECRET}`.
|
|
20
|
+
*
|
|
21
|
+
* `PROVIDER` is the uppercase snake case version of the provider's id, followed by either `ID` or `SECRET` respectively.
|
|
22
|
+
* :::
|
|
23
|
+
*
|
|
24
|
+
* `AUTH_SECRET` and `AUTH_URL` are also supported for backward compatibility.
|
|
25
|
+
*
|
|
26
|
+
* To add social login to your app, the configuration becomes:
|
|
27
|
+
*
|
|
28
|
+
* ```ts title="auth.ts"
|
|
29
|
+
* import MulGuard from "mulguard"
|
|
30
|
+
* import GitHub from "mulguard/providers/github"
|
|
31
|
+
* export const { handlers, auth } = MulGuard({ providers: [ GitHub ] })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* And the `.env.local` file:
|
|
35
|
+
*
|
|
36
|
+
* ```sh title=".env.local"
|
|
37
|
+
* AUTH_GITHUB_ID=...
|
|
38
|
+
* AUTH_GITHUB_SECRET=...
|
|
39
|
+
* AUTH_SECRET=...
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* :::tip
|
|
43
|
+
* In production, `AUTH_SECRET` is a required environment variable - if not set, MulGuard will throw an error. See [MissingSecretError](https://authjs.dev/reference/core/errors#missingsecret) for more details.
|
|
44
|
+
* :::
|
|
45
|
+
*
|
|
46
|
+
* If you need to override the default values for a provider, you can still call it as a function `GitHub({...})` as before.
|
|
47
|
+
*
|
|
48
|
+
* ## Lazy initialization
|
|
49
|
+
* You can also initialize MulGuard lazily, which allows you to access the request context in the configuration in some cases, like Route Handlers, Middleware, API Routes or `getServerSideProps`.
|
|
50
|
+
* The above example becomes:
|
|
51
|
+
*
|
|
52
|
+
* ```ts title="auth.ts"
|
|
53
|
+
* import MulGuard from "mulguard"
|
|
54
|
+
* import GitHub from "mulguard/providers/github"
|
|
55
|
+
* export const { handlers, auth } = MulGuard(req => {
|
|
56
|
+
* if (req) {
|
|
57
|
+
* console.log(req) // do something with the request
|
|
58
|
+
* }
|
|
59
|
+
* return { providers: [ GitHub ] }
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* :::tip
|
|
64
|
+
* This is useful if you want to customize the configuration based on the request, for example, to add a different provider in staging/dev environments.
|
|
65
|
+
* :::
|
|
66
|
+
*
|
|
67
|
+
* @module mulguard
|
|
68
|
+
*/
|
|
69
|
+
import { Auth, customFetch } from "@mulverse/mulguard-core";
|
|
70
|
+
import { reqWithEnvURL, setEnvDefaults } from "./lib/env.js";
|
|
71
|
+
import { initAuth } from "./lib/index.js";
|
|
72
|
+
import { signIn, signOut, update } from "./lib/actions.js";
|
|
73
|
+
export { AuthError, CredentialsSignin } from "@mulverse/mulguard-core/errors";
|
|
74
|
+
export { customFetch };
|
|
75
|
+
/**
|
|
76
|
+
* Initialize MulGuard.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts title="auth.ts"
|
|
80
|
+
* import MulGuard from "mulguard"
|
|
81
|
+
* import GitHub from "@mulverse/mulguard-core/providers/github"
|
|
82
|
+
*
|
|
83
|
+
* export const { handlers, auth } = MulGuard({ providers: [GitHub] })
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* Lazy initialization:
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts title="auth.ts"
|
|
90
|
+
* import MulGuard from "mulguard"
|
|
91
|
+
* import GitHub from "@mulverse/mulguard-core/providers/github"
|
|
92
|
+
*
|
|
93
|
+
* export const { handlers, auth } = MulGuard(async (req) => {
|
|
94
|
+
* console.log(req) // do something with the request
|
|
95
|
+
* return {
|
|
96
|
+
* providers: [GitHub],
|
|
97
|
+
* },
|
|
98
|
+
* })
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export default function MulGuard(config) {
|
|
102
|
+
if (typeof config === "function") {
|
|
103
|
+
const httpHandler = async (req) => {
|
|
104
|
+
const _config = await config(req);
|
|
105
|
+
setEnvDefaults(_config);
|
|
106
|
+
return Auth(reqWithEnvURL(req), _config);
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
handlers: { GET: httpHandler, POST: httpHandler },
|
|
110
|
+
// @ts-expect-error
|
|
111
|
+
auth: initAuth(config, (c) => setEnvDefaults(c)),
|
|
112
|
+
signIn: async (provider, options, authorizationParams) => {
|
|
113
|
+
const _config = await config(undefined);
|
|
114
|
+
setEnvDefaults(_config);
|
|
115
|
+
return signIn(provider, options, authorizationParams, _config);
|
|
116
|
+
},
|
|
117
|
+
signOut: async (options) => {
|
|
118
|
+
const _config = await config(undefined);
|
|
119
|
+
setEnvDefaults(_config);
|
|
120
|
+
return signOut(options, _config);
|
|
121
|
+
},
|
|
122
|
+
unstable_update: async (data) => {
|
|
123
|
+
const _config = await config(undefined);
|
|
124
|
+
setEnvDefaults(_config);
|
|
125
|
+
return update(data, _config);
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
setEnvDefaults(config);
|
|
130
|
+
const httpHandler = (req) => Auth(reqWithEnvURL(req), config);
|
|
131
|
+
return {
|
|
132
|
+
handlers: { GET: httpHandler, POST: httpHandler },
|
|
133
|
+
// @ts-expect-error
|
|
134
|
+
auth: initAuth(config),
|
|
135
|
+
signIn: (provider, options, authorizationParams) => {
|
|
136
|
+
return signIn(provider, options, authorizationParams, config);
|
|
137
|
+
},
|
|
138
|
+
signOut: (options) => {
|
|
139
|
+
return signOut(options, config);
|
|
140
|
+
},
|
|
141
|
+
unstable_update: (data) => {
|
|
142
|
+
return update(data, config);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
package/jwt.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* :::warning Not recommended
|
|
3
|
+
* In NextAuth.js v5 or newer, we recommend other authentication methods server-side. Read more at: https://authjs.dev/getting-started/migrating-to-v5#authenticating-server-side
|
|
4
|
+
* :::
|
|
5
|
+
*
|
|
6
|
+
* @module jwt
|
|
7
|
+
*/
|
|
8
|
+
export * from "@mulverse/mulguard-core/jwt";
|
|
9
|
+
//# 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;;;;;;GAMG;AAEH,cAAc,6BAA6B,CAAA"}
|
package/jwt.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* :::warning Not recommended
|
|
3
|
+
* In NextAuth.js v5 or newer, we recommend other authentication methods server-side. Read more at: https://authjs.dev/getting-started/migrating-to-v5#authenticating-server-side
|
|
4
|
+
* :::
|
|
5
|
+
*
|
|
6
|
+
* @module jwt
|
|
7
|
+
*/
|
|
8
|
+
export * from "@mulverse/mulguard-core/jwt";
|
package/lib/actions.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MulGuardConfig } from "./index.js";
|
|
2
|
+
import type { MulGuardResult, Session } from "../index.js";
|
|
3
|
+
type SignInParams = Parameters<MulGuardResult["signIn"]>;
|
|
4
|
+
export declare function signIn(provider: SignInParams[0], options: FormData | ({
|
|
5
|
+
redirectTo?: string | undefined;
|
|
6
|
+
redirect?: boolean | undefined;
|
|
7
|
+
} & Record<string, any>) | undefined, authorizationParams: SignInParams[2], config: MulGuardConfig): Promise<any>;
|
|
8
|
+
type SignOutParams = Parameters<MulGuardResult["signOut"]>;
|
|
9
|
+
export declare function signOut(options: SignOutParams[0], config: MulGuardConfig): Promise<any>;
|
|
10
|
+
type UpdateParams = Parameters<MulGuardResult["unstable_update"]>;
|
|
11
|
+
export declare function update(data: UpdateParams[0], config: MulGuardConfig): Promise<Session | null>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/lib/actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1D,KAAK,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxD,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,OAAO;;;oCAAsB,EAC7B,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC,EACpC,MAAM,EAAE,cAAc,gBAuEvB;AAED,KAAK,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1D,wBAAsB,OAAO,CAC3B,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,cAAc,gBAyBvB;AAED,KAAK,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAA;AACjE,wBAAsB,MAAM,CAC1B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqBzB"}
|
package/lib/actions.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Auth, raw, skipCSRFCheck, createActionURL } from "@mulverse/mulguard-core";
|
|
2
|
+
// @ts-expect-error Next.js does not yet correctly use the `package.json#exports` field
|
|
3
|
+
import { headers as nextHeaders, cookies } from "next/headers";
|
|
4
|
+
// @ts-expect-error Next.js does not yet correctly use the `package.json#exports` field
|
|
5
|
+
import { redirect } from "next/navigation";
|
|
6
|
+
export async function signIn(provider, options = {}, authorizationParams, config) {
|
|
7
|
+
const headers = new Headers(await nextHeaders());
|
|
8
|
+
const { redirect: shouldRedirect = true, redirectTo, ...rest } = options instanceof FormData ? Object.fromEntries(options) : options;
|
|
9
|
+
const callbackUrl = redirectTo?.toString() ?? headers.get("Referer") ?? "/";
|
|
10
|
+
const signInURL = createActionURL("signin",
|
|
11
|
+
// @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
|
|
12
|
+
headers.get("x-forwarded-proto"), headers, process.env, config);
|
|
13
|
+
if (!provider) {
|
|
14
|
+
signInURL.searchParams.append("callbackUrl", callbackUrl);
|
|
15
|
+
if (shouldRedirect)
|
|
16
|
+
redirect(signInURL.toString());
|
|
17
|
+
return signInURL.toString();
|
|
18
|
+
}
|
|
19
|
+
let url = `${signInURL}/${provider}?${new URLSearchParams(authorizationParams)}`;
|
|
20
|
+
let foundProvider = {};
|
|
21
|
+
for (const providerConfig of config.providers) {
|
|
22
|
+
const { options, ...defaults } = typeof providerConfig === "function" ? providerConfig() : providerConfig;
|
|
23
|
+
const id = options?.id ?? defaults.id;
|
|
24
|
+
if (id === provider) {
|
|
25
|
+
foundProvider = {
|
|
26
|
+
id,
|
|
27
|
+
type: options?.type ?? defaults.type,
|
|
28
|
+
};
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!foundProvider.id) {
|
|
33
|
+
const url = `${signInURL}?${new URLSearchParams({ callbackUrl })}`;
|
|
34
|
+
if (shouldRedirect)
|
|
35
|
+
redirect(url);
|
|
36
|
+
return url;
|
|
37
|
+
}
|
|
38
|
+
if (foundProvider.type === "credentials") {
|
|
39
|
+
url = url.replace("signin", "callback");
|
|
40
|
+
}
|
|
41
|
+
headers.set("Content-Type", "application/x-www-form-urlencoded");
|
|
42
|
+
const body = new URLSearchParams({ ...rest, callbackUrl });
|
|
43
|
+
const req = new Request(url, { method: "POST", headers, body });
|
|
44
|
+
const res = await Auth(req, { ...config, raw, skipCSRFCheck });
|
|
45
|
+
const cookieJar = await cookies();
|
|
46
|
+
for (const c of res?.cookies ?? [])
|
|
47
|
+
cookieJar.set(c.name, c.value, c.options);
|
|
48
|
+
const responseUrl = res instanceof Response ? res.headers.get("Location") : res.redirect;
|
|
49
|
+
// NOTE: if for some unexpected reason the responseUrl is not set,
|
|
50
|
+
// we redirect to the original url
|
|
51
|
+
const redirectUrl = responseUrl ?? url;
|
|
52
|
+
if (shouldRedirect)
|
|
53
|
+
return redirect(redirectUrl);
|
|
54
|
+
return redirectUrl;
|
|
55
|
+
}
|
|
56
|
+
export async function signOut(options, config) {
|
|
57
|
+
const headers = new Headers(await nextHeaders());
|
|
58
|
+
headers.set("Content-Type", "application/x-www-form-urlencoded");
|
|
59
|
+
const url = createActionURL("signout",
|
|
60
|
+
// @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
|
|
61
|
+
headers.get("x-forwarded-proto"), headers, process.env, config);
|
|
62
|
+
const callbackUrl = options?.redirectTo ?? headers.get("Referer") ?? "/";
|
|
63
|
+
const body = new URLSearchParams({ callbackUrl });
|
|
64
|
+
const req = new Request(url, { method: "POST", headers, body });
|
|
65
|
+
const res = await Auth(req, { ...config, raw, skipCSRFCheck });
|
|
66
|
+
const cookieJar = await cookies();
|
|
67
|
+
for (const c of res?.cookies ?? [])
|
|
68
|
+
cookieJar.set(c.name, c.value, c.options);
|
|
69
|
+
if (options?.redirect ?? true)
|
|
70
|
+
return redirect(res.redirect);
|
|
71
|
+
return res;
|
|
72
|
+
}
|
|
73
|
+
export async function update(data, config) {
|
|
74
|
+
const headers = new Headers(await nextHeaders());
|
|
75
|
+
headers.set("Content-Type", "application/json");
|
|
76
|
+
const url = createActionURL("session",
|
|
77
|
+
// @ts-expect-error `x-forwarded-proto` is not nullable, next.js sets it by default
|
|
78
|
+
headers.get("x-forwarded-proto"), headers, process.env, config);
|
|
79
|
+
const body = JSON.stringify({ data });
|
|
80
|
+
const req = new Request(url, { method: "POST", headers, body });
|
|
81
|
+
const res = await Auth(req, { ...config, raw, skipCSRFCheck });
|
|
82
|
+
const cookieJar = await cookies();
|
|
83
|
+
for (const c of res?.cookies ?? [])
|
|
84
|
+
cookieJar.set(c.name, c.value, c.options);
|
|
85
|
+
return res.body;
|
|
86
|
+
}
|