@archlast/client 0.0.1

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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -0
  3. package/dist/admin/index.cjs +93 -0
  4. package/dist/admin/index.cjs.map +1 -0
  5. package/dist/admin/index.d.cts +51 -0
  6. package/dist/admin/index.d.ts +51 -0
  7. package/dist/admin/index.js +59 -0
  8. package/dist/admin/index.js.map +1 -0
  9. package/dist/auth/index.cjs +174 -0
  10. package/dist/auth/index.cjs.map +1 -0
  11. package/dist/auth/index.d.cts +128 -0
  12. package/dist/auth/index.d.ts +128 -0
  13. package/dist/auth/index.js +141 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/client.cjs +677 -0
  16. package/dist/client.cjs.map +1 -0
  17. package/dist/client.d.cts +84 -0
  18. package/dist/client.d.ts +84 -0
  19. package/dist/client.js +642 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/function-reference.cjs +50 -0
  22. package/dist/function-reference.cjs.map +1 -0
  23. package/dist/function-reference.d.cts +22 -0
  24. package/dist/function-reference.d.ts +22 -0
  25. package/dist/function-reference.js +24 -0
  26. package/dist/function-reference.js.map +1 -0
  27. package/dist/index.cjs +1163 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +12 -0
  30. package/dist/index.d.ts +12 -0
  31. package/dist/index.js +1111 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/react.cjs +455 -0
  34. package/dist/react.cjs.map +1 -0
  35. package/dist/react.d.cts +137 -0
  36. package/dist/react.d.ts +137 -0
  37. package/dist/react.js +410 -0
  38. package/dist/react.js.map +1 -0
  39. package/dist/storage/index.cjs +150 -0
  40. package/dist/storage/index.cjs.map +1 -0
  41. package/dist/storage/index.d.cts +59 -0
  42. package/dist/storage/index.d.ts +59 -0
  43. package/dist/storage/index.js +117 -0
  44. package/dist/storage/index.js.map +1 -0
  45. package/dist/trpc.cjs +66 -0
  46. package/dist/trpc.cjs.map +1 -0
  47. package/dist/trpc.d.cts +59 -0
  48. package/dist/trpc.d.ts +59 -0
  49. package/dist/trpc.js +41 -0
  50. package/dist/trpc.js.map +1 -0
  51. package/package.json +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, createContext, useContext, useCallback, type ReactNode } from \"react\";\nimport { ArchlastClient } from \"./client\";\nimport { FunctionReference } from \"./function-reference\";\nimport {\n useQuery as useTanStackQuery,\n useMutation as useTanStackMutation,\n useQueryClient,\n QueryClient,\n QueryClientProvider,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport axios from \"axios\";\n\nimport {\n type AuthState,\n type SignInInput,\n type SignUpInput,\n} from \"./auth/index\";\n\n// Context for the client\nexport const ArchlastContext = createContext<ArchlastClient | null>(null);\n\ntype UploadResult = {\n id: string;\n url?: string;\n};\n\nexport const useArchlast = () => {\n const client = useContext(ArchlastContext);\n if (!client) throw new Error(\"ArchlastProvider not found\");\n return client;\n};\n\ninterface ArchlastProviderProps {\n client: ArchlastClient;\n children: ReactNode;\n}\n\nexport function ArchlastProvider({ client, children }: ArchlastProviderProps) {\n const [queryClient] = useState(() => new QueryClient());\n\n return (\n <ArchlastContext.Provider value={client}>\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n </ArchlastContext.Provider>\n );\n}\n\nexport function useQuery<Name extends string, Args, Return>(\n queryRef: FunctionReference<\"query\", Name, Args, Return>,\n args: Args,\n options?: Omit<UseQueryOptions<Return, Error, Return, [string, Args]>, \"queryKey\" | \"queryFn\">\n): Return | undefined {\n const client = useArchlast();\n const queryClient = useQueryClient();\n const queryKey = [queryRef._name, args] as [string, Args];\n\n useEffect(() => {\n const unsubscribe = client.subscribe(queryRef._name, args, (data) => {\n queryClient.setQueryData(queryKey, data);\n });\n\n return () => unsubscribe();\n }, [client, queryRef._name, JSON.stringify(args), queryClient]);\n\n const query = useTanStackQuery({\n queryKey,\n queryFn: async () => {\n const result = await client.fetch(queryRef._name, args);\n // Convert undefined to null to satisfy React Query\n return result === undefined ? (null as Return) : result;\n },\n // staleTime: 0,\n // gcTime: 1000 * 60 * 5,\n ...options,\n });\n\n return query.data;\n}\n\nexport function useMutation<Name extends string, Args, Return>(\n mutationRef: FunctionReference<\"mutation\", Name, Args, Return>\n) {\n const client = useArchlast();\n const queryClient = useQueryClient();\n\n const mutation = useTanStackMutation({\n mutationFn: async (args: Args) => {\n return client.mutate(mutationRef._name, args);\n },\n onSuccess: () => {\n queryClient.invalidateQueries();\n },\n });\n\n return mutation.mutateAsync;\n}\n\n// Pagination types\nexport interface PaginatedResponse<T> {\n items: T[];\n continueCursor: string | null;\n isDone: boolean;\n page?: number;\n pageSize?: number;\n total?: number;\n}\n\n/**\n * Upload hook that streams a Blob/Uint8Array/ReadableStream to the backend.\n * It returns the content-addressed storage id and an optional pre-signed download URL.\n */\nexport function useUpload(options?: { baseUrl?: string }) {\n const client = useArchlast();\n const [isUploading, setUploading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [result, setResult] = useState<UploadResult | null>(null);\n\n const upload = useCallback(\n async (\n file: Blob | Uint8Array | ReadableStream | File,\n contentType?: string\n ): Promise<UploadResult> => {\n setUploading(true);\n setError(null);\n setResult(null);\n\n try {\n const result = await client.storage.upload(file, contentType);\n setResult({ id: result.id, url: result.url });\n return { id: result.id, url: result.url };\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setUploading(false);\n }\n },\n [client]\n );\n\n const presign = useCallback(\n async (id: string, expiresInSeconds: number = 300): Promise<string> => {\n // Call the server's presign endpoint to get a token-signed public URL\n const { url: relativeUrl } = await client.storage.presign(id, expiresInSeconds);\n // Make it absolute based on baseUrl\n const absoluteUrl = relativeUrl.startsWith(\"http\")\n ? relativeUrl\n : `${options?.baseUrl ?? \"\"}${relativeUrl.startsWith(\"/\") ? \"\" : \"/\"}${relativeUrl}`;\n setResult((prev) => (prev ? { ...prev, url: absoluteUrl } : { id, url: absoluteUrl }));\n return absoluteUrl;\n },\n [client, options?.baseUrl]\n );\n\n return { upload, presign, isUploading, error, result };\n}\n\nconst DEFAULT_AUTH_STATE: AuthState = {\n isAuthenticated: false,\n user: null,\n session: null,\n};\n\nexport interface UseAuthResult extends AuthState {\n isLoading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n signIn: (input: SignInInput) => Promise<void>;\n signUp: (input: SignUpInput) => Promise<void>;\n signOut: () => Promise<void>;\n}\n\nexport function useAuth(options?: { enabled?: boolean; pollIntervalMs?: number }): UseAuthResult {\n const client = useArchlast();\n const queryClient = useQueryClient();\n const enabled = options?.enabled ?? true;\n const pollInterval = options?.pollIntervalMs ?? 30000; // Check every 30s by default\n\n // Cache auth state\n const {\n data: authState,\n isLoading,\n error,\n refetch,\n } = useTanStackQuery({\n queryKey: [\"auth\", \"state\"],\n queryFn: async () => {\n try {\n return await client.auth.getState();\n } catch (err: any) {\n // Determine if this is a 401. If so, return default unauthenticated state.\n // Axios throws specific error structures.\n if (axios.isAxiosError(err) && err.response?.status === 401) {\n return DEFAULT_AUTH_STATE;\n }\n throw err;\n }\n },\n retry: false, // Don't retry auth checks, fail fast\n staleTime: 0, // Auth state is volatile, consider it always stale\n refetchInterval: enabled ? pollInterval : false,\n refetchOnWindowFocus: true, // Security: re-check when user tabbs back\n refetchOnReconnect: true,\n enabled,\n initialData: DEFAULT_AUTH_STATE, // Optimistic default\n });\n\n // Helper to invalidate auth state\n const invalidateAuth = useCallback(() => {\n return queryClient.invalidateQueries({ queryKey: [\"auth\", \"state\"] });\n }, [queryClient]);\n\n // Mutation wrappers\n const signIn = useCallback(\n async (input: SignInInput) => {\n await client.auth.signIn(input);\n await invalidateAuth();\n },\n [client, invalidateAuth]\n );\n\n const signUp = useCallback(\n async (input: SignUpInput) => {\n await client.auth.signUp(input);\n await invalidateAuth();\n },\n [client, invalidateAuth]\n );\n\n const signOut = useCallback(async () => {\n try {\n await client.auth.signOut();\n } finally {\n // Always clear state even if server errors\n queryClient.setQueryData([\"auth\", \"state\"], DEFAULT_AUTH_STATE);\n await invalidateAuth();\n }\n }, [client, queryClient, invalidateAuth]);\n\n // Derived state\n const currentState = authState ?? DEFAULT_AUTH_STATE;\n\n return {\n ...currentState,\n // Ensure booleans\n isAuthenticated: !!currentState.isAuthenticated,\n isLoading,\n error: error as Error | null,\n refresh: async () => {\n await refetch();\n },\n signIn,\n signUp,\n signOut,\n };\n}\n\nexport function useRequestPasswordReset() {\n const client = useArchlast();\n return useTanStackMutation({\n mutationFn: async (email: string) => {\n return client.auth.requestPasswordReset(email);\n },\n });\n}\n\nexport function useResetPassword() {\n const client = useArchlast();\n return useTanStackMutation({\n mutationFn: async ({ token, password }: { token: string; password: string }) => {\n return client.auth.resetPassword(token, password);\n },\n });\n}\n\n/**\n * Download hook to presign and download a storage object.\n */\nexport function useDownload(options?: { baseUrl?: string }) {\n const client = useArchlast();\n const [isDownloading, setDownloading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const presign = useCallback(\n async (id: string, expiresInSeconds: number = 300): Promise<string> => {\n // Get presigned URL which points to /_storage/download?token=...\n const { url: relativeUrl } = await client.storage.presign(id, expiresInSeconds);\n\n // Make it absolute based on baseUrl if needed, or if it's already absolute leave it.\n // The server returns `/_storage/download?token=...`\n const absoluteUrl = relativeUrl.startsWith(\"http\")\n ? relativeUrl\n : `${options?.baseUrl ?? client.baseUrl ?? \"\"}${relativeUrl.startsWith(\"/\") ? \"\" : \"/\"}${relativeUrl}`;\n\n return absoluteUrl;\n },\n [client, options?.baseUrl]\n );\n\n const download = useCallback(\n async (\n id: string,\n expiresInSeconds: number = 300\n ): Promise<{ blob: Blob; url: string }> => {\n setDownloading(true);\n setError(null);\n try {\n const signedUrl = await presign(id, expiresInSeconds);\n // The signed URL is public (token-authed), so we don't strictly need withCredentials\n // But sending them doesn't hurt for same-origin.\n // However, for pure public access simulation, we might shouldn't.\n // But since we are likely same-origin or allowed CORS, standard GET is fine.\n const response = await axios.get(signedUrl, {\n responseType: \"blob\",\n });\n const blob = response.data;\n const objectUrl = URL.createObjectURL(blob);\n return { blob, url: objectUrl };\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setDownloading(false);\n }\n },\n [presign]\n );\n\n return { getUrl: presign, download, isDownloading, error };\n}\n\n/**\n * Delete hook to remove a storage object by id.\n */\nexport function useStorageDelete(options?: { baseUrl?: string }) {\n const client = useArchlast();\n const [isDeleting, setDeleting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const deleteFile = useCallback(\n async (id: string): Promise<void> => {\n setDeleting(true);\n setError(null);\n try {\n const deleteUrl = `${options?.baseUrl ?? \"\"}/_archlast/storage/files/${encodeURIComponent(id)}`;\n await axios.delete(deleteUrl, {\n withCredentials: true,\n });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setError(e);\n throw e;\n } finally {\n setDeleting(false);\n }\n },\n [options?.baseUrl]\n );\n\n return { deleteFile, isDeleting, error };\n}\n\nexport interface ClientPaginationResult<T> {\n items: T[];\n page: number;\n pageSize: number;\n total: number;\n totalPages: number;\n hasMore: boolean;\n hasPrevious: boolean;\n nextPage: () => void;\n previousPage: () => void;\n setPage: (page: number) => void;\n setPageSize: (size: number) => void;\n}\n\nexport interface ServerPaginationResult<T> {\n items: T[];\n cursor: string | null;\n isDone: boolean;\n page?: number;\n pageSize?: number;\n total?: number;\n hasMore: boolean;\n loadMore: () => void;\n refresh: () => void;\n isLoading: boolean;\n}\n\n/**\n * Client-side pagination hook - paginates data in memory\n */\nexport function useClientPagination<T>(\n data: T[] | undefined,\n initialPageSize = 10\n): ClientPaginationResult<T> {\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n const items = data || [];\n const total = items.length;\n const totalPages = Math.ceil(total / pageSize);\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = items.slice(startIndex, endIndex);\n\n const hasMore = page < totalPages;\n const hasPrevious = page > 1;\n\n const nextPage = () => {\n if (hasMore) setPage((p) => p + 1);\n };\n\n const previousPage = () => {\n if (hasPrevious) setPage((p) => p - 1);\n };\n\n const handleSetPage = (newPage: number) => {\n const validPage = Math.max(1, Math.min(newPage, totalPages || 1));\n setPage(validPage);\n };\n\n const handleSetPageSize = (size: number) => {\n setPageSize(size);\n setPage(1); // Reset to first page when changing page size\n };\n\n // Reset to first page if data changes\n useEffect(() => {\n setPage(1);\n }, [data?.length]);\n\n return {\n items: paginatedItems,\n page,\n pageSize,\n total,\n totalPages,\n hasMore,\n hasPrevious,\n nextPage,\n previousPage,\n setPage: handleSetPage,\n setPageSize: handleSetPageSize,\n };\n}\n\n/**\n * Server-side pagination hook - for queries that return PaginatedResponse\n */\nexport function usePagination<Name extends string, Args extends Record<string, any>, T>(\n queryRef: FunctionReference<\"query\", Name, Args, PaginatedResponse<T>>,\n baseArgs: Omit<Args, \"cursor\" | \"limit\">,\n options?: {\n limit?: number;\n enabled?: boolean;\n }\n): ServerPaginationResult<T> {\n const client = useArchlast();\n const queryClient = useQueryClient();\n const [cursor, setCursor] = useState<string | null>(null);\n const [allItems, setAllItems] = useState<T[]>([]);\n const limit = options?.limit || 20;\n\n const args = { ...baseArgs, cursor, limit } as unknown as Args;\n const queryKey = [queryRef._name, args] as [string, Args];\n\n useEffect(() => {\n const unsubscribe = client.subscribe(queryRef._name, args, (data) => {\n queryClient.setQueryData(queryKey, data);\n });\n\n return () => unsubscribe();\n }, [client, queryRef._name, JSON.stringify(args), queryClient]);\n\n const query = useTanStackQuery({\n queryKey,\n queryFn: async () => {\n const result = await client.fetch(queryRef._name, args);\n return result === undefined\n ? ({ items: [], continueCursor: null, isDone: true } as PaginatedResponse<T>)\n : result;\n },\n // staleTime: 0,\n // gcTime: 1000 * 60 * 5,\n enabled: options?.enabled !== false,\n });\n\n const data = query.data;\n\n // Update accumulated items when new data arrives\n useEffect(() => {\n if (data?.items) {\n if (cursor === null) {\n // First page - replace all items\n setAllItems(data.items);\n } else {\n // Subsequent pages - append items\n setAllItems((prev) => [...prev, ...data.items]);\n }\n }\n }, [data, cursor]);\n\n const loadMore = () => {\n if (data && !data.isDone && data.continueCursor) {\n setCursor(data.continueCursor);\n }\n };\n\n const refresh = () => {\n setCursor(null);\n setAllItems([]);\n queryClient.invalidateQueries({ queryKey: [queryRef._name] });\n };\n\n return {\n items: allItems,\n cursor: data?.continueCursor ?? null,\n isDone: data?.isDone ?? false,\n page: data?.page,\n pageSize: data?.pageSize,\n total: data?.total,\n hasMore: !data?.isDone && !!data?.continueCursor,\n loadMore,\n refresh,\n isLoading: query.isLoading,\n };\n}\n\n// ----------------------------------------------------------------------------\n// New Storage Hooks (using client.storage)\n// ----------------------------------------------------------------------------\n\nexport function useStorageList(limit = 20, offset = 0) {\n const client = useArchlast();\n return useTanStackQuery({\n queryKey: [\"storage\", \"list\", limit, offset],\n queryFn: () => client.storage.list(limit, offset),\n });\n}\n\nexport function useStorageMetadata(id: string) {\n const client = useArchlast();\n return useTanStackQuery({\n queryKey: [\"storage\", \"file\", id],\n queryFn: () => client.storage.getMetadata(id),\n enabled: !!id,\n });\n}\n\nexport function useStorageUpload() {\n const client = useArchlast();\n const queryClient = useQueryClient();\n\n return useTanStackMutation({\n mutationFn: (file: File) => client.storage.upload(file),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storage\", \"list\"] });\n },\n });\n}\n\nexport function useStorageDeleteFile() {\n const client = useArchlast();\n const queryClient = useQueryClient();\n\n return useTanStackMutation({\n mutationFn: (id: string) => client.storage.delete(id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storage\", \"list\"] });\n },\n });\n}\n\nexport function useStorageHelpers() {\n const client = useArchlast();\n return {\n getPublicUrl: (id: string) => client.storage.getPublicUrl(id),\n };\n}\n"],"mappings":"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","names":["useTanStackQuery","useTanStackMutation","result","axios","data"]}
@@ -0,0 +1,137 @@
1
+ import { StorageListResponse, StorageFile } from './storage/index.cjs';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { UseQueryOptions } from '@tanstack/react-query';
4
+ import * as react_jsx_runtime from 'react/jsx-runtime';
5
+ import * as react from 'react';
6
+ import { ReactNode } from 'react';
7
+ import { ArchlastClient } from './client.cjs';
8
+ import { FunctionReference } from './function-reference.cjs';
9
+ import { AuthState, SignInInput, SignUpInput } from './auth/index.cjs';
10
+ import './admin/index.cjs';
11
+
12
+ declare const ArchlastContext: react.Context<ArchlastClient | null>;
13
+ type UploadResult = {
14
+ id: string;
15
+ url?: string;
16
+ };
17
+ declare const useArchlast: () => ArchlastClient;
18
+ interface ArchlastProviderProps {
19
+ client: ArchlastClient;
20
+ children: ReactNode;
21
+ }
22
+ declare function ArchlastProvider({ client, children }: ArchlastProviderProps): react_jsx_runtime.JSX.Element;
23
+ declare function useQuery<Name extends string, Args, Return>(queryRef: FunctionReference<"query", Name, Args, Return>, args: Args, options?: Omit<UseQueryOptions<Return, Error, Return, [string, Args]>, "queryKey" | "queryFn">): Return | undefined;
24
+ declare function useMutation<Name extends string, Args, Return>(mutationRef: FunctionReference<"mutation", Name, Args, Return>): _tanstack_react_query.UseMutateAsyncFunction<any, Error, Args, unknown>;
25
+ interface PaginatedResponse<T> {
26
+ items: T[];
27
+ continueCursor: string | null;
28
+ isDone: boolean;
29
+ page?: number;
30
+ pageSize?: number;
31
+ total?: number;
32
+ }
33
+ /**
34
+ * Upload hook that streams a Blob/Uint8Array/ReadableStream to the backend.
35
+ * It returns the content-addressed storage id and an optional pre-signed download URL.
36
+ */
37
+ declare function useUpload(options?: {
38
+ baseUrl?: string;
39
+ }): {
40
+ upload: (file: Blob | Uint8Array | ReadableStream | File, contentType?: string) => Promise<UploadResult>;
41
+ presign: (id: string, expiresInSeconds?: number) => Promise<string>;
42
+ isUploading: boolean;
43
+ error: Error | null;
44
+ result: UploadResult | null;
45
+ };
46
+ interface UseAuthResult extends AuthState {
47
+ isLoading: boolean;
48
+ error: Error | null;
49
+ refresh: () => Promise<void>;
50
+ signIn: (input: SignInInput) => Promise<void>;
51
+ signUp: (input: SignUpInput) => Promise<void>;
52
+ signOut: () => Promise<void>;
53
+ }
54
+ declare function useAuth(options?: {
55
+ enabled?: boolean;
56
+ pollIntervalMs?: number;
57
+ }): UseAuthResult;
58
+ declare function useRequestPasswordReset(): _tanstack_react_query.UseMutationResult<{
59
+ success: boolean;
60
+ }, Error, string, unknown>;
61
+ declare function useResetPassword(): _tanstack_react_query.UseMutationResult<{
62
+ success: boolean;
63
+ }, Error, {
64
+ token: string;
65
+ password: string;
66
+ }, unknown>;
67
+ /**
68
+ * Download hook to presign and download a storage object.
69
+ */
70
+ declare function useDownload(options?: {
71
+ baseUrl?: string;
72
+ }): {
73
+ getUrl: (id: string, expiresInSeconds?: number) => Promise<string>;
74
+ download: (id: string, expiresInSeconds?: number) => Promise<{
75
+ blob: Blob;
76
+ url: string;
77
+ }>;
78
+ isDownloading: boolean;
79
+ error: Error | null;
80
+ };
81
+ /**
82
+ * Delete hook to remove a storage object by id.
83
+ */
84
+ declare function useStorageDelete(options?: {
85
+ baseUrl?: string;
86
+ }): {
87
+ deleteFile: (id: string) => Promise<void>;
88
+ isDeleting: boolean;
89
+ error: Error | null;
90
+ };
91
+ interface ClientPaginationResult<T> {
92
+ items: T[];
93
+ page: number;
94
+ pageSize: number;
95
+ total: number;
96
+ totalPages: number;
97
+ hasMore: boolean;
98
+ hasPrevious: boolean;
99
+ nextPage: () => void;
100
+ previousPage: () => void;
101
+ setPage: (page: number) => void;
102
+ setPageSize: (size: number) => void;
103
+ }
104
+ interface ServerPaginationResult<T> {
105
+ items: T[];
106
+ cursor: string | null;
107
+ isDone: boolean;
108
+ page?: number;
109
+ pageSize?: number;
110
+ total?: number;
111
+ hasMore: boolean;
112
+ loadMore: () => void;
113
+ refresh: () => void;
114
+ isLoading: boolean;
115
+ }
116
+ /**
117
+ * Client-side pagination hook - paginates data in memory
118
+ */
119
+ declare function useClientPagination<T>(data: T[] | undefined, initialPageSize?: number): ClientPaginationResult<T>;
120
+ /**
121
+ * Server-side pagination hook - for queries that return PaginatedResponse
122
+ */
123
+ declare function usePagination<Name extends string, Args extends Record<string, any>, T>(queryRef: FunctionReference<"query", Name, Args, PaginatedResponse<T>>, baseArgs: Omit<Args, "cursor" | "limit">, options?: {
124
+ limit?: number;
125
+ enabled?: boolean;
126
+ }): ServerPaginationResult<T>;
127
+ declare function useStorageList(limit?: number, offset?: number): _tanstack_react_query.UseQueryResult<StorageListResponse, Error>;
128
+ declare function useStorageMetadata(id: string): _tanstack_react_query.UseQueryResult<StorageFile, Error>;
129
+ declare function useStorageUpload(): _tanstack_react_query.UseMutationResult<StorageFile, Error, File, unknown>;
130
+ declare function useStorageDeleteFile(): _tanstack_react_query.UseMutationResult<{
131
+ success: boolean;
132
+ }, Error, string, unknown>;
133
+ declare function useStorageHelpers(): {
134
+ getPublicUrl: (id: string) => string;
135
+ };
136
+
137
+ export { ArchlastContext, ArchlastProvider, type ClientPaginationResult, type PaginatedResponse, type ServerPaginationResult, type UseAuthResult, useArchlast, useAuth, useClientPagination, useDownload, useMutation, usePagination, useQuery, useRequestPasswordReset, useResetPassword, useStorageDelete, useStorageDeleteFile, useStorageHelpers, useStorageList, useStorageMetadata, useStorageUpload, useUpload };
@@ -0,0 +1,137 @@
1
+ import { StorageListResponse, StorageFile } from './storage/index.js';
2
+ import * as _tanstack_react_query from '@tanstack/react-query';
3
+ import { UseQueryOptions } from '@tanstack/react-query';
4
+ import * as react_jsx_runtime from 'react/jsx-runtime';
5
+ import * as react from 'react';
6
+ import { ReactNode } from 'react';
7
+ import { ArchlastClient } from './client.js';
8
+ import { FunctionReference } from './function-reference.js';
9
+ import { AuthState, SignInInput, SignUpInput } from './auth/index.js';
10
+ import './admin/index.js';
11
+
12
+ declare const ArchlastContext: react.Context<ArchlastClient | null>;
13
+ type UploadResult = {
14
+ id: string;
15
+ url?: string;
16
+ };
17
+ declare const useArchlast: () => ArchlastClient;
18
+ interface ArchlastProviderProps {
19
+ client: ArchlastClient;
20
+ children: ReactNode;
21
+ }
22
+ declare function ArchlastProvider({ client, children }: ArchlastProviderProps): react_jsx_runtime.JSX.Element;
23
+ declare function useQuery<Name extends string, Args, Return>(queryRef: FunctionReference<"query", Name, Args, Return>, args: Args, options?: Omit<UseQueryOptions<Return, Error, Return, [string, Args]>, "queryKey" | "queryFn">): Return | undefined;
24
+ declare function useMutation<Name extends string, Args, Return>(mutationRef: FunctionReference<"mutation", Name, Args, Return>): _tanstack_react_query.UseMutateAsyncFunction<any, Error, Args, unknown>;
25
+ interface PaginatedResponse<T> {
26
+ items: T[];
27
+ continueCursor: string | null;
28
+ isDone: boolean;
29
+ page?: number;
30
+ pageSize?: number;
31
+ total?: number;
32
+ }
33
+ /**
34
+ * Upload hook that streams a Blob/Uint8Array/ReadableStream to the backend.
35
+ * It returns the content-addressed storage id and an optional pre-signed download URL.
36
+ */
37
+ declare function useUpload(options?: {
38
+ baseUrl?: string;
39
+ }): {
40
+ upload: (file: Blob | Uint8Array | ReadableStream | File, contentType?: string) => Promise<UploadResult>;
41
+ presign: (id: string, expiresInSeconds?: number) => Promise<string>;
42
+ isUploading: boolean;
43
+ error: Error | null;
44
+ result: UploadResult | null;
45
+ };
46
+ interface UseAuthResult extends AuthState {
47
+ isLoading: boolean;
48
+ error: Error | null;
49
+ refresh: () => Promise<void>;
50
+ signIn: (input: SignInInput) => Promise<void>;
51
+ signUp: (input: SignUpInput) => Promise<void>;
52
+ signOut: () => Promise<void>;
53
+ }
54
+ declare function useAuth(options?: {
55
+ enabled?: boolean;
56
+ pollIntervalMs?: number;
57
+ }): UseAuthResult;
58
+ declare function useRequestPasswordReset(): _tanstack_react_query.UseMutationResult<{
59
+ success: boolean;
60
+ }, Error, string, unknown>;
61
+ declare function useResetPassword(): _tanstack_react_query.UseMutationResult<{
62
+ success: boolean;
63
+ }, Error, {
64
+ token: string;
65
+ password: string;
66
+ }, unknown>;
67
+ /**
68
+ * Download hook to presign and download a storage object.
69
+ */
70
+ declare function useDownload(options?: {
71
+ baseUrl?: string;
72
+ }): {
73
+ getUrl: (id: string, expiresInSeconds?: number) => Promise<string>;
74
+ download: (id: string, expiresInSeconds?: number) => Promise<{
75
+ blob: Blob;
76
+ url: string;
77
+ }>;
78
+ isDownloading: boolean;
79
+ error: Error | null;
80
+ };
81
+ /**
82
+ * Delete hook to remove a storage object by id.
83
+ */
84
+ declare function useStorageDelete(options?: {
85
+ baseUrl?: string;
86
+ }): {
87
+ deleteFile: (id: string) => Promise<void>;
88
+ isDeleting: boolean;
89
+ error: Error | null;
90
+ };
91
+ interface ClientPaginationResult<T> {
92
+ items: T[];
93
+ page: number;
94
+ pageSize: number;
95
+ total: number;
96
+ totalPages: number;
97
+ hasMore: boolean;
98
+ hasPrevious: boolean;
99
+ nextPage: () => void;
100
+ previousPage: () => void;
101
+ setPage: (page: number) => void;
102
+ setPageSize: (size: number) => void;
103
+ }
104
+ interface ServerPaginationResult<T> {
105
+ items: T[];
106
+ cursor: string | null;
107
+ isDone: boolean;
108
+ page?: number;
109
+ pageSize?: number;
110
+ total?: number;
111
+ hasMore: boolean;
112
+ loadMore: () => void;
113
+ refresh: () => void;
114
+ isLoading: boolean;
115
+ }
116
+ /**
117
+ * Client-side pagination hook - paginates data in memory
118
+ */
119
+ declare function useClientPagination<T>(data: T[] | undefined, initialPageSize?: number): ClientPaginationResult<T>;
120
+ /**
121
+ * Server-side pagination hook - for queries that return PaginatedResponse
122
+ */
123
+ declare function usePagination<Name extends string, Args extends Record<string, any>, T>(queryRef: FunctionReference<"query", Name, Args, PaginatedResponse<T>>, baseArgs: Omit<Args, "cursor" | "limit">, options?: {
124
+ limit?: number;
125
+ enabled?: boolean;
126
+ }): ServerPaginationResult<T>;
127
+ declare function useStorageList(limit?: number, offset?: number): _tanstack_react_query.UseQueryResult<StorageListResponse, Error>;
128
+ declare function useStorageMetadata(id: string): _tanstack_react_query.UseQueryResult<StorageFile, Error>;
129
+ declare function useStorageUpload(): _tanstack_react_query.UseMutationResult<StorageFile, Error, File, unknown>;
130
+ declare function useStorageDeleteFile(): _tanstack_react_query.UseMutationResult<{
131
+ success: boolean;
132
+ }, Error, string, unknown>;
133
+ declare function useStorageHelpers(): {
134
+ getPublicUrl: (id: string) => string;
135
+ };
136
+
137
+ export { ArchlastContext, ArchlastProvider, type ClientPaginationResult, type PaginatedResponse, type ServerPaginationResult, type UseAuthResult, useArchlast, useAuth, useClientPagination, useDownload, useMutation, usePagination, useQuery, useRequestPasswordReset, useResetPassword, useStorageDelete, useStorageDeleteFile, useStorageHelpers, useStorageList, useStorageMetadata, useStorageUpload, useUpload };