@better-auth-ui/core
Version:
Authentication components and data utilities for [Better Auth](https://better-auth.com), available for React and Solid.
148 lines (135 loc) • 5.44 kB
text/typescript
import { authQueryKeys } from "../../lib/auth-query-keys"
/** Query key factory for organization queries, scoped per user. */
export const organizationQueryKeys = {
all: (userId: string | undefined) =>
[...authQueryKeys.user(userId), "organization"] as const,
lists: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "list"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[...organizationQueryKeys.lists(userId), query ?? null] as const,
details: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "detail"] as const,
detail: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[...organizationQueryKeys.details(userId), query ?? null] as const,
fullDetails: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "fullDetails"] as const,
fullDetail: <TQuery = undefined>(
userId: string | undefined,
query?: TQuery
) => [...organizationQueryKeys.fullDetails(userId), query ?? null] as const,
/**
* Prefix for every active-organization cache entry (used for invalidation
* across slug-partitioned variants).
*/
activeOrganizations: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "active"] as const,
/**
* Cache entry for the currently active organization. Holds a {@link
* ListOrganization}-shaped value — distinct from `fullDetail`, which
* carries members and invitations — so `setActive`'s optimistic update
* (which can only produce a list-shaped org) doesn't corrupt the full
* cache.
*/
activeOrganization: <TQuery = undefined>(
userId: string | undefined,
query?: TQuery
) =>
[
...organizationQueryKeys.activeOrganizations(userId),
query ?? null
] as const,
members: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "members"] as const,
lists: (userId: string | undefined) =>
[...organizationQueryKeys.members.all(userId), "list"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[...organizationQueryKeys.members.lists(userId), query ?? null] as const,
/** The signed-in user's own role within an organization. */
activeRole: <TQuery = undefined>(
userId: string | undefined,
query?: TQuery
) =>
[
...organizationQueryKeys.members.all(userId),
"activeRole",
query ?? null
] as const
},
invitations: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "invitations"] as const,
details: (userId: string | undefined) =>
[...organizationQueryKeys.invitations.all(userId), "detail"] as const,
detail: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[
...organizationQueryKeys.invitations.details(userId),
query ?? null
] as const,
lists: (userId: string | undefined) =>
[...organizationQueryKeys.invitations.all(userId), "list"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[
...organizationQueryKeys.invitations.lists(userId),
query ?? null
] as const
},
userInvitations: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "userInvitations"] as const,
lists: (userId: string | undefined) =>
[...organizationQueryKeys.userInvitations.all(userId), "list"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[
...organizationQueryKeys.userInvitations.lists(userId),
query ?? null
] as const
},
permissions: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "permissions"] as const,
has: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[
...organizationQueryKeys.permissions.all(userId),
"has",
query ?? null
] as const
},
roles: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "roles"] as const,
lists: (userId: string | undefined) =>
[...organizationQueryKeys.roles.all(userId), "list"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[...organizationQueryKeys.roles.lists(userId), query ?? null] as const,
details: (userId: string | undefined) =>
[...organizationQueryKeys.roles.all(userId), "detail"] as const,
detail: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[...organizationQueryKeys.roles.details(userId), query ?? null] as const
},
teams: {
all: (userId: string | undefined) =>
[...organizationQueryKeys.all(userId), "teams"] as const,
list: <TQuery = undefined>(userId: string | undefined, query?: TQuery) =>
[
...organizationQueryKeys.teams.all(userId),
"list",
query ?? null
] as const,
userList: <TQuery = undefined>(
userId: string | undefined,
query?: TQuery
) =>
[
...organizationQueryKeys.teams.all(userId),
"user-list",
query ?? null
] as const,
members: (userId: string | undefined, teamId?: string) =>
[
...organizationQueryKeys.teams.all(userId),
"members",
teamId ?? null
] as const
}
} as const