@neondatabase/auth 0.1.0-beta.9 → 0.3.0-beta

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.
Files changed (46) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -18
  3. package/dist/{adapter-core-Bw9mn_AS.d.mts → adapter-core-B9uDhoYq.d.mts} +270 -375
  4. package/dist/{adapter-core-C_NEMs0b.mjs → adapter-core-D00qcqMo.mjs} +392 -67
  5. package/dist/better-auth-react-adapter-BO4jLN4H.d.mts +2170 -0
  6. package/dist/{better-auth-react-adapter-BbM3jLLv.mjs → better-auth-react-adapter-Xdj-69i9.mjs} +10 -8
  7. package/dist/constants-Cupc_bln.mjs +28 -0
  8. package/dist/{index-BXlAjlSt.d.mts → index-B_Q0Tp1D.d.mts} +0 -1
  9. package/dist/index.d.mts +13 -19
  10. package/dist/index.mjs +2 -1
  11. package/dist/{neon-auth-DdlToh7_.mjs → neon-auth-DBOB8sXF.mjs} +7 -4
  12. package/dist/next/index.d.mts +77 -186
  13. package/dist/next/index.mjs +4 -311
  14. package/dist/next/server/index.d.mts +536 -0
  15. package/dist/next/server/index.mjs +1461 -0
  16. package/dist/react/adapters/index.d.mts +4 -4
  17. package/dist/react/adapters/index.mjs +2 -1
  18. package/dist/react/index.d.mts +6 -5
  19. package/dist/react/index.mjs +5 -4
  20. package/dist/react/ui/index.d.mts +1 -2
  21. package/dist/react/ui/index.mjs +2 -4
  22. package/dist/react/ui/server.mjs +2 -2
  23. package/dist/{supabase-adapter-CAqbpOC7.mjs → supabase-adapter-CIBMebXB.mjs} +28 -45
  24. package/dist/supabase-adapter-CSDRL1ZU.d.mts +2227 -0
  25. package/dist/types/index.d.mts +2 -7
  26. package/dist/ui/.safelist.html +3 -0
  27. package/dist/ui/css.css +2 -2
  28. package/dist/ui/tailwind.css +2 -1
  29. package/dist/ui/theme-inline.css +44 -0
  30. package/dist/ui/theme.css +103 -76
  31. package/dist/ui-CnVnqGns.mjs +3 -0
  32. package/dist/vanilla/adapters/index.d.mts +3 -3
  33. package/dist/vanilla/adapters/index.mjs +2 -1
  34. package/dist/vanilla/index.d.mts +3 -3
  35. package/dist/vanilla/index.mjs +2 -1
  36. package/llms.txt +330 -0
  37. package/package.json +32 -23
  38. package/dist/better-auth-react-adapter-JoscqoDc.d.mts +0 -722
  39. package/dist/better-auth-types-CE4hLv9E.d.mts +0 -9
  40. package/dist/chunk-5DLVHPZS-Bxj7snpZ-DoVNlsyk.mjs +0 -533
  41. package/dist/supabase-adapter-Clxlqg1x.d.mts +0 -127
  42. package/dist/ui-aMoA-9nq.mjs +0 -9449
  43. /package/dist/{adapters-D0mxG3F-.mjs → adapters-CUvhsAvY.mjs} +0 -0
  44. /package/dist/{adapters-Df6Dd3KK.mjs → adapters-CivF9wql.mjs} +0 -0
  45. /package/dist/{index-ClXLQ1fw.d.mts → index-CPnFzULh.d.mts} +0 -0
  46. /package/dist/{index-DCQ5Y2ED.d.mts → index-UW23fDSn.d.mts} +0 -0
@@ -1,4 +1,4 @@
1
- import { t as NeonAuthAdapterCore } from "./adapter-core-C_NEMs0b.mjs";
1
+ import { t as NeonAuthAdapterCore } from "./adapter-core-D00qcqMo.mjs";
2
2
  import { createAuthClient } from "better-auth/react";
3
3
 
4
4
  //#region src/adapters/better-auth-react/better-auth-react-adapter.ts
@@ -14,11 +14,6 @@ var BetterAuthReactAdapterImpl = class extends NeonAuthAdapterCore {
14
14
  getBetterAuthInstance() {
15
15
  return this._betterAuth;
16
16
  }
17
- async getJWTToken() {
18
- const session = await this._betterAuth.getSession();
19
- if (session.error) throw session.error;
20
- return session.data?.session?.token ?? null;
21
- }
22
17
  };
23
18
  /**
24
19
  * Factory function that returns an adapter builder.
@@ -39,9 +34,16 @@ var BetterAuthReactAdapterImpl = class extends NeonAuthAdapterCore {
39
34
  * ```
40
35
  */
41
36
  function BetterAuthReactAdapter(options) {
42
- return (url) => new BetterAuthReactAdapterImpl({
37
+ return (url, fetchOptions) => new BetterAuthReactAdapterImpl({
43
38
  baseURL: url,
44
- ...options
39
+ ...options,
40
+ fetchOptions: {
41
+ ...options?.fetchOptions,
42
+ headers: {
43
+ ...options?.fetchOptions?.headers,
44
+ ...fetchOptions?.headers
45
+ }
46
+ }
45
47
  });
46
48
  }
47
49
 
@@ -0,0 +1,28 @@
1
+ //#region src/core/constants.ts
2
+ /**
3
+ * Session caching configuration constants
4
+ *
5
+ * Uses industry-standard 60s cache TTL (common across auth providers).
6
+ *
7
+ * Note: Token refresh detection is now automatic via Better Auth's
8
+ * fetchOptions.onSuccess callback. No polling is needed.
9
+ */
10
+ /** Session cache TTL in milliseconds (60 seconds) */
11
+ const SESSION_CACHE_TTL_MS = 6e4;
12
+ /** Clock skew buffer for token expiration checks in milliseconds (10 seconds) */
13
+ const CLOCK_SKEW_BUFFER_MS = 1e4;
14
+ /** Default session expiry duration in milliseconds (1 hour) */
15
+ const DEFAULT_SESSION_EXPIRY_MS = 36e5;
16
+ /** Name of the session verifier parameter in the URL, used for the OAUTH flow */
17
+ const NEON_AUTH_SESSION_VERIFIER_PARAM_NAME = "neon_auth_session_verifier";
18
+ /** Name of the popup marker parameter in the URL, used for OAuth popup flow in iframes */
19
+ const NEON_AUTH_POPUP_PARAM_NAME = "neon_popup";
20
+ /** Name of the original callback URL parameter, used in OAuth popup flow */
21
+ const NEON_AUTH_POPUP_CALLBACK_PARAM_NAME = "neon_popup_callback";
22
+ /** The callback route used for OAuth popup completion (must be in middleware SKIP_ROUTES) */
23
+ const NEON_AUTH_POPUP_CALLBACK_ROUTE = "/auth/callback";
24
+ /** Message type for OAuth popup completion postMessage */
25
+ const OAUTH_POPUP_MESSAGE_TYPE = "neon-auth:oauth-complete";
26
+
27
+ //#endregion
28
+ export { NEON_AUTH_POPUP_PARAM_NAME as a, SESSION_CACHE_TTL_MS as c, NEON_AUTH_POPUP_CALLBACK_ROUTE as i, DEFAULT_SESSION_EXPIRY_MS as n, NEON_AUTH_SESSION_VERIFIER_PARAM_NAME as o, NEON_AUTH_POPUP_CALLBACK_PARAM_NAME as r, OAUTH_POPUP_MESSAGE_TYPE as s, CLOCK_SKEW_BUFFER_MS as t };
@@ -1,3 +1,2 @@
1
- 'use client';
2
1
  import { AcceptInvitationCard, AcceptInvitationCardProps, AccountSettingsCards, AccountView, AccountViewPath, AccountViewPaths, AccountViewProps, AccountsCard, AccountsCardProps, ApiKeysCardProps, AppleIcon, AuthCallback, AuthForm, AuthFormClassNames, AuthFormProps, AuthHooks, AuthLoading, AuthLocalization, AuthMutators, AuthUIContext, AuthUIContextType, AuthUIProvider, AuthUIProviderProps, AuthView, AuthViewClassNames, AuthViewPath, AuthViewPaths, AuthViewProps, ChangeEmailCard, ChangePasswordCard, ChangePasswordCardProps, CreateOrganizationDialog, CreateOrganizationDialogProps, CreateTeamDialog, CreateTeamDialogProps, DeleteAccountCard, DeleteAccountCardProps, DeleteOrganizationCard, DiscordIcon, DropboxIcon, FacebookIcon, ForgotPasswordForm, ForgotPasswordFormProps, GitHubIcon, GitLabIcon, GoogleIcon, HuggingFaceIcon, InputFieldSkeleton, KickIcon, LinearIcon, LinkedInIcon, MagicLinkForm, MagicLinkFormProps, MicrosoftIcon, NeonAuthUIProvider, NeonAuthUIProviderProps, NotionIcon, OrganizationCellView, OrganizationInvitationsCard, OrganizationLogo, OrganizationLogoCard, OrganizationLogoCardProps, OrganizationLogoClassNames, OrganizationLogoProps, OrganizationMembersCard, OrganizationNameCard, OrganizationNameCardProps, OrganizationSettingsCards, OrganizationSettingsCardsProps, OrganizationSlugCard, OrganizationSlugCardProps, OrganizationSwitcher, OrganizationSwitcherClassNames, OrganizationSwitcherProps, OrganizationView, OrganizationViewClassNames, OrganizationViewPageProps, OrganizationViewPath, OrganizationViewPaths, OrganizationViewProps, OrganizationsCard, PasskeysCard, PasskeysCardProps, PasswordInput, Provider, ProvidersCard, ProvidersCardProps, RecoverAccountForm, RecoverAccountFormProps, RedditIcon, RedirectToSignIn, RedirectToSignUp, ResetPasswordForm, ResetPasswordFormProps, RobloxIcon, SecuritySettingsCards, SessionsCard, SessionsCardProps, SettingsCard, SettingsCardClassNames, SettingsCardProps, SettingsCellSkeleton, SignInForm, SignInFormProps, SignOut, SignUpForm, SignUpFormProps, SignedIn, SignedOut, SlackIcon, SpotifyIcon, Team, TeamCell, TeamCellProps, TeamOptions, TeamOptionsContext, TeamsCard, TikTokIcon, TwitchIcon, TwoFactorCard, TwoFactorCardProps, TwoFactorForm, TwoFactorFormProps, UpdateAvatarCard, UpdateAvatarCardProps, UpdateFieldCard, UpdateFieldCardProps, UpdateNameCard, UpdateUsernameCard, UserAvatar, UserAvatarClassNames, UserAvatarProps, UserButton, UserButtonClassNames, UserButtonProps, UserInvitationsCard, UserView, UserViewClassNames, UserViewProps, VKIcon, XIcon, ZoomIcon, accountViewPaths, authLocalization, authViewPaths, getViewByPath, organizationViewPaths, socialProviders, useAuthData, useAuthenticate, useCurrentOrganization, useTheme } from "@neondatabase/auth-ui";
3
2
  export { MagicLinkFormProps as $, SignUpFormProps as $t, ChangePasswordCard as A, UserViewClassNames as An, PasswordInput as At, DropboxIcon as B, socialProviders as Bn, ResetPasswordFormProps as Bt, AuthUIProviderProps as C, UserAvatarClassNames as Cn, OrganizationViewPageProps as Ct, AuthViewPaths as D, UserButtonProps as Dn, OrganizationsCard as Dt, AuthViewPath as E, UserButtonClassNames as En, OrganizationViewProps as Et, CreateTeamDialogProps as F, accountViewPaths as Fn, RecoverAccountFormProps as Ft, GitLabIcon as G, SettingsCard as Gt, ForgotPasswordForm as H, useAuthenticate as Hn, SecuritySettingsCards as Ht, DeleteAccountCard as I, authLocalization as In, RedditIcon as It, InputFieldSkeleton as J, SettingsCellSkeleton as Jt, GoogleIcon as K, SettingsCardClassNames as Kt, DeleteAccountCardProps as L, authViewPaths as Ln, RedirectToSignIn as Lt, CreateOrganizationDialog as M, VKIcon as Mn, ProvidersCard as Mt, CreateOrganizationDialogProps as N, XIcon as Nn, ProvidersCardProps as Nt, AuthViewProps as O, UserInvitationsCard as On, PasskeysCard as Ot, CreateTeamDialog as P, ZoomIcon as Pn, RecoverAccountForm as Pt, MagicLinkForm as Q, SignUpForm as Qt, DeleteOrganizationCard as R, getViewByPath as Rn, RedirectToSignUp as Rt, AuthUIProvider as S, UserAvatar as Sn, OrganizationViewClassNames as St, AuthViewClassNames as T, UserButton as Tn, OrganizationViewPaths as Tt, ForgotPasswordFormProps as U, useCurrentOrganization as Un, SessionsCard as Ut, FacebookIcon as V, useAuthData as Vn, RobloxIcon as Vt, GitHubIcon as W, useTheme as Wn, SessionsCardProps as Wt, LinearIcon as X, SignInFormProps as Xt, KickIcon as Y, SignInForm as Yt, LinkedInIcon as Z, SignOut as Zt, AuthLoading as _, UpdateAvatarCardProps as _n, OrganizationSlugCardProps as _t, AccountViewPath as a, TeamCell as an, OrganizationInvitationsCard as at, AuthUIContext as b, UpdateNameCard as bn, OrganizationSwitcherProps as bt, AccountsCard as c, TeamOptionsContext as cn, OrganizationLogoCardProps as ct, AppleIcon as d, TwitchIcon as dn, OrganizationMembersCard as dt, SignedIn as en, MicrosoftIcon as et, AuthCallback as f, TwoFactorCard as fn, OrganizationNameCard as ft, AuthHooks as g, UpdateAvatarCard as gn, OrganizationSlugCard as gt, AuthFormProps as h, TwoFactorFormProps as hn, OrganizationSettingsCardsProps as ht, AccountView as i, Team as in, OrganizationCellView as it, ChangePasswordCardProps as j, UserViewProps as jn, Provider as jt, ChangeEmailCard as k, UserView as kn, PasskeysCardProps as kt, AccountsCardProps as l, TeamsCard as ln, OrganizationLogoClassNames as lt, AuthFormClassNames as m, TwoFactorForm as mn, OrganizationSettingsCards as mt, AcceptInvitationCardProps as n, SlackIcon as nn, NeonAuthUIProviderProps as nt, AccountViewPaths as o, TeamCellProps as on, OrganizationLogo as ot, AuthForm as p, TwoFactorCardProps as pn, OrganizationNameCardProps as pt, HuggingFaceIcon as q, SettingsCardProps as qt, AccountSettingsCards as r, SpotifyIcon as rn, NotionIcon as rt, AccountViewProps as s, TeamOptions as sn, OrganizationLogoCard as st, AcceptInvitationCard as t, SignedOut as tn, NeonAuthUIProvider as tt, ApiKeysCardProps as u, TikTokIcon as un, OrganizationLogoProps as ut, AuthLocalization as v, UpdateFieldCard as vn, OrganizationSwitcher as vt, AuthView as w, UserAvatarProps as wn, OrganizationViewPath as wt, AuthUIContextType as x, UpdateUsernameCard as xn, OrganizationView as xt, AuthMutators as y, UpdateFieldCardProps as yn, OrganizationSwitcherClassNames as yt, DiscordIcon as z, organizationViewPaths as zn, ResetPasswordForm as zt };
package/dist/index.d.mts CHANGED
@@ -1,23 +1,9 @@
1
- import { r as SupportedBetterAuthClientPlugins } from "./adapter-core-Bw9mn_AS.mjs";
2
- import { r as BetterAuthReactAdapterInstance } from "./better-auth-react-adapter-JoscqoDc.mjs";
3
- import { r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance } from "./supabase-adapter-Clxlqg1x.mjs";
4
- import { createAuthClient as createAuthClient$1 } from "better-auth/react";
5
- import { createAuthClient as createAuthClient$2 } from "better-auth/client";
1
+ import { O as VanillaBetterAuthClient, x as ReactBetterAuthClient } from "./adapter-core-B9uDhoYq.mjs";
2
+ import { n as BetterAuthReactAdapterInstance } from "./better-auth-react-adapter-BO4jLN4H.mjs";
3
+ import { r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance } from "./supabase-adapter-CSDRL1ZU.mjs";
6
4
 
7
5
  //#region src/neon-auth.d.ts
8
6
 
9
- /**
10
- * Type representing the Better Auth React client
11
- */
12
- type ReactBetterAuthClient = ReturnType<typeof createAuthClient$1<{
13
- plugins: SupportedBetterAuthClientPlugins;
14
- }>>;
15
- /**`
16
- * Type representing the Better Auth Vanilla client
17
- */
18
- type VanillaBetterAuthClient = ReturnType<typeof createAuthClient$2<{
19
- plugins: SupportedBetterAuthClientPlugins;
20
- }>>;
21
7
  /**
22
8
  * Union type of all supported auth adapter instances
23
9
  */
@@ -27,7 +13,15 @@ type NeonAuthAdapter = BetterAuthVanillaAdapterInstance | BetterAuthReactAdapter
27
13
  */
28
14
  interface NeonAuthConfig<T extends NeonAuthAdapter> {
29
15
  /** The adapter builder to use. Defaults to BetterAuthVanillaAdapter() if not specified. */
30
- adapter?: (url: string) => T;
16
+ adapter?: (url: string, fetchOptions?: {
17
+ headers?: Record<string, string>;
18
+ }) => T;
19
+ /**
20
+ * When true, automatically uses an anonymous token when no user session exists.
21
+ * This enables RLS-based data access for users with the anonymous role.
22
+ * @default false
23
+ */
24
+ allowAnonymous?: boolean;
31
25
  }
32
26
  /**
33
27
  * Resolves the public API type for an adapter.
@@ -93,7 +87,7 @@ type NeonAuth<T extends NeonAuthAdapter> = {
93
87
  * const session = auth.useSession(); // React hook
94
88
  * ```
95
89
  */
96
- declare function createInternalNeonAuth<T extends NeonAuthAdapter = BetterAuthVanillaAdapterInstance>(url: string, config?: NeonAuthConfig<T>): NeonAuth<T>;
90
+ declare function createInternalNeonAuth<T extends NeonAuthAdapter = BetterAuthVanillaAdapterInstance>(url: string, config?: NeonAuthConfigInternal<T>): NeonAuth<T>;
97
91
  declare function createAuthClient<T extends NeonAuthAdapter = BetterAuthVanillaAdapterInstance>(url: string, config?: NeonAuthConfig<T>): NeonAuthPublicApi<T>;
98
92
  //#endregion
99
93
  export { type NeonAuth, type NeonAuthAdapter, type NeonAuthConfig, type NeonAuthPublicApi, type ReactBetterAuthClient, type VanillaBetterAuthClient, createAuthClient, createInternalNeonAuth };
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
- import { n as createInternalNeonAuth, t as createAuthClient } from "./neon-auth-DdlToh7_.mjs";
1
+ import "./adapter-core-D00qcqMo.mjs";
2
+ import { n as createInternalNeonAuth, t as createAuthClient } from "./neon-auth-DBOB8sXF.mjs";
2
3
 
3
4
  export { createAuthClient, createInternalNeonAuth };
@@ -1,4 +1,4 @@
1
- import { n as BetterAuthVanillaAdapter } from "./supabase-adapter-CAqbpOC7.mjs";
1
+ import { n as BetterAuthVanillaAdapter } from "./supabase-adapter-CIBMebXB.mjs";
2
2
 
3
3
  //#region src/neon-auth.ts
4
4
  /**
@@ -49,13 +49,16 @@ import { n as BetterAuthVanillaAdapter } from "./supabase-adapter-CAqbpOC7.mjs";
49
49
  * ```
50
50
  */
51
51
  function createInternalNeonAuth(url, config) {
52
- const adapter = (config?.adapter ?? BetterAuthVanillaAdapter())(url);
52
+ const adapterBuilder = config?.adapter ?? BetterAuthVanillaAdapter();
53
+ const { fetchOptions } = config ?? {};
54
+ const adapter = adapterBuilder(url, fetchOptions);
55
+ const allowAnonymous = config?.allowAnonymous ?? false;
53
56
  if (!(typeof adapter.initialize === "function")) return {
54
- getJWTToken: adapter.getJWTToken.bind(adapter),
57
+ getJWTToken: () => adapter.getJWTToken(allowAnonymous),
55
58
  adapter: adapter.getBetterAuthInstance()
56
59
  };
57
60
  return {
58
- getJWTToken: adapter.getJWTToken.bind(adapter),
61
+ getJWTToken: () => adapter.getJWTToken(allowAnonymous),
59
62
  adapter
60
63
  };
61
64
  }