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
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { EmailCredentials, AuthResult, User, Session } from '../types';
|
|
2
|
-
import { SecurityManager } from '../security/security-manager';
|
|
3
|
-
import { Logger } from '../logger';
|
|
4
|
-
/**
|
|
5
|
-
* Email/password authentication configuration.
|
|
6
|
-
*/
|
|
7
|
-
export interface EmailPasswordConfig {
|
|
8
|
-
readonly security?: SecurityManager;
|
|
9
|
-
readonly logger?: Logger;
|
|
10
|
-
readonly requireEmailVerification?: boolean;
|
|
11
|
-
readonly maxLoginAttempts?: number;
|
|
12
|
-
readonly lockoutDuration?: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Email/password authentication handler.
|
|
16
|
-
*
|
|
17
|
-
* Provides secure email/password authentication with validation,
|
|
18
|
-
* rate limiting, and account lockout protection.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const handler = new EmailPasswordAuth({
|
|
23
|
-
* security: securityManager,
|
|
24
|
-
* logger: logger,
|
|
25
|
-
* })
|
|
26
|
-
*
|
|
27
|
-
* const result = await handler.authenticate({
|
|
28
|
-
* email: 'user@example.com',
|
|
29
|
-
* password: 'password123',
|
|
30
|
-
* }, async (email) => {
|
|
31
|
-
* // Your custom user lookup logic
|
|
32
|
-
* return await db.user.findUnique({ where: { email } })
|
|
33
|
-
* })
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare class EmailPasswordAuth {
|
|
37
|
-
private readonly config;
|
|
38
|
-
private readonly security;
|
|
39
|
-
private readonly loginAttempts;
|
|
40
|
-
constructor(config?: EmailPasswordConfig);
|
|
41
|
-
/**
|
|
42
|
-
* Authenticates a user with email and password.
|
|
43
|
-
*
|
|
44
|
-
* @template TUser - User type
|
|
45
|
-
* @template TSession - Session type
|
|
46
|
-
* @param credentials - Email and password credentials
|
|
47
|
-
* @param userLookup - Function to lookup user by email
|
|
48
|
-
* @param passwordVerify - Function to verify password (optional, uses comparePassword if not provided)
|
|
49
|
-
* @param createSession - Function to create session (optional)
|
|
50
|
-
* @returns Authentication result
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* const result = await handler.authenticate(
|
|
55
|
-
* { email: 'user@example.com', password: 'password123' },
|
|
56
|
-
* async (email) => await db.user.findUnique({ where: { email } }),
|
|
57
|
-
* async (password, hash) => await bcrypt.compare(password, hash)
|
|
58
|
-
* )
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
authenticate<TUser extends User = User, TSession extends Session<TUser> = Session<TUser>>(credentials: EmailCredentials, userLookup: (email: string) => Promise<TUser | null>, passwordVerify?: (password: string, hash: string) => Promise<boolean>, createSession?: (user: TUser) => Promise<TSession>): Promise<AuthResult<TUser, TSession>>;
|
|
62
|
-
/**
|
|
63
|
-
* Checks if account is locked.
|
|
64
|
-
*
|
|
65
|
-
* @param email - User email
|
|
66
|
-
* @returns Lockout status
|
|
67
|
-
*/
|
|
68
|
-
private checkAccountLockout;
|
|
69
|
-
/**
|
|
70
|
-
* Records a failed login attempt.
|
|
71
|
-
*
|
|
72
|
-
* @param email - User email
|
|
73
|
-
*/
|
|
74
|
-
private recordFailedAttempt;
|
|
75
|
-
/**
|
|
76
|
-
* Clears failed login attempts for an email.
|
|
77
|
-
*
|
|
78
|
-
* @param email - User email
|
|
79
|
-
*/
|
|
80
|
-
private clearFailedAttempts;
|
|
81
|
-
/**
|
|
82
|
-
* Resets login attempts for an email (for admin use).
|
|
83
|
-
*
|
|
84
|
-
* @param email - User email
|
|
85
|
-
*/
|
|
86
|
-
resetLoginAttempts(email: string): void;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Creates an email/password authentication handler.
|
|
90
|
-
*
|
|
91
|
-
* @param config - Email/password authentication configuration
|
|
92
|
-
* @returns Email/password authentication handler
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```typescript
|
|
96
|
-
* const handler = createEmailPasswordAuth({
|
|
97
|
-
* security: securityManager,
|
|
98
|
-
* logger: logger,
|
|
99
|
-
* })
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
export declare function createEmailPasswordAuth(config?: EmailPasswordConfig): EmailPasswordAuth;
|
|
103
|
-
/**
|
|
104
|
-
* TODO: Performance
|
|
105
|
-
* - [ ] Add password hashing caching
|
|
106
|
-
* - [ ] Optimize user lookup with caching
|
|
107
|
-
* - [ ] Implement async password verification
|
|
108
|
-
* - [ ] Add batch authentication support
|
|
109
|
-
*
|
|
110
|
-
* TODO: Features
|
|
111
|
-
* - [ ] Add password reset functionality
|
|
112
|
-
* - [ ] Implement password change with old password verification
|
|
113
|
-
* - [ ] Add password history tracking
|
|
114
|
-
* - [ ] Create password expiration support
|
|
115
|
-
* - [ ] Add account recovery options
|
|
116
|
-
* - [ ] Implement remember me functionality
|
|
117
|
-
*
|
|
118
|
-
* TODO: Security
|
|
119
|
-
* - [ ] Add password breach checking (Have I Been Pwned)
|
|
120
|
-
* - [ ] Implement password strength requirements
|
|
121
|
-
* - [ ] Add two-factor authentication integration
|
|
122
|
-
* - [ ] Create security event logging
|
|
123
|
-
* - [ ] Add IP-based lockout
|
|
124
|
-
*
|
|
125
|
-
* TODO: Type Safety
|
|
126
|
-
* - [ ] Add branded types for email addresses
|
|
127
|
-
* - [ ] Create type-safe password handling
|
|
128
|
-
* - [ ] Implement compile-time validation rules
|
|
129
|
-
*
|
|
130
|
-
* TODO: Testing
|
|
131
|
-
* - [ ] Add comprehensive unit tests
|
|
132
|
-
* - [ ] Test account lockout mechanism
|
|
133
|
-
* - [ ] Test rate limiting integration
|
|
134
|
-
* - [ ] Add password verification tests
|
|
135
|
-
*
|
|
136
|
-
* TODO: Documentation
|
|
137
|
-
* - [ ] Document authentication flow
|
|
138
|
-
* - [ ] Add password policy guide
|
|
139
|
-
* - [ ] Create security best practices guide
|
|
140
|
-
*
|
|
141
|
-
* TODO: Limitations
|
|
142
|
-
* - [ ] Password verification must be implemented by user
|
|
143
|
-
* - [ ] Account lockout is in-memory (consider persistent storage)
|
|
144
|
-
* - [ ] No password hashing included (use bcrypt, argon2, etc.)
|
|
145
|
-
*/
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OAuth 2.0 Module for Mulguard Authentication Library.
|
|
3
|
-
*
|
|
4
|
-
* Provides comprehensive OAuth authentication with PKCE support,
|
|
5
|
-
* state management, and provider integrations.
|
|
6
|
-
*
|
|
7
|
-
* @module @mulguard/core/auth/oauth
|
|
8
|
-
*/
|
|
9
|
-
export * from './providers';
|
|
10
|
-
export * from './pkce';
|
|
11
|
-
export * from './state-store';
|
|
12
|
-
export * from './state-store-cookie';
|
|
13
|
-
export * from './state-store-redis';
|
|
14
|
-
export * from './oauth-handler';
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { OAuthProvidersConfig, OAuthUserInfo, AuthResult, User, Session } from '../../types';
|
|
2
|
-
import { PKCEStorageAdapter } from './pkce';
|
|
3
|
-
import { OAuthStateStore } from './state-store';
|
|
4
|
-
import { Logger } from '../../logger';
|
|
5
|
-
/**
|
|
6
|
-
* OAuth handler configuration.
|
|
7
|
-
*/
|
|
8
|
-
export interface OAuthHandlerConfig {
|
|
9
|
-
readonly providers: OAuthProvidersConfig;
|
|
10
|
-
readonly baseUrl: string;
|
|
11
|
-
readonly pkce?: {
|
|
12
|
-
readonly enabled: boolean;
|
|
13
|
-
readonly storage?: PKCEStorageAdapter;
|
|
14
|
-
};
|
|
15
|
-
readonly stateStore?: OAuthStateStore;
|
|
16
|
-
readonly logger?: Logger;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* OAuth initiation result with authorization URL and state.
|
|
20
|
-
*/
|
|
21
|
-
export interface OAuthInitiationResult {
|
|
22
|
-
readonly url: string;
|
|
23
|
-
readonly state: string;
|
|
24
|
-
readonly codeVerifier?: string;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Comprehensive OAuth 2.0 handler with PKCE support.
|
|
28
|
-
*
|
|
29
|
-
* Provides secure OAuth authentication flow with PKCE protection,
|
|
30
|
-
* state management, and comprehensive error handling.
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```typescript
|
|
34
|
-
* const handler = new OAuthHandler({
|
|
35
|
-
* providers: {
|
|
36
|
-
* google: { clientId: '...', clientSecret: '...' },
|
|
37
|
-
* },
|
|
38
|
-
* baseUrl: 'https://example.com',
|
|
39
|
-
* pkce: { enabled: true },
|
|
40
|
-
* })
|
|
41
|
-
*
|
|
42
|
-
* // Initiate OAuth flow
|
|
43
|
-
* const { url, state, codeVerifier } = await handler.initiate('google')
|
|
44
|
-
*
|
|
45
|
-
* // Handle callback
|
|
46
|
-
* const result = await handler.handleCallback('google', code, state, codeVerifier)
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare class OAuthHandler {
|
|
50
|
-
private readonly config;
|
|
51
|
-
private readonly pkceStorage;
|
|
52
|
-
constructor(config: OAuthHandlerConfig);
|
|
53
|
-
/**
|
|
54
|
-
* Initiates OAuth authentication flow.
|
|
55
|
-
*
|
|
56
|
-
* Generates authorization URL with PKCE (if enabled) and CSRF state token.
|
|
57
|
-
*
|
|
58
|
-
* @param providerId - OAuth provider identifier
|
|
59
|
-
* @returns OAuth initiation result with authorization URL and state
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```typescript
|
|
63
|
-
* const { url, state, codeVerifier } = await handler.initiate('google')
|
|
64
|
-
* // Store state and codeVerifier securely
|
|
65
|
-
* // Redirect user to url
|
|
66
|
-
* ```
|
|
67
|
-
*/
|
|
68
|
-
initiate(providerId: string): Promise<OAuthInitiationResult>;
|
|
69
|
-
/**
|
|
70
|
-
* Handles OAuth callback and completes authentication.
|
|
71
|
-
*
|
|
72
|
-
* Validates state token, verifies PKCE (if enabled), exchanges code for tokens,
|
|
73
|
-
* retrieves user profile, and creates session.
|
|
74
|
-
*
|
|
75
|
-
* @template TUser - User type
|
|
76
|
-
* @template TSession - Session type
|
|
77
|
-
* @param providerId - OAuth provider identifier
|
|
78
|
-
* @param code - Authorization code from OAuth callback
|
|
79
|
-
* @param state - CSRF state token
|
|
80
|
-
* @param codeVerifier - PKCE code verifier (required if PKCE is enabled)
|
|
81
|
-
* @param userLookup - Function to lookup/create user from OAuth profile
|
|
82
|
-
* @param createSession - Function to create session (optional)
|
|
83
|
-
* @returns Authentication result
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```typescript
|
|
87
|
-
* const result = await handler.handleCallback(
|
|
88
|
-
* 'google',
|
|
89
|
-
* code,
|
|
90
|
-
* state,
|
|
91
|
-
* storedCodeVerifier,
|
|
92
|
-
* async (userInfo) => {
|
|
93
|
-
* // Lookup or create user
|
|
94
|
-
* return await db.user.findOrCreate({ email: userInfo.email })
|
|
95
|
-
* }
|
|
96
|
-
* )
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
|
-
handleCallback<TUser extends User = User, TSession extends Session<TUser> = Session<TUser>>(providerId: string, code: string, state: string, codeVerifier?: string, userLookup?: (userInfo: OAuthUserInfo) => Promise<TUser>, createSession?: (user: TUser, userInfo: OAuthUserInfo) => Promise<TSession>): Promise<AuthResult<TUser, TSession>>;
|
|
100
|
-
/**
|
|
101
|
-
* Validates OAuth state token.
|
|
102
|
-
*
|
|
103
|
-
* @param state - State token
|
|
104
|
-
* @param providerId - Provider identifier
|
|
105
|
-
* @returns True if state is valid
|
|
106
|
-
*/
|
|
107
|
-
private validateState;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Creates an OAuth handler instance.
|
|
111
|
-
*
|
|
112
|
-
* @param config - OAuth handler configuration
|
|
113
|
-
* @returns OAuth handler instance
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* ```typescript
|
|
117
|
-
* const handler = createOAuthHandler({
|
|
118
|
-
* providers: {
|
|
119
|
-
* google: { clientId: '...', clientSecret: '...' },
|
|
120
|
-
* },
|
|
121
|
-
* baseUrl: 'https://example.com',
|
|
122
|
-
* pkce: { enabled: true },
|
|
123
|
-
* })
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
|
-
export declare function createOAuthHandler(config: OAuthHandlerConfig): OAuthHandler;
|
|
127
|
-
export * from './pkce';
|
|
128
|
-
export * from './providers';
|
|
129
|
-
/**
|
|
130
|
-
* TODO: Performance
|
|
131
|
-
* - [ ] Add OAuth token caching
|
|
132
|
-
* - [ ] Optimize user profile retrieval
|
|
133
|
-
* - [ ] Implement token refresh caching
|
|
134
|
-
* - [ ] Add batch OAuth operations support
|
|
135
|
-
*
|
|
136
|
-
* TODO: Features
|
|
137
|
-
* - [ ] Add OAuth token refresh support
|
|
138
|
-
* - [ ] Implement OAuth token revocation
|
|
139
|
-
* - [ ] Add OAuth provider discovery
|
|
140
|
-
* - [ ] Create OAuth provider plugin system
|
|
141
|
-
* - [ ] Add OAuth consent screen customization
|
|
142
|
-
*
|
|
143
|
-
* TODO: Security
|
|
144
|
-
* - [ ] Add OAuth flow rate limiting
|
|
145
|
-
* - [ ] Implement OAuth state encryption
|
|
146
|
-
* - [ ] Add OAuth token validation
|
|
147
|
-
* - [ ] Create security event logging
|
|
148
|
-
* - [ ] Add OAuth flow monitoring
|
|
149
|
-
*
|
|
150
|
-
* TODO: Type Safety
|
|
151
|
-
* - [ ] Add branded types for OAuth tokens
|
|
152
|
-
* - [ ] Create type-safe provider configuration
|
|
153
|
-
* - [ ] Implement compile-time validation
|
|
154
|
-
*
|
|
155
|
-
* TODO: Testing
|
|
156
|
-
* - [ ] Add comprehensive unit tests
|
|
157
|
-
* - [ ] Test PKCE flow end-to-end
|
|
158
|
-
* - [ ] Test state validation
|
|
159
|
-
* - [ ] Add provider-specific tests
|
|
160
|
-
*
|
|
161
|
-
* TODO: Documentation
|
|
162
|
-
* - [ ] Document OAuth flow
|
|
163
|
-
* - [ ] Add PKCE setup guide
|
|
164
|
-
* - [ ] Create provider configuration guide
|
|
165
|
-
* - [ ] Document security best practices
|
|
166
|
-
*
|
|
167
|
-
* TODO: Limitations
|
|
168
|
-
* - [ ] PKCE storage is in-memory (consider Redis for production)
|
|
169
|
-
* - [ ] State storage is in-memory (consider Redis for production)
|
|
170
|
-
* - [ ] Token refresh not implemented yet
|
|
171
|
-
* - [ ] No support for custom OAuth providers yet
|
|
172
|
-
*/
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PKCE (Proof Key for Code Exchange) Implementation for OAuth 2.0.
|
|
3
|
-
*
|
|
4
|
-
* Provides secure PKCE code generation and verification for OAuth flows
|
|
5
|
-
* to prevent authorization code interception attacks.
|
|
6
|
-
*
|
|
7
|
-
* @module @mulguard/core/auth/oauth/pkce
|
|
8
|
-
*
|
|
9
|
-
* @see {@link https://tools.ietf.org/html/rfc7636} RFC 7636 - PKCE
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* PKCE code challenge method.
|
|
13
|
-
*/
|
|
14
|
-
export type PKCECodeChallengeMethod = 'S256' | 'plain';
|
|
15
|
-
/**
|
|
16
|
-
* PKCE code pair (verifier and challenge).
|
|
17
|
-
*/
|
|
18
|
-
export interface PKCECodePair {
|
|
19
|
-
readonly codeVerifier: string;
|
|
20
|
-
readonly codeChallenge: string;
|
|
21
|
-
readonly codeChallengeMethod: PKCECodeChallengeMethod;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* PKCE verification result.
|
|
25
|
-
*/
|
|
26
|
-
export interface PKCEVerificationResult {
|
|
27
|
-
readonly valid: boolean;
|
|
28
|
-
readonly error?: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Generates a cryptographically secure random string for PKCE code verifier.
|
|
32
|
-
*
|
|
33
|
-
* Uses URL-safe base64 encoding (base64url) as per RFC 7636.
|
|
34
|
-
*
|
|
35
|
-
* @param length - Code verifier length (43-128, default: 43)
|
|
36
|
-
* @returns Base64url-encoded code verifier
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const verifier = generateCodeVerifier()
|
|
41
|
-
* // Returns: 'abc123xyz...' (43 characters, base64url encoded)
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare function generateCodeVerifier(length?: number): string;
|
|
45
|
-
/**
|
|
46
|
-
* Generates PKCE code challenge from verifier using S256 method.
|
|
47
|
-
*
|
|
48
|
-
* Uses SHA256 hash and base64url encoding as per RFC 7636.
|
|
49
|
-
*
|
|
50
|
-
* @param codeVerifier - Code verifier
|
|
51
|
-
* @returns Base64url-encoded code challenge
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* const verifier = generateCodeVerifier()
|
|
56
|
-
* const challenge = generateCodeChallenge(verifier)
|
|
57
|
-
* // Returns: 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM' (base64url encoded SHA256 hash)
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export declare function generateCodeChallenge(codeVerifier: string): string;
|
|
61
|
-
/**
|
|
62
|
-
* Generates a complete PKCE code pair (verifier + challenge).
|
|
63
|
-
*
|
|
64
|
-
* @param length - Code verifier length (default: 43)
|
|
65
|
-
* @param method - Code challenge method (default: 'S256')
|
|
66
|
-
* @returns PKCE code pair
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```typescript
|
|
70
|
-
* const { codeVerifier, codeChallenge } = generatePKCECodePair()
|
|
71
|
-
* // Store codeVerifier securely (e.g., in session)
|
|
72
|
-
* // Use codeChallenge in authorization URL
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export declare function generatePKCECodePair(length?: number, method?: PKCECodeChallengeMethod): PKCECodePair;
|
|
76
|
-
/**
|
|
77
|
-
* Verifies PKCE code challenge against code verifier.
|
|
78
|
-
*
|
|
79
|
-
* Uses constant-time comparison to prevent timing attacks.
|
|
80
|
-
*
|
|
81
|
-
* @param codeVerifier - Code verifier (from stored session)
|
|
82
|
-
* @param codeChallenge - Code challenge (from authorization request)
|
|
83
|
-
* @param method - Code challenge method (default: 'S256')
|
|
84
|
-
* @returns Verification result
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```typescript
|
|
88
|
-
* const result = verifyPKCECode(storedVerifier, receivedChallenge)
|
|
89
|
-
* if (!result.valid) {
|
|
90
|
-
* throw new Error(result.error)
|
|
91
|
-
* }
|
|
92
|
-
* ```
|
|
93
|
-
*/
|
|
94
|
-
export declare function verifyPKCECode(codeVerifier: string, codeChallenge: string, method?: PKCECodeChallengeMethod): PKCEVerificationResult;
|
|
95
|
-
/**
|
|
96
|
-
* PKCE code storage adapter interface.
|
|
97
|
-
*/
|
|
98
|
-
export interface PKCEStorageAdapter {
|
|
99
|
-
/**
|
|
100
|
-
* Stores PKCE code verifier.
|
|
101
|
-
*
|
|
102
|
-
* @param key - Storage key (e.g., state token)
|
|
103
|
-
* @param codeVerifier - Code verifier to store
|
|
104
|
-
* @param expiresIn - Expiration time in milliseconds
|
|
105
|
-
*/
|
|
106
|
-
set(key: string, codeVerifier: string, expiresIn: number): Promise<void>;
|
|
107
|
-
/**
|
|
108
|
-
* Gets PKCE code verifier.
|
|
109
|
-
*
|
|
110
|
-
* @param key - Storage key
|
|
111
|
-
* @returns Code verifier or null if not found/expired
|
|
112
|
-
*/
|
|
113
|
-
get(key: string): Promise<string | null>;
|
|
114
|
-
/**
|
|
115
|
-
* Deletes PKCE code verifier.
|
|
116
|
-
*
|
|
117
|
-
* @param key - Storage key
|
|
118
|
-
*/
|
|
119
|
-
delete(key: string): Promise<void>;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* In-memory PKCE storage adapter.
|
|
123
|
-
*/
|
|
124
|
-
export declare class MemoryPKCEStorage implements PKCEStorageAdapter {
|
|
125
|
-
private readonly storage;
|
|
126
|
-
set(key: string, codeVerifier: string, expiresIn: number): Promise<void>;
|
|
127
|
-
get(key: string): Promise<string | null>;
|
|
128
|
-
delete(key: string): Promise<void>;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* TODO: Performance
|
|
132
|
-
* - [ ] Add PKCE code pair caching
|
|
133
|
-
* - [ ] Optimize SHA256 hashing for high-frequency operations
|
|
134
|
-
* - [ ] Consider Web Crypto API for browser environments
|
|
135
|
-
*
|
|
136
|
-
* TODO: Features
|
|
137
|
-
* - [ ] Add Redis-based PKCE storage adapter
|
|
138
|
-
* - [ ] Implement PKCE code rotation
|
|
139
|
-
* - [ ] Add PKCE code expiration tracking
|
|
140
|
-
* - [ ] Create PKCE code cleanup job
|
|
141
|
-
*
|
|
142
|
-
* TODO: Security
|
|
143
|
-
* - [ ] Add PKCE code generation rate limiting
|
|
144
|
-
* - [ ] Implement PKCE code audit logging
|
|
145
|
-
* - [ ] Add PKCE code strength validation
|
|
146
|
-
* - [ ] Create security event monitoring
|
|
147
|
-
*
|
|
148
|
-
* TODO: Type Safety
|
|
149
|
-
* - [ ] Add branded types for code verifier/challenge
|
|
150
|
-
* - [ ] Create type-safe PKCE storage
|
|
151
|
-
* - [ ] Implement compile-time validation
|
|
152
|
-
*
|
|
153
|
-
* TODO: Testing
|
|
154
|
-
* - [ ] Add comprehensive unit tests
|
|
155
|
-
* - [ ] Test constant-time comparison
|
|
156
|
-
* - [ ] Test code generation randomness
|
|
157
|
-
* - [ ] Add storage adapter tests
|
|
158
|
-
*
|
|
159
|
-
* TODO: Documentation
|
|
160
|
-
* - [ ] Document PKCE flow
|
|
161
|
-
* - [ ] Add security considerations guide
|
|
162
|
-
* - [ ] Create PKCE best practices guide
|
|
163
|
-
*
|
|
164
|
-
* TODO: Limitations
|
|
165
|
-
* - [ ] PKCE storage is in-memory (consider Redis for production)
|
|
166
|
-
* - [ ] Code generation uses Node.js Buffer (consider Web Crypto API for browsers)
|
|
167
|
-
* - [ ] Plain method is supported but not recommended
|
|
168
|
-
*/
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { OAuthProviderConfig } from '../../types';
|
|
2
|
-
/**
|
|
3
|
-
* OAuth provider identifier.
|
|
4
|
-
*/
|
|
5
|
-
export type OAuthProviderId = 'google' | 'github' | 'apple' | 'facebook' | string;
|
|
6
|
-
/**
|
|
7
|
-
* Provider metadata for OAuth endpoints and configuration.
|
|
8
|
-
*/
|
|
9
|
-
export interface ProviderMetadata {
|
|
10
|
-
readonly authorizationUrl: string;
|
|
11
|
-
readonly tokenUrl: string;
|
|
12
|
-
readonly userInfoUrl: string;
|
|
13
|
-
readonly defaultScopes: readonly string[];
|
|
14
|
-
readonly defaultParams?: Readonly<Record<string, string>>;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Normalized OAuth user profile.
|
|
18
|
-
*/
|
|
19
|
-
export interface OAuthUserProfile {
|
|
20
|
-
readonly id: string;
|
|
21
|
-
readonly email: string;
|
|
22
|
-
readonly name: string;
|
|
23
|
-
readonly avatar?: string;
|
|
24
|
-
readonly emailVerified?: boolean;
|
|
25
|
-
readonly rawProfile: Readonly<Record<string, unknown>>;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* OAuth token exchange result.
|
|
29
|
-
*/
|
|
30
|
-
export interface TokenExchangeResult {
|
|
31
|
-
readonly access_token: string;
|
|
32
|
-
readonly refresh_token?: string;
|
|
33
|
-
readonly expires_in?: number;
|
|
34
|
-
readonly token_type?: string;
|
|
35
|
-
readonly id_token?: string;
|
|
36
|
-
readonly scope?: string;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* OAuth error response.
|
|
40
|
-
*/
|
|
41
|
-
export interface OAuthErrorResponse {
|
|
42
|
-
readonly error: string;
|
|
43
|
-
readonly error_description?: string;
|
|
44
|
-
readonly error_uri?: string;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Built-in OAuth provider metadata.
|
|
48
|
-
*
|
|
49
|
-
* Contains endpoint URLs, default scopes, and provider-specific parameters.
|
|
50
|
-
*/
|
|
51
|
-
declare const PROVIDER_METADATA: Readonly<Record<string, ProviderMetadata>>;
|
|
52
|
-
/**
|
|
53
|
-
* Gets provider metadata for a given provider ID.
|
|
54
|
-
*
|
|
55
|
-
* @param providerId - OAuth provider identifier
|
|
56
|
-
* @returns Provider metadata or null if not found
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const metadata = getProviderMetadata('google')
|
|
61
|
-
* if (metadata) {
|
|
62
|
-
* console.log(metadata.authorizationUrl)
|
|
63
|
-
* }
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
export declare function getProviderMetadata(providerId: string): ProviderMetadata | null;
|
|
67
|
-
/**
|
|
68
|
-
* Type predicate to check if provider metadata exists.
|
|
69
|
-
*
|
|
70
|
-
* @param providerId - Provider ID to check
|
|
71
|
-
* @returns True if provider is supported
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```typescript
|
|
75
|
-
* if (isSupportedProvider('google')) {
|
|
76
|
-
* // Provider is supported
|
|
77
|
-
* }
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
export declare function isSupportedProvider(providerId: string): providerId is keyof typeof PROVIDER_METADATA;
|
|
81
|
-
/**
|
|
82
|
-
* Builds OAuth authorization URL with proper parameters.
|
|
83
|
-
*
|
|
84
|
-
* @param providerId - OAuth provider identifier
|
|
85
|
-
* @param config - Provider configuration
|
|
86
|
-
* @param baseUrl - Base URL for redirect URI
|
|
87
|
-
* @param state - CSRF state token
|
|
88
|
-
* @returns Authorization URL
|
|
89
|
-
* @throws {Error} If provider is not supported
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```typescript
|
|
93
|
-
* const url = buildOAuthAuthorizationUrl(
|
|
94
|
-
* 'google',
|
|
95
|
-
* { clientId: '...' },
|
|
96
|
-
* 'https://example.com',
|
|
97
|
-
* 'state123'
|
|
98
|
-
* )
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
export declare function buildOAuthAuthorizationUrl(providerId: string, config: OAuthProviderConfig, baseUrl: string, state: string): string;
|
|
102
|
-
/**
|
|
103
|
-
* Exchanges authorization code for access tokens.
|
|
104
|
-
*
|
|
105
|
-
* @param providerId - OAuth provider identifier
|
|
106
|
-
* @param config - Provider configuration
|
|
107
|
-
* @param code - Authorization code from OAuth callback
|
|
108
|
-
* @param redirectUri - Redirect URI used in authorization request
|
|
109
|
-
* @param codeVerifier - PKCE code verifier (optional)
|
|
110
|
-
* @returns Token exchange result
|
|
111
|
-
* @throws {Error} If exchange fails or provider is not supported
|
|
112
|
-
*
|
|
113
|
-
* @example
|
|
114
|
-
* ```typescript
|
|
115
|
-
* const tokens = await exchangeOAuthCode(
|
|
116
|
-
* 'google',
|
|
117
|
-
* { clientId: '...', clientSecret: '...' },
|
|
118
|
-
* 'code123',
|
|
119
|
-
* 'https://example.com/callback',
|
|
120
|
-
* 'code_verifier'
|
|
121
|
-
* )
|
|
122
|
-
* console.log(tokens.access_token)
|
|
123
|
-
* ```
|
|
124
|
-
*/
|
|
125
|
-
export declare function exchangeOAuthCode(providerId: string, config: OAuthProviderConfig, code: string, redirectUri: string, codeVerifier?: string): Promise<TokenExchangeResult>;
|
|
126
|
-
/**
|
|
127
|
-
* Retrieves user information from OAuth provider.
|
|
128
|
-
*
|
|
129
|
-
* @param providerId - OAuth provider identifier
|
|
130
|
-
* @param accessToken - OAuth access token
|
|
131
|
-
* @returns Normalized user profile with raw provider data
|
|
132
|
-
* @throws {Error} If retrieval fails or provider is not supported
|
|
133
|
-
*
|
|
134
|
-
* @example
|
|
135
|
-
* ```typescript
|
|
136
|
-
* const profile = await getUserProfile('google', 'access_token_123')
|
|
137
|
-
* console.log(profile.email, profile.name)
|
|
138
|
-
* ```
|
|
139
|
-
*/
|
|
140
|
-
export declare function getUserProfile(providerId: string, accessToken: string): Promise<OAuthUserProfile>;
|
|
141
|
-
/**
|
|
142
|
-
* Type predicate to check if a value is a valid OAuth provider config.
|
|
143
|
-
*
|
|
144
|
-
* @param value - Value to check
|
|
145
|
-
* @returns True if value is a valid OAuth provider config
|
|
146
|
-
*/
|
|
147
|
-
export declare function isOAuthProviderConfig(value: unknown): value is OAuthProviderConfig;
|
|
148
|
-
export { getUserProfile as getOAuthUserInfo };
|
|
149
|
-
/**
|
|
150
|
-
* TODO: Performance
|
|
151
|
-
* - [ ] Add token exchange result caching (with TTL)
|
|
152
|
-
* - [ ] Implement request retry logic with exponential backoff
|
|
153
|
-
* - [ ] Add connection pooling for OAuth API calls
|
|
154
|
-
* - [ ] Cache provider metadata lookups
|
|
155
|
-
*
|
|
156
|
-
* TODO: Features
|
|
157
|
-
* - [ ] Implement token refresh flow
|
|
158
|
-
* - [ ] Add support for custom OAuth providers
|
|
159
|
-
* - [ ] Create provider plugin system
|
|
160
|
-
* - [ ] Add OAuth 2.1 compliance
|
|
161
|
-
* - [ ] Support for OpenID Connect
|
|
162
|
-
*
|
|
163
|
-
* TODO: Type Safety
|
|
164
|
-
* - [ ] Add branded types for provider IDs
|
|
165
|
-
* - [ ] Create type-safe provider configuration
|
|
166
|
-
* - [ ] Add compile-time provider validation
|
|
167
|
-
* - [ ] Implement type-level endpoint validation
|
|
168
|
-
*
|
|
169
|
-
* TODO: Security
|
|
170
|
-
* - [ ] Add token validation before use
|
|
171
|
-
* - [ ] Implement token encryption at rest
|
|
172
|
-
* - [ ] Add request signing for OAuth calls
|
|
173
|
-
* - [ ] Create security audit logging
|
|
174
|
-
* - [ ] Add rate limiting for OAuth operations
|
|
175
|
-
*
|
|
176
|
-
* TODO: Error Handling
|
|
177
|
-
* - [ ] Add structured error types for OAuth errors
|
|
178
|
-
* - [ ] Implement error recovery strategies
|
|
179
|
-
* - [ ] Add error retry logic
|
|
180
|
-
* - [ ] Create error reporting
|
|
181
|
-
*
|
|
182
|
-
* TODO: Testing
|
|
183
|
-
* - [ ] Add comprehensive unit tests
|
|
184
|
-
* - [ ] Test all provider normalizations
|
|
185
|
-
* - [ ] Test error handling scenarios
|
|
186
|
-
* - [ ] Add integration tests with mock OAuth servers
|
|
187
|
-
*
|
|
188
|
-
* TODO: Documentation
|
|
189
|
-
* - [ ] Add provider-specific configuration guides
|
|
190
|
-
* - [ ] Document error handling best practices
|
|
191
|
-
* - [ ] Create troubleshooting guide
|
|
192
|
-
*
|
|
193
|
-
* TODO: Limitations
|
|
194
|
-
* - [ ] GitHub email retrieval may fail silently
|
|
195
|
-
* - [ ] Apple profile name only available on first sign-in
|
|
196
|
-
* - [ ] Facebook API version is hardcoded (v18.0)
|
|
197
|
-
* - [ ] No support for OAuth 1.0 providers
|
|
198
|
-
*/
|