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/README.md
CHANGED
|
@@ -1,582 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **Two-Factor Authentication (2FA/TOTP)** - Multi-factor authentication support
|
|
23
|
-
|
|
24
|
-
### โก Performance
|
|
25
|
-
- **Edge Runtime Support** - Optimized for Edge Runtime where possible
|
|
26
|
-
- **Session Caching** - Built-in session caching for improved performance
|
|
27
|
-
- **Optimized Bundle Size** - Tree-shakeable with minimal bundle impact
|
|
28
|
-
- **Server Actions First** - Leverages Next.js Server Actions for optimal performance
|
|
29
|
-
|
|
30
|
-
### ๐ Security First
|
|
31
|
-
- **HttpOnly Cookies** - Secure cookie handling prevents XSS attacks
|
|
32
|
-
- **PKCE for OAuth** - Automatic PKCE implementation for OAuth flows
|
|
33
|
-
- **CSRF Protection** - Built-in CSRF token validation
|
|
34
|
-
- **Rate Limiting** - Configurable rate limiting to prevent brute force attacks
|
|
35
|
-
- **Input Validation** - Comprehensive input validation and sanitization
|
|
36
|
-
- **XSS Prevention** - Automatic XSS protection for user inputs
|
|
37
|
-
|
|
38
|
-
### ๐ฏ Developer Experience
|
|
39
|
-
- **Type-Safe** - Full TypeScript support with generics and type inference
|
|
40
|
-
- **Simple Setup** - Get started in minutes with minimal configuration
|
|
41
|
-
- **Clear Errors** - Descriptive error messages with error codes
|
|
42
|
-
- **Centralized Logging** - Professional logging system (no manual `console.log` needed)
|
|
43
|
-
- **Unified API** - Single, consistent interface for all authentication methods
|
|
44
|
-
|
|
45
|
-
### ๐ Flexible & Extensible
|
|
46
|
-
- **Backend-First** - Works with any backend or database (Prisma, Drizzle, MongoDB, etc.)
|
|
47
|
-
- **Custom Actions** - Implement your own authentication logic without adapters
|
|
48
|
-
- **Plugin System** - Extensible architecture for additional features
|
|
49
|
-
- **Next.js 16+ Proxy** - Uses Proxy pattern instead of middleware (Next.js 16+)
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## ๐ฏ Why Mulguard?
|
|
54
|
-
|
|
55
|
-
### Problems We Solve
|
|
56
|
-
|
|
57
|
-
- โ
**High Stability** - Production-ready library without common bugs
|
|
58
|
-
- โ
**Simple Setup** - Quick and easy setup without complexity
|
|
59
|
-
- โ
**No console.log Needed** - Professional centralized logging system
|
|
60
|
-
- โ
**No SSR/CSR Issues** - Clear separation between server-side and client-side
|
|
61
|
-
- โ
**Easy OAuth** - Simple OAuth setup with automatic PKCE
|
|
62
|
-
- โ
**Excellent Error Handling** - Clear and coded error messages
|
|
63
|
-
- โ
**Type Safety** - Full TypeScript support with generics
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## ๐ฆ Installation
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npm install mulguard
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Peer Dependencies
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
npm install next@>=16.0.0 react@>=18.0.0 react-dom@>=18.0.0
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## ๐ Quick Start
|
|
82
|
-
|
|
83
|
-
### 1. Create Auth Configuration
|
|
84
|
-
|
|
85
|
-
Create a new file `lib/auth.ts`:
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
import { mulguard } from 'mulguard'
|
|
89
|
-
import type { EmailCredentials, AuthResult, Session } from 'mulguard'
|
|
90
|
-
import { db } from '@/lib/db'
|
|
91
|
-
import { comparePassword } from '@/lib/password'
|
|
92
|
-
|
|
93
|
-
export const auth = mulguard({
|
|
94
|
-
// Session configuration (optional)
|
|
95
|
-
session: {
|
|
96
|
-
cookieName: '__mulguard_session',
|
|
97
|
-
expiresIn: 60 * 60 * 24 * 7, // 7 days
|
|
98
|
-
httpOnly: true,
|
|
99
|
-
secure: process.env.NODE_ENV === 'production',
|
|
100
|
-
sameSite: 'lax',
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
// Required: Implement your authentication actions
|
|
104
|
-
actions: {
|
|
105
|
-
signIn: {
|
|
106
|
-
email: async (credentials: EmailCredentials): Promise<AuthResult> => {
|
|
107
|
-
// Your custom sign-in logic
|
|
108
|
-
const user = await db.user.findUnique({
|
|
109
|
-
where: { email: credentials.email }
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
if (!user || !await comparePassword(credentials.password, user.password)) {
|
|
113
|
-
return {
|
|
114
|
-
success: false,
|
|
115
|
-
error: 'Invalid credentials',
|
|
116
|
-
errorCode: 'INVALID_CREDENTIALS'
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const session: Session = {
|
|
121
|
-
user: {
|
|
122
|
-
id: user.id,
|
|
123
|
-
email: user.email,
|
|
124
|
-
name: user.name,
|
|
125
|
-
emailVerified: user.emailVerified,
|
|
126
|
-
},
|
|
127
|
-
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return { success: true, user: session.user, session }
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
getSession: async (): Promise<Session | null> => {
|
|
135
|
-
// Your custom session retrieval logic
|
|
136
|
-
// The library handles cookie reading automatically
|
|
137
|
-
return null
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
signOut: async (): Promise<void> => {
|
|
141
|
-
// Your custom sign-out logic
|
|
142
|
-
// The library handles cookie deletion automatically
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
|
|
146
|
-
// Optional: OAuth providers (auto-generates OAuth actions)
|
|
147
|
-
providers: {
|
|
148
|
-
oauth: {
|
|
149
|
-
google: {
|
|
150
|
-
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
151
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
152
|
-
redirectUri: `${process.env.NEXT_PUBLIC_URL}/api/auth/callback/google`,
|
|
153
|
-
scopes: ['openid', 'profile', 'email'],
|
|
154
|
-
pkce: true, // Enable PKCE (recommended)
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
// Optional: Callbacks for lifecycle events
|
|
160
|
-
callbacks: {
|
|
161
|
-
onSignIn: async (user, session) => {
|
|
162
|
-
// Track sign-in analytics, update last login, etc.
|
|
163
|
-
},
|
|
164
|
-
onError: async (error, context) => {
|
|
165
|
-
// Log errors for monitoring (centralized logging, no console.log needed)
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
})
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 2. Create Route Handler
|
|
172
|
-
|
|
173
|
-
Create `app/api/auth/[...mulguard]/route.ts`:
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
import { toNextJsHandler } from 'mulguard/handlers/route'
|
|
177
|
-
import { auth } from '@/lib/auth'
|
|
178
|
-
|
|
179
|
-
export const { GET, POST } = toNextJsHandler(auth)
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### 3. Server-Side Usage
|
|
183
|
-
|
|
184
|
-
```typescript
|
|
185
|
-
// app/dashboard/page.tsx
|
|
186
|
-
import { getServerSession } from 'mulguard/server'
|
|
187
|
-
import { auth } from '@/lib/auth'
|
|
188
|
-
import { redirect } from 'next/navigation'
|
|
189
|
-
|
|
190
|
-
export default async function DashboardPage() {
|
|
191
|
-
const session = await getServerSession(auth)
|
|
192
|
-
|
|
193
|
-
if (!session) {
|
|
194
|
-
redirect('/login')
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return (
|
|
198
|
-
<div>
|
|
199
|
-
<h1>Welcome, {session.user.name}!</h1>
|
|
200
|
-
<p>Email: {session.user.email}</p>
|
|
201
|
-
</div>
|
|
202
|
-
)
|
|
203
|
-
}
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### 4. Client-Side Usage
|
|
207
|
-
|
|
208
|
-
```typescript
|
|
209
|
-
// app/login/page.tsx
|
|
210
|
-
'use client'
|
|
211
|
-
|
|
212
|
-
import { useAuth } from 'mulguard/client'
|
|
213
|
-
import { auth } from '@/lib/auth'
|
|
214
|
-
import { useState } from 'react'
|
|
215
|
-
|
|
216
|
-
export default function LoginPage() {
|
|
217
|
-
const { signIn, isLoading } = useAuth(auth)
|
|
218
|
-
const [error, setError] = useState<string | null>(null)
|
|
219
|
-
|
|
220
|
-
const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
|
|
221
|
-
e.preventDefault()
|
|
222
|
-
setError(null)
|
|
223
|
-
|
|
224
|
-
const formData = new FormData(e.currentTarget)
|
|
225
|
-
const result = await signIn('credentials', {
|
|
226
|
-
email: formData.get('email') as string,
|
|
227
|
-
password: formData.get('password') as string,
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
if (result.success) {
|
|
231
|
-
window.location.href = '/dashboard'
|
|
232
|
-
} else {
|
|
233
|
-
setError(result.error || 'Login failed')
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
return (
|
|
238
|
-
<form onSubmit={handleSubmit}>
|
|
239
|
-
<input name="email" type="email" placeholder="Email" required />
|
|
240
|
-
<input name="password" type="password" placeholder="Password" required />
|
|
241
|
-
{error && <p className="error">{error}</p>}
|
|
242
|
-
<button type="submit" disabled={isLoading}>
|
|
243
|
-
{isLoading ? 'Signing in...' : 'Sign In'}
|
|
244
|
-
</button>
|
|
245
|
-
</form>
|
|
246
|
-
)
|
|
247
|
-
}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### 5. Route Protection (Optional)
|
|
251
|
-
|
|
252
|
-
Create `proxy.ts` in your project root:
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
// proxy.ts (Next.js 16+)
|
|
256
|
-
import { createProxyMiddleware } from 'mulguard/proxy'
|
|
257
|
-
import { auth } from '@/lib/auth'
|
|
258
|
-
|
|
259
|
-
export default createProxyMiddleware(auth, {
|
|
260
|
-
protectedRoutes: ['/dashboard', '/profile'],
|
|
261
|
-
redirectTo: '/login',
|
|
262
|
-
redirectIfAuthenticated: '/dashboard',
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
export const config = {
|
|
266
|
-
matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
|
|
267
|
-
}
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
> **Note**: In Next.js 16+, `middleware.ts` has been replaced with `proxy.ts`. Mulguard uses the Proxy pattern for route protection.
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## ๐ API Overview
|
|
275
|
-
|
|
276
|
-
### Unified Sign-In Interface
|
|
277
|
-
|
|
278
|
-
Mulguard provides a unified, type-safe API for all authentication methods:
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
// โ
Unified interface (recommended)
|
|
282
|
-
await auth.signIn('credentials', { email, password })
|
|
283
|
-
await auth.signIn('google')
|
|
284
|
-
await auth.signIn('otp', { email, code })
|
|
285
|
-
|
|
286
|
-
// โ
Direct methods (also available)
|
|
287
|
-
await auth.signIn.email({ email, password })
|
|
288
|
-
await auth.signIn.oauth('google')
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
### Type Safety
|
|
292
|
-
|
|
293
|
-
Full TypeScript support with generics:
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
import type { User, Session } from 'mulguard'
|
|
297
|
-
|
|
298
|
-
const auth = mulguard<User, Session>({
|
|
299
|
-
// Type-safe configuration
|
|
300
|
-
actions: {
|
|
301
|
-
signIn: {
|
|
302
|
-
email: async (credentials) => {
|
|
303
|
-
// TypeScript knows the return type
|
|
304
|
-
return { success: true, user, session }
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
},
|
|
308
|
-
})
|
|
309
|
-
|
|
310
|
-
// Type-safe results
|
|
311
|
-
const result = await auth.signIn('credentials', { email, password })
|
|
312
|
-
if (result.success) {
|
|
313
|
-
// result.user and result.session are fully typed
|
|
314
|
-
console.log(result.user.email)
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
## โ๏ธ Configuration
|
|
321
|
-
|
|
322
|
-
### Complete Configuration Example
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
import { mulguard } from 'mulguard'
|
|
326
|
-
|
|
327
|
-
export const auth = mulguard({
|
|
328
|
-
// Session configuration
|
|
329
|
-
session: {
|
|
330
|
-
cookieName: '__mulguard_session',
|
|
331
|
-
expiresIn: 60 * 60 * 24 * 7, // 7 days (in seconds)
|
|
332
|
-
httpOnly: true,
|
|
333
|
-
secure: process.env.NODE_ENV === 'production',
|
|
334
|
-
sameSite: 'lax',
|
|
335
|
-
path: '/',
|
|
336
|
-
},
|
|
337
|
-
|
|
338
|
-
// Required: Custom authentication actions
|
|
339
|
-
actions: {
|
|
340
|
-
signIn: {
|
|
341
|
-
email: async (credentials) => {
|
|
342
|
-
// Your custom logic
|
|
343
|
-
},
|
|
344
|
-
},
|
|
345
|
-
signUp: async (data) => {
|
|
346
|
-
// Your custom logic
|
|
347
|
-
},
|
|
348
|
-
getSession: async () => {
|
|
349
|
-
// Your custom logic
|
|
350
|
-
},
|
|
351
|
-
signOut: async () => {
|
|
352
|
-
// Your custom logic
|
|
353
|
-
},
|
|
354
|
-
},
|
|
355
|
-
|
|
356
|
-
// Optional: OAuth providers
|
|
357
|
-
providers: {
|
|
358
|
-
oauth: {
|
|
359
|
-
google: {
|
|
360
|
-
clientId: process.env.GOOGLE_CLIENT_ID!,
|
|
361
|
-
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
362
|
-
redirectUri: `${process.env.NEXT_PUBLIC_URL}/api/auth/callback/google`,
|
|
363
|
-
scopes: ['openid', 'profile', 'email'],
|
|
364
|
-
pkce: true,
|
|
365
|
-
},
|
|
366
|
-
github: {
|
|
367
|
-
clientId: process.env.GITHUB_CLIENT_ID!,
|
|
368
|
-
clientSecret: process.env.GITHUB_CLIENT_SECRET,
|
|
369
|
-
redirectUri: `${process.env.NEXT_PUBLIC_URL}/api/auth/callback/github`,
|
|
370
|
-
scopes: ['user:email'],
|
|
371
|
-
pkce: true,
|
|
372
|
-
},
|
|
373
|
-
},
|
|
374
|
-
},
|
|
375
|
-
|
|
376
|
-
// Optional: Security configuration
|
|
377
|
-
security: {
|
|
378
|
-
csrfProtection: true,
|
|
379
|
-
rateLimiting: {
|
|
380
|
-
enabled: true,
|
|
381
|
-
maxAttempts: 5,
|
|
382
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
383
|
-
},
|
|
384
|
-
},
|
|
385
|
-
|
|
386
|
-
// Optional: Callbacks
|
|
387
|
-
callbacks: {
|
|
388
|
-
onSignIn: async (user, session) => {
|
|
389
|
-
// Called after successful sign in
|
|
390
|
-
},
|
|
391
|
-
onSignOut: async (user) => {
|
|
392
|
-
// Called after sign out
|
|
393
|
-
},
|
|
394
|
-
onOAuthUser: async (userInfo, provider) => {
|
|
395
|
-
// Handle OAuth user creation/update
|
|
396
|
-
// Return user object for session
|
|
397
|
-
},
|
|
398
|
-
onError: async (error, context) => {
|
|
399
|
-
// Handle errors
|
|
400
|
-
},
|
|
401
|
-
},
|
|
402
|
-
})
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
## ๐ Examples
|
|
408
|
-
|
|
409
|
-
### OAuth Sign-In
|
|
410
|
-
|
|
411
|
-
```typescript
|
|
412
|
-
// app/login/page.tsx
|
|
413
|
-
'use client'
|
|
414
|
-
|
|
415
|
-
import { useAuth } from 'mulguard/client'
|
|
416
|
-
import { auth } from '@/lib/auth'
|
|
417
|
-
|
|
418
|
-
export default function LoginPage() {
|
|
419
|
-
const { signIn } = useAuth(auth)
|
|
420
|
-
|
|
421
|
-
const handleGoogleSignIn = async () => {
|
|
422
|
-
const { url } = await signIn('google')
|
|
423
|
-
window.location.href = url
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
return (
|
|
427
|
-
<div>
|
|
428
|
-
<button onClick={handleGoogleSignIn}>
|
|
429
|
-
Sign in with Google
|
|
430
|
-
</button>
|
|
431
|
-
</div>
|
|
432
|
-
)
|
|
433
|
-
}
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
### Protected Route with Role Check
|
|
437
|
-
|
|
438
|
-
```typescript
|
|
439
|
-
// app/admin/page.tsx
|
|
440
|
-
import { requireRole } from 'mulguard/server'
|
|
441
|
-
import { auth } from '@/lib/auth'
|
|
442
|
-
|
|
443
|
-
export default async function AdminPage() {
|
|
444
|
-
const session = await requireRole(auth, 'admin', '/unauthorized')
|
|
445
|
-
|
|
446
|
-
// If user doesn't have 'admin' role, redirects to /unauthorized
|
|
447
|
-
return <div>Admin Dashboard</div>
|
|
448
|
-
}
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
### Using Provider (Recommended)
|
|
452
|
-
|
|
453
|
-
```typescript
|
|
454
|
-
// app/layout.tsx
|
|
455
|
-
import { MulguardProvider } from 'mulguard/client'
|
|
456
|
-
import { auth } from '@/lib/auth'
|
|
457
|
-
|
|
458
|
-
export default function RootLayout({ children }) {
|
|
459
|
-
return (
|
|
460
|
-
<html>
|
|
461
|
-
<body>
|
|
462
|
-
<MulguardProvider auth={auth}>
|
|
463
|
-
{children}
|
|
464
|
-
</MulguardProvider>
|
|
465
|
-
</body>
|
|
466
|
-
</html>
|
|
467
|
-
)
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
```typescript
|
|
472
|
-
// app/profile/page.tsx
|
|
473
|
-
'use client'
|
|
474
|
-
|
|
475
|
-
import { useAuthFromContext } from 'mulguard/client'
|
|
476
|
-
|
|
477
|
-
export default function ProfilePage() {
|
|
478
|
-
const { session, signOut } = useAuthFromContext()
|
|
479
|
-
|
|
480
|
-
// No need to pass auth instance
|
|
481
|
-
return <div>...</div>
|
|
482
|
-
}
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
---
|
|
486
|
-
|
|
487
|
-
## ๐๏ธ Architecture
|
|
488
|
-
|
|
489
|
-
Mulguard follows a **modular, backend-first architecture**:
|
|
490
|
-
|
|
491
|
-
- **Core Layer** - Framework-agnostic authentication logic
|
|
492
|
-
- **Next.js Integration** - Server Actions, Server Components, Proxy middleware
|
|
493
|
-
- **Plugin System** - Extensible features (MFA, Account Picker, etc.)
|
|
494
|
-
|
|
495
|
-
The library is designed to be:
|
|
496
|
-
- **Framework Agnostic** - Core logic works with any framework
|
|
497
|
-
- **Backend-First** - You implement your own database logic
|
|
498
|
-
- **Type-Safe** - Full TypeScript support throughout
|
|
499
|
-
- **Secure by Default** - Security features enabled by default
|
|
500
|
-
|
|
501
|
-
---
|
|
502
|
-
|
|
503
|
-
## ๐ Security
|
|
504
|
-
|
|
505
|
-
Mulguard implements **comprehensive security features**:
|
|
506
|
-
|
|
507
|
-
- โ
**HttpOnly Cookies** - Prevents XSS attacks
|
|
508
|
-
- โ
**Secure Flag** - HTTPS-only cookies in production
|
|
509
|
-
- โ
**SameSite=Strict** - CSRF protection
|
|
510
|
-
- โ
**PKCE for OAuth** - Prevents code interception attacks
|
|
511
|
-
- โ
**Rate Limiting** - Prevents brute force attacks
|
|
512
|
-
- โ
**Input Validation** - Prevents injection attacks
|
|
513
|
-
- โ
**XSS Prevention** - Automatic XSS protection
|
|
514
|
-
- โ
**Generic Error Messages** - Prevents information disclosure
|
|
515
|
-
|
|
516
|
-
---
|
|
517
|
-
|
|
518
|
-
## ๐ Documentation
|
|
519
|
-
|
|
520
|
-
- **[GUIDE.md](./GUIDE.md)** - Complete usage guide with examples
|
|
521
|
-
- **[API Reference](./docs/API_DESIGN.md)** - Full API documentation
|
|
522
|
-
|
|
523
|
-
---
|
|
524
|
-
|
|
525
|
-
## ๐งช Testing
|
|
526
|
-
|
|
527
|
-
```bash
|
|
528
|
-
# Run tests
|
|
529
|
-
npm test
|
|
530
|
-
|
|
531
|
-
# Watch mode
|
|
532
|
-
npm run test:watch
|
|
533
|
-
|
|
534
|
-
# Coverage
|
|
535
|
-
npm run test:coverage
|
|
536
|
-
|
|
537
|
-
# Type checking
|
|
538
|
-
npm run type-check
|
|
539
|
-
```
|
|
540
|
-
|
|
541
|
-
---
|
|
542
|
-
|
|
543
|
-
## ๐ค Contributing
|
|
544
|
-
|
|
545
|
-
Contributions are welcome! Please read our contributing guidelines before submitting a pull request.
|
|
546
|
-
|
|
547
|
-
1. Fork the repository
|
|
548
|
-
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
549
|
-
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
550
|
-
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
551
|
-
5. Open a Pull Request
|
|
552
|
-
|
|
553
|
-
---
|
|
554
|
-
|
|
555
|
-
## ๐ License
|
|
556
|
-
|
|
557
|
-
This project is licensed under the **MUV (Mulverse M.U.V General Public License)**.
|
|
558
|
-
|
|
559
|
-
Copyright (C) 2024 Mulverse Inc.
|
|
560
|
-
|
|
561
|
-
See the [LICENSE](./LICENSE) file for details.
|
|
562
|
-
|
|
563
|
-
---
|
|
564
|
-
|
|
565
|
-
## ๐ฌ Support
|
|
566
|
-
|
|
567
|
-
- **๐ Documentation**: Check the [GUIDE.md](./GUIDE.md) for detailed usage examples
|
|
568
|
-
- **๐ Issues**: [GitHub Issues](https://github.com/mulverse/mulguard/issues)
|
|
569
|
-
- **๐ฌ Discussions**: [GitHub Discussions](https://github.com/mulverse/mulguard/discussions)
|
|
570
|
-
|
|
571
|
-
---
|
|
572
|
-
|
|
573
|
-
## ๐ About Mulverse
|
|
574
|
-
|
|
575
|
-
**Mulguard** is part of the **Mulverse** ecosystem - a collection of modern, developer-friendly libraries and tools for building next-generation web applications.
|
|
576
|
-
|
|
577
|
-
Visit [mulverse.com](https://mulverse.com) to learn more about our other projects.
|
|
578
|
-
|
|
579
|
-
---
|
|
580
|
-
|
|
581
|
-
**Made with โค๏ธ by the Mulverse Team**
|
|
582
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://nextjs.org" target="_blank"><img height="96px" src="https://authjs.dev/img/etc/nextjs.svg" /></a>
|
|
3
|
+
<a href="https://mulverse.com" target="_blank"><img height="96px" src="https://authjs.dev/img/logo-sm.png" /></a>
|
|
4
|
+
<h1 align="center">MulGuard</h1>
|
|
5
|
+
</p>
|
|
6
|
+
<p align="center">
|
|
7
|
+
Authentication for Next.js with Backend-First Architecture.
|
|
8
|
+
</p>
|
|
9
|
+
<p align="center">
|
|
10
|
+
Part of the <a href="https://mulverse.com" target="_blank">Mulverse Network</a>
|
|
11
|
+
</p>
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://www.npmjs.com/package/mulguard"><img src="https://img.shields.io/npm/v/mulguard/beta?style=flat-square&label=latest&color=purple" alt="npm beta release" /></a>
|
|
14
|
+
<a href="https://www.npmtrends.com/mulguard"><img src="https://img.shields.io/npm/dm/mulguard?style=flat-square&color=cyan" alt="Downloads" /></a>
|
|
15
|
+
<a href="https://github.com/mulguard/mulguard/stargazers"><img src="https://img.shields.io/github/stars/mulguard/mulguard?style=flat-square&color=orange" alt="GitHub Stars" /></a>
|
|
16
|
+
<img src="https://shields.io/badge/TypeScript-3178C6?logo=TypeScript&logoColor=fff&style=flat-square" alt="TypeScript" />
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
Check out the documentation at [mulverse.com](https://mulverse.com) or visit the [Mulverse Network](https://mulverse.com) for more information.
|
package/adapters.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["src/adapters.ts"],"names":[],"mappings":"AAAA,mBAAmB,kCAAkC,CAAA"}
|
package/adapters.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|