@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
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { getGlobalBroadcastChannel } from "./broadcast-channel.mjs";
|
|
2
|
+
import { getGlobalFocusManager } from "./focus-manager.mjs";
|
|
3
|
+
import { getGlobalOnlineManager } from "./online-manager.mjs";
|
|
4
|
+
//#region src/client/session-refresh.ts
|
|
5
|
+
const now = () => Math.floor(Date.now() / 1e3);
|
|
6
|
+
/**
|
|
7
|
+
* Rate limit: don't refetch on focus if a session request was made within this many seconds
|
|
8
|
+
*/
|
|
9
|
+
const FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;
|
|
10
|
+
function createSessionRefreshManager(opts) {
|
|
11
|
+
const { fetchSession, shouldPollSession = () => true, sessionSignal, options = {} } = opts;
|
|
12
|
+
const refetchInterval = options.sessionOptions?.refetchInterval ?? 0;
|
|
13
|
+
const refetchOnWindowFocus = options.sessionOptions?.refetchOnWindowFocus ?? true;
|
|
14
|
+
const refetchWhenOffline = options.sessionOptions?.refetchWhenOffline ?? false;
|
|
15
|
+
const state = {
|
|
16
|
+
isInitialized: false,
|
|
17
|
+
lastSessionRequest: 0
|
|
18
|
+
};
|
|
19
|
+
const shouldRefetch = () => {
|
|
20
|
+
return refetchWhenOffline || getGlobalOnlineManager().isOnline;
|
|
21
|
+
};
|
|
22
|
+
const triggerRefetch = (event) => {
|
|
23
|
+
if (!shouldRefetch()) return;
|
|
24
|
+
if (event?.event === "storage") {
|
|
25
|
+
fetchSession();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (event?.event === "poll") {
|
|
29
|
+
state.lastSessionRequest = now();
|
|
30
|
+
fetchSession();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (event?.event === "visibilitychange") {
|
|
34
|
+
if (now() - state.lastSessionRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) return;
|
|
35
|
+
state.lastSessionRequest = now();
|
|
36
|
+
fetchSession();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
fetchSession();
|
|
40
|
+
};
|
|
41
|
+
const broadcastSessionUpdate = (trigger) => {
|
|
42
|
+
getGlobalBroadcastChannel().post({
|
|
43
|
+
event: "session",
|
|
44
|
+
data: { trigger },
|
|
45
|
+
clientId: Math.random().toString(36).substring(7)
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const setupPolling = () => {
|
|
49
|
+
if (refetchInterval && refetchInterval > 0) state.pollInterval = setInterval(() => {
|
|
50
|
+
if (shouldPollSession()) triggerRefetch({ event: "poll" });
|
|
51
|
+
}, refetchInterval * 1e3);
|
|
52
|
+
};
|
|
53
|
+
const setupBroadcast = () => {
|
|
54
|
+
state.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {
|
|
55
|
+
triggerRefetch({ event: "storage" });
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
const setupFocusRefetch = () => {
|
|
59
|
+
if (!refetchOnWindowFocus) return;
|
|
60
|
+
state.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {
|
|
61
|
+
triggerRefetch({ event: "visibilitychange" });
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const setupOnlineRefetch = () => {
|
|
65
|
+
state.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {
|
|
66
|
+
if (online) triggerRefetch({ event: "visibilitychange" });
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
const setupSignalSubscription = () => {
|
|
70
|
+
state.unsubscribeSignal = sessionSignal.listen(() => {
|
|
71
|
+
fetchSession();
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const init = () => {
|
|
75
|
+
if (state.isInitialized) return;
|
|
76
|
+
state.isInitialized = true;
|
|
77
|
+
setupPolling();
|
|
78
|
+
setupBroadcast();
|
|
79
|
+
setupFocusRefetch();
|
|
80
|
+
setupOnlineRefetch();
|
|
81
|
+
setupSignalSubscription();
|
|
82
|
+
state.cleanupBroadcastSetup = getGlobalBroadcastChannel().setup();
|
|
83
|
+
state.cleanupFocusSetup = getGlobalFocusManager().setup();
|
|
84
|
+
state.cleanupOnlineSetup = getGlobalOnlineManager().setup();
|
|
85
|
+
};
|
|
86
|
+
const cleanup = () => {
|
|
87
|
+
if (!state.isInitialized) return;
|
|
88
|
+
if (state.pollInterval) {
|
|
89
|
+
clearInterval(state.pollInterval);
|
|
90
|
+
state.pollInterval = void 0;
|
|
91
|
+
}
|
|
92
|
+
if (state.unsubscribeBroadcast) {
|
|
93
|
+
state.unsubscribeBroadcast();
|
|
94
|
+
state.unsubscribeBroadcast = void 0;
|
|
95
|
+
}
|
|
96
|
+
if (state.unsubscribeFocus) {
|
|
97
|
+
state.unsubscribeFocus();
|
|
98
|
+
state.unsubscribeFocus = void 0;
|
|
99
|
+
}
|
|
100
|
+
if (state.unsubscribeOnline) {
|
|
101
|
+
state.unsubscribeOnline();
|
|
102
|
+
state.unsubscribeOnline = void 0;
|
|
103
|
+
}
|
|
104
|
+
if (state.unsubscribeSignal) {
|
|
105
|
+
state.unsubscribeSignal();
|
|
106
|
+
state.unsubscribeSignal = void 0;
|
|
107
|
+
}
|
|
108
|
+
if (state.cleanupBroadcastSetup) {
|
|
109
|
+
state.cleanupBroadcastSetup();
|
|
110
|
+
state.cleanupBroadcastSetup = void 0;
|
|
111
|
+
}
|
|
112
|
+
if (state.cleanupFocusSetup) {
|
|
113
|
+
state.cleanupFocusSetup();
|
|
114
|
+
state.cleanupFocusSetup = void 0;
|
|
115
|
+
}
|
|
116
|
+
if (state.cleanupOnlineSetup) {
|
|
117
|
+
state.cleanupOnlineSetup();
|
|
118
|
+
state.cleanupOnlineSetup = void 0;
|
|
119
|
+
}
|
|
120
|
+
state.isInitialized = false;
|
|
121
|
+
state.lastSessionRequest = 0;
|
|
122
|
+
};
|
|
123
|
+
return {
|
|
124
|
+
init,
|
|
125
|
+
cleanup,
|
|
126
|
+
triggerRefetch,
|
|
127
|
+
broadcastSessionUpdate
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
export { createSessionRefreshManager };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, UnionToIntersection } from "../../types/helper.mjs";
|
|
2
|
+
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal, SessionQueryParams } from "../types.mjs";
|
|
3
|
+
import { getClientConfig } from "../config.mjs";
|
|
4
|
+
import { BetterAuthClientOptions } from "@better-auth/core";
|
|
5
|
+
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
6
|
+
import { BetterFetchError, BetterFetchResponse } from "@better-fetch/fetch";
|
|
7
|
+
import { Accessor } from "solid-js";
|
|
8
|
+
export * from "nanostores";
|
|
9
|
+
export * from "@better-fetch/fetch";
|
|
10
|
+
|
|
11
|
+
//#region src/client/solid/index.d.ts
|
|
12
|
+
type InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {
|
|
13
|
+
plugins: Array<infer Plugin>;
|
|
14
|
+
} ? UnionToIntersection<Plugin extends {
|
|
15
|
+
getAtoms?: infer GetAtoms;
|
|
16
|
+
} ? GetAtoms extends ((fetch: any) => infer Atoms) ? Atoms extends Record<string, any> ? { [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => Accessor<ReturnType<Atoms[key]["get"]>> } : {} : {} : {}> : {};
|
|
17
|
+
type ClientConfig = ReturnType<typeof getClientConfig>;
|
|
18
|
+
type ClientSession<Option extends BetterAuthClientOptions> = InferClientAPI<Option> extends {
|
|
19
|
+
getSession: () => Promise<infer Res>;
|
|
20
|
+
} ? Res extends BetterFetchResponse<infer S> ? S : Res : never;
|
|
21
|
+
/**
|
|
22
|
+
* Solid client returned by `createAuthClient`.
|
|
23
|
+
*/
|
|
24
|
+
type SolidAuthClient<Option extends BetterAuthClientOptions> = UnionToIntersection<InferResolvedHooks<Option>> & InferClientAPI<Option> & InferActions<Option> & {
|
|
25
|
+
hydrateSession(session: NonNullable<ClientSession<Option>> | null): void;
|
|
26
|
+
useSession: () => Accessor<{
|
|
27
|
+
data: ClientSession<Option>;
|
|
28
|
+
isPending: boolean;
|
|
29
|
+
isRefetching: boolean;
|
|
30
|
+
error: BetterFetchError | null;
|
|
31
|
+
refetch: (queryParams?: {
|
|
32
|
+
query?: SessionQueryParams;
|
|
33
|
+
} | undefined) => Promise<void>;
|
|
34
|
+
}>;
|
|
35
|
+
$Infer: {
|
|
36
|
+
Session: NonNullable<ClientSession<Option>>;
|
|
37
|
+
};
|
|
38
|
+
$fetch: ClientConfig["$fetch"];
|
|
39
|
+
$store: ClientConfig["$store"];
|
|
40
|
+
$ERROR_CODES: PrettifyDeep<InferErrorCodes<Option> & typeof BASE_ERROR_CODES>;
|
|
41
|
+
};
|
|
42
|
+
declare function createAuthClient<Option extends BetterAuthClientOptions>(options?: Option | undefined): SolidAuthClient<Option>;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, SolidAuthClient, StripEmptyObjects, type UnionToIntersection, createAuthClient };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getClientConfig } from "../config.mjs";
|
|
2
|
+
import { createDynamicPathProxy } from "../proxy.mjs";
|
|
3
|
+
import { useStore } from "./solid-store.mjs";
|
|
4
|
+
import { capitalizeFirstLetter } from "@better-auth/core/utils/string";
|
|
5
|
+
//#region src/client/solid/index.ts
|
|
6
|
+
function getAtomKey(str) {
|
|
7
|
+
return `use${capitalizeFirstLetter(str)}`;
|
|
8
|
+
}
|
|
9
|
+
function createAuthClient(options) {
|
|
10
|
+
const { pluginPathMethods, pluginsActions, pluginsAtoms, hydrateSession, $fetch, $store, atomListeners } = getClientConfig(options);
|
|
11
|
+
const resolvedHooks = {};
|
|
12
|
+
for (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[getAtomKey(key)] = () => useStore(value);
|
|
13
|
+
return createDynamicPathProxy({
|
|
14
|
+
...pluginsActions,
|
|
15
|
+
...resolvedHooks,
|
|
16
|
+
hydrateSession,
|
|
17
|
+
$fetch,
|
|
18
|
+
$store
|
|
19
|
+
}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { createAuthClient };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { onCleanup } from "solid-js";
|
|
2
|
+
import { createStore, reconcile } from "solid-js/store";
|
|
3
|
+
//#region src/client/solid/solid-store.ts
|
|
4
|
+
/**
|
|
5
|
+
* Subscribes to store changes and gets store’s value.
|
|
6
|
+
*
|
|
7
|
+
* @param store Store instance.
|
|
8
|
+
* @returns Store value.
|
|
9
|
+
*/
|
|
10
|
+
function useStore(store) {
|
|
11
|
+
const unbindActivation = store.listen(() => {});
|
|
12
|
+
const [state, setState] = createStore({ value: store.get() });
|
|
13
|
+
const unsubscribe = store.subscribe((newValue) => {
|
|
14
|
+
setState("value", reconcile(newValue));
|
|
15
|
+
});
|
|
16
|
+
onCleanup(() => unsubscribe());
|
|
17
|
+
unbindActivation();
|
|
18
|
+
return () => state.value;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { useStore };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, UnionToIntersection } from "../../types/helper.mjs";
|
|
2
|
+
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal, SessionQueryParams } from "../types.mjs";
|
|
3
|
+
import { getClientConfig } from "../config.mjs";
|
|
4
|
+
import { BetterAuthClientOptions } from "@better-auth/core";
|
|
5
|
+
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
6
|
+
import { Atom } from "nanostores";
|
|
7
|
+
import { BetterFetchError, BetterFetchResponse } from "@better-fetch/fetch";
|
|
8
|
+
export * from "nanostores";
|
|
9
|
+
export * from "@better-fetch/fetch";
|
|
10
|
+
|
|
11
|
+
//#region src/client/svelte/index.d.ts
|
|
12
|
+
type InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {
|
|
13
|
+
plugins: Array<infer Plugin>;
|
|
14
|
+
} ? UnionToIntersection<Plugin extends {
|
|
15
|
+
getAtoms?: infer GetAtoms;
|
|
16
|
+
} ? GetAtoms extends ((fetch: any) => infer Atoms) ? Atoms extends Record<string, any> ? { [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => Atoms[key] } : {} : {} : {}> : {};
|
|
17
|
+
type ClientConfig = ReturnType<typeof getClientConfig>;
|
|
18
|
+
type ClientSession<Option extends BetterAuthClientOptions> = InferClientAPI<Option> extends {
|
|
19
|
+
getSession: () => Promise<infer Res>;
|
|
20
|
+
} ? Res extends BetterFetchResponse<infer S> ? S : Res : never;
|
|
21
|
+
/**
|
|
22
|
+
* Svelte client returned by `createAuthClient`.
|
|
23
|
+
*/
|
|
24
|
+
type SvelteAuthClient<Option extends BetterAuthClientOptions> = UnionToIntersection<InferResolvedHooks<Option>> & InferClientAPI<Option> & InferActions<Option> & {
|
|
25
|
+
hydrateSession(session: NonNullable<ClientSession<Option>> | null): void;
|
|
26
|
+
useSession: () => Atom<{
|
|
27
|
+
data: ClientSession<Option>;
|
|
28
|
+
error: BetterFetchError | null;
|
|
29
|
+
isPending: boolean;
|
|
30
|
+
isRefetching: boolean;
|
|
31
|
+
refetch: (queryParams?: {
|
|
32
|
+
query?: SessionQueryParams;
|
|
33
|
+
} | undefined) => Promise<void>;
|
|
34
|
+
}>;
|
|
35
|
+
$fetch: ClientConfig["$fetch"];
|
|
36
|
+
$store: ClientConfig["$store"];
|
|
37
|
+
$Infer: {
|
|
38
|
+
Session: NonNullable<ClientSession<Option>>;
|
|
39
|
+
};
|
|
40
|
+
$ERROR_CODES: PrettifyDeep<InferErrorCodes<Option> & typeof BASE_ERROR_CODES>;
|
|
41
|
+
};
|
|
42
|
+
declare function createAuthClient<Option extends BetterAuthClientOptions>(options?: Option | undefined): SvelteAuthClient<Option>;
|
|
43
|
+
//#endregion
|
|
44
|
+
export { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, SvelteAuthClient, type UnionToIntersection, createAuthClient };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getClientConfig } from "../config.mjs";
|
|
2
|
+
import { createDynamicPathProxy } from "../proxy.mjs";
|
|
3
|
+
import { capitalizeFirstLetter } from "@better-auth/core/utils/string";
|
|
4
|
+
//#region src/client/svelte/index.ts
|
|
5
|
+
function createAuthClient(options) {
|
|
6
|
+
const { pluginPathMethods, pluginsActions, pluginsAtoms, hydrateSession, $fetch, atomListeners, $store } = getClientConfig(options);
|
|
7
|
+
const resolvedHooks = {};
|
|
8
|
+
for (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[`use${capitalizeFirstLetter(key)}`] = () => value;
|
|
9
|
+
return createDynamicPathProxy({
|
|
10
|
+
...pluginsActions,
|
|
11
|
+
...resolvedHooks,
|
|
12
|
+
hydrateSession,
|
|
13
|
+
$fetch,
|
|
14
|
+
$store
|
|
15
|
+
}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { createAuthClient };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { InferFieldsInputClient } from "../db/field.mjs";
|
|
2
|
+
import { StripEmptyObjects, UnionToIntersection } from "../types/helper.mjs";
|
|
3
|
+
import { InferRoutes } from "./path-to-object.mjs";
|
|
4
|
+
import { Session as Session$1, User as User$1 } from "../types/models.mjs";
|
|
5
|
+
import { Auth } from "../types/auth.mjs";
|
|
6
|
+
import { BetterAuthClientOptions as BetterAuthClientOptions$1, BetterAuthClientPlugin, ClientAtomListener as ClientAtomListener$1, ClientStore as ClientStore$1 } from "@better-auth/core";
|
|
7
|
+
import { DBFieldAttribute, InferDBFieldsOutput } from "@better-auth/core/db";
|
|
8
|
+
|
|
9
|
+
//#region src/client/types.d.ts
|
|
10
|
+
type ClientPluginError<K extends string = string> = {
|
|
11
|
+
readonly code: K;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
type InferPluginEndpoints<Plugins> = Plugins extends Array<infer Pl> ? UnionToIntersection<Pl extends {
|
|
15
|
+
$InferServerPlugin?: infer Plug;
|
|
16
|
+
} ? Plug extends {
|
|
17
|
+
endpoints?: infer Endpoints;
|
|
18
|
+
} ? Endpoints extends Record<string, unknown> ? Endpoints : {} : {} : {}> : {};
|
|
19
|
+
type InferClientAPI<O extends BetterAuthClientOptions$1> = InferRoutes<O["plugins"] extends Array<any> ? Omit<Auth["api"], keyof InferPluginEndpoints<O["plugins"]>> & InferPluginEndpoints<O["plugins"]> : Auth["api"], O>;
|
|
20
|
+
type InferActions<O extends BetterAuthClientOptions$1> = (O["plugins"] extends Array<infer Plugin> ? UnionToIntersection<Plugin extends {
|
|
21
|
+
getActions?: infer GetActions;
|
|
22
|
+
} ? GetActions extends ((...args: any) => infer Actions) ? Actions : {} : {}> : {}) & InferRoutes<O["$InferAuth"] extends {
|
|
23
|
+
plugins: infer Plugins;
|
|
24
|
+
} ? Plugins extends Array<infer Plugin> ? Plugin extends {
|
|
25
|
+
endpoints?: infer Endpoints;
|
|
26
|
+
} ? Endpoints extends Record<string, unknown> ? Endpoints : {} : {} : {} : {}, O>;
|
|
27
|
+
type InferErrorCodes<O extends BetterAuthClientOptions$1> = O["plugins"] extends Array<infer Plugin> ? UnionToIntersection<Plugin extends {
|
|
28
|
+
$InferServerPlugin?: infer ServerPlugin;
|
|
29
|
+
} ? ServerPlugin extends {
|
|
30
|
+
$ERROR_CODES?: infer E;
|
|
31
|
+
} ? { [K in keyof E & string]: E[K] extends ClientPluginError ? ClientPluginError<K> : never } : {} : {}> : {};
|
|
32
|
+
/**
|
|
33
|
+
* signals are just used to recall a computed value.
|
|
34
|
+
* as a convention they start with "$"
|
|
35
|
+
*/
|
|
36
|
+
type IsSignal<T> = T extends `$${infer _}` ? true : false;
|
|
37
|
+
type InferSessionFromClient<O extends BetterAuthClientOptions$1> = StripEmptyObjects<Session$1 & UnionToIntersection<InferAdditionalFromClient<O, "session", "output">>>;
|
|
38
|
+
type InferUserFromClient<O extends BetterAuthClientOptions$1> = StripEmptyObjects<User$1 & UnionToIntersection<InferAdditionalFromClient<O, "user", "output">>>;
|
|
39
|
+
type InferAdditionalFromClient<Options extends BetterAuthClientOptions$1, Key extends string, Format extends "input" | "output" = "output"> = Options["plugins"] extends Array<infer Plugin> ? Plugin extends {
|
|
40
|
+
$InferServerPlugin?: infer ServerPlugin;
|
|
41
|
+
} ? ServerPlugin extends {
|
|
42
|
+
schema?: infer Schema;
|
|
43
|
+
} ? Schema extends Record<Key, {
|
|
44
|
+
fields: infer Fields;
|
|
45
|
+
}> ? Fields extends Record<string, DBFieldAttribute> ? Format extends "input" ? InferFieldsInputClient<Fields> : InferDBFieldsOutput<Fields> : {} : {} : {} : {} : {};
|
|
46
|
+
type SessionQueryParams = {
|
|
47
|
+
disableCookieCache?: boolean | undefined;
|
|
48
|
+
disableRefresh?: boolean | undefined;
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { type BetterAuthClientOptions$1 as BetterAuthClientOptions, type BetterAuthClientPlugin, type ClientAtomListener$1 as ClientAtomListener, type ClientStore$1 as ClientStore, InferActions, InferAdditionalFromClient, InferClientAPI, InferErrorCodes, InferSessionFromClient, InferUserFromClient, IsSignal, SessionQueryParams };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { PrettifyDeep, UnionToIntersection } from "../types/helper.mjs";
|
|
2
|
+
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal, SessionQueryParams } from "./types.mjs";
|
|
3
|
+
import { getClientConfig } from "./config.mjs";
|
|
4
|
+
import { BetterAuthClientOptions } from "@better-auth/core";
|
|
5
|
+
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
6
|
+
import { Atom } from "nanostores";
|
|
7
|
+
import { BetterFetchError, BetterFetchResponse } from "@better-fetch/fetch";
|
|
8
|
+
|
|
9
|
+
//#region src/client/vanilla.d.ts
|
|
10
|
+
type InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {
|
|
11
|
+
plugins: Array<infer Plugin>;
|
|
12
|
+
} ? UnionToIntersection<Plugin extends {
|
|
13
|
+
getAtoms?: infer GetAtoms;
|
|
14
|
+
} ? GetAtoms extends ((fetch: any) => infer Atoms) ? Atoms extends Record<string, any> ? { [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: Atoms[key] } : {} : {} : {}> : {};
|
|
15
|
+
type ClientConfig = ReturnType<typeof getClientConfig>;
|
|
16
|
+
type ClientSession<Option extends BetterAuthClientOptions> = InferClientAPI<Option> extends {
|
|
17
|
+
getSession: () => Promise<infer Res>;
|
|
18
|
+
} ? Res extends BetterFetchResponse<infer S> ? S : Res : never;
|
|
19
|
+
/**
|
|
20
|
+
* Client returned by `createAuthClient`.
|
|
21
|
+
*/
|
|
22
|
+
type AuthClient<Option extends BetterAuthClientOptions> = UnionToIntersection<InferResolvedHooks<Option>> & InferClientAPI<Option> & InferActions<Option> & {
|
|
23
|
+
hydrateSession(session: NonNullable<ClientSession<Option>> | null): void;
|
|
24
|
+
useSession: Atom<{
|
|
25
|
+
data: ClientSession<Option>;
|
|
26
|
+
error: BetterFetchError | null;
|
|
27
|
+
isPending: boolean;
|
|
28
|
+
isRefetching: boolean;
|
|
29
|
+
refetch: (queryParams?: {
|
|
30
|
+
query?: SessionQueryParams;
|
|
31
|
+
} | undefined) => Promise<void>;
|
|
32
|
+
}>;
|
|
33
|
+
$fetch: ClientConfig["$fetch"];
|
|
34
|
+
$store: ClientConfig["$store"];
|
|
35
|
+
$Infer: {
|
|
36
|
+
Session: NonNullable<ClientSession<Option>>;
|
|
37
|
+
};
|
|
38
|
+
$ERROR_CODES: PrettifyDeep<InferErrorCodes<Option> & typeof BASE_ERROR_CODES>;
|
|
39
|
+
};
|
|
40
|
+
declare function createAuthClient<Option extends BetterAuthClientOptions>(options?: Option | undefined): AuthClient<Option>;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { AuthClient, createAuthClient };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getClientConfig } from "./config.mjs";
|
|
2
|
+
import { createDynamicPathProxy } from "./proxy.mjs";
|
|
3
|
+
import { capitalizeFirstLetter } from "@better-auth/core/utils/string";
|
|
4
|
+
//#region src/client/vanilla.ts
|
|
5
|
+
function createAuthClient(options) {
|
|
6
|
+
const { pluginPathMethods, pluginsActions, pluginsAtoms, hydrateSession, $fetch, atomListeners, $store } = getClientConfig(options);
|
|
7
|
+
const resolvedHooks = {};
|
|
8
|
+
for (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;
|
|
9
|
+
return createDynamicPathProxy({
|
|
10
|
+
...pluginsActions,
|
|
11
|
+
...resolvedHooks,
|
|
12
|
+
hydrateSession,
|
|
13
|
+
$fetch,
|
|
14
|
+
$store
|
|
15
|
+
}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { createAuthClient };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, UnionToIntersection } from "../../types/helper.mjs";
|
|
2
|
+
import { InferActions, InferClientAPI, InferErrorCodes, IsSignal, SessionQueryParams } from "../types.mjs";
|
|
3
|
+
import { getClientConfig } from "../config.mjs";
|
|
4
|
+
import { BetterAuthClientOptions } from "@better-auth/core";
|
|
5
|
+
import { BASE_ERROR_CODES } from "@better-auth/core/error";
|
|
6
|
+
import { BetterFetchError, BetterFetchResponse } from "@better-fetch/fetch";
|
|
7
|
+
import { DeepReadonly, Ref, WatchSource } from "vue";
|
|
8
|
+
export * from "nanostores";
|
|
9
|
+
export * from "@better-fetch/fetch";
|
|
10
|
+
|
|
11
|
+
//#region src/client/vue/index.d.ts
|
|
12
|
+
type InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {
|
|
13
|
+
plugins: Array<infer Plugin>;
|
|
14
|
+
} ? UnionToIntersection<Plugin extends {
|
|
15
|
+
getAtoms?: infer GetAtoms;
|
|
16
|
+
} ? GetAtoms extends ((fetch: any) => infer Atoms) ? Atoms extends Record<string, any> ? { [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => DeepReadonly<Ref<ReturnType<Atoms[key]["get"]>>> } : {} : {} : {}> : {};
|
|
17
|
+
type ClientConfig = ReturnType<typeof getClientConfig>;
|
|
18
|
+
type ClientSession<Option extends BetterAuthClientOptions> = InferClientAPI<Option> extends {
|
|
19
|
+
getSession: () => Promise<infer Res>;
|
|
20
|
+
} ? Res extends BetterFetchResponse<infer S> ? S : Res : never;
|
|
21
|
+
/**
|
|
22
|
+
* Minimal Nuxt-compatible fetch contract for `useSession(useFetch)`.
|
|
23
|
+
* Compatibility with Nuxt's `useFetch` and `UseFetchOptions` is checked by the Nuxt fixture type test.
|
|
24
|
+
*/
|
|
25
|
+
type SessionFetch = (url: string, options: {
|
|
26
|
+
headers?: HeadersInit;
|
|
27
|
+
key: string;
|
|
28
|
+
watch: WatchSource<unknown>[];
|
|
29
|
+
}) => Promise<{
|
|
30
|
+
data: Ref<unknown>;
|
|
31
|
+
error: Ref<unknown>;
|
|
32
|
+
}>;
|
|
33
|
+
type VueSessionState<Option extends BetterAuthClientOptions> = DeepReadonly<Ref<{
|
|
34
|
+
data: ClientSession<Option>;
|
|
35
|
+
isPending: boolean;
|
|
36
|
+
isRefetching: boolean;
|
|
37
|
+
error: BetterFetchError | null;
|
|
38
|
+
refetch: (queryParams?: {
|
|
39
|
+
query?: SessionQueryParams;
|
|
40
|
+
} | undefined) => Promise<void>;
|
|
41
|
+
}>>;
|
|
42
|
+
type SessionFetchResult<Option extends BetterAuthClientOptions> = {
|
|
43
|
+
data: Ref<ClientSession<Option>>;
|
|
44
|
+
isPending: false;
|
|
45
|
+
error: Ref<{
|
|
46
|
+
message?: string | undefined;
|
|
47
|
+
status: number;
|
|
48
|
+
statusText: string;
|
|
49
|
+
}>;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Vue client returned by `createAuthClient`.
|
|
53
|
+
*/
|
|
54
|
+
type VueAuthClient<Option extends BetterAuthClientOptions> = UnionToIntersection<InferResolvedHooks<Option>> & InferClientAPI<Option> & InferActions<Option> & {
|
|
55
|
+
hydrateSession(session: NonNullable<ClientSession<Option>> | null): void;
|
|
56
|
+
useSession(): VueSessionState<Option>;
|
|
57
|
+
useSession(useFetch: SessionFetch): Promise<SessionFetchResult<Option>>;
|
|
58
|
+
$Infer: {
|
|
59
|
+
Session: NonNullable<ClientSession<Option>>;
|
|
60
|
+
};
|
|
61
|
+
$fetch: ClientConfig["$fetch"];
|
|
62
|
+
$store: ClientConfig["$store"];
|
|
63
|
+
$ERROR_CODES: PrettifyDeep<InferErrorCodes<Option> & typeof BASE_ERROR_CODES>;
|
|
64
|
+
};
|
|
65
|
+
declare function createAuthClient<Option extends BetterAuthClientOptions>(options?: Option | undefined): VueAuthClient<Option>;
|
|
66
|
+
//#endregion
|
|
67
|
+
export { ExtractPluginField, HasRequiredKeys, InferPluginFieldFromTuple, IsAny, OverrideMerge, Prettify, PrettifyDeep, RequiredKeysOf, StripEmptyObjects, type UnionToIntersection, VueAuthClient, createAuthClient };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getClientConfig } from "../config.mjs";
|
|
2
|
+
import { createDynamicPathProxy } from "../proxy.mjs";
|
|
3
|
+
import { useStore } from "./vue-store.mjs";
|
|
4
|
+
import { capitalizeFirstLetter } from "@better-auth/core/utils/string";
|
|
5
|
+
//#region src/client/vue/index.ts
|
|
6
|
+
function getAtomKey(str) {
|
|
7
|
+
return `use${capitalizeFirstLetter(str)}`;
|
|
8
|
+
}
|
|
9
|
+
/** Preserves standard `HeadersInit` values and removes undefined record entries. */
|
|
10
|
+
function toHeadersInit(headers) {
|
|
11
|
+
if (!headers) return void 0;
|
|
12
|
+
if (headers instanceof Headers || Array.isArray(headers)) return headers;
|
|
13
|
+
const normalizedHeaders = {};
|
|
14
|
+
for (const [name, value] of Object.entries(headers)) if (value !== void 0) normalizedHeaders[name] = value;
|
|
15
|
+
return normalizedHeaders;
|
|
16
|
+
}
|
|
17
|
+
function createAuthClient(options) {
|
|
18
|
+
const { baseURL, pluginPathMethods, pluginsActions, pluginsAtoms, hydrateSession, $sessionSignal, $fetch, $store, atomListeners } = getClientConfig(options, false);
|
|
19
|
+
const sessionCacheKey = [
|
|
20
|
+
"better-auth",
|
|
21
|
+
"session",
|
|
22
|
+
options?.baseURL || "inferred",
|
|
23
|
+
options?.basePath ?? "/api/auth"
|
|
24
|
+
].join(":");
|
|
25
|
+
const resolvedHooks = {};
|
|
26
|
+
for (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[getAtomKey(key)] = () => useStore(value);
|
|
27
|
+
function useSession(useFetch) {
|
|
28
|
+
if (useFetch) {
|
|
29
|
+
const sessionSignal = useStore($sessionSignal);
|
|
30
|
+
return useFetch(`${baseURL}/get-session`, {
|
|
31
|
+
headers: toHeadersInit(options?.fetchOptions?.headers),
|
|
32
|
+
key: sessionCacheKey,
|
|
33
|
+
watch: [sessionSignal]
|
|
34
|
+
}).then((result) => {
|
|
35
|
+
return {
|
|
36
|
+
data: result.data,
|
|
37
|
+
isPending: false,
|
|
38
|
+
error: result.error
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return resolvedHooks.useSession();
|
|
43
|
+
}
|
|
44
|
+
return createDynamicPathProxy({
|
|
45
|
+
...pluginsActions,
|
|
46
|
+
...resolvedHooks,
|
|
47
|
+
hydrateSession,
|
|
48
|
+
useSession,
|
|
49
|
+
$fetch,
|
|
50
|
+
$store
|
|
51
|
+
}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { createAuthClient };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getCurrentInstance, getCurrentScope, onScopeDispose, readonly, shallowRef } from "vue";
|
|
2
|
+
//#region src/client/vue/vue-store.ts
|
|
3
|
+
function registerStore(store) {
|
|
4
|
+
const instance = getCurrentInstance();
|
|
5
|
+
if (instance && instance.proxy) {
|
|
6
|
+
const vm = instance.proxy;
|
|
7
|
+
("_nanostores" in vm ? vm._nanostores : vm._nanostores = []).push(store);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function useStore(store) {
|
|
11
|
+
const state = shallowRef();
|
|
12
|
+
const unsubscribe = store.subscribe((value) => {
|
|
13
|
+
state.value = value;
|
|
14
|
+
});
|
|
15
|
+
if (getCurrentScope()) onScopeDispose(unsubscribe);
|
|
16
|
+
if (process.env.NODE_ENV !== "production") {
|
|
17
|
+
registerStore(store);
|
|
18
|
+
return readonly(state);
|
|
19
|
+
}
|
|
20
|
+
return state;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { useStore };
|