@mdxui/do 2.1.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.
- package/README.md +412 -0
- package/dist/__test-utils__/index.d.ts +399 -0
- package/dist/__test-utils__/index.js +34641 -0
- package/dist/__test-utils__/index.js.map +1 -0
- package/dist/agents-xcIn2dUB.d.ts +832 -0
- package/dist/chunk-EEDMN7UF.js +1351 -0
- package/dist/chunk-EEDMN7UF.js.map +1 -0
- package/dist/chunk-G3PMV62Z.js +33 -0
- package/dist/chunk-G3PMV62Z.js.map +1 -0
- package/dist/chunk-GGO5GW72.js +695 -0
- package/dist/chunk-GGO5GW72.js.map +1 -0
- package/dist/chunk-GKSP5RIA.js +3 -0
- package/dist/chunk-GKSP5RIA.js.map +1 -0
- package/dist/chunk-NXPXL5NA.js +3789 -0
- package/dist/chunk-NXPXL5NA.js.map +1 -0
- package/dist/chunk-PC5FJY6M.js +20 -0
- package/dist/chunk-PC5FJY6M.js.map +1 -0
- package/dist/chunk-XF6LKY2M.js +445 -0
- package/dist/chunk-XF6LKY2M.js.map +1 -0
- package/dist/components/index.d.ts +813 -0
- package/dist/components/index.js +8 -0
- package/dist/components/index.js.map +1 -0
- package/dist/do-CaQVueZw.d.ts +195 -0
- package/dist/hooks/index.d.ts +801 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +1012 -0
- package/dist/index.js +843 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-J7BYFTTJ.js +1307 -0
- package/dist/magic-string.es-J7BYFTTJ.js.map +1 -0
- package/dist/providers/index.d.ts +90 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/schemas/index.d.ts +206 -0
- package/dist/schemas/index.js +262 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/thing-DtI25yZh.d.ts +902 -0
- package/dist/types/index.d.ts +7681 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/errors.ts","../src/lib/rpc-client.ts","../src/lib/query-keys.ts","../src/hooks/things/utils.ts","../src/hooks/things/rpc.ts","../src/hooks/things/queries.ts","../src/hooks/things/mutations.ts","../src/hooks/use-relationships.ts","../src/hooks/use-workflows.ts","../src/hooks/use-agents.ts","../src/hooks/dotdo/provider.tsx","../src/hooks/dotdo/use-do-resource.ts"],"names":["useMemo","z","useQuery","useQueryClient","useMutation","React","DotdoAdminProvider","useBaseResource"],"mappings":"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","file":"chunk-EEDMN7UF.js","sourcesContent":["/**\n * Standardized error classes for @mdxui/do\n *\n * These classes provide consistent error handling across the package:\n * - APIError: HTTP/RPC errors from the backend\n * - NetworkError: Connection/fetch failures\n * - ValidationError: Input validation errors\n * - SyncError: Real-time sync errors\n *\n * @example\n * ```typescript\n * import { APIError, NetworkError, isAPIError } from '@mdxui/do'\n *\n * try {\n * const response = await fetch(url)\n * if (!response.ok) {\n * throw APIError.fromResponse(response)\n * }\n * } catch (error) {\n * if (isAPIError(error)) {\n * console.log(`API error ${error.code}: ${error.message}`)\n * if (error.status === 401) {\n * // Handle auth error\n * }\n * } else if (isNetworkError(error)) {\n * console.log('Network unavailable, will retry...')\n * }\n * }\n * ```\n */\n\n/**\n * API error from HTTP/RPC calls\n *\n * Provides structured error information including:\n * - code: Machine-readable error code (e.g., 'HTTP_404', 'VALIDATION_ERROR')\n * - message: Human-readable error message\n * - status: HTTP status code (when applicable)\n * - details: Additional error details from the server\n */\nexport class APIError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number,\n public readonly details?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'APIError'\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, APIError.prototype)\n }\n\n /**\n * Create an APIError from a fetch Response\n *\n * @param response - The Response object from fetch\n * @param body - Optional response body text (if already read)\n * @returns An APIError with HTTP status information\n *\n * @example\n * ```typescript\n * const response = await fetch('/api/things')\n * if (!response.ok) {\n * throw APIError.fromResponse(response, await response.text())\n * }\n * ```\n */\n static fromResponse(response: Response, body?: string): APIError {\n return new APIError(`HTTP_${response.status}`, body || response.statusText, response.status)\n }\n\n /**\n * Type guard to check if an error is an APIError\n */\n static isAPIError(error: unknown): error is APIError {\n return error instanceof APIError\n }\n}\n\n/**\n * Network-level error (connection failures, timeouts, etc.)\n *\n * Use for errors that occur before an HTTP response is received:\n * - DNS resolution failures\n * - Connection refused\n * - Request timeouts\n * - CORS errors\n */\nexport class NetworkError extends Error {\n constructor(\n message: string,\n public readonly cause?: Error\n ) {\n super(message)\n this.name = 'NetworkError'\n Object.setPrototypeOf(this, NetworkError.prototype)\n }\n}\n\n/**\n * Validation error with field-level details\n *\n * Use when input data fails validation checks.\n * The fields property maps field names to arrays of error messages.\n *\n * @example\n * ```typescript\n * throw new ValidationError('Invalid input', {\n * email: ['Invalid email format'],\n * name: ['Name is required', 'Name must be at least 2 characters'],\n * })\n * ```\n */\nexport class ValidationError extends Error {\n constructor(\n message: string,\n public readonly fields: Record<string, string[]>\n ) {\n super(message)\n this.name = 'ValidationError'\n Object.setPrototypeOf(this, ValidationError.prototype)\n }\n}\n\n/**\n * Real-time sync error\n *\n * Use for errors in the sync protocol (WebSocket, EventSource, etc.).\n * The operation property indicates what sync operation failed.\n * The recoverable property indicates whether the client should retry.\n *\n * @example\n * ```typescript\n * // Recoverable connection error - client should retry\n * throw new SyncError('WebSocket disconnected', 'connect', true)\n *\n * // Non-recoverable push error - user intervention needed\n * throw new SyncError('Conflict: record modified by another user', 'push', false)\n * ```\n */\nexport class SyncError extends Error {\n constructor(\n message: string,\n public readonly operation: 'push' | 'pull' | 'connect',\n public readonly recoverable: boolean\n ) {\n super(message)\n this.name = 'SyncError'\n Object.setPrototypeOf(this, SyncError.prototype)\n }\n}\n\n/**\n * Type guard to check if an error is an APIError\n */\nexport function isAPIError(error: unknown): error is APIError {\n return error instanceof APIError\n}\n\n/**\n * Type guard to check if an error is a NetworkError\n */\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError\n}\n\n/**\n * Type guard to check if an error is a ValidationError\n */\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError\n}\n\n/**\n * Type guard to check if an error is a SyncError\n */\nexport function isSyncError(error: unknown): error is SyncError {\n return error instanceof SyncError\n}\n","/**\n * Typed RPC client for @mdxui/do\n *\n * Provides a unified interface for making RPC calls to the .do backend,\n * with consistent error handling, timeouts, and authentication.\n *\n * @example\n * ```typescript\n * // Create a client\n * const client = createRPCClient({\n * rpcUrl: 'https://api.do/rpc',\n * authToken: 'xxx',\n * timeout: 5000,\n * })\n *\n * // Make typed RPC calls\n * const things = await client.call<ListInput, Thing[]>('things.list', { limit: 10 })\n * ```\n *\n * @example\n * ```typescript\n * // Use the hook in a component\n * function MyComponent() {\n * const client = useRPCClient()\n *\n * if (!client) {\n * return <div>RPC not available (REST mode)</div>\n * }\n *\n * // Use client...\n * }\n * ```\n *\n * @module\n */\n\nimport { useMemo } from 'react'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from './fetch-with-timeout'\nimport { APIError, NetworkError } from './errors'\nimport { useDO } from '../providers/do-provider'\n\n/**\n * Configuration for creating an RPC client\n */\nexport interface RPCClientConfig {\n /** Base RPC URL (e.g., 'https://api.do/rpc') */\n rpcUrl: string\n /** Optional auth token for Bearer authentication */\n authToken?: string\n /** Request timeout in milliseconds (defaults to 30000) */\n timeout?: number\n}\n\n/**\n * Options for an individual RPC call\n */\nexport interface RPCCallOptions {\n /** AbortSignal for cancelling the request mid-flight */\n signal?: AbortSignal\n}\n\n/**\n * Typed RPC client interface\n */\nexport interface RPCClient {\n /**\n * Make a typed RPC call\n *\n * @param method - The RPC method name (e.g., 'things.list', 'things.get')\n * @param input - The input payload for the RPC method\n * @param options - Optional call options including AbortSignal\n * @returns Promise resolving to the typed output\n * @throws {APIError} If the server returns a non-OK response\n * @throws {NetworkError} If the network request fails\n * @throws {DOMException} AbortError if the request is cancelled via signal\n */\n call<TInput, TOutput>(method: string, input: TInput, options?: RPCCallOptions): Promise<TOutput>\n}\n\n/**\n * Create a typed RPC client\n *\n * @param config - Client configuration\n * @returns An RPC client instance\n *\n * @example\n * ```typescript\n * const client = createRPCClient({\n * rpcUrl: 'https://api.do/rpc',\n * authToken: 'jwt-token',\n * timeout: 10000,\n * })\n *\n * // List things\n * const things = await client.call<{ limit: number }, Thing[]>('things.list', { limit: 10 })\n *\n * // Get a single thing\n * const thing = await client.call<{ id: string }, Thing>('things.get', { id: 'thing-123' })\n *\n * // Create a thing\n * const newThing = await client.call<CreateInput, Thing>('things.create', { name: 'New Thing' })\n *\n * // With AbortSignal for cancellation\n * const controller = new AbortController()\n * const things = await client.call<{ limit: number }, Thing[]>(\n * 'things.list',\n * { limit: 10 },\n * { signal: controller.signal }\n * )\n * // To cancel: controller.abort()\n * ```\n */\nexport function createRPCClient(config: RPCClientConfig): RPCClient {\n const { rpcUrl, authToken, timeout = DEFAULT_REQUEST_TIMEOUT } = config\n\n return {\n async call<TInput, TOutput>(method: string, input: TInput, options?: RPCCallOptions): Promise<TOutput> {\n try {\n const response = await fetchWithTimeout(`${rpcUrl}/${method}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify(input),\n timeout,\n signal: options?.signal,\n })\n\n if (!response.ok) {\n const body = await response.text().catch(() => '')\n throw APIError.fromResponse(response, body)\n }\n\n return response.json()\n } catch (error) {\n // Re-throw our own error types\n if (error instanceof APIError) throw error\n\n // Wrap fetch failures as NetworkError\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new NetworkError('Network request failed', error)\n }\n\n // Re-throw other errors (including AbortError from timeout)\n throw error\n }\n },\n }\n}\n\n/**\n * Hook to access an RPC client from the DO context\n *\n * Returns null when not in TanStack DB mode (i.e., when doUrl is not configured).\n * The client is memoized and only recreated when the rpcUrl, authToken, or\n * requestTimeout changes.\n *\n * @returns An RPC client instance, or null if RPC is not available\n *\n * @example\n * ```typescript\n * function ThingsList() {\n * const client = useRPCClient()\n * const [things, setThings] = useState<Thing[]>([])\n *\n * useEffect(() => {\n * if (!client) return\n *\n * client.call<{ limit: number }, Thing[]>('things.list', { limit: 10 })\n * .then(setThings)\n * .catch(console.error)\n * }, [client])\n *\n * if (!client) {\n * return <div>RPC not available</div>\n * }\n *\n * return <ul>{things.map(t => <li key={t.id}>{t.name}</li>)}</ul>\n * }\n * ```\n */\nexport function useRPCClient(): RPCClient | null {\n const { rpcUrl, config } = useDO()\n\n return useMemo(() => {\n if (!rpcUrl) return null\n return createRPCClient({\n rpcUrl,\n authToken: config.authToken,\n timeout: config.requestTimeout,\n })\n }, [rpcUrl, config.authToken, config.requestTimeout])\n}\n","/**\n * Query Key Factory Pattern\n *\n * Provides a generic factory for creating type-safe TanStack Query keys.\n * Eliminates copy-paste duplication across hook files while maintaining\n * consistent cache invalidation patterns.\n *\n * @example\n * ```typescript\n * // Create typed keys for a resource\n * export const agentsKeys = createQueryKeys<AgentFilter>('agents')\n *\n * // Usage in hooks\n * const queryKey = agentsKeys.list({ status: ['active'] })\n * queryClient.invalidateQueries({ queryKey: agentsKeys.all })\n * ```\n */\n\nimport type {\n ThingFilter,\n ThingSort,\n ThingPagination,\n AgentFilter,\n AgentExecutionFilter,\n WorkflowFilter,\n ExecutionFilter,\n RelationshipFilter,\n EntityReference,\n GraphPattern,\n} from '../types'\n\n/**\n * Generic pagination parameters for list queries\n */\nexport interface Pagination {\n page?: number\n perPage?: number\n cursor?: string\n}\n\n// ============================================================================\n// Pre-defined keys for known resources\n// ============================================================================\n\n/**\n * Query keys for Things resource\n *\n * Things have a special key structure because:\n * - List queries include filter, sort, and pagination\n * - Detail queries use composite keys (ns, type, id) instead of a single id\n * - Additional sub-queries for versions and type stats\n */\nexport const thingsKeys = {\n all: ['things'] as const,\n lists: () => [...thingsKeys.all, 'list'] as const,\n list: (filter: ThingFilter, sort?: ThingSort, pagination?: ThingPagination) =>\n [...thingsKeys.lists(), { filter, sort, pagination }] as const,\n details: () => [...thingsKeys.all, 'detail'] as const,\n detail: (ns: string, type: string, id: string) => [...thingsKeys.details(), ns, type, id] as const,\n versions: (ns: string, type: string, id: string) =>\n [...thingsKeys.detail(ns, type, id), 'versions'] as const,\n types: () => [...thingsKeys.all, 'types'] as const,\n typeStats: (ns: string, type: string) => [...thingsKeys.types(), ns, type] as const,\n}\n\n/**\n * Query keys for Agents resource\n *\n * Includes keys for:\n * - Agent lists and details\n * - Agent metrics (per-agent)\n * - Agent executions (list and detail)\n */\nexport const agentsKeys = {\n all: ['agents'] as const,\n lists: () => [...agentsKeys.all, 'list'] as const,\n list: (filter: AgentFilter) => [...agentsKeys.lists(), filter] as const,\n details: () => [...agentsKeys.all, 'detail'] as const,\n detail: (id: string) => [...agentsKeys.details(), id] as const,\n metrics: (id: string) => [...agentsKeys.detail(id), 'metrics'] as const,\n executions: () => [...agentsKeys.all, 'executions'] as const,\n executionsList: (filter: AgentExecutionFilter) => [...agentsKeys.executions(), 'list', filter] as const,\n execution: (id: string) => [...agentsKeys.executions(), 'detail', id] as const,\n}\n\n/**\n * Query keys for Workflows resource\n *\n * Includes keys for:\n * - Workflow lists and details\n * - Workflow executions (list and detail)\n */\nexport const workflowsKeys = {\n all: ['workflows'] as const,\n lists: () => [...workflowsKeys.all, 'list'] as const,\n list: (filter: WorkflowFilter) => [...workflowsKeys.lists(), filter] as const,\n details: () => [...workflowsKeys.all, 'detail'] as const,\n detail: (id: string) => [...workflowsKeys.details(), id] as const,\n executions: () => [...workflowsKeys.all, 'executions'] as const,\n executionsList: (filter: ExecutionFilter) => [...workflowsKeys.executions(), 'list', filter] as const,\n execution: (id: string) => [...workflowsKeys.executions(), 'detail', id] as const,\n}\n\n/**\n * Query keys for Relationships resource\n *\n * Includes keys for:\n * - Relationship lists and details\n * - Graph traversal queries\n * - Graph statistics\n */\nexport const relationshipsKeys = {\n all: ['relationships'] as const,\n lists: () => [...relationshipsKeys.all, 'list'] as const,\n list: (filter: RelationshipFilter) => [...relationshipsKeys.lists(), filter] as const,\n details: () => [...relationshipsKeys.all, 'detail'] as const,\n detail: (id: string) => [...relationshipsKeys.details(), id] as const,\n graph: () => [...relationshipsKeys.all, 'graph'] as const,\n traverse: (entity: EntityReference, pattern: GraphPattern) =>\n [...relationshipsKeys.graph(), entity, pattern] as const,\n stats: () => [...relationshipsKeys.all, 'stats'] as const,\n}\n\n// ============================================================================\n// Generic Factory Functions (for custom resources)\n// ============================================================================\n\n/**\n * Base query keys structure that all resources share\n */\nexport interface QueryKeys<TFilter = unknown> {\n /** Root key for all queries of this resource */\n all: readonly [string]\n /** Key for all list queries */\n lists: () => readonly [string, 'list']\n /** Key for a specific list query with filter */\n list: (filter: TFilter) => readonly unknown[]\n /** Key for all detail queries */\n details: () => readonly [string, 'detail']\n /** Key for a specific detail query */\n detail: (id: string) => readonly [string, 'detail', string]\n}\n\n/**\n * Create a basic query key factory for a resource\n *\n * @param resource - The resource name (e.g., 'agents', 'workflows')\n * @returns Query key factory with type-safe keys\n *\n * @example\n * ```typescript\n * const customKeys = createQueryKeys<CustomFilter>('custom')\n *\n * // All queries\n * customKeys.all // ['custom']\n *\n * // List queries\n * customKeys.lists() // ['custom', 'list']\n * customKeys.list({ status: 'active' }) // ['custom', 'list', { status: 'active' }]\n *\n * // Detail queries\n * customKeys.details() // ['custom', 'detail']\n * customKeys.detail('item-1') // ['custom', 'detail', 'item-1']\n * ```\n */\nexport function createQueryKeys<TFilter = unknown>(resource: string): QueryKeys<TFilter> {\n const keys: QueryKeys<TFilter> = {\n all: [resource] as const,\n lists: () => [resource, 'list'] as const,\n list: (filter: TFilter) => [...keys.lists(), filter] as const,\n details: () => [resource, 'detail'] as const,\n detail: (id: string) => [resource, 'detail', id] as const,\n }\n return keys\n}\n","'use client'\n\n/**\n * Utility functions for Things hooks\n *\n * Internal helpers for filtering, sorting, and data transformation.\n */\n\nimport { z } from 'zod'\nimport type { BaseItem } from '@dotdo/react'\nimport type {\n Thing,\n ThingFilter,\n ThingSort,\n} from '../../types'\n\n// ============================================================================\n// RPC Schemas\n// ============================================================================\n\n/**\n * Zod schema for RPC response validation\n * Ensures response structure is valid before type assertions\n */\nexport const RPCResultSchema = z.object({\n type: z.literal('result'),\n results: z.array(\n z.object({\n type: z.enum(['value', 'error']),\n value: z.unknown().optional(),\n error: z.object({ message: z.string() }).optional(),\n })\n ).min(1, 'RPC response must have at least one result'),\n})\n\n/**\n * Zod schema for top-level RPC error\n */\nexport const RPCErrorSchema = z.object({\n type: z.literal('error'),\n error: z.object({ message: z.string() }),\n})\n\n/**\n * Combined schema for any RPC response\n */\nexport const RPCResponseSchema = z.union([RPCResultSchema, RPCErrorSchema])\n\n// ============================================================================\n// Synced Thing Type\n// ============================================================================\n\n/**\n * Synced Thing item format from @dotdo/react collection.\n *\n * The Thing collection uses $id as the primary key (composite of ns/type/id)\n * and includes Thing data fields.\n */\nexport interface SyncedThing extends BaseItem {\n $id: string\n ns: string\n type: string\n id: string\n ts: string // ISO date string\n name: string\n createdAt: string // ISO date string\n updatedAt: string // ISO date string\n createdBy?: string\n updatedBy?: string\n deletedAt?: string | null // ISO date string\n variant?: string\n data: Record<string, unknown>\n}\n\n// ============================================================================\n// Conversion Utilities\n// ============================================================================\n\n/**\n * Convert a SyncedThing from the collection to a Thing\n */\nexport function syncedThingToThing(synced: SyncedThing): Thing {\n return {\n ns: synced.ns,\n type: synced.type,\n id: synced.id,\n ts: new Date(synced.ts),\n name: synced.name,\n createdAt: new Date(synced.createdAt),\n updatedAt: new Date(synced.updatedAt),\n createdBy: synced.createdBy,\n updatedBy: synced.updatedBy,\n deletedAt: synced.deletedAt ? new Date(synced.deletedAt) : null,\n variant: synced.variant,\n data: synced.data,\n }\n}\n\n// ============================================================================\n// Filter & Sort Utilities\n// ============================================================================\n\n/**\n * Apply filter criteria to a SyncedThing\n */\nexport function matchesFilter(thing: SyncedThing, filter: ThingFilter, defaultNs: string): boolean {\n const ns = filter.ns ?? defaultNs\n\n // Filter by namespace\n if (ns) {\n if (Array.isArray(ns)) {\n if (!ns.includes(thing.ns)) return false\n } else {\n if (thing.ns !== ns) return false\n }\n }\n\n // Filter by type\n if (filter.type) {\n if (Array.isArray(filter.type)) {\n if (!filter.type.includes(thing.type)) return false\n } else {\n if (thing.type !== filter.type) return false\n }\n }\n\n // Filter by name search (case-insensitive)\n if (filter.nameSearch) {\n if (!thing.name.toLowerCase().includes(filter.nameSearch.toLowerCase())) {\n return false\n }\n }\n\n // Filter by deleted status\n if (!filter.includeDeleted && thing.deletedAt) {\n return false\n }\n\n return true\n}\n\n/**\n * Sort things by the given sort criteria\n */\nexport function sortThings(things: Thing[], sort?: ThingSort): Thing[] {\n if (!sort) return things\n\n return [...things].sort((a, b) => {\n let comparison = 0\n\n switch (sort.field) {\n case 'name':\n comparison = a.name.localeCompare(b.name)\n break\n case 'createdAt':\n comparison = a.createdAt.getTime() - b.createdAt.getTime()\n break\n case 'updatedAt':\n comparison = a.updatedAt.getTime() - b.updatedAt.getTime()\n break\n case 'ts':\n comparison = a.ts.getTime() - b.ts.getTime()\n break\n case 'type':\n comparison = a.type.localeCompare(b.type)\n break\n }\n\n return sort.order === 'desc' ? -comparison : comparison\n })\n}\n","'use client'\n\n/**\n * RPC utilities for Things hooks\n *\n * Low-level RPC call function with validated response parsing.\n */\n\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../../lib/fetch-with-timeout'\nimport { RPCResponseSchema } from './utils'\n\n/**\n * RPC call to DO backend with validated response parsing\n *\n * @param endpoint - RPC endpoint URL\n * @param method - RPC method name (e.g., 'Thing.list')\n * @param args - Method arguments\n * @param options - Optional configuration including auth token, abort signal, and timeout\n * @throws {z.ZodError} If response structure is invalid\n * @throws {Error} If RPC returns an error or HTTP request fails\n * @throws {DOMException} AbortError if the request times out\n */\nexport async function rpcCall<T>(\n endpoint: string,\n method: string,\n args: unknown[] = [],\n options?: { authToken?: string; signal?: AbortSignal; timeout?: number }\n): Promise<T> {\n const requestId = crypto.randomUUID()\n\n const response = await fetchWithTimeout(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(options?.authToken ? { Authorization: `Bearer ${options.authToken}` } : {}),\n },\n body: JSON.stringify({\n id: requestId,\n type: 'call',\n calls: [\n {\n promiseId: 'p-1',\n target: { type: 'root' },\n method,\n args: args.map((arg) => ({ type: 'value', value: arg })),\n },\n ],\n }),\n signal: options?.signal,\n timeout: options?.timeout ?? DEFAULT_REQUEST_TIMEOUT,\n })\n\n if (!response.ok) {\n throw new Error(`RPC error: ${response.status}`)\n }\n\n const json: unknown = await response.json()\n\n // Validate response structure with Zod\n const parsed = RPCResponseSchema.parse(json)\n\n // Handle top-level error\n if (parsed.type === 'error') {\n throw new Error(parsed.error.message)\n }\n\n // At this point we know it's a result type with at least one result\n const firstResult = parsed.results[0]\n\n if (firstResult.type === 'error') {\n throw new Error(firstResult.error?.message ?? 'Unknown RPC error')\n }\n\n // Validate that value exists for 'value' type results\n if (firstResult.value === undefined) {\n throw new Error('RPC result missing value')\n }\n\n return firstResult.value as T\n}\n","'use client'\n\n/**\n * Query hooks for Things\n *\n * Provides reactive data access to Things via React Query.\n * Automatic caching, background refetching, and cache invalidation.\n */\n\nimport { useQuery, type QueryObserverResult } from '@tanstack/react-query'\nimport { useCollection } from '@dotdo/react'\nimport { useMemo, useCallback } from 'react'\nimport { z } from 'zod'\nimport { useDO } from '../../providers'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../../lib/fetch-with-timeout'\nimport { useRPCClient } from '../../lib/rpc-client'\nimport { thingsKeys } from '../../lib/query-keys'\nimport type {\n Thing,\n ThingFilter,\n ThingSort,\n ThingPagination,\n ThingQueryResult,\n ThingVersion,\n TypeStats,\n} from '../../types'\nimport {\n ThingFilterSchema,\n ThingSortSchema,\n ThingPaginationSchema,\n ThingQueryResultResponseSchema,\n ThingResponseSchema,\n ThingVersionResponseSchema,\n TypeStatsResponseSchema,\n} from '../../types/schemas'\nimport type {\n UseThingsResult,\n UseThingResult,\n UseThingVersionsResult,\n UseTypeStatsResult,\n} from './types'\nimport {\n type SyncedThing,\n syncedThingToThing,\n matchesFilter,\n sortThings,\n} from './utils'\nimport { rpcCall } from './rpc'\n\n/**\n * Hook to fetch a list of Things\n *\n * Uses two modes:\n * - **TanStack DB mode**: Real-time sync via @dotdo/react useCollection\n * - **REST/RPC mode**: React Query for caching with fetch or RPC calls\n */\nexport function useThings(\n filter: ThingFilter = {},\n sort?: ThingSort,\n pagination?: ThingPagination\n): UseThingsResult {\n const { config, namespace, rpcUrl, isTanStackDBMode, db } = useDO()\n\n // Build query key with merged namespace\n // Use JSON.stringify for object dependencies to ensure stable identity\n const queryKey = useMemo(\n () => thingsKeys.list({ ...filter, ns: filter.ns ?? namespace }, sort, pagination),\n [JSON.stringify(filter), namespace, JSON.stringify(sort), JSON.stringify(pagination)]\n )\n\n // TanStack DB mode: use @dotdo/react's useCollection for real-time sync\n // The collection is named 'Thing' and syncs via WebSocket\n const collectionConfig = useMemo(() => ({\n collection: 'Thing' as const,\n }), [])\n\n const collection = useCollection<SyncedThing>(collectionConfig)\n\n // Process collection data when in TanStack DB mode\n const collectionResult = useMemo((): ThingQueryResult | null => {\n if (!isTanStackDBMode || !db) return null\n if (collection.isLoading) return null\n\n // Filter the collection data\n const filteredData = collection.data.filter(item =>\n matchesFilter(item, filter, namespace)\n )\n\n // Convert to Things and sort\n const things = filteredData.map(syncedThingToThing)\n const sortedThings = sortThings(things, sort)\n\n // Apply pagination\n const page = pagination?.page ?? 1\n const perPage = pagination?.perPage ?? sortedThings.length\n const startIndex = (page - 1) * perPage\n const paginatedData = sortedThings.slice(startIndex, startIndex + perPage)\n const totalPages = Math.ceil(sortedThings.length / perPage)\n\n return {\n data: paginatedData,\n total: sortedThings.length,\n page,\n perPage,\n totalPages,\n }\n }, [isTanStackDBMode, db, collection.data, collection.isLoading, filter, namespace, sort, pagination])\n\n // Refetch callback for collection mode\n const collectionRefetch = useCallback(async () => {\n collection.refetch()\n // Return a mock QueryObserverResult since collection doesn't return one\n return {\n data: collectionResult,\n dataUpdatedAt: Date.now(),\n error: collection.error,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n failureCount: 0,\n failureReason: collection.error,\n fetchStatus: collection.isLoading ? 'fetching' : 'idle',\n isError: !!collection.error,\n isFetched: true,\n isFetchedAfterMount: true,\n isFetching: collection.isLoading,\n isInitialLoading: false,\n isLoading: collection.isLoading,\n isLoadingError: false,\n isPaused: false,\n isPending: collection.isLoading,\n isPlaceholderData: false,\n isRefetchError: false,\n isRefetching: false,\n isStale: false,\n isSuccess: !collection.error && !collection.isLoading,\n refetch: collectionRefetch,\n status: collection.isLoading ? 'pending' : collection.error ? 'error' : 'success',\n } as unknown as QueryObserverResult<ThingQueryResult, Error>\n }, [collection, collectionResult])\n\n // REST/RPC mode: use React Query for caching\n const query = useQuery({\n queryKey,\n queryFn: async ({ signal }) => {\n // Validate inputs before API call\n const validatedFilter = ThingFilterSchema.parse(filter)\n const validatedSort = sort ? ThingSortSchema.parse(sort) : undefined\n const validatedPagination = pagination ? ThingPaginationSchema.parse(pagination) : undefined\n\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n if (rpcUrl) {\n // RPC mode (for non-TanStack DB setups with RPC)\n return rpcCall<ThingQueryResult>(\n rpcUrl,\n 'Thing.list',\n [{ filter: { ...validatedFilter, ns: validatedFilter.ns ?? namespace }, sort: validatedSort, pagination: validatedPagination }],\n { authToken: config.authToken, signal, timeout }\n )\n } else {\n // REST API mode\n const params = new URLSearchParams()\n const ns = validatedFilter.ns ?? namespace\n if (ns) params.set('ns', Array.isArray(ns) ? ns.join(',') : ns)\n if (validatedFilter.type) params.set('type', Array.isArray(validatedFilter.type) ? validatedFilter.type.join(',') : validatedFilter.type)\n if (validatedFilter.nameSearch) params.set('nameSearch', validatedFilter.nameSearch)\n if (validatedFilter.includeDeleted) params.set('includeDeleted', 'true')\n if (validatedSort) {\n params.set('sortField', validatedSort.field)\n params.set('sortOrder', validatedSort.order)\n }\n if (validatedPagination) {\n params.set('page', validatedPagination.page.toString())\n params.set('perPage', validatedPagination.perPage.toString())\n }\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/things?${params}`, {\n headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {},\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch things')\n const data = await response.json()\n return ThingQueryResultResponseSchema.parse(data) as ThingQueryResult\n }\n },\n // Disable React Query when using TanStack DB mode\n enabled: !isTanStackDBMode,\n })\n\n // Return TanStack DB mode result\n if (isTanStackDBMode && db) {\n return {\n data: collectionResult,\n isLoading: collection.isLoading,\n error: collection.error,\n refetch: collectionRefetch,\n queryKey,\n isRefetching: false, // Collection mode doesn't have background refetching\n isFetching: collection.isLoading,\n status: collection.isLoading ? 'pending' : collection.error ? 'error' : 'success',\n }\n }\n\n // Return REST/RPC mode result\n return {\n data: query.data ?? null,\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n queryKey,\n // Additional React Query properties\n isRefetching: query.isRefetching,\n isFetching: query.isFetching,\n status: query.status,\n }\n}\n\n/**\n * Hook to fetch a single Thing\n *\n * Uses the useRPCClient hook for RPC calls instead of inline fetch,\n * demonstrating the pattern for utilizing extracted utilities.\n */\nexport function useThing(ns: string, type: string, id: string): UseThingResult {\n const { config, isTanStackDBMode } = useDO()\n const rpcClient = useRPCClient()\n\n const queryKey = useMemo(() => thingsKeys.detail(ns, type, id), [ns, type, id])\n\n const query = useQuery({\n queryKey,\n queryFn: async ({ signal }) => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n // Priority: Use RPC client when available (TanStack DB mode)\n if (isTanStackDBMode && rpcClient) {\n // RPC client handles auth and timeout internally\n // Pass signal for request cancellation support\n return rpcClient.call<{ ns: string; type: string; id: string }, Thing>(\n 'Thing.get',\n { ns, type, id },\n { signal }\n )\n }\n\n // Fallback: REST API mode\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/things/${encodeURIComponent(ns)}/${encodeURIComponent(type)}/${encodeURIComponent(id)}`,\n { headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}, signal, timeout }\n )\n if (!response.ok) throw new Error('Failed to fetch thing')\n const data = await response.json()\n return ThingResponseSchema.parse(data) as Thing\n },\n enabled: Boolean(ns && type && id),\n })\n\n return {\n data: query.data ?? null,\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n queryKey,\n isRefetching: query.isRefetching,\n isFetching: query.isFetching,\n status: query.status,\n }\n}\n\n/**\n * Hook to fetch Thing version history\n */\nexport function useThingVersions(ns: string, type: string, id: string): UseThingVersionsResult {\n const { config, rpcUrl, isTanStackDBMode } = useDO()\n\n const queryKey = useMemo(() => thingsKeys.versions(ns, type, id), [ns, type, id])\n\n const query = useQuery({\n queryKey,\n queryFn: async ({ signal }) => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n if (isTanStackDBMode && rpcUrl) {\n return rpcCall<ThingVersion[]>(\n rpcUrl,\n 'Thing.versions',\n [{ ns, type, id }],\n { authToken: config.authToken, signal, timeout }\n )\n } else {\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/things/${encodeURIComponent(ns)}/${encodeURIComponent(type)}/${encodeURIComponent(id)}/versions`,\n { headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}, signal, timeout }\n )\n if (!response.ok) throw new Error('Failed to fetch versions')\n const data = await response.json()\n return z.array(ThingVersionResponseSchema).parse(data) as ThingVersion[]\n }\n },\n enabled: Boolean(ns && type && id),\n })\n\n return {\n data: query.data ?? null,\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n queryKey,\n isRefetching: query.isRefetching,\n isFetching: query.isFetching,\n status: query.status,\n }\n}\n\n/**\n * Hook to fetch type statistics\n */\nexport function useTypeStats(ns: string, type: string): UseTypeStatsResult {\n const { config, rpcUrl, isTanStackDBMode } = useDO()\n\n const queryKey = useMemo(() => thingsKeys.typeStats(ns, type), [ns, type])\n\n const query = useQuery({\n queryKey,\n queryFn: async ({ signal }) => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n if (isTanStackDBMode && rpcUrl) {\n return rpcCall<TypeStats>(\n rpcUrl,\n 'Thing.stats',\n [{ ns, type }],\n { authToken: config.authToken, signal, timeout }\n )\n } else {\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/things/${encodeURIComponent(ns)}/${encodeURIComponent(type)}/stats`,\n { headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}, signal, timeout }\n )\n if (!response.ok) throw new Error('Failed to fetch stats')\n const data = await response.json()\n return TypeStatsResponseSchema.parse(data) as TypeStats\n }\n },\n enabled: Boolean(ns && type),\n })\n\n return {\n data: query.data ?? null,\n isLoading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n queryKey,\n isRefetching: query.isRefetching,\n isFetching: query.isFetching,\n status: query.status,\n }\n}\n","'use client'\n\n/**\n * Mutation hooks for Things\n *\n * Provides create, update, and delete operations with automatic cache invalidation.\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useDO, useDataProviderSafe } from '../../providers'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../../lib/fetch-with-timeout'\nimport { thingsKeys } from '../../lib/query-keys'\nimport type {\n Thing,\n ThingCreateInput,\n ThingUpdateInput,\n} from '../../types'\nimport {\n ThingCreateInputSchema,\n ThingUpdateInputSchema,\n ThingDeleteOptionsSchema,\n ThingResponseSchema,\n} from '../../types/schemas'\nimport type {\n UseCreateThingResult,\n UseUpdateThingResult,\n UseDeleteThingResult,\n} from './types'\nimport { rpcCall } from './rpc'\n\n/**\n * Hook to create a Thing\n *\n * Automatically invalidates the things list cache on success.\n *\n * Supports three modes:\n * 1. **DataProvider mode**: Uses DataProvider.create() when available (via DoDataProviderProvider)\n * 2. **TanStack DB mode**: Uses RPC when doUrl is configured\n * 3. **REST API mode**: Falls back to fetch-based API calls\n */\nexport function useCreateThing(): UseCreateThingResult {\n const { config, rpcUrl, isTanStackDBMode, namespace } = useDO()\n const queryClient = useQueryClient()\n const dataProvider = useDataProviderSafe()\n\n const mutation = useMutation({\n mutationFn: async (input: ThingCreateInput): Promise<Thing> => {\n // Validate input before API call\n const validatedInput = ThingCreateInputSchema.parse(input)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n // Priority 1: Use DataProvider if available\n if (dataProvider) {\n const result = await dataProvider.create<Thing>('Thing', {\n data: {\n type: validatedInput.type,\n name: validatedInput.name,\n data: validatedInput.data,\n ns: validatedInput.ns ?? namespace,\n variant: validatedInput.variant,\n },\n })\n return result.data\n }\n\n // Priority 2: Use RPC in TanStack DB mode\n if (isTanStackDBMode && rpcUrl) {\n return rpcCall<Thing>(\n rpcUrl,\n 'Thing.create',\n [validatedInput],\n { authToken: config.authToken, timeout }\n )\n }\n\n // Priority 3: Fall back to REST API\n const response = await fetchWithTimeout(`${config.apiEndpoint}/things`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}),\n },\n body: JSON.stringify(validatedInput),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to create thing')\n const data = await response.json()\n return ThingResponseSchema.parse(data) as Thing\n },\n onSuccess: () => {\n // Invalidate all things queries to refetch\n queryClient.invalidateQueries({ queryKey: thingsKeys.all })\n },\n })\n\n return {\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n isLoading: mutation.isPending,\n error: mutation.error,\n isSuccess: mutation.isSuccess,\n reset: mutation.reset,\n }\n}\n\n/**\n * Hook to update a Thing\n *\n * Automatically invalidates the related cache entries on success.\n *\n * Supports three modes:\n * 1. **DataProvider mode**: Uses DataProvider.update() when available (via DoDataProviderProvider)\n * 2. **TanStack DB mode**: Uses RPC when doUrl is configured\n * 3. **REST API mode**: Falls back to fetch-based API calls\n */\nexport function useUpdateThing(ns: string, type: string, id: string): UseUpdateThingResult {\n const { config, rpcUrl, isTanStackDBMode } = useDO()\n const queryClient = useQueryClient()\n const dataProvider = useDataProviderSafe()\n\n const mutation = useMutation({\n mutationFn: async (input: ThingUpdateInput): Promise<Thing> => {\n // Validate input before API call\n const validatedInput = ThingUpdateInputSchema.parse(input)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n // Priority 1: Use DataProvider if available\n if (dataProvider) {\n const result = await dataProvider.update<Thing>('Thing', {\n id,\n data: {\n ...validatedInput,\n // Include ns and type for proper identification\n ns,\n type,\n },\n })\n return result.data\n }\n\n // Priority 2: Use RPC in TanStack DB mode\n if (isTanStackDBMode && rpcUrl) {\n return rpcCall<Thing>(\n rpcUrl,\n 'Thing.update',\n [{ ns, type, id, ...validatedInput }],\n { authToken: config.authToken, timeout }\n )\n }\n\n // Priority 3: Fall back to REST API\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/things/${encodeURIComponent(ns)}/${encodeURIComponent(type)}/${encodeURIComponent(id)}`,\n {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...(config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {}),\n },\n body: JSON.stringify(validatedInput),\n timeout,\n }\n )\n if (!response.ok) throw new Error('Failed to update thing')\n const data = await response.json()\n return ThingResponseSchema.parse(data) as Thing\n },\n onSuccess: (data) => {\n // Update the cache for this specific thing\n queryClient.setQueryData(thingsKeys.detail(ns, type, id), data)\n // Invalidate list queries\n queryClient.invalidateQueries({ queryKey: thingsKeys.lists() })\n },\n })\n\n return {\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n isLoading: mutation.isPending,\n error: mutation.error,\n isSuccess: mutation.isSuccess,\n reset: mutation.reset,\n }\n}\n\n/**\n * Hook to delete a Thing (soft delete by default)\n *\n * Automatically invalidates the related cache entries on success.\n *\n * Supports three modes:\n * 1. **DataProvider mode**: Uses DataProvider.delete() when available (via DoDataProviderProvider)\n * 2. **TanStack DB mode**: Uses RPC when doUrl is configured\n * 3. **REST API mode**: Falls back to fetch-based API calls\n *\n * Note: DataProvider mode always performs soft delete. For hard delete,\n * use RPC or REST API modes with `{ hard: true }` option.\n */\nexport function useDeleteThing(ns: string, type: string, id: string): UseDeleteThingResult {\n const { config, rpcUrl, isTanStackDBMode } = useDO()\n const queryClient = useQueryClient()\n const dataProvider = useDataProviderSafe()\n\n const mutation = useMutation({\n mutationFn: async (options?: { hard?: boolean }): Promise<void> => {\n // Validate options before API call\n const validatedOptions = options ? ThingDeleteOptionsSchema.parse(options) : {}\n const hard = validatedOptions.hard ?? false\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n // Priority 1: Use DataProvider if available (soft delete only)\n // DataProvider doesn't support hard delete, so fall through to RPC/REST if hard=true\n if (dataProvider && !hard) {\n await dataProvider.delete('Thing', { id })\n return\n }\n\n // Priority 2: Use RPC in TanStack DB mode\n if (isTanStackDBMode && rpcUrl) {\n await rpcCall<void>(\n rpcUrl,\n 'Thing.delete',\n [{ ns, type, id, hard }],\n { authToken: config.authToken, timeout }\n )\n return\n }\n\n // Priority 3: Fall back to REST API\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/things/${encodeURIComponent(ns)}/${encodeURIComponent(type)}/${encodeURIComponent(id)}?hard=${hard}`,\n {\n method: 'DELETE',\n headers: config.authToken ? { Authorization: `Bearer ${config.authToken}` } : {},\n timeout,\n }\n )\n if (!response.ok) throw new Error('Failed to delete thing')\n },\n onSuccess: () => {\n // Remove from cache\n queryClient.removeQueries({ queryKey: thingsKeys.detail(ns, type, id) })\n // Invalidate list queries\n queryClient.invalidateQueries({ queryKey: thingsKeys.lists() })\n },\n })\n\n return {\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n isLoading: mutation.isPending,\n error: mutation.error,\n isSuccess: mutation.isSuccess,\n reset: mutation.reset,\n }\n}\n","'use client'\n\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryResult,\n type UseMutationResult,\n} from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { z } from 'zod'\nimport { useDO } from '../providers'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../lib/fetch-with-timeout'\nimport type {\n Relationship,\n RelationshipFilter,\n RelationshipCreateInput,\n GraphPattern,\n GraphTraversalResult,\n GraphStats,\n EntityReference,\n} from '../types'\nimport {\n RelationshipFilterSchema,\n RelationshipCreateInputSchema,\n EntityReferenceSchema,\n GraphPatternSchema,\n // Response validation schemas\n RelationshipResponseSchema,\n GraphTraversalResultResponseSchema,\n GraphStatsResponseSchema,\n EntityRelationshipsResultResponseSchema,\n} from '../types/schemas'\nimport { relationshipsKeys } from '../lib/query-keys'\n\n// ============================================================================\n// Query Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useRelationships hook\n */\nexport type UseRelationshipsResult = UseQueryResult<Relationship[], Error>\n\n/**\n * Result type for entity relationships containing both directions\n */\nexport interface EntityRelationshipsData {\n outgoing: Relationship[]\n incoming: Relationship[]\n}\n\n/**\n * Return type for useEntityRelationships hook\n */\nexport type UseEntityRelationshipsResult = UseQueryResult<EntityRelationshipsData, Error>\n\n/**\n * Return type for useGraphTraversal hook\n */\nexport type UseGraphTraversalResult = UseQueryResult<GraphTraversalResult, Error>\n\n/**\n * Return type for useGraphStats hook\n */\nexport type UseGraphStatsResult = UseQueryResult<GraphStats, Error>\n\n// ============================================================================\n// Mutation Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useCreateRelationship hook\n */\nexport type UseCreateRelationshipResult = UseMutationResult<Relationship, Error, RelationshipCreateInput>\n\n/**\n * Return type for useDeleteRelationship hook\n */\nexport type UseDeleteRelationshipResult = UseMutationResult<void, Error, string>\n\n// Re-export relationshipsKeys for backward compatibility\nexport { relationshipsKeys } from '../lib/query-keys'\n\n/**\n * Hook to fetch relationships\n */\nexport function useRelationships(filter: RelationshipFilter = {}): UseRelationshipsResult {\n const { config } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => relationshipsKeys.list(filter),\n [JSON.stringify(filter)]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<Relationship[]> => {\n // Validate filter before API call\n const validatedFilter = RelationshipFilterSchema.parse(filter)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const params = new URLSearchParams()\n if (validatedFilter.predicates) params.set('predicates', validatedFilter.predicates.join(','))\n if (validatedFilter.from?.ns) params.set('fromNs', validatedFilter.from.ns)\n if (validatedFilter.from?.type) params.set('fromType', validatedFilter.from.type)\n if (validatedFilter.from?.id) params.set('fromId', validatedFilter.from.id)\n if (validatedFilter.to?.ns) params.set('toNs', validatedFilter.to.ns)\n if (validatedFilter.to?.type) params.set('toType', validatedFilter.to.type)\n if (validatedFilter.to?.id) params.set('toId', validatedFilter.to.id)\n if (validatedFilter.includeDeleted) params.set('includeDeleted', 'true')\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/relationships?${params}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch relationships')\n const data = await response.json()\n return z.array(RelationshipResponseSchema).parse(data) as Relationship[]\n },\n })\n}\n\n/**\n * Hook to fetch relationships for a specific entity\n */\nexport function useEntityRelationships(entity: EntityReference, direction: 'outgoing' | 'incoming' | 'both' = 'both'): UseEntityRelationshipsResult {\n const { config } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => [...relationshipsKeys.lists(), entity, direction],\n [JSON.stringify(entity), direction]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<{ outgoing: Relationship[]; incoming: Relationship[] }> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const params = new URLSearchParams()\n params.set('direction', direction)\n\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/relationships/entity/${encodeURIComponent(entity.ns)}/${encodeURIComponent(entity.type)}/${encodeURIComponent(entity.id)}?${params}`,\n { signal, timeout }\n )\n if (!response.ok) throw new Error('Failed to fetch entity relationships')\n const data = await response.json()\n return EntityRelationshipsResultResponseSchema.parse(data) as { outgoing: Relationship[]; incoming: Relationship[] }\n },\n enabled: Boolean(entity.ns && entity.type && entity.id),\n })\n}\n\n/**\n * Hook to traverse the graph from a starting entity\n */\nexport function useGraphTraversal(entity: EntityReference, pattern: GraphPattern): UseGraphTraversalResult {\n const { config } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => relationshipsKeys.traverse(entity, pattern),\n [JSON.stringify(entity), JSON.stringify(pattern)]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<GraphTraversalResult> => {\n // Validate inputs before API call\n const validatedEntity = EntityReferenceSchema.parse(entity)\n const validatedPattern = GraphPatternSchema.parse(pattern)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/relationships/traverse`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entity: validatedEntity, pattern: validatedPattern }),\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to traverse graph')\n const data = await response.json()\n return GraphTraversalResultResponseSchema.parse(data) as GraphTraversalResult\n },\n enabled: Boolean(entity.ns && entity.type && entity.id),\n })\n}\n\n/**\n * Hook to get graph statistics\n */\nexport function useGraphStats(): UseGraphStatsResult {\n const { config, namespace } = useDO()\n\n return useQuery({\n queryKey: relationshipsKeys.stats(),\n queryFn: async ({ signal }): Promise<GraphStats> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/relationships/stats?ns=${encodeURIComponent(namespace)}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch graph stats')\n const data = await response.json()\n return GraphStatsResponseSchema.parse(data) as GraphStats\n },\n })\n}\n\n/**\n * Hook to create a relationship\n */\nexport function useCreateRelationship(): UseCreateRelationshipResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (input: RelationshipCreateInput): Promise<Relationship> => {\n // Validate input before API call\n const validatedInput = RelationshipCreateInputSchema.parse(input)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/relationships`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(validatedInput),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to create relationship')\n const data = await response.json()\n return RelationshipResponseSchema.parse(data) as Relationship\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: relationshipsKeys.lists() })\n queryClient.invalidateQueries({ queryKey: relationshipsKeys.stats() })\n },\n })\n}\n\n/**\n * Hook to delete a relationship\n */\nexport function useDeleteRelationship(): UseDeleteRelationshipResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (id: string): Promise<void> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/relationships/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n timeout,\n })\n if (!response.ok) throw new Error('Failed to delete relationship')\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: relationshipsKeys.lists() })\n queryClient.invalidateQueries({ queryKey: relationshipsKeys.stats() })\n },\n })\n}\n","'use client'\n\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryResult,\n type UseMutationResult,\n} from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useDO } from '../providers'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../lib/fetch-with-timeout'\nimport type {\n Workflow,\n WorkflowFilter,\n WorkflowExecution,\n ExecutionFilter,\n ExecutionStatus,\n PaginatedResult,\n} from '../types'\nimport {\n WorkflowFilterSchema,\n ExecutionFilterSchema,\n WorkflowTriggerInputSchema,\n // Response validation schemas\n WorkflowResponseSchema,\n WorkflowExecutionResponseSchema,\n PaginatedResultResponseSchema,\n} from '../types/schemas'\nimport { workflowsKeys } from '../lib/query-keys'\n\n// ============================================================================\n// Query Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useWorkflows hook\n */\nexport type UseWorkflowsResult = UseQueryResult<PaginatedResult<Workflow>, Error>\n\n/**\n * Return type for useWorkflow hook\n */\nexport type UseWorkflowResult = UseQueryResult<Workflow, Error>\n\n/**\n * Return type for useWorkflowExecutions hook\n */\nexport type UseWorkflowExecutionsResult = UseQueryResult<PaginatedResult<WorkflowExecution>, Error>\n\n/**\n * Return type for useWorkflowExecution hook\n */\nexport type UseWorkflowExecutionResult = UseQueryResult<WorkflowExecution, Error>\n\n// ============================================================================\n// Mutation Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useCreateWorkflow hook\n */\nexport type UseCreateWorkflowResult = UseMutationResult<Workflow, Error, Partial<Workflow>>\n\n/**\n * Return type for useUpdateWorkflow hook\n */\nexport type UseUpdateWorkflowResult = UseMutationResult<Workflow, Error, Partial<Workflow>>\n\n/**\n * Return type for useTriggerWorkflow hook\n */\nexport type UseTriggerWorkflowResult = UseMutationResult<WorkflowExecution, Error, Record<string, unknown> | undefined>\n\n/**\n * Return type for useCancelExecution hook\n */\nexport type UseCancelExecutionResult = UseMutationResult<void, Error, string>\n\n/**\n * Return type for useDeleteWorkflow hook\n */\nexport type UseDeleteWorkflowResult = UseMutationResult<void, Error, string>\n\n// Re-export workflowsKeys for backward compatibility\nexport { workflowsKeys } from '../lib/query-keys'\n\n/**\n * Hook to fetch workflows\n */\nexport function useWorkflows(filter: WorkflowFilter = {}): UseWorkflowsResult {\n const { config, namespace } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => workflowsKeys.list({ ...filter, ns: filter.ns ?? namespace }),\n [JSON.stringify(filter), namespace]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<PaginatedResult<Workflow>> => {\n // Validate filter before API call\n const validatedFilter = WorkflowFilterSchema.parse(filter)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const params = new URLSearchParams()\n if (validatedFilter.status) params.set('status', validatedFilter.status.join(','))\n if (validatedFilter.ns) params.set('ns', validatedFilter.ns)\n if (validatedFilter.tags) params.set('tags', validatedFilter.tags.join(','))\n if (validatedFilter.triggerType) params.set('triggerType', validatedFilter.triggerType.join(','))\n if (validatedFilter.nameSearch) params.set('nameSearch', validatedFilter.nameSearch)\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows?${params}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch workflows')\n const data = await response.json()\n return PaginatedResultResponseSchema(WorkflowResponseSchema).parse(data) as PaginatedResult<Workflow>\n },\n })\n}\n\n/**\n * Hook to fetch a single workflow\n */\nexport function useWorkflow(id: string): UseWorkflowResult {\n const { config } = useDO()\n\n return useQuery({\n queryKey: workflowsKeys.detail(id),\n queryFn: async ({ signal }): Promise<Workflow> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/${encodeURIComponent(id)}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch workflow')\n const data = await response.json()\n return WorkflowResponseSchema.parse(data) as Workflow\n },\n enabled: Boolean(id),\n })\n}\n\n/**\n * Hook to fetch workflow executions\n */\nexport function useWorkflowExecutions(filter: ExecutionFilter = {}): UseWorkflowExecutionsResult {\n const { config, namespace } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => workflowsKeys.executionsList({ ...filter, ns: filter.ns ?? namespace }),\n [JSON.stringify(filter), namespace]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<PaginatedResult<WorkflowExecution>> => {\n // Validate filter before API call\n const validatedFilter = ExecutionFilterSchema.parse(filter)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const params = new URLSearchParams()\n if (validatedFilter.workflowId) params.set('workflowId', validatedFilter.workflowId)\n if (validatedFilter.status) params.set('status', validatedFilter.status.join(','))\n if (validatedFilter.ns) params.set('ns', validatedFilter.ns)\n if (validatedFilter.startedAfter) params.set('startedAfter', validatedFilter.startedAfter.toISOString())\n if (validatedFilter.startedBefore) params.set('startedBefore', validatedFilter.startedBefore.toISOString())\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/executions?${params}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch executions')\n const data = await response.json()\n return PaginatedResultResponseSchema(WorkflowExecutionResponseSchema).parse(data) as PaginatedResult<WorkflowExecution>\n },\n })\n}\n\n/**\n * Hook to fetch a single execution\n */\nexport function useWorkflowExecution(id: string): UseWorkflowExecutionResult {\n const { config } = useDO()\n\n return useQuery({\n queryKey: workflowsKeys.execution(id),\n queryFn: async ({ signal }): Promise<WorkflowExecution> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/executions/${encodeURIComponent(id)}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch execution')\n const data = await response.json()\n return WorkflowExecutionResponseSchema.parse(data) as WorkflowExecution\n },\n enabled: Boolean(id),\n refetchInterval: (query) => {\n // Refetch every 2 seconds if execution is still running\n const data = query.state.data\n if (data && (data.status === 'running' || data.status === 'pending')) {\n return 2000\n }\n return false\n },\n })\n}\n\n/**\n * Hook to create a workflow\n */\nexport function useCreateWorkflow(): UseCreateWorkflowResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (workflow: Partial<Workflow>): Promise<Workflow> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(workflow),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to create workflow')\n const data = await response.json()\n return WorkflowResponseSchema.parse(data) as Workflow\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: workflowsKeys.lists() })\n },\n })\n}\n\n/**\n * Hook to update a workflow\n */\nexport function useUpdateWorkflow(id: string): UseUpdateWorkflowResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (updates: Partial<Workflow>): Promise<Workflow> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to update workflow')\n const data = await response.json()\n return WorkflowResponseSchema.parse(data) as Workflow\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: workflowsKeys.detail(id) })\n queryClient.invalidateQueries({ queryKey: workflowsKeys.lists() })\n },\n })\n}\n\n/**\n * Hook to trigger a workflow manually\n */\nexport function useTriggerWorkflow(id: string): UseTriggerWorkflowResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (input?: Record<string, unknown>): Promise<WorkflowExecution> => {\n // Validate input before API call\n const validatedInput = WorkflowTriggerInputSchema.parse(input)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/${encodeURIComponent(id)}/trigger`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ input: validatedInput }),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to trigger workflow')\n const data = await response.json()\n return WorkflowExecutionResponseSchema.parse(data) as WorkflowExecution\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: workflowsKeys.executions() })\n },\n })\n}\n\n/**\n * Hook to cancel a workflow execution\n */\nexport function useCancelExecution(): UseCancelExecutionResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (executionId: string): Promise<void> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/workflows/executions/${encodeURIComponent(executionId)}/cancel`,\n { method: 'POST', timeout }\n )\n if (!response.ok) throw new Error('Failed to cancel execution')\n },\n onSuccess: (_, executionId) => {\n queryClient.invalidateQueries({ queryKey: workflowsKeys.execution(executionId) })\n queryClient.invalidateQueries({ queryKey: workflowsKeys.executions() })\n },\n })\n}\n\n/**\n * Hook to delete a workflow\n */\nexport function useDeleteWorkflow(): UseDeleteWorkflowResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (id: string): Promise<void> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/workflows/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n timeout,\n })\n if (!response.ok) throw new Error('Failed to delete workflow')\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: workflowsKeys.lists() })\n },\n })\n}\n","'use client'\n\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryResult,\n type UseMutationResult,\n} from '@tanstack/react-query'\nimport { useMemo } from 'react'\nimport { useDO } from '../providers'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from '../lib/fetch-with-timeout'\nimport type {\n Agent,\n AgentFilter,\n AgentExecution,\n AgentExecutionFilter,\n AgentMetrics,\n AgentFeedback,\n PaginatedResult,\n} from '../types'\nimport {\n AgentFilterSchema,\n AgentExecutionFilterSchema,\n AgentExecuteInputSchema,\n AgentFeedbackInputSchema,\n // Response validation schemas\n AgentResponseSchema,\n AgentExecutionResponseSchema,\n AgentMetricsResponseSchema,\n PaginatedResultResponseSchema,\n} from '../types/schemas'\nimport { agentsKeys } from '../lib/query-keys'\n\n// ============================================================================\n// Query Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useAgents hook\n */\nexport type UseAgentsResult = UseQueryResult<PaginatedResult<Agent>, Error>\n\n/**\n * Return type for useAgent hook\n */\nexport type UseAgentResult = UseQueryResult<Agent, Error>\n\n/**\n * Return type for useAgentMetrics hook\n */\nexport type UseAgentMetricsResult = UseQueryResult<AgentMetrics, Error>\n\n/**\n * Return type for useAgentExecutions hook\n */\nexport type UseAgentExecutionsResult = UseQueryResult<PaginatedResult<AgentExecution>, Error>\n\n/**\n * Return type for useAgentExecution hook\n */\nexport type UseAgentExecutionResult = UseQueryResult<AgentExecution, Error>\n\n// ============================================================================\n// Mutation Hook Return Types\n// ============================================================================\n\n/**\n * Return type for useCreateAgent hook\n */\nexport type UseCreateAgentResult = UseMutationResult<Agent, Error, Partial<Agent>>\n\n/**\n * Return type for useUpdateAgent hook\n */\nexport type UseUpdateAgentResult = UseMutationResult<Agent, Error, Partial<Agent>>\n\n/**\n * Input type for useExecuteAgent mutation\n */\nexport interface ExecuteAgentInput {\n task: string\n context?: Record<string, unknown>\n}\n\n/**\n * Return type for useExecuteAgent hook\n */\nexport type UseExecuteAgentResult = UseMutationResult<AgentExecution, Error, ExecuteAgentInput>\n\n/**\n * Input type for useSubmitAgentFeedback mutation\n */\nexport type SubmitAgentFeedbackInput = Omit<AgentFeedback, 'submittedAt' | 'submittedBy'>\n\n/**\n * Return type for useSubmitAgentFeedback hook\n */\nexport type UseSubmitAgentFeedbackResult = UseMutationResult<void, Error, SubmitAgentFeedbackInput>\n\n/**\n * Return type for useDeleteAgent hook\n */\nexport type UseDeleteAgentResult = UseMutationResult<void, Error, string>\n\n// Re-export agentsKeys for backward compatibility\nexport { agentsKeys } from '../lib/query-keys'\n\n/**\n * Hook to fetch agents\n */\nexport function useAgents(filter: AgentFilter = {}): UseAgentsResult {\n const { config, namespace } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => agentsKeys.list({ ...filter, ns: filter.ns ?? namespace }),\n [JSON.stringify(filter), namespace]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<PaginatedResult<Agent>> => {\n // Validate filter before API call\n const validatedFilter = AgentFilterSchema.parse(filter)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const params = new URLSearchParams()\n if (validatedFilter.status) params.set('status', validatedFilter.status.join(','))\n if (validatedFilter.roleCategory) params.set('roleCategory', validatedFilter.roleCategory.join(','))\n if (validatedFilter.workMode) params.set('workMode', validatedFilter.workMode.join(','))\n if (validatedFilter.ns) params.set('ns', validatedFilter.ns)\n if (validatedFilter.nameSearch) params.set('nameSearch', validatedFilter.nameSearch)\n if (validatedFilter.tools) params.set('tools', validatedFilter.tools.join(','))\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents?${params}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch agents')\n const data = await response.json()\n return PaginatedResultResponseSchema(AgentResponseSchema).parse(data) as PaginatedResult<Agent>\n },\n })\n}\n\n/**\n * Hook to fetch a single agent\n */\nexport function useAgent(id: string): UseAgentResult {\n const { config } = useDO()\n\n return useQuery({\n queryKey: agentsKeys.detail(id),\n queryFn: async ({ signal }): Promise<Agent> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/${encodeURIComponent(id)}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch agent')\n const data = await response.json()\n return AgentResponseSchema.parse(data) as Agent\n },\n enabled: Boolean(id),\n })\n}\n\n/**\n * Hook to fetch agent metrics\n */\nexport function useAgentMetrics(id: string, periodDays = 30): UseAgentMetricsResult {\n const { config } = useDO()\n\n return useQuery({\n queryKey: agentsKeys.metrics(id),\n queryFn: async ({ signal }): Promise<AgentMetrics> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/agents/${encodeURIComponent(id)}/metrics?periodDays=${periodDays}`,\n { signal, timeout }\n )\n if (!response.ok) throw new Error('Failed to fetch agent metrics')\n const data = await response.json()\n return AgentMetricsResponseSchema.parse(data) as AgentMetrics\n },\n enabled: Boolean(id),\n })\n}\n\n/**\n * Hook to fetch agent executions\n */\nexport function useAgentExecutions(filter: AgentExecutionFilter = {}): UseAgentExecutionsResult {\n const { config, namespace } = useDO()\n\n // Use JSON.stringify for stable identity across re-renders\n const queryKey = useMemo(\n () => agentsKeys.executionsList({ ...filter, ns: filter.ns ?? namespace }),\n [JSON.stringify(filter), namespace]\n )\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }): Promise<PaginatedResult<AgentExecution>> => {\n // Validate filter before API call\n const validatedFilter = AgentExecutionFilterSchema.parse(filter)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const params = new URLSearchParams()\n if (validatedFilter.agentId) params.set('agentId', validatedFilter.agentId)\n if (validatedFilter.status) params.set('status', validatedFilter.status.join(','))\n if (validatedFilter.ns) params.set('ns', validatedFilter.ns)\n if (validatedFilter.startedAfter) params.set('startedAfter', validatedFilter.startedAfter.toISOString())\n if (validatedFilter.startedBefore) params.set('startedBefore', validatedFilter.startedBefore.toISOString())\n if (validatedFilter.hasFeedback !== undefined) params.set('hasFeedback', String(validatedFilter.hasFeedback))\n if (validatedFilter.minRating) params.set('minRating', validatedFilter.minRating.toString())\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/executions?${params}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch executions')\n const data = await response.json()\n return PaginatedResultResponseSchema(AgentExecutionResponseSchema).parse(data) as PaginatedResult<AgentExecution>\n },\n })\n}\n\n/**\n * Hook to fetch a single agent execution\n */\nexport function useAgentExecution(id: string): UseAgentExecutionResult {\n const { config } = useDO()\n\n return useQuery({\n queryKey: agentsKeys.execution(id),\n queryFn: async ({ signal }): Promise<AgentExecution> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/executions/${encodeURIComponent(id)}`, {\n signal,\n timeout,\n })\n if (!response.ok) throw new Error('Failed to fetch execution')\n const data = await response.json()\n return AgentExecutionResponseSchema.parse(data) as AgentExecution\n },\n enabled: Boolean(id),\n refetchInterval: (query) => {\n const data = query.state.data\n if (data && (data.status === 'running' || data.status === 'pending')) {\n return 2000\n }\n return false\n },\n })\n}\n\n/**\n * Hook to create an agent\n */\nexport function useCreateAgent(): UseCreateAgentResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (agent: Partial<Agent>): Promise<Agent> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(agent),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to create agent')\n const data = await response.json()\n return AgentResponseSchema.parse(data) as Agent\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: agentsKeys.lists() })\n },\n })\n}\n\n/**\n * Hook to update an agent\n */\nexport function useUpdateAgent(id: string): UseUpdateAgentResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (updates: Partial<Agent>): Promise<Agent> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to update agent')\n const data = await response.json()\n return AgentResponseSchema.parse(data) as Agent\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: agentsKeys.detail(id) })\n queryClient.invalidateQueries({ queryKey: agentsKeys.lists() })\n },\n })\n}\n\n/**\n * Hook to execute an agent\n */\nexport function useExecuteAgent(id: string): UseExecuteAgentResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (input: { task: string; context?: Record<string, unknown> }): Promise<AgentExecution> => {\n // Validate input before API call\n const validatedInput = AgentExecuteInputSchema.parse(input)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/${encodeURIComponent(id)}/execute`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(validatedInput),\n timeout,\n })\n if (!response.ok) throw new Error('Failed to execute agent')\n const data = await response.json()\n return AgentExecutionResponseSchema.parse(data) as AgentExecution\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: agentsKeys.executions() })\n },\n })\n}\n\n/**\n * Hook to submit feedback for an agent execution\n */\nexport function useSubmitAgentFeedback(executionId: string): UseSubmitAgentFeedbackResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (feedback: Omit<AgentFeedback, 'submittedAt' | 'submittedBy'>): Promise<void> => {\n // Validate feedback before API call\n const validatedFeedback = AgentFeedbackInputSchema.parse(feedback)\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n\n const response = await fetchWithTimeout(\n `${config.apiEndpoint}/agents/executions/${encodeURIComponent(executionId)}/feedback`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(validatedFeedback),\n timeout,\n }\n )\n if (!response.ok) throw new Error('Failed to submit feedback')\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: agentsKeys.execution(executionId) })\n },\n })\n}\n\n/**\n * Hook to delete an agent\n */\nexport function useDeleteAgent(): UseDeleteAgentResult {\n const { config } = useDO()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (id: string): Promise<void> => {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT\n const response = await fetchWithTimeout(`${config.apiEndpoint}/agents/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n timeout,\n })\n if (!response.ok) throw new Error('Failed to delete agent')\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: agentsKeys.lists() })\n },\n })\n}\n","/**\n * DO Provider\n *\n * Combined provider that wraps both @mdxui/admin AdminProvider\n * and @dotdo/react AdminProvider for Durable Objects integration.\n *\n * @module @mdxui/do/hooks/dotdo\n */\n\nimport * as React from 'react'\nimport {\n AdminProvider as DotdoAdminProvider,\n DotdoDataProvider,\n type AdminProviderProps as DotdoAdminProviderProps,\n type DotdoDataProviderConfig,\n type DataProvider,\n} from '@dotdo/react/admin'\nimport {\n AdminProvider,\n type AdminProviderProps as MDXUIAdminProviderProps,\n} from '@mdxui/admin/components'\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Configuration for DO provider\n */\nexport interface DOProps {\n /** Child components */\n children: React.ReactNode\n\n /**\n * Durable Object namespace URL.\n * If provided, creates a DotdoDataProvider automatically.\n * @example 'https://api.example.com.ai/do/workspace'\n */\n ns?: string\n\n /**\n * Pre-configured DataProvider instance.\n * Use this for custom data provider configurations.\n * Takes precedence over `ns` if both are provided.\n */\n dataProvider?: DataProvider\n\n /**\n * Additional configuration for DotdoDataProvider.\n * Only used when `ns` is provided.\n */\n dotdoConfig?: Omit<DotdoDataProviderConfig, 'ns'>\n\n /**\n * @mdxui/admin AdminProvider configuration.\n */\n adminConfig?: Omit<MDXUIAdminProviderProps, 'children'>\n\n /**\n * Theme preference for the admin UI.\n * @default 'system'\n */\n theme?: 'light' | 'dark' | 'system'\n\n /**\n * Base path for admin routes.\n * @default ''\n */\n basename?: string\n\n /**\n * Admin application title.\n * @default 'Admin'\n */\n title?: string\n\n /**\n * Logo element for the admin UI.\n */\n logo?: React.ReactNode\n}\n\n/**\n * Context value for DO Admin specific features (dotdo integration)\n */\nexport interface DOAdminContextValue {\n /** The configured data provider */\n dataProvider: DataProvider | null\n /** Whether DO integration is enabled */\n isDOEnabled: boolean\n /** The DO namespace URL if configured */\n ns: string | null\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst DOContext = React.createContext<DOAdminContextValue>({\n dataProvider: null,\n isDOEnabled: false,\n ns: null,\n})\n\nDOContext.displayName = 'DOContext'\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\n/**\n * Combined admin provider for @mdxui/admin with Durable Objects support.\n *\n * Wraps both the @mdxui/admin AdminProvider and @dotdo/react AdminProvider,\n * providing a unified context for admin applications backed by Durable Objects.\n *\n * @example\n * ```tsx\n * import { DO } from '@mdxui/do'\n *\n * function App() {\n * return (\n * <DO\n * ns=\"https://api.example.com.ai/do/workspace\"\n * title=\"My Admin\"\n * theme=\"dark\"\n * >\n * <Resource name=\"users\" list={UserList} edit={UserEdit} />\n * <Resource name=\"posts\" list={PostList} create={PostCreate} />\n * </DO>\n * )\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom data provider configuration\n * import { DO, DotdoDataProvider } from '@mdxui/do'\n *\n * function App() {\n * const dataProvider = DotdoDataProvider({\n * ns: 'https://api.example.com.ai/do/workspace',\n * headers: { Authorization: 'Bearer token' },\n * timeout: 60000,\n * })\n *\n * return (\n * <DO dataProvider={dataProvider} title=\"My Admin\">\n * <AdminRoutes />\n * </DO>\n * )\n * }\n * ```\n */\nexport function DO({\n children,\n ns,\n dataProvider: providedDataProvider,\n dotdoConfig,\n adminConfig,\n theme = 'system',\n basename = '',\n title = 'Admin',\n logo,\n}: DOProps): React.ReactElement {\n // Create data provider if ns is provided\n const dataProvider = React.useMemo(() => {\n if (providedDataProvider) {\n return providedDataProvider\n }\n if (ns) {\n return DotdoDataProvider({\n ns,\n ...dotdoConfig,\n })\n }\n return null\n }, [ns, providedDataProvider, dotdoConfig])\n\n // DO context value\n const doContextValue = React.useMemo<DOAdminContextValue>(\n () => ({\n dataProvider,\n isDOEnabled: !!dataProvider,\n ns: ns ?? null,\n }),\n [dataProvider, ns]\n )\n\n // Build the provider tree\n // If we have a data provider, wrap with DotdoAdminProvider\n // Always wrap with @mdxui/admin AdminProvider for UI components\n\n const content = (\n <AdminProvider\n theme={theme}\n basename={basename}\n title={title}\n logo={logo}\n {...adminConfig}\n >\n {children}\n </AdminProvider>\n )\n\n // If we have a data provider, wrap with DotdoAdminProvider\n if (dataProvider) {\n return (\n <DOContext.Provider value={doContextValue}>\n <DotdoAdminProvider dataProvider={dataProvider}>\n {content}\n </DotdoAdminProvider>\n </DOContext.Provider>\n )\n }\n\n // Otherwise, just provide the context without DO features\n return (\n <DOContext.Provider value={doContextValue}>\n {content}\n </DOContext.Provider>\n )\n}\n\nDO.displayName = 'DO'\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Hook to access DO-specific admin context.\n *\n * @returns DO context value\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { isDOEnabled, ns } = useDOContext()\n *\n * if (!isDOEnabled) {\n * return <div>DO backend not configured</div>\n * }\n *\n * return <div>Connected to: {ns}</div>\n * }\n * ```\n */\nexport function useDOContext(): DOAdminContextValue {\n return React.useContext(DOContext)\n}\n\n/**\n * Hook to check if DO integration is enabled.\n *\n * @returns Whether DO backend is configured\n */\nexport function useIsDOEnabled(): boolean {\n const { isDOEnabled } = useDOContext()\n return isDOEnabled\n}\n\n// =============================================================================\n// Re-exports\n// =============================================================================\n\n// Re-export the base providers for advanced use cases\nexport { AdminProvider } from '@mdxui/admin/components'\nexport { AdminProvider as DotdoAdminProvider } from '@dotdo/react/admin'\nexport { DotdoDataProvider } from '@dotdo/react/admin'\nexport type { DotdoDataProviderConfig } from '@dotdo/react/admin'\n","/**\n * useDO Hook\n *\n * Wrapper around @dotdo/react/admin useResource that provides\n * @mdxui/do-specific defaults and type safety.\n *\n * @module @mdxui/do/hooks/dotdo\n */\n\nimport * as React from 'react'\nimport {\n useResource as useBaseResource,\n type UseResourceConfig as BaseUseResourceConfig,\n type UseResourceResult as BaseUseResourceResult,\n} from '@dotdo/react/admin'\n\n/**\n * Base record type for DO-backed resources.\n * Records must have either $id (dotdo style) or id (standard style).\n */\nexport interface BaseRecord {\n /** Dotdo-style unique identifier */\n $id?: string\n /** Standard unique identifier */\n id?: string\n /** Additional fields */\n [key: string]: unknown\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Configuration for useDO hook\n *\n * Extends the base @dotdo/react useResource config with\n * @mdxui/do-specific options.\n */\nexport interface UseDOConfig<T extends BaseRecord = BaseRecord>\n extends BaseUseResourceConfig<T> {\n /**\n * Whether to show toast notifications on errors.\n * @default true\n */\n showToasts?: boolean\n\n /**\n * Transform function to apply to fetched data.\n * Useful for mapping DO response to UI-expected format.\n */\n transform?: (data: T[]) => T[]\n\n /**\n * Custom empty state message when no data is returned.\n */\n emptyMessage?: string\n}\n\n/**\n * Return type for useDO hook\n *\n * Extends base result with additional @mdxui/do utilities.\n */\nexport interface UseDOResult<T extends BaseRecord>\n extends BaseUseResourceResult<T> {\n /**\n * Whether the data set is empty (no items after loading completes).\n */\n isEmpty: boolean\n\n /**\n * Message to display when data is empty.\n */\n emptyMessage: string\n\n /**\n * Whether the current data is stale (from cache, not fresh).\n */\n isStale: boolean\n\n /**\n * Get a record by index from the current data.\n */\n getByIndex: (index: number) => T | undefined\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\n/**\n * React hook for working with a Durable Objects resource collection.\n *\n * Wraps @dotdo/react/admin useResource with @mdxui/do conventions\n * and additional utilities.\n *\n * @example\n * ```tsx\n * import { useDOResource } from '@mdxui/do'\n *\n * function UserList() {\n * const {\n * data: users,\n * isLoading,\n * isEmpty,\n * emptyMessage,\n * create,\n * update,\n * remove,\n * } = useDOResource<User>({\n * resource: 'User',\n * perPage: 20,\n * sort: { field: 'createdAt', order: 'desc' },\n * })\n *\n * if (isLoading) return <LoadingSpinner />\n * if (isEmpty) return <EmptyState message={emptyMessage} />\n *\n * return (\n * <DataGrid columns={columns} data={users} />\n * )\n * }\n * ```\n *\n * @param config - Configuration options for the resource hook\n * @returns Resource state and mutation functions\n */\nexport function useDOResource<T extends BaseRecord = BaseRecord>(\n config: UseDOConfig<T>\n): UseDOResult<T> {\n const {\n showToasts = true,\n transform,\n emptyMessage = 'No items found',\n ...baseConfig\n } = config\n\n // Use the base hook from @dotdo/react\n const baseResult = useBaseResource<T>(baseConfig)\n\n // Track staleness based on last fetch time\n const [lastFetchTime, setLastFetchTime] = React.useState<number | null>(null)\n const staleThreshold = 30000 // 30 seconds\n\n // Update fetch time when data changes\n React.useEffect(() => {\n if (!baseResult.isLoading && baseResult.data.length > 0) {\n setLastFetchTime(Date.now())\n }\n }, [baseResult.isLoading, baseResult.data])\n\n // Apply transform if provided\n const transformedData = React.useMemo(() => {\n if (!transform) return baseResult.data\n return transform(baseResult.data)\n }, [baseResult.data, transform])\n\n // Compute isEmpty\n const isEmpty = !baseResult.isLoading && transformedData.length === 0\n\n // Compute isStale\n const isStale = React.useMemo(() => {\n if (!lastFetchTime) return false\n return Date.now() - lastFetchTime > staleThreshold\n }, [lastFetchTime])\n\n // Utility: get by index\n const getByIndex = React.useCallback(\n (index: number): T | undefined => {\n return transformedData[index]\n },\n [transformedData]\n )\n\n // Return extended result\n return React.useMemo(\n () => ({\n ...baseResult,\n data: transformedData,\n isEmpty,\n emptyMessage,\n isStale,\n getByIndex,\n }),\n [baseResult, transformedData, isEmpty, emptyMessage, isStale, getByIndex]\n )\n}\n\n/**\n * @deprecated Use useDOResource instead. This alias is kept for backward compatibility.\n * Note: This conflicts with useDO from providers/do-provider.tsx, so import explicitly if needed.\n */\nexport const useDOAdmin = useDOResource\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
|
+
};
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
|
|
31
|
+
export { __commonJS, __export, __toESM };
|
|
32
|
+
//# sourceMappingURL=chunk-G3PMV62Z.js.map
|
|
33
|
+
//# sourceMappingURL=chunk-G3PMV62Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-G3PMV62Z.js"}
|