Advertisement

← vibesdk

src/lib/query-keys.ts

3.2 KB Download file
export type PaginatedAppsListFilters = {
	sort: string;
	period: string;
	framework: string;
	visibility: string;
	search: string;
	limit: number;
};

export const queryKeys = {
	auth: {
		all: ['auth'] as const,
		session: () => [...queryKeys.auth.all, 'session'] as const,
		providers: () => [...queryKeys.auth.all, 'providers'] as const,
	},
	/** Unauthenticated / list-scoped app feeds (public + paginated user lists). */
	apps: {
		all: ['apps'] as const,
		publicAll: () => [...queryKeys.apps.all, 'public'] as const,
		public: (filters: PaginatedAppsListFilters) =>
			[...queryKeys.apps.publicAll(), filters] as const,
		userAll: () => [...queryKeys.apps.all, 'user'] as const,
		user: (filters: PaginatedAppsListFilters) =>
			[...queryKeys.apps.userAll(), filters] as const,
	},
	account: {
		all: ['account'] as const,
		user: {
			all: () => [...queryKeys.account.all, 'user'] as const,
			statsAll: () => [...queryKeys.account.user.all(), 'stats'] as const,
			stats: (userId?: string | null) =>
				[
					...queryKeys.account.user.statsAll(),
					userId ?? 'anonymous',
				] as const,
			activityAll: () =>
				[...queryKeys.account.user.all(), 'activity'] as const,
			activity: (userId?: string | null) =>
				[
					...queryKeys.account.user.activityAll(),
					userId ?? 'anonymous',
				] as const,
		},
		settings: {
			all: () => [...queryKeys.account.all, 'settings'] as const,
			activeSessionsAll: () =>
				[...queryKeys.account.settings.all(), 'active-sessions'] as const,
			activeSessions: (userId?: string | null) =>
				[
					...queryKeys.account.settings.activeSessionsAll(),
					userId ?? 'anonymous',
				] as const,
			apiKeysAll: () =>
				[...queryKeys.account.settings.all(), 'api-keys'] as const,
			apiKeys: (userId?: string | null) =>
				[
					...queryKeys.account.settings.apiKeysAll(),
					userId ?? 'anonymous',
				] as const,
		},
		apps: {
			all: () => [...queryKeys.account.all, 'apps'] as const,
			userAll: () => [...queryKeys.account.apps.all(), 'user'] as const,
			user: (userId?: string | null) =>
				[
					...queryKeys.account.apps.userAll(),
					userId ?? 'anonymous',
				] as const,
			favoritesAll: () =>
				[...queryKeys.account.apps.all(), 'favorites'] as const,
			favorites: (userId?: string | null) =>
				[
					...queryKeys.account.apps.favoritesAll(),
					userId ?? 'anonymous',
				] as const,
			detailAll: (appId: string) =>
				[...queryKeys.account.apps.all(), 'detail', appId] as const,
			detail: (appId: string, userId?: string | null) =>
				[
					...queryKeys.account.apps.detailAll(appId),
					userId ?? 'anonymous',
				] as const,
			previewTokenAll: (appId: string) =>
				[...queryKeys.account.apps.all(), 'preview-token', appId] as const,
			previewToken: (appId: string, userId?: string | null) =>
				[
					...queryKeys.account.apps.previewTokenAll(appId),
					userId ?? 'anonymous',
				] as const,
		},
		limits: {
			all: () => [...queryKeys.account.all, 'limits'] as const,
			usageAll: () =>
				[...queryKeys.account.limits.all(), 'usage'] as const,
			usage: (userId?: string | null) =>
				[
					...queryKeys.account.limits.usageAll(),
					userId ?? 'anonymous',
				] as const,
		},
	},
};