@masheev/better-auth 0.0.0-stage → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +20 -0
- package/README.md +31 -2
- package/TYPE-PATCH-NOTICE.md +9 -0
- package/TYPE-PATCH-PROVENANCE.json +267 -0
- package/dist/_virtual/_rolldown/runtime.mjs +27 -0
- package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
- package/dist/adapters/drizzle-adapter/index.mjs +2 -0
- package/dist/adapters/index.d.mts +26 -0
- package/dist/adapters/index.mjs +9 -0
- package/dist/adapters/kysely-adapter/index.d.mts +1 -0
- package/dist/adapters/kysely-adapter/index.mjs +2 -0
- package/dist/adapters/memory-adapter/index.d.mts +1 -0
- package/dist/adapters/memory-adapter/index.mjs +2 -0
- package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
- package/dist/adapters/mongodb-adapter/index.mjs +2 -0
- package/dist/adapters/prisma-adapter/index.d.mts +1 -0
- package/dist/adapters/prisma-adapter/index.mjs +2 -0
- package/dist/api/dispatch.d.mts +34 -0
- package/dist/api/dispatch.mjs +275 -0
- package/dist/api/index.d.mts +4053 -0
- package/dist/api/index.mjs +220 -0
- package/dist/api/middlewares/authorization.d.mts +69 -0
- package/dist/api/middlewares/authorization.mjs +78 -0
- package/dist/api/middlewares/index.d.mts +2 -0
- package/dist/api/middlewares/origin-check.d.mts +17 -0
- package/dist/api/middlewares/origin-check.mjs +155 -0
- package/dist/api/rate-limiter/index.mjs +318 -0
- package/dist/api/routes/account.d.mts +413 -0
- package/dist/api/routes/account.mjs +619 -0
- package/dist/api/routes/callback.d.mts +32 -0
- package/dist/api/routes/callback.mjs +261 -0
- package/dist/api/routes/email-verification.d.mts +160 -0
- package/dist/api/routes/email-verification.mjs +324 -0
- package/dist/api/routes/error.d.mts +27 -0
- package/dist/api/routes/error.mjs +387 -0
- package/dist/api/routes/index.d.mts +12 -0
- package/dist/api/routes/ok.d.mts +35 -0
- package/dist/api/routes/ok.mjs +27 -0
- package/dist/api/routes/password.d.mts +182 -0
- package/dist/api/routes/password.mjs +206 -0
- package/dist/api/routes/session.d.mts +450 -0
- package/dist/api/routes/session.mjs +481 -0
- package/dist/api/routes/sign-in.d.mts +186 -0
- package/dist/api/routes/sign-in.mjs +368 -0
- package/dist/api/routes/sign-out.d.mts +51 -0
- package/dist/api/routes/sign-out.mjs +96 -0
- package/dist/api/routes/sign-up.d.mts +159 -0
- package/dist/api/routes/sign-up.mjs +275 -0
- package/dist/api/routes/update-session.d.mts +74 -0
- package/dist/api/routes/update-session.mjs +57 -0
- package/dist/api/routes/update-user.d.mts +428 -0
- package/dist/api/routes/update-user.mjs +522 -0
- package/dist/api/state/oauth.d.mts +53 -0
- package/dist/api/state/oauth.mjs +38 -0
- package/dist/api/state/should-session-refresh.d.mts +12 -0
- package/dist/api/state/should-session-refresh.mjs +13 -0
- package/dist/api/to-auth-endpoints.mjs +60 -0
- package/dist/auth/base.mjs +66 -0
- package/dist/auth/full.d.mts +28 -0
- package/dist/auth/full.mjs +29 -0
- package/dist/auth/minimal.d.mts +10 -0
- package/dist/auth/minimal.mjs +11 -0
- package/dist/auth/trusted-origins.mjs +106 -0
- package/dist/client/broadcast-channel.d.mts +19 -0
- package/dist/client/broadcast-channel.mjs +44 -0
- package/dist/client/config.d.mts +90 -0
- package/dist/client/config.mjs +113 -0
- package/dist/client/equality.d.mts +19 -0
- package/dist/client/equality.mjs +42 -0
- package/dist/client/fetch-plugins.mjs +17 -0
- package/dist/client/focus-manager.d.mts +10 -0
- package/dist/client/focus-manager.mjs +30 -0
- package/dist/client/index.d.mts +35 -0
- package/dist/client/index.mjs +22 -0
- package/dist/client/lynx/index.d.mts +43 -0
- package/dist/client/lynx/index.mjs +22 -0
- package/dist/client/lynx/lynx-store.d.mts +46 -0
- package/dist/client/lynx/lynx-store.mjs +44 -0
- package/dist/client/online-manager.d.mts +11 -0
- package/dist/client/online-manager.mjs +33 -0
- package/dist/client/parser.d.mts +10 -0
- package/dist/client/parser.mjs +70 -0
- package/dist/client/path-to-object.d.mts +113 -0
- package/dist/client/plugins/index.d.mts +44 -0
- package/dist/client/plugins/index.mjs +30 -0
- package/dist/client/plugins/infer-plugin.d.mts +16 -0
- package/dist/client/plugins/infer-plugin.mjs +11 -0
- package/dist/client/proxy.mjs +78 -0
- package/dist/client/query.d.mts +23 -0
- package/dist/client/query.mjs +124 -0
- package/dist/client/react/index.d.mts +44 -0
- package/dist/client/react/index.mjs +22 -0
- package/dist/client/react/react-store.d.mts +46 -0
- package/dist/client/react/react-store.mjs +44 -0
- package/dist/client/session-atom.d.mts +11 -0
- package/dist/client/session-atom.mjs +178 -0
- package/dist/client/session-refresh.d.mts +20 -0
- package/dist/client/session-refresh.mjs +131 -0
- package/dist/client/solid/index.d.mts +44 -0
- package/dist/client/solid/index.mjs +22 -0
- package/dist/client/solid/solid-store.mjs +21 -0
- package/dist/client/svelte/index.d.mts +44 -0
- package/dist/client/svelte/index.mjs +18 -0
- package/dist/client/types.d.mts +51 -0
- package/dist/client/vanilla.d.mts +42 -0
- package/dist/client/vanilla.mjs +18 -0
- package/dist/client/vue/index.d.mts +67 -0
- package/dist/client/vue/index.mjs +54 -0
- package/dist/client/vue/vue-store.mjs +23 -0
- package/dist/context/create-context.mjs +235 -0
- package/dist/context/helpers.mjs +158 -0
- package/dist/context/init-minimal.mjs +17 -0
- package/dist/context/init.mjs +19 -0
- package/dist/context/secret-utils.mjs +53 -0
- package/dist/context/store-capabilities.mjs +12 -0
- package/dist/cookies/cache.mjs +33 -0
- package/dist/cookies/cookie-utils.d.mts +72 -0
- package/dist/cookies/cookie-utils.mjs +203 -0
- package/dist/cookies/index.d.mts +124 -0
- package/dist/cookies/index.mjs +350 -0
- package/dist/cookies/jwt.mjs +44 -0
- package/dist/cookies/session-store.d.mts +32 -0
- package/dist/cookies/session-store.mjs +183 -0
- package/dist/crypto/buffer.d.mts +7 -0
- package/dist/crypto/buffer.mjs +16 -0
- package/dist/crypto/index.d.mts +32 -0
- package/dist/crypto/index.mjs +69 -0
- package/dist/crypto/jwt.d.mts +9 -0
- package/dist/crypto/jwt.mjs +141 -0
- package/dist/crypto/password.d.mts +13 -0
- package/dist/crypto/password.mjs +14 -0
- package/dist/crypto/random.d.mts +4 -0
- package/dist/crypto/random.mjs +5 -0
- package/dist/db/adapter-base.d.mts +7 -0
- package/dist/db/adapter-base.mjs +25 -0
- package/dist/db/adapter-kysely.d.mts +7 -0
- package/dist/db/adapter-kysely.mjs +17 -0
- package/dist/db/field-converter.d.mts +7 -0
- package/dist/db/field-converter.mjs +19 -0
- package/dist/db/field.d.mts +41 -0
- package/dist/db/get-migration.d.mts +56 -0
- package/dist/db/get-migration.mjs +685 -0
- package/dist/db/get-schema.d.mts +13 -0
- package/dist/db/get-schema.mjs +39 -0
- package/dist/db/index.d.mts +10 -0
- package/dist/db/index.mjs +35 -0
- package/dist/db/internal-adapter.d.mts +14 -0
- package/dist/db/internal-adapter.mjs +951 -0
- package/dist/db/revoke-unproven-account-access.d.mts +21 -0
- package/dist/db/revoke-unproven-account-access.mjs +58 -0
- package/dist/db/schema.d.mts +62 -0
- package/dist/db/schema.mjs +161 -0
- package/dist/db/to-zod.d.mts +35 -0
- package/dist/db/to-zod.mjs +23 -0
- package/dist/db/verification-token-storage.mjs +25 -0
- package/dist/db/with-hooks.d.mts +37 -0
- package/dist/db/with-hooks.mjs +255 -0
- package/dist/index.d.mts +30 -0
- package/dist/index.mjs +17 -0
- package/dist/integrations/cookie-plugin-guard.mjs +18 -0
- package/dist/integrations/next-js.d.mts +29 -0
- package/dist/integrations/next-js.mjs +105 -0
- package/dist/integrations/node.d.mts +11 -0
- package/dist/integrations/node.mjs +13 -0
- package/dist/integrations/solid-start.d.mts +22 -0
- package/dist/integrations/solid-start.mjs +15 -0
- package/dist/integrations/svelte-kit.d.mts +38 -0
- package/dist/integrations/svelte-kit.mjs +57 -0
- package/dist/integrations/tanstack-start-solid.d.mts +33 -0
- package/dist/integrations/tanstack-start-solid.mjs +57 -0
- package/dist/integrations/tanstack-start.d.mts +33 -0
- package/dist/integrations/tanstack-start.mjs +57 -0
- package/dist/oauth2/account-key.mjs +43 -0
- package/dist/oauth2/errors.mjs +49 -0
- package/dist/oauth2/index.d.mts +5 -0
- package/dist/oauth2/index.mjs +5 -0
- package/dist/oauth2/link-account.d.mts +96 -0
- package/dist/oauth2/link-account.mjs +329 -0
- package/dist/oauth2/state.d.mts +54 -0
- package/dist/oauth2/state.mjs +67 -0
- package/dist/oauth2/utils.d.mts +11 -0
- package/dist/oauth2/utils.mjs +33 -0
- package/dist/package.mjs +4 -0
- package/dist/plugins/access/access.d.mts +17 -0
- package/dist/plugins/access/access.mjs +78 -0
- package/dist/plugins/access/index.d.mts +3 -0
- package/dist/plugins/access/index.mjs +2 -0
- package/dist/plugins/access/types.d.mts +24 -0
- package/dist/plugins/additional-fields/client.d.mts +100 -0
- package/dist/plugins/additional-fields/client.mjs +11 -0
- package/dist/plugins/admin/access/index.d.mts +2 -0
- package/dist/plugins/admin/access/index.mjs +2 -0
- package/dist/plugins/admin/access/statement.d.mts +51 -0
- package/dist/plugins/admin/access/statement.mjs +52 -0
- package/dist/plugins/admin/admin.d.mts +911 -0
- package/dist/plugins/admin/admin.mjs +89 -0
- package/dist/plugins/admin/client.d.mts +81 -0
- package/dist/plugins/admin/client.mjs +39 -0
- package/dist/plugins/admin/error-codes.d.mts +30 -0
- package/dist/plugins/admin/error-codes.mjs +29 -0
- package/dist/plugins/admin/has-permission.mjs +12 -0
- package/dist/plugins/admin/index.d.mts +3 -0
- package/dist/plugins/admin/index.mjs +2 -0
- package/dist/plugins/admin/routes.mjs +919 -0
- package/dist/plugins/admin/schema.d.mts +40 -0
- package/dist/plugins/admin/schema.mjs +33 -0
- package/dist/plugins/admin/types.d.mts +88 -0
- package/dist/plugins/anonymous/client.d.mts +32 -0
- package/dist/plugins/anonymous/client.mjs +21 -0
- package/dist/plugins/anonymous/error-codes.d.mts +15 -0
- package/dist/plugins/anonymous/error-codes.mjs +14 -0
- package/dist/plugins/anonymous/index.d.mts +175 -0
- package/dist/plugins/anonymous/index.mjs +219 -0
- package/dist/plugins/anonymous/schema.d.mts +15 -0
- package/dist/plugins/anonymous/schema.mjs +9 -0
- package/dist/plugins/anonymous/types.d.mts +65 -0
- package/dist/plugins/bearer/index.d.mts +45 -0
- package/dist/plugins/bearer/index.mjs +74 -0
- package/dist/plugins/captcha/constants.d.mts +9 -0
- package/dist/plugins/captcha/constants.mjs +27 -0
- package/dist/plugins/captcha/error-codes.mjs +13 -0
- package/dist/plugins/captcha/index.d.mts +27 -0
- package/dist/plugins/captcha/index.mjs +79 -0
- package/dist/plugins/captcha/types.d.mts +52 -0
- package/dist/plugins/captcha/utils.mjs +9 -0
- package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
- package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +47 -0
- package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +32 -0
- package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
- package/dist/plugins/custom-session/client.d.mts +17 -0
- package/dist/plugins/custom-session/client.mjs +7 -0
- package/dist/plugins/custom-session/index.d.mts +73 -0
- package/dist/plugins/custom-session/index.mjs +65 -0
- package/dist/plugins/device-authorization/client.d.mts +17 -0
- package/dist/plugins/device-authorization/client.mjs +18 -0
- package/dist/plugins/device-authorization/error-codes.mjs +19 -0
- package/dist/plugins/device-authorization/index.d.mts +558 -0
- package/dist/plugins/device-authorization/index.mjs +87 -0
- package/dist/plugins/device-authorization/routes.d.mts +32 -0
- package/dist/plugins/device-authorization/routes.mjs +725 -0
- package/dist/plugins/device-authorization/schema.d.mts +18 -0
- package/dist/plugins/device-authorization/schema.mjs +63 -0
- package/dist/plugins/email-otp/client.d.mts +21 -0
- package/dist/plugins/email-otp/client.mjs +17 -0
- package/dist/plugins/email-otp/error-codes.d.mts +10 -0
- package/dist/plugins/email-otp/error-codes.mjs +9 -0
- package/dist/plugins/email-otp/index.d.mts +551 -0
- package/dist/plugins/email-otp/index.mjs +145 -0
- package/dist/plugins/email-otp/otp-token.mjs +55 -0
- package/dist/plugins/email-otp/routes.mjs +784 -0
- package/dist/plugins/email-otp/types.d.mts +109 -0
- package/dist/plugins/email-otp/utils.mjs +17 -0
- package/dist/plugins/generic-oauth/error-codes.mjs +8 -0
- package/dist/plugins/generic-oauth/index.d.mts +52 -0
- package/dist/plugins/generic-oauth/index.mjs +279 -0
- package/dist/plugins/generic-oauth/providers/auth0.d.mts +36 -0
- package/dist/plugins/generic-oauth/providers/auth0.mjs +49 -0
- package/dist/plugins/generic-oauth/providers/gumroad.d.mts +31 -0
- package/dist/plugins/generic-oauth/providers/gumroad.mjs +62 -0
- package/dist/plugins/generic-oauth/providers/hubspot.d.mts +36 -0
- package/dist/plugins/generic-oauth/providers/hubspot.mjs +62 -0
- package/dist/plugins/generic-oauth/providers/index.d.mts +10 -0
- package/dist/plugins/generic-oauth/providers/keycloak.d.mts +36 -0
- package/dist/plugins/generic-oauth/providers/keycloak.mjs +47 -0
- package/dist/plugins/generic-oauth/providers/line.d.mts +54 -0
- package/dist/plugins/generic-oauth/providers/line.mjs +93 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +39 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +104 -0
- package/dist/plugins/generic-oauth/providers/okta.d.mts +36 -0
- package/dist/plugins/generic-oauth/providers/okta.mjs +47 -0
- package/dist/plugins/generic-oauth/providers/patreon.d.mts +29 -0
- package/dist/plugins/generic-oauth/providers/patreon.mjs +61 -0
- package/dist/plugins/generic-oauth/providers/slack.d.mts +29 -0
- package/dist/plugins/generic-oauth/providers/slack.mjs +63 -0
- package/dist/plugins/generic-oauth/providers/yandex.d.mts +29 -0
- package/dist/plugins/generic-oauth/providers/yandex.mjs +67 -0
- package/dist/plugins/generic-oauth/types.d.mts +268 -0
- package/dist/plugins/haveibeenpwned/index.d.mts +63 -0
- package/dist/plugins/haveibeenpwned/index.mjs +81 -0
- package/dist/plugins/index.d.mts +69 -0
- package/dist/plugins/index.mjs +49 -0
- package/dist/plugins/jwt/adapter.mjs +68 -0
- package/dist/plugins/jwt/client.d.mts +41 -0
- package/dist/plugins/jwt/client.mjs +19 -0
- package/dist/plugins/jwt/cookie-cache.mjs +77 -0
- package/dist/plugins/jwt/index.d.mts +246 -0
- package/dist/plugins/jwt/index.mjs +214 -0
- package/dist/plugins/jwt/schema.d.mts +33 -0
- package/dist/plugins/jwt/schema.mjs +29 -0
- package/dist/plugins/jwt/sign.d.mts +128 -0
- package/dist/plugins/jwt/sign.mjs +130 -0
- package/dist/plugins/jwt/types.d.mts +256 -0
- package/dist/plugins/jwt/utils.d.mts +41 -0
- package/dist/plugins/jwt/utils.mjs +64 -0
- package/dist/plugins/jwt/verify.d.mts +11 -0
- package/dist/plugins/jwt/verify.mjs +45 -0
- package/dist/plugins/last-login-method/client.d.mts +48 -0
- package/dist/plugins/last-login-method/client.mjs +48 -0
- package/dist/plugins/last-login-method/index.d.mts +127 -0
- package/dist/plugins/last-login-method/index.mjs +98 -0
- package/dist/plugins/magic-link/client.d.mts +10 -0
- package/dist/plugins/magic-link/client.mjs +11 -0
- package/dist/plugins/magic-link/index.d.mts +213 -0
- package/dist/plugins/magic-link/index.mjs +208 -0
- package/dist/plugins/magic-link/utils.mjs +9 -0
- package/dist/plugins/multi-session/client.d.mts +19 -0
- package/dist/plugins/multi-session/client.mjs +19 -0
- package/dist/plugins/multi-session/error-codes.d.mts +8 -0
- package/dist/plugins/multi-session/error-codes.mjs +5 -0
- package/dist/plugins/multi-session/index.d.mts +212 -0
- package/dist/plugins/multi-session/index.mjs +217 -0
- package/dist/plugins/oauth-popup/client.d.mts +82 -0
- package/dist/plugins/oauth-popup/client.mjs +203 -0
- package/dist/plugins/oauth-popup/constants.d.mts +11 -0
- package/dist/plugins/oauth-popup/constants.mjs +11 -0
- package/dist/plugins/oauth-popup/error-codes.d.mts +11 -0
- package/dist/plugins/oauth-popup/error-codes.mjs +10 -0
- package/dist/plugins/oauth-popup/index.d.mts +67 -0
- package/dist/plugins/oauth-popup/index.mjs +232 -0
- package/dist/plugins/oauth-popup/types.d.mts +30 -0
- package/dist/plugins/oauth-proxy/index.d.mts +130 -0
- package/dist/plugins/oauth-proxy/index.mjs +407 -0
- package/dist/plugins/oauth-proxy/utils.mjs +55 -0
- package/dist/plugins/one-tap/client.d.mts +174 -0
- package/dist/plugins/one-tap/client.mjs +208 -0
- package/dist/plugins/one-tap/index.d.mts +82 -0
- package/dist/plugins/one-tap/index.mjs +100 -0
- package/dist/plugins/one-time-token/client.d.mts +10 -0
- package/dist/plugins/one-time-token/client.mjs +11 -0
- package/dist/plugins/one-time-token/index.d.mts +132 -0
- package/dist/plugins/one-time-token/index.mjs +107 -0
- package/dist/plugins/one-time-token/utils.mjs +9 -0
- package/dist/plugins/open-api/generator.d.mts +126 -0
- package/dist/plugins/open-api/generator.mjs +557 -0
- package/dist/plugins/open-api/index.d.mts +97 -0
- package/dist/plugins/open-api/index.mjs +65 -0
- package/dist/plugins/open-api/logo.mjs +13 -0
- package/dist/plugins/organization/access/index.d.mts +2 -0
- package/dist/plugins/organization/access/index.mjs +2 -0
- package/dist/plugins/organization/access/statement.d.mts +113 -0
- package/dist/plugins/organization/access/statement.mjs +77 -0
- package/dist/plugins/organization/adapter.d.mts +815 -0
- package/dist/plugins/organization/adapter.mjs +813 -0
- package/dist/plugins/organization/call.mjs +15 -0
- package/dist/plugins/organization/client.d.mts +375 -0
- package/dist/plugins/organization/client.mjs +104 -0
- package/dist/plugins/organization/error-codes.d.mts +66 -0
- package/dist/plugins/organization/error-codes.mjs +65 -0
- package/dist/plugins/organization/has-permission.d.mts +17 -0
- package/dist/plugins/organization/has-permission.mjs +34 -0
- package/dist/plugins/organization/index.d.mts +6 -0
- package/dist/plugins/organization/index.mjs +4 -0
- package/dist/plugins/organization/organization.d.mts +420 -0
- package/dist/plugins/organization/organization.mjs +886 -0
- package/dist/plugins/organization/permission.d.mts +15 -0
- package/dist/plugins/organization/permission.mjs +14 -0
- package/dist/plugins/organization/routes/crud-access-control.d.mts +511 -0
- package/dist/plugins/organization/routes/crud-access-control.mjs +674 -0
- package/dist/plugins/organization/routes/crud-invites.d.mts +1154 -0
- package/dist/plugins/organization/routes/crud-invites.mjs +602 -0
- package/dist/plugins/organization/routes/crud-members.d.mts +1057 -0
- package/dist/plugins/organization/routes/crud-members.mjs +518 -0
- package/dist/plugins/organization/routes/crud-org.d.mts +918 -0
- package/dist/plugins/organization/routes/crud-org.mjs +455 -0
- package/dist/plugins/organization/routes/crud-team.d.mts +1238 -0
- package/dist/plugins/organization/routes/crud-team.mjs +766 -0
- package/dist/plugins/organization/schema.d.mts +390 -0
- package/dist/plugins/organization/schema.mjs +65 -0
- package/dist/plugins/organization/types.d.mts +691 -0
- package/dist/plugins/phone-number/client.d.mts +31 -0
- package/dist/plugins/phone-number/client.mjs +19 -0
- package/dist/plugins/phone-number/error-codes.d.mts +19 -0
- package/dist/plugins/phone-number/error-codes.mjs +18 -0
- package/dist/plugins/phone-number/index.d.mts +360 -0
- package/dist/plugins/phone-number/index.mjs +57 -0
- package/dist/plugins/phone-number/routes.mjs +529 -0
- package/dist/plugins/phone-number/schema.d.mts +22 -0
- package/dist/plugins/phone-number/schema.mjs +18 -0
- package/dist/plugins/phone-number/types.d.mts +116 -0
- package/dist/plugins/siwe/client.d.mts +14 -0
- package/dist/plugins/siwe/client.mjs +15 -0
- package/dist/plugins/siwe/index.d.mts +62 -0
- package/dist/plugins/siwe/index.mjs +272 -0
- package/dist/plugins/siwe/parse-message.mjs +60 -0
- package/dist/plugins/siwe/schema.d.mts +35 -0
- package/dist/plugins/siwe/schema.mjs +30 -0
- package/dist/plugins/siwe/types.d.mts +43 -0
- package/dist/plugins/test-utils/auth-helpers.mjs +33 -0
- package/dist/plugins/test-utils/cookie-builder.mjs +55 -0
- package/dist/plugins/test-utils/db-helpers.mjs +65 -0
- package/dist/plugins/test-utils/factories.mjs +38 -0
- package/dist/plugins/test-utils/index.d.mts +73 -0
- package/dist/plugins/test-utils/index.mjs +97 -0
- package/dist/plugins/test-utils/otp-sink.mjs +21 -0
- package/dist/plugins/test-utils/types.d.mts +51 -0
- package/dist/plugins/two-factor/backup-codes/index.d.mts +291 -0
- package/dist/plugins/two-factor/backup-codes/index.mjs +341 -0
- package/dist/plugins/two-factor/client.d.mts +76 -0
- package/dist/plugins/two-factor/client.mjs +41 -0
- package/dist/plugins/two-factor/constant.mjs +6 -0
- package/dist/plugins/two-factor/error-code.d.mts +20 -0
- package/dist/plugins/two-factor/error-code.mjs +19 -0
- package/dist/plugins/two-factor/index.d.mts +720 -0
- package/dist/plugins/two-factor/index.mjs +349 -0
- package/dist/plugins/two-factor/otp/index.d.mts +216 -0
- package/dist/plugins/two-factor/otp/index.mjs +252 -0
- package/dist/plugins/two-factor/schema.d.mts +59 -0
- package/dist/plugins/two-factor/schema.mjs +53 -0
- package/dist/plugins/two-factor/totp/index.d.mts +219 -0
- package/dist/plugins/two-factor/totp/index.mjs +230 -0
- package/dist/plugins/two-factor/types.d.mts +111 -0
- package/dist/plugins/two-factor/utils.mjs +9 -0
- package/dist/plugins/two-factor/verify-two-factor.mjs +205 -0
- package/dist/plugins/username/client.d.mts +38 -0
- package/dist/plugins/username/client.mjs +17 -0
- package/dist/plugins/username/error-codes.d.mts +16 -0
- package/dist/plugins/username/error-codes.mjs +15 -0
- package/dist/plugins/username/index.d.mts +326 -0
- package/dist/plugins/username/index.mjs +312 -0
- package/dist/plugins/username/schema.d.mts +50 -0
- package/dist/plugins/username/schema.mjs +25 -0
- package/dist/social-providers/index.d.mts +1 -0
- package/dist/social-providers/index.mjs +2 -0
- package/dist/state.d.mts +48 -0
- package/dist/state.mjs +149 -0
- package/dist/test-utils/headers.d.mts +8 -0
- package/dist/test-utils/headers.mjs +17 -0
- package/dist/test-utils/http-test-instance.d.mts +413 -0
- package/dist/test-utils/http-test-instance.mjs +107 -0
- package/dist/test-utils/index.d.mts +4 -0
- package/dist/test-utils/index.mjs +4 -0
- package/dist/test-utils/test-instance.d.mts +56 -0
- package/dist/test-utils/test-instance.mjs +242 -0
- package/dist/types/adapter.d.mts +2 -0
- package/dist/types/api.d.mts +28 -0
- package/dist/types/auth.d.mts +32 -0
- package/dist/types/helper.d.mts +26 -0
- package/dist/types/index.d.mts +10 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/models.d.mts +10 -0
- package/dist/types/plugins.d.mts +19 -0
- package/dist/utils/boolean.mjs +6 -0
- package/dist/utils/constants.mjs +4 -0
- package/dist/utils/date.mjs +6 -0
- package/dist/utils/hashing.mjs +18 -0
- package/dist/utils/hide-metadata.d.mts +6 -0
- package/dist/utils/hide-metadata.mjs +4 -0
- package/dist/utils/index.d.mts +4 -0
- package/dist/utils/is-api-error.d.mts +2 -0
- package/dist/utils/is-api-error.mjs +2 -0
- package/dist/utils/is-atom.mjs +6 -0
- package/dist/utils/is-promise.mjs +6 -0
- package/dist/utils/middleware-response.mjs +7 -0
- package/dist/utils/password.mjs +32 -0
- package/dist/utils/plugin-helper.mjs +14 -0
- package/dist/utils/request.mjs +23 -0
- package/dist/utils/shim.mjs +22 -0
- package/dist/utils/time.d.mts +48 -0
- package/dist/utils/time.mjs +98 -0
- package/dist/utils/url.d.mts +78 -0
- package/dist/utils/url.mjs +238 -0
- package/dist/utils/validate-user-info.mjs +44 -0
- package/dist/utils/wildcard.mjs +106 -0
- package/dist/version.mjs +5 -0
- package/package.json +595 -3
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, UnionToIntersection } from "./types/helper.mjs";
|
|
2
|
+
import { BetterAuthClientOptions, BetterAuthClientPlugin, ClientAtomListener, ClientStore, InferActions, InferAdditionalFromClient, InferClientAPI, InferErrorCodes, InferSessionFromClient, InferUserFromClient, IsSignal, SessionQueryParams } from "./client/types.mjs";
|
|
3
|
+
import { DBAdapter, DBAdapterInstance, DBAdapterSchemaCreation, DBTransactionAdapter, JoinConfig, JoinOption, Where } from "./types/adapter.mjs";
|
|
4
|
+
import { FilteredAPI, InferAPI, InferSessionAPI } from "./types/api.mjs";
|
|
5
|
+
import { Account, AdditionalSessionFieldsInput, AdditionalUserFieldsInput, InferPluginTypes, RateLimit, Session, User, Verification } from "./types/models.mjs";
|
|
6
|
+
import { InferOptionSchema, InferPluginContext, InferPluginErrorCodes, InferPluginIDs } from "./types/plugins.mjs";
|
|
7
|
+
import { Auth } from "./types/auth.mjs";
|
|
8
|
+
import { BetterAuthAdvancedOptions, BetterAuthCookies, BetterAuthOptions, BetterAuthPlugin, BetterAuthRateLimitOptions, StoreIdentifierOption, UserProvisioningSource, ValidateUserInfoAction, ValidateUserInfoMethod, ValidateUserInfoOAuthInfo, ValidateUserInfoResult, ValidateUserInfoSSOInfo, ValidateUserInfoSource } from "./types/index.mjs";
|
|
9
|
+
import { betterAuth } from "./auth/full.mjs";
|
|
10
|
+
import { GenerateStateOptions, generateIdTokenNonce, generateState, parseState } from "./oauth2/state.mjs";
|
|
11
|
+
import { StateData, generateGenericState, parseGenericState } from "./state.mjs";
|
|
12
|
+
import { HIDE_METADATA } from "./utils/hide-metadata.mjs";
|
|
13
|
+
import { getBaseURL, getHost, getHostFromSource, getOrigin, getProtocol, getProtocolFromSource, isDynamicBaseURLConfig, isRequestLike, matchesHostPattern, resolveBaseURL, resolveDynamicBaseURL, trimTrailingSlashes } from "./utils/url.mjs";
|
|
14
|
+
import { APIError } from "./api/index.mjs";
|
|
15
|
+
import { StandardSchemaV1 } from "@better-auth/core";
|
|
16
|
+
import { getCurrentAdapter } from "@better-auth/core/context";
|
|
17
|
+
import { TelemetryEvent, createTelemetry, getTelemetryAuthConfig } from "@better-auth/telemetry";
|
|
18
|
+
import { JSONWebKeySet, JWTPayload } from "jose";
|
|
19
|
+
export * from "@better-auth/core";
|
|
20
|
+
export * from "@better-auth/core/db";
|
|
21
|
+
export * from "@better-auth/core/env";
|
|
22
|
+
export * from "@better-auth/core/error";
|
|
23
|
+
export * from "@better-auth/core/oauth2";
|
|
24
|
+
export * from "@better-auth/core/utils/error-codes";
|
|
25
|
+
export * from "@better-auth/core/utils/id";
|
|
26
|
+
export * from "@better-auth/core/utils/json";
|
|
27
|
+
export * from "@better-auth/core/social-providers";
|
|
28
|
+
export * from "better-call";
|
|
29
|
+
export * from "zod";
|
|
30
|
+
export { APIError, Account, AdditionalSessionFieldsInput, AdditionalUserFieldsInput, Auth, BetterAuthAdvancedOptions, BetterAuthClientOptions, BetterAuthClientPlugin, BetterAuthCookies, BetterAuthOptions, BetterAuthPlugin, BetterAuthRateLimitOptions, ClientAtomListener, ClientStore, DBAdapter, DBAdapterInstance, DBAdapterSchemaCreation, DBTransactionAdapter, ExtractPluginField, FilteredAPI, GenerateStateOptions, HIDE_METADATA, HasRequiredKeys, InferAPI, InferActions, InferAdditionalFromClient, InferClientAPI, InferErrorCodes, InferOptionSchema, InferPluginContext, InferPluginErrorCodes, InferPluginFieldFromTuple, InferPluginIDs, InferPluginTypes, InferSessionAPI, InferSessionFromClient, InferUserFromClient, IsAny, IsSignal, type JSONWebKeySet, type JWTPayload, JoinConfig, JoinOption, OverrideMerge, Prettify, PrettifyDeep, RateLimit, RequiredKeysOf, Session, SessionQueryParams, type StandardSchemaV1, StateData, StoreIdentifierOption, StripEmptyObjects, type TelemetryEvent, UnionToIntersection, User, UserProvisioningSource, ValidateUserInfoAction, ValidateUserInfoMethod, ValidateUserInfoOAuthInfo, ValidateUserInfoResult, ValidateUserInfoSSOInfo, ValidateUserInfoSource, Verification, Where, betterAuth, createTelemetry, generateGenericState, generateIdTokenNonce, generateState, getBaseURL, getCurrentAdapter, getHost, getHostFromSource, getOrigin, getProtocol, getProtocolFromSource, getTelemetryAuthConfig, isDynamicBaseURLConfig, isRequestLike, matchesHostPattern, parseGenericState, parseState, resolveBaseURL, resolveDynamicBaseURL, trimTrailingSlashes };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getBaseURL, getHost, getHostFromSource, getOrigin, getProtocol, getProtocolFromSource, isDynamicBaseURLConfig, isRequestLike, matchesHostPattern, resolveBaseURL, resolveDynamicBaseURL, trimTrailingSlashes } from "./utils/url.mjs";
|
|
2
|
+
import { generateGenericState, parseGenericState } from "./state.mjs";
|
|
3
|
+
import { generateIdTokenNonce, generateState, parseState } from "./oauth2/state.mjs";
|
|
4
|
+
import { HIDE_METADATA } from "./utils/hide-metadata.mjs";
|
|
5
|
+
import { APIError } from "./api/index.mjs";
|
|
6
|
+
import { betterAuth } from "./auth/full.mjs";
|
|
7
|
+
import { getCurrentAdapter } from "@better-auth/core/context";
|
|
8
|
+
import { createTelemetry, getTelemetryAuthConfig } from "@better-auth/telemetry";
|
|
9
|
+
export * from "@better-auth/core";
|
|
10
|
+
export * from "@better-auth/core/db";
|
|
11
|
+
export * from "@better-auth/core/env";
|
|
12
|
+
export * from "@better-auth/core/error";
|
|
13
|
+
export * from "@better-auth/core/oauth2";
|
|
14
|
+
export * from "@better-auth/core/utils/error-codes";
|
|
15
|
+
export * from "@better-auth/core/utils/id";
|
|
16
|
+
export * from "@better-auth/core/utils/json";
|
|
17
|
+
export { APIError, HIDE_METADATA, betterAuth, createTelemetry, generateGenericState, generateIdTokenNonce, generateState, getBaseURL, getCurrentAdapter, getHost, getHostFromSource, getOrigin, getProtocol, getProtocolFromSource, getTelemetryAuthConfig, isDynamicBaseURLConfig, isRequestLike, matchesHostPattern, parseGenericState, parseState, resolveBaseURL, resolveDynamicBaseURL, trimTrailingSlashes };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/integrations/cookie-plugin-guard.ts
|
|
2
|
+
/**
|
|
3
|
+
* Warns when a cookie integration plugin is not effectively last.
|
|
4
|
+
*
|
|
5
|
+
* A plugin is considered misordered when there is at least one other plugin
|
|
6
|
+
* after it in the `plugins` array that declares `hooks.after`, since those
|
|
7
|
+
* hooks can set cookies that this integration will not see.
|
|
8
|
+
*/
|
|
9
|
+
function warnIfCookiePluginNotLast(ctx, pluginId) {
|
|
10
|
+
const plugins = ctx.options.plugins || [];
|
|
11
|
+
if (plugins.length === 0) return;
|
|
12
|
+
const index = plugins.findIndex((p) => p.id === pluginId);
|
|
13
|
+
if (index === -1) return;
|
|
14
|
+
if (!plugins.slice(index + 1).some((p) => p.hooks && Array.isArray(p.hooks.after) && p.hooks.after.length > 0)) return;
|
|
15
|
+
ctx.logger.warn(`[better-auth] Cookie integration plugin "${pluginId}" should be placed last in the plugins array. Plugins with \`hooks.after\` running after it may set cookies that are not forwarded to the framework cookie store. Move your cookie integration plugin to the end of the \`plugins\` array to avoid missing \`Set-Cookie\` headers.`);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { warnIfCookiePluginNotLast };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as _$_better_auth_core0 from "@better-auth/core";
|
|
2
|
+
import * as _$better_call0 from "better-call";
|
|
3
|
+
|
|
4
|
+
//#region src/integrations/next-js.d.ts
|
|
5
|
+
declare function toNextJsHandler(auth: {
|
|
6
|
+
handler: (request: Request) => Promise<Response>;
|
|
7
|
+
} | ((request: Request) => Promise<Response>)): {
|
|
8
|
+
GET: (request: Request) => Promise<Response>;
|
|
9
|
+
POST: (request: Request) => Promise<Response>;
|
|
10
|
+
PATCH: (request: Request) => Promise<Response>;
|
|
11
|
+
PUT: (request: Request) => Promise<Response>;
|
|
12
|
+
DELETE: (request: Request) => Promise<Response>;
|
|
13
|
+
};
|
|
14
|
+
declare const nextCookies: () => {
|
|
15
|
+
id: "next-cookies";
|
|
16
|
+
version: string;
|
|
17
|
+
hooks: {
|
|
18
|
+
before: {
|
|
19
|
+
matcher(ctx: _$_better_auth_core0.HookEndpointContext): boolean;
|
|
20
|
+
handler: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>;
|
|
21
|
+
}[];
|
|
22
|
+
after: {
|
|
23
|
+
matcher(ctx: _$_better_auth_core0.HookEndpointContext): true;
|
|
24
|
+
handler: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>;
|
|
25
|
+
}[];
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { nextCookies, toNextJsHandler };
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { parseSetCookieHeader, toCookieOptions } from "../cookies/cookie-utils.mjs";
|
|
2
|
+
import { setShouldSkipSessionRefresh } from "../api/state/should-session-refresh.mjs";
|
|
3
|
+
import { PACKAGE_VERSION } from "../version.mjs";
|
|
4
|
+
import { warnIfCookiePluginNotLast } from "./cookie-plugin-guard.mjs";
|
|
5
|
+
import { createAuthMiddleware } from "@better-auth/core/api";
|
|
6
|
+
//#region src/integrations/next-js.ts
|
|
7
|
+
function toNextJsHandler(auth) {
|
|
8
|
+
const handler = async (request) => {
|
|
9
|
+
return "handler" in auth ? auth.handler(request) : auth(request);
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
GET: handler,
|
|
13
|
+
POST: handler,
|
|
14
|
+
PATCH: handler,
|
|
15
|
+
PUT: handler,
|
|
16
|
+
DELETE: handler
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
let nextHeadersModulePromise;
|
|
20
|
+
/**
|
|
21
|
+
* Cache ESM resolution while leaving the request-scoped `headers()` and
|
|
22
|
+
* `cookies()` calls uncached.
|
|
23
|
+
*
|
|
24
|
+
* @see https://github.com/better-auth/better-auth/issues/10466
|
|
25
|
+
*/
|
|
26
|
+
const loadNextHeadersModule = () => {
|
|
27
|
+
nextHeadersModulePromise ??= import("next/headers.js").catch((error) => {
|
|
28
|
+
nextHeadersModulePromise = void 0;
|
|
29
|
+
throw error;
|
|
30
|
+
});
|
|
31
|
+
return nextHeadersModulePromise;
|
|
32
|
+
};
|
|
33
|
+
const nextCookies = () => {
|
|
34
|
+
let hasWarned = false;
|
|
35
|
+
return {
|
|
36
|
+
id: "next-cookies",
|
|
37
|
+
version: PACKAGE_VERSION,
|
|
38
|
+
hooks: {
|
|
39
|
+
before: [{
|
|
40
|
+
matcher(ctx) {
|
|
41
|
+
return ctx.path === "/get-session";
|
|
42
|
+
},
|
|
43
|
+
handler: createAuthMiddleware(async (ctx) => {
|
|
44
|
+
if (!hasWarned) {
|
|
45
|
+
warnIfCookiePluginNotLast(ctx.context, "next-cookies");
|
|
46
|
+
hasWarned = true;
|
|
47
|
+
}
|
|
48
|
+
if ("_flag" in ctx && ctx._flag === "router") return;
|
|
49
|
+
let headersStore;
|
|
50
|
+
try {
|
|
51
|
+
const { headers } = await loadNextHeadersModule();
|
|
52
|
+
headersStore = await headers();
|
|
53
|
+
} catch {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Detect RSC via headers, NOT by probing cookies().set().
|
|
58
|
+
* In Next.js, cookies().set() unconditionally triggers router
|
|
59
|
+
* cache invalidation -- even if the value is unchanged.
|
|
60
|
+
*
|
|
61
|
+
* RSC sends `RSC: 1` without `next-action`. Only in that
|
|
62
|
+
* context cookies cannot be written -- skip session refresh
|
|
63
|
+
* to avoid DB/cookie mismatch.
|
|
64
|
+
*
|
|
65
|
+
* @see https://github.com/vercel/next.js/blob/8c5af211d580/packages/next/src/server/web/spec-extension/adapters/request-cookies.ts#L112-L157
|
|
66
|
+
*/
|
|
67
|
+
const isRSC = headersStore.get("RSC") === "1";
|
|
68
|
+
const isServerAction = !!headersStore.get("next-action");
|
|
69
|
+
if (isRSC && !isServerAction) await setShouldSkipSessionRefresh(true);
|
|
70
|
+
})
|
|
71
|
+
}],
|
|
72
|
+
after: [{
|
|
73
|
+
matcher(ctx) {
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
handler: createAuthMiddleware(async (ctx) => {
|
|
77
|
+
const returned = ctx.context.responseHeaders;
|
|
78
|
+
if ("_flag" in ctx && ctx._flag === "router") return;
|
|
79
|
+
if (returned instanceof Headers) {
|
|
80
|
+
const setCookies = returned?.get("set-cookie");
|
|
81
|
+
if (!setCookies) return;
|
|
82
|
+
const parsed = parseSetCookieHeader(setCookies);
|
|
83
|
+
let cookieHelper;
|
|
84
|
+
try {
|
|
85
|
+
const { cookies } = await loadNextHeadersModule();
|
|
86
|
+
cookieHelper = await cookies();
|
|
87
|
+
} catch (error) {
|
|
88
|
+
if (error instanceof Error && (error.message.startsWith("`cookies` was called outside a request scope.") || error.message.includes("Cannot find module"))) return;
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
parsed.forEach((value, key) => {
|
|
92
|
+
if (!key) return;
|
|
93
|
+
try {
|
|
94
|
+
cookieHelper.set(key, value.value, toCookieOptions(value));
|
|
95
|
+
} catch {}
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
}]
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
//#endregion
|
|
105
|
+
export { nextCookies, toNextJsHandler };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Auth } from "../types/auth.mjs";
|
|
2
|
+
import * as _$node_http0 from "node:http";
|
|
3
|
+
import { IncomingHttpHeaders } from "node:http";
|
|
4
|
+
|
|
5
|
+
//#region src/integrations/node.d.ts
|
|
6
|
+
declare const toNodeHandler: (auth: {
|
|
7
|
+
handler: Auth["handler"];
|
|
8
|
+
} | Auth["handler"]) => (req: _$node_http0.IncomingMessage, res: _$node_http0.ServerResponse) => Promise<void>;
|
|
9
|
+
declare function fromNodeHeaders(nodeHeaders: IncomingHttpHeaders): Headers;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { fromNodeHeaders, toNodeHandler };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { toNodeHandler as toNodeHandler$1 } from "better-call/node";
|
|
2
|
+
//#region src/integrations/node.ts
|
|
3
|
+
const toNodeHandler = (auth) => {
|
|
4
|
+
return "handler" in auth ? toNodeHandler$1(auth.handler) : toNodeHandler$1(auth);
|
|
5
|
+
};
|
|
6
|
+
function fromNodeHeaders(nodeHeaders) {
|
|
7
|
+
const webHeaders = new Headers();
|
|
8
|
+
for (const [key, value] of Object.entries(nodeHeaders)) if (value !== void 0) if (Array.isArray(value)) value.forEach((v) => webHeaders.append(key, v));
|
|
9
|
+
else webHeaders.set(key, value);
|
|
10
|
+
return webHeaders;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { fromNodeHeaders, toNodeHandler };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/integrations/solid-start.d.ts
|
|
2
|
+
declare function toSolidStartHandler(auth: {
|
|
3
|
+
handler: (request: Request) => Promise<Response>;
|
|
4
|
+
} | ((request: Request) => Promise<Response>)): {
|
|
5
|
+
GET: (event: {
|
|
6
|
+
request: Request;
|
|
7
|
+
}) => Promise<Response>;
|
|
8
|
+
POST: (event: {
|
|
9
|
+
request: Request;
|
|
10
|
+
}) => Promise<Response>;
|
|
11
|
+
PATCH: (event: {
|
|
12
|
+
request: Request;
|
|
13
|
+
}) => Promise<Response>;
|
|
14
|
+
PUT: (event: {
|
|
15
|
+
request: Request;
|
|
16
|
+
}) => Promise<Response>;
|
|
17
|
+
DELETE: (event: {
|
|
18
|
+
request: Request;
|
|
19
|
+
}) => Promise<Response>;
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { toSolidStartHandler };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/integrations/solid-start.ts
|
|
2
|
+
function toSolidStartHandler(auth) {
|
|
3
|
+
const handler = async (event) => {
|
|
4
|
+
return "handler" in auth ? auth.handler(event.request) : auth(event.request);
|
|
5
|
+
};
|
|
6
|
+
return {
|
|
7
|
+
GET: handler,
|
|
8
|
+
POST: handler,
|
|
9
|
+
PATCH: handler,
|
|
10
|
+
PUT: handler,
|
|
11
|
+
DELETE: handler
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { toSolidStartHandler };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BetterAuthOptions } from "../types/index.mjs";
|
|
2
|
+
import * as _$better_call0 from "better-call";
|
|
3
|
+
import { RequestEvent } from "@sveltejs/kit";
|
|
4
|
+
|
|
5
|
+
//#region src/integrations/svelte-kit.d.ts
|
|
6
|
+
declare const toSvelteKitHandler: (auth: {
|
|
7
|
+
handler: (request: Request) => Response | Promise<Response>;
|
|
8
|
+
options: BetterAuthOptions;
|
|
9
|
+
}) => (event: {
|
|
10
|
+
request: Request;
|
|
11
|
+
}) => Response | Promise<Response>;
|
|
12
|
+
declare const svelteKitHandler: ({
|
|
13
|
+
auth,
|
|
14
|
+
event,
|
|
15
|
+
resolve,
|
|
16
|
+
building
|
|
17
|
+
}: {
|
|
18
|
+
auth: {
|
|
19
|
+
handler: (request: Request) => Response | Promise<Response>;
|
|
20
|
+
options: BetterAuthOptions;
|
|
21
|
+
};
|
|
22
|
+
event: RequestEvent;
|
|
23
|
+
resolve: (event: RequestEvent) => Response | Promise<Response>;
|
|
24
|
+
building: boolean;
|
|
25
|
+
}) => Promise<Response>;
|
|
26
|
+
declare function isAuthPath(url: string, options: BetterAuthOptions): boolean;
|
|
27
|
+
declare const sveltekitCookies: (getRequestEvent: () => RequestEvent<any, any>) => {
|
|
28
|
+
id: "sveltekit-cookies";
|
|
29
|
+
version: string;
|
|
30
|
+
hooks: {
|
|
31
|
+
after: {
|
|
32
|
+
matcher(): true;
|
|
33
|
+
handler: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//#endregion
|
|
38
|
+
export { isAuthPath, svelteKitHandler, sveltekitCookies, toSvelteKitHandler };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { parseSetCookieHeader, toCookieOptions } from "../cookies/cookie-utils.mjs";
|
|
2
|
+
import { PACKAGE_VERSION } from "../version.mjs";
|
|
3
|
+
import { warnIfCookiePluginNotLast } from "./cookie-plugin-guard.mjs";
|
|
4
|
+
import { createAuthMiddleware } from "@better-auth/core/api";
|
|
5
|
+
//#region src/integrations/svelte-kit.ts
|
|
6
|
+
const toSvelteKitHandler = (auth) => {
|
|
7
|
+
return (event) => auth.handler(event.request);
|
|
8
|
+
};
|
|
9
|
+
const svelteKitHandler = async ({ auth, event, resolve, building }) => {
|
|
10
|
+
if (building) return resolve(event);
|
|
11
|
+
const { request, url } = event;
|
|
12
|
+
if (isAuthPath(url.toString(), auth.options)) return auth.handler(request);
|
|
13
|
+
return resolve(event);
|
|
14
|
+
};
|
|
15
|
+
function isAuthPath(url, options) {
|
|
16
|
+
const _url = new URL(url);
|
|
17
|
+
const baseURLStr = typeof options.baseURL === "string" ? options.baseURL : void 0;
|
|
18
|
+
const baseURL = new URL(`${baseURLStr || _url.origin}${options.basePath || "/api/auth"}`);
|
|
19
|
+
if (_url.origin !== baseURL.origin) return false;
|
|
20
|
+
if (!_url.pathname.startsWith(baseURL.pathname.endsWith("/") ? baseURL.pathname : `${baseURL.pathname}/`)) return false;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const sveltekitCookies = (getRequestEvent) => {
|
|
24
|
+
let hasWarned = false;
|
|
25
|
+
return {
|
|
26
|
+
id: "sveltekit-cookies",
|
|
27
|
+
version: PACKAGE_VERSION,
|
|
28
|
+
hooks: { after: [{
|
|
29
|
+
matcher() {
|
|
30
|
+
return true;
|
|
31
|
+
},
|
|
32
|
+
handler: createAuthMiddleware(async (ctx) => {
|
|
33
|
+
if (!hasWarned) {
|
|
34
|
+
warnIfCookiePluginNotLast(ctx.context, "sveltekit-cookies");
|
|
35
|
+
hasWarned = true;
|
|
36
|
+
}
|
|
37
|
+
const returned = ctx.context.responseHeaders;
|
|
38
|
+
if ("_flag" in ctx && ctx._flag === "router") return;
|
|
39
|
+
if (returned instanceof Headers) {
|
|
40
|
+
const setCookies = returned?.get("set-cookie");
|
|
41
|
+
if (!setCookies) return;
|
|
42
|
+
const event = getRequestEvent();
|
|
43
|
+
if (!event) return;
|
|
44
|
+
const parsed = parseSetCookieHeader(setCookies);
|
|
45
|
+
for (const [name, attributes] of parsed) try {
|
|
46
|
+
event.cookies.set(name, attributes.value, {
|
|
47
|
+
...toCookieOptions(attributes),
|
|
48
|
+
path: attributes.path || "/"
|
|
49
|
+
});
|
|
50
|
+
} catch {}
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}] }
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { isAuthPath, svelteKitHandler, sveltekitCookies, toSvelteKitHandler };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as _$_better_auth_core0 from "@better-auth/core";
|
|
2
|
+
import * as _$better_call0 from "better-call";
|
|
3
|
+
|
|
4
|
+
//#region src/integrations/tanstack-start-solid.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* TanStack Start cookie plugin for Solid.js.
|
|
7
|
+
*
|
|
8
|
+
* This plugin automatically handles cookie setting for TanStack Start with Solid.js.
|
|
9
|
+
* It uses `@tanstack/solid-start-server` to set cookies.
|
|
10
|
+
*
|
|
11
|
+
* For React, use `better-auth/tanstack-start` instead.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { tanstackStartCookies } from "better-auth/tanstack-start/solid";
|
|
16
|
+
*
|
|
17
|
+
* const auth = betterAuth({
|
|
18
|
+
* plugins: [tanstackStartCookies()],
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
declare const tanstackStartCookies: () => {
|
|
23
|
+
id: "tanstack-start-cookies-solid";
|
|
24
|
+
version: string;
|
|
25
|
+
hooks: {
|
|
26
|
+
after: {
|
|
27
|
+
matcher(ctx: _$_better_auth_core0.HookEndpointContext): true;
|
|
28
|
+
handler: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>;
|
|
29
|
+
}[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { tanstackStartCookies };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { parseSetCookieHeader, toCookieOptions } from "../cookies/cookie-utils.mjs";
|
|
2
|
+
import { PACKAGE_VERSION } from "../version.mjs";
|
|
3
|
+
import { warnIfCookiePluginNotLast } from "./cookie-plugin-guard.mjs";
|
|
4
|
+
import { createAuthMiddleware } from "@better-auth/core/api";
|
|
5
|
+
//#region src/integrations/tanstack-start-solid.ts
|
|
6
|
+
/**
|
|
7
|
+
* TanStack Start cookie plugin for Solid.js.
|
|
8
|
+
*
|
|
9
|
+
* This plugin automatically handles cookie setting for TanStack Start with Solid.js.
|
|
10
|
+
* It uses `@tanstack/solid-start-server` to set cookies.
|
|
11
|
+
*
|
|
12
|
+
* For React, use `better-auth/tanstack-start` instead.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { tanstackStartCookies } from "better-auth/tanstack-start/solid";
|
|
17
|
+
*
|
|
18
|
+
* const auth = betterAuth({
|
|
19
|
+
* plugins: [tanstackStartCookies()],
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const tanstackStartCookies = () => {
|
|
24
|
+
let hasWarned = false;
|
|
25
|
+
return {
|
|
26
|
+
id: "tanstack-start-cookies-solid",
|
|
27
|
+
version: PACKAGE_VERSION,
|
|
28
|
+
hooks: { after: [{
|
|
29
|
+
matcher(ctx) {
|
|
30
|
+
return true;
|
|
31
|
+
},
|
|
32
|
+
handler: createAuthMiddleware(async (ctx) => {
|
|
33
|
+
if (!hasWarned) {
|
|
34
|
+
warnIfCookiePluginNotLast(ctx.context, "tanstack-start-cookies-solid");
|
|
35
|
+
hasWarned = true;
|
|
36
|
+
}
|
|
37
|
+
const returned = ctx.context.responseHeaders;
|
|
38
|
+
if ("_flag" in ctx && ctx._flag === "router") return;
|
|
39
|
+
if (returned instanceof Headers) {
|
|
40
|
+
const setCookies = returned?.get("set-cookie");
|
|
41
|
+
if (!setCookies) return;
|
|
42
|
+
const parsed = parseSetCookieHeader(setCookies);
|
|
43
|
+
const { setCookie } = await import("@tanstack/solid-start/server");
|
|
44
|
+
parsed.forEach((value, key) => {
|
|
45
|
+
if (!key) return;
|
|
46
|
+
try {
|
|
47
|
+
setCookie(key, value.value, toCookieOptions(value));
|
|
48
|
+
} catch {}
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}] }
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { tanstackStartCookies };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as _$_better_auth_core0 from "@better-auth/core";
|
|
2
|
+
import * as _$better_call0 from "better-call";
|
|
3
|
+
|
|
4
|
+
//#region src/integrations/tanstack-start.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* TanStack Start cookie plugin for React.
|
|
7
|
+
*
|
|
8
|
+
* This plugin automatically handles cookie setting for TanStack Start with React.
|
|
9
|
+
* It uses `@tanstack/react-start-server` to set cookies.
|
|
10
|
+
*
|
|
11
|
+
* For Solid.js, use `better-auth/tanstack-start/solid` instead.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { tanstackStartCookies } from "better-auth/tanstack-start";
|
|
16
|
+
*
|
|
17
|
+
* const auth = betterAuth({
|
|
18
|
+
* plugins: [tanstackStartCookies()],
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
declare const tanstackStartCookies: () => {
|
|
23
|
+
id: "tanstack-start-cookies";
|
|
24
|
+
version: string;
|
|
25
|
+
hooks: {
|
|
26
|
+
after: {
|
|
27
|
+
matcher(ctx: _$_better_auth_core0.HookEndpointContext): true;
|
|
28
|
+
handler: _$better_call0.Middleware<_$better_call0.MiddlewareOptions, (inputContext: _$better_call0.MiddlewareInputContext<_$better_call0.MiddlewareOptions>) => Promise<void>>;
|
|
29
|
+
}[];
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { tanstackStartCookies };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { parseSetCookieHeader, toCookieOptions } from "../cookies/cookie-utils.mjs";
|
|
2
|
+
import { PACKAGE_VERSION } from "../version.mjs";
|
|
3
|
+
import { warnIfCookiePluginNotLast } from "./cookie-plugin-guard.mjs";
|
|
4
|
+
import { createAuthMiddleware } from "@better-auth/core/api";
|
|
5
|
+
//#region src/integrations/tanstack-start.ts
|
|
6
|
+
/**
|
|
7
|
+
* TanStack Start cookie plugin for React.
|
|
8
|
+
*
|
|
9
|
+
* This plugin automatically handles cookie setting for TanStack Start with React.
|
|
10
|
+
* It uses `@tanstack/react-start-server` to set cookies.
|
|
11
|
+
*
|
|
12
|
+
* For Solid.js, use `better-auth/tanstack-start/solid` instead.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { tanstackStartCookies } from "better-auth/tanstack-start";
|
|
17
|
+
*
|
|
18
|
+
* const auth = betterAuth({
|
|
19
|
+
* plugins: [tanstackStartCookies()],
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const tanstackStartCookies = () => {
|
|
24
|
+
let hasWarned = false;
|
|
25
|
+
return {
|
|
26
|
+
id: "tanstack-start-cookies",
|
|
27
|
+
version: PACKAGE_VERSION,
|
|
28
|
+
hooks: { after: [{
|
|
29
|
+
matcher(ctx) {
|
|
30
|
+
return true;
|
|
31
|
+
},
|
|
32
|
+
handler: createAuthMiddleware(async (ctx) => {
|
|
33
|
+
if (!hasWarned) {
|
|
34
|
+
warnIfCookiePluginNotLast(ctx.context, "tanstack-start-cookies");
|
|
35
|
+
hasWarned = true;
|
|
36
|
+
}
|
|
37
|
+
const returned = ctx.context.responseHeaders;
|
|
38
|
+
if ("_flag" in ctx && ctx._flag === "router") return;
|
|
39
|
+
if (returned instanceof Headers) {
|
|
40
|
+
const setCookies = returned?.get("set-cookie");
|
|
41
|
+
if (!setCookies) return;
|
|
42
|
+
const parsed = parseSetCookieHeader(setCookies);
|
|
43
|
+
const { setCookie } = await import("@tanstack/react-start/server");
|
|
44
|
+
parsed.forEach((value, key) => {
|
|
45
|
+
if (!key) return;
|
|
46
|
+
try {
|
|
47
|
+
setCookie(key, value.value, toCookieOptions(value));
|
|
48
|
+
} catch {}
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}] }
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { tanstackStartCookies };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { APIError, BASE_ERROR_CODES, BetterAuthError } from "@better-auth/core/error";
|
|
2
|
+
//#region src/oauth2/account-key.ts
|
|
3
|
+
/**
|
|
4
|
+
* Exposes a provider-declared profile as the raw claim record used by
|
|
5
|
+
* provisioning hooks. Provider profile interfaces are object-shaped but do
|
|
6
|
+
* not need an index signature solely to satisfy this erased boundary.
|
|
7
|
+
*/
|
|
8
|
+
function toOAuthProfileRecord(profile) {
|
|
9
|
+
return profile;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the stable account key established by an OAuth provider response.
|
|
13
|
+
*/
|
|
14
|
+
async function resolveOAuthAccountKey(provider, tokens, profile) {
|
|
15
|
+
const accountKeyContext = {
|
|
16
|
+
tokens,
|
|
17
|
+
profile
|
|
18
|
+
};
|
|
19
|
+
const accountSubject = provider.accountSubject;
|
|
20
|
+
const resolvedSubject = await accountSubject(accountKeyContext);
|
|
21
|
+
const accountId = String(resolvedSubject);
|
|
22
|
+
if (typeof resolvedSubject === "number" && !Number.isFinite(resolvedSubject) || accountId.trim().length === 0 || accountId === "undefined" || accountId === "null") throw new BetterAuthError("OAUTH_ACCOUNT_SUBJECT_INVALID");
|
|
23
|
+
return {
|
|
24
|
+
providerId: provider.id,
|
|
25
|
+
accountId
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves an OAuth account key at a direct HTTP authentication boundary.
|
|
30
|
+
*
|
|
31
|
+
* Provider resolvers are application code and can reject or return malformed
|
|
32
|
+
* values. Direct sign-in and linking expose all such failures as one stable
|
|
33
|
+
* authentication error instead of leaking implementation details or a 500.
|
|
34
|
+
*/
|
|
35
|
+
async function resolveOAuthAccountKeyForAPI(provider, tokens, profile) {
|
|
36
|
+
try {
|
|
37
|
+
return await resolveOAuthAccountKey(provider, tokens, profile);
|
|
38
|
+
} catch {
|
|
39
|
+
throw APIError.from("UNAUTHORIZED", BASE_ERROR_CODES.FAILED_TO_GET_USER_INFO);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { resolveOAuthAccountKey, resolveOAuthAccountKeyForAPI, toOAuthProfileRecord };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { appendQueryParams } from "@better-auth/core/utils/url";
|
|
2
|
+
//#region src/oauth2/errors.ts
|
|
3
|
+
/**
|
|
4
|
+
* Error codes used in OAuth callback redirects (`?error=<code>`). These are
|
|
5
|
+
* URL-safe strings, not API error objects. Some also serve as the OAuth seam's
|
|
6
|
+
* machine-readable `result.error` value, which non-redirect callers (e.g.
|
|
7
|
+
* id-token sign-in) remap to an API error code.
|
|
8
|
+
*/
|
|
9
|
+
const OAUTH_CALLBACK_ERROR_CODES = {
|
|
10
|
+
NO_CODE: "no_code",
|
|
11
|
+
PROVIDER_NOT_FOUND: "oauth_provider_not_found",
|
|
12
|
+
ISSUER_MISSING: "issuer_missing",
|
|
13
|
+
ISSUER_MISMATCH: "issuer_mismatch",
|
|
14
|
+
INVALID_CODE: "invalid_code",
|
|
15
|
+
NONCE_BINDING_MISSING: "nonce_binding_missing",
|
|
16
|
+
UNABLE_TO_GET_USER_INFO: "unable_to_get_user_info",
|
|
17
|
+
NO_CALLBACK_URL: "no_callback_url",
|
|
18
|
+
UNABLE_TO_LINK_ACCOUNT: "unable_to_link_account",
|
|
19
|
+
EMAIL_DOES_NOT_MATCH: "email_does_not_match",
|
|
20
|
+
ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_USER: "account_already_linked_to_different_user",
|
|
21
|
+
EMAIL_NOT_FOUND: "email_not_found",
|
|
22
|
+
EMAIL_NOT_VERIFIED: "email_not_verified"
|
|
23
|
+
};
|
|
24
|
+
const HANDLING_DOCS_URL = "https://www.better-auth.com/docs/concepts/oauth#handling-providers-without-email";
|
|
25
|
+
/**
|
|
26
|
+
* Redirect the user to the OAuth error page with a machine-readable `error`
|
|
27
|
+
* code (and optional `error_description`).
|
|
28
|
+
*
|
|
29
|
+
* Every OAuth callback path routes its failures through this helper so the
|
|
30
|
+
* query parameter name, the `?`/`&` separator, and URL encoding are decided in
|
|
31
|
+
* one place. The error page reads the `error` query parameter, so callers must
|
|
32
|
+
* never hand-build the redirect with a different parameter name.
|
|
33
|
+
*/
|
|
34
|
+
function redirectOnError(ctx, errorURL, error, description) {
|
|
35
|
+
const params = new URLSearchParams({ error });
|
|
36
|
+
if (description) params.set("error_description", description);
|
|
37
|
+
const redirectURL = appendQueryParams(errorURL, params);
|
|
38
|
+
throw ctx.redirect(redirectURL);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build the logger message shown when an OAuth provider does not return an
|
|
42
|
+
* email address. Kept in one place so every rejection site points users at
|
|
43
|
+
* the same workaround docs.
|
|
44
|
+
*/
|
|
45
|
+
function missingEmailLogMessage(providerId, options) {
|
|
46
|
+
return `${options?.source === "generic" ? `Generic OAuth provider "${providerId}"` : `Provider "${providerId}"`} did not return an email${options?.source === "id_token" ? " in the id token" : ""}. Either request the provider's email scope, or create a placeholder via \`mapProfileToUser\`. See ${HANDLING_DOCS_URL}`;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { OAUTH_CALLBACK_ERROR_CODES, missingEmailLogMessage, redirectOnError };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { GenerateStateOptions, generateIdTokenNonce, generateState, parseState } from "./state.mjs";
|
|
2
|
+
import { applyUpdateUserInfoOnLink, handleOAuthUserInfo } from "./link-account.mjs";
|
|
3
|
+
import { decryptOAuthToken, getOAuthCallbackPath, setTokenUtil } from "./utils.mjs";
|
|
4
|
+
export * from "@better-auth/core/oauth2";
|
|
5
|
+
export { GenerateStateOptions, applyUpdateUserInfoOnLink, decryptOAuthToken, generateIdTokenNonce, generateState, getOAuthCallbackPath, handleOAuthUserInfo, parseState, setTokenUtil };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { decryptOAuthToken, getOAuthCallbackPath, setTokenUtil } from "./utils.mjs";
|
|
2
|
+
import { applyUpdateUserInfoOnLink, handleOAuthUserInfo } from "./link-account.mjs";
|
|
3
|
+
import { generateIdTokenNonce, generateState, parseState } from "./state.mjs";
|
|
4
|
+
export * from "@better-auth/core/oauth2";
|
|
5
|
+
export { applyUpdateUserInfoOnLink, decryptOAuthToken, generateIdTokenNonce, generateState, getOAuthCallbackPath, handleOAuthUserInfo, parseState, setTokenUtil };
|