@mdxui/do 3.0.0 → 4.0.0
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 +80 -275
- package/dist/app/index.d.ts +125 -125
- package/dist/app/index.js +8 -7
- package/dist/breadcrumbs-C9Qn3S7d.d.ts +81 -0
- package/dist/capnweb-client-Bq78FtEA.d.ts +229 -0
- package/dist/chunk-3XKYQRXY.js +192 -0
- package/dist/chunk-3XKYQRXY.js.map +1 -0
- package/dist/{chunk-JWKIONEO.js → chunk-5SHZZC7L.js} +3 -3
- package/dist/{chunk-JWKIONEO.js.map → chunk-5SHZZC7L.js.map} +1 -1
- package/dist/{chunk-YGIBMNRH.js → chunk-7UFINK3Q.js} +30 -27
- package/dist/chunk-7UFINK3Q.js.map +1 -0
- package/dist/{chunk-5AWTQDRF.js → chunk-JJLAES6W.js} +2 -2
- package/dist/{chunk-5AWTQDRF.js.map → chunk-JJLAES6W.js.map} +1 -1
- package/dist/{chunk-NTSEARBC.js → chunk-KT52UU3U.js} +473 -203
- package/dist/chunk-KT52UU3U.js.map +1 -0
- package/dist/{chunk-EQVOEEQO.js → chunk-LJIWB7KE.js} +2 -2
- package/dist/{chunk-EQVOEEQO.js.map → chunk-LJIWB7KE.js.map} +1 -1
- package/dist/{chunk-IESVTECE.js → chunk-NA652ART.js} +64 -4
- package/dist/chunk-NA652ART.js.map +1 -0
- package/dist/chunk-OVLO7UOH.js +1071 -0
- package/dist/chunk-OVLO7UOH.js.map +1 -0
- package/dist/chunk-WMNT4OIE.js +249 -0
- package/dist/chunk-WMNT4OIE.js.map +1 -0
- package/dist/components/index.d.ts +20 -1
- package/dist/components/index.js +2 -1
- package/dist/{config-CmZBQQaT.d.ts → config-CxvpD8Y6.d.ts} +2 -13
- package/dist/{do-C-t9UgjT.d.ts → do-D27i5bU0.d.ts} +2 -1
- package/dist/{errors-B4Oyyj4Z.d.ts → errors-DratdVIz.d.ts} +1 -1
- package/dist/hooks/index.d.ts +30 -3
- package/dist/hooks/index.js +4 -4
- package/dist/hooks/things/index.d.ts +2 -2
- package/dist/hooks/things/index.js +3 -3
- package/dist/index.d.ts +76 -14
- package/dist/index.js +9 -8
- package/dist/lib/index.d.ts +703 -5
- package/dist/lib/index.js +2 -2
- package/dist/providers/index.d.ts +7 -123
- package/dist/providers/index.js +2 -2
- package/dist/{query-keys-BC901wog.d.ts → query-keys-CZNFikIi.d.ts} +3 -3
- package/dist/schemas/index.d.ts +5 -5
- package/dist/{thing-BVhCTzOi.d.ts → thing-BF25aUtJ.d.ts} +68 -68
- package/dist/types/index.d.ts +445 -445
- package/dist/views/index.d.ts +1 -1
- package/dist/views/index.js +6 -6
- package/package.json +2 -2
- package/dist/chunk-FO3N7SXV.js +0 -469
- package/dist/chunk-FO3N7SXV.js.map +0 -1
- package/dist/chunk-IESVTECE.js.map +0 -1
- package/dist/chunk-NTSEARBC.js.map +0 -1
- package/dist/chunk-OWEAW4U6.js +0 -116
- package/dist/chunk-OWEAW4U6.js.map +0 -1
- package/dist/chunk-YGIBMNRH.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/capnweb-client.ts","../src/lib/json-rpc-client.ts","../src/lib/mock-data.ts","../src/lib/mock-client.ts","../src/lib/url-utils.ts","../src/lib/fetch-with-timeout.ts","../src/lib/use-health-check.ts"],"names":["options"],"mappings":"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","file":"chunk-OVLO7UOH.js","sourcesContent":["/**\n * Cap'n Web Client Wrapper for DO Admin API\n *\n * This wraps the raw capnweb HTTP batch client to provide a structured interface\n * matching the DOClient interface (client.Thing.list, client.Schema.discover, etc.)\n *\n * @module\n */\n\nimport { newWebSocketRpcSession } from 'capnweb'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ListResponse<T> {\n data?: T[]\n items?: T[]\n result?: T[]\n count?: number\n}\n\n/** SQL execution result */\nexport interface SQLResult {\n rows: Record<string, unknown>[]\n columns: { name: string; type: string }[]\n rowsAffected?: number\n executionTimeMs?: number\n}\n\nexport interface CapnwebClientOptions {\n /** Auth token to include in Authorization header */\n authToken?: string\n}\n\n// =============================================================================\n// Cap'n Web Client Wrapper\n// =============================================================================\n\n/**\n * Create a Cap'n Web client that matches the DOClient interface\n *\n * @param baseUrl - The base URL for the RPC endpoint\n * @param options - Client options including auth token\n */\nexport function createCapnwebClient(baseUrl: string, options: CapnwebClientOptions = {}) {\n // Normalize URL - strip trailing slash and /rpc suffix, then add /rpc\n // Convert http(s) to ws(s) for WebSocket connection\n const httpUrl = `${baseUrl.replace(/\\/$/, '').replace(/\\/rpc$/, '')}/rpc`\n const wsUrl = httpUrl.replace(/^http/, 'ws')\n\n // Build WebSocket URL with auth token as query param if provided\n // WebSocket doesn't support custom headers, so we pass token in URL\n const rpcUrl = options.authToken\n ? `${wsUrl}?token=${encodeURIComponent(options.authToken)}`\n : wsUrl\n\n // Create the capnweb WebSocket session\n const session = newWebSocketRpcSession(rpcUrl) as any\n\n // The capnweb client provides methods directly - we need to call them as:\n // session.methodName(args) where methodName matches server's exposed methods\n //\n // Server API (from GET /rpc):\n // methods: [\"create\", \"get\", \"update\", \"delete\", \"list\", \"search\", \"getRelated\", \"generate\", \"getStats\", \"getSchemas\", \"getSchema\"]\n const rpc = session as unknown as {\n create: (...args: unknown[]) => Promise<unknown>\n get: (...args: unknown[]) => Promise<unknown>\n update: (...args: unknown[]) => Promise<unknown>\n delete: (...args: unknown[]) => Promise<unknown>\n list: (...args: unknown[]) => Promise<unknown>\n search: (...args: unknown[]) => Promise<unknown>\n getRelated: (...args: unknown[]) => Promise<unknown>\n generate: (...args: unknown[]) => Promise<unknown>\n getStats: (...args: unknown[]) => Promise<unknown>\n getSchemas: (...args: unknown[]) => Promise<unknown>\n getSchema: (...args: unknown[]) => Promise<unknown>\n }\n\n // Return a client object that matches the DOClient interface\n return {\n /**\n * Namespace operations\n */\n Namespace: {\n async list(_params?: { includeSystem?: boolean }) {\n // Server doesn't have explicit namespaces, return default\n return [{ id: 'default', name: 'default' }]\n },\n },\n\n /**\n * Schema operations\n */\n Schema: {\n async discover(_params?: { ns?: string }) {\n try {\n const schemas = await rpc.getSchemas() as string[] | undefined\n return {\n namespaces: ['default'],\n types: schemas ?? [],\n schemas: schemas ?? [],\n }\n } catch (error) {\n console.error('[@mdxui/do] Failed to get schemas:', error)\n return { namespaces: ['default'], types: [], schemas: [] }\n }\n },\n\n async get(params: { ns?: string; type: string }) {\n try {\n const result = await rpc.getSchema(params.type)\n return result\n } catch {\n return null\n }\n },\n },\n\n /**\n * Thing operations\n */\n Thing: {\n async types(params: { ns?: string; includeSystem?: boolean }) {\n try {\n const schemas = await rpc.getSchemas() as string[] | undefined\n return (schemas ?? []).map((name: string) => ({\n name,\n ns: params.ns || 'default',\n }))\n } catch (error) {\n console.error('[@mdxui/do] Failed to get types:', error)\n return []\n }\n },\n\n async list(params: { ns?: string; type?: string; limit?: number; offset?: number }) {\n try {\n const options: Record<string, unknown> = {}\n if (params.type) options.type = params.type\n if (params.limit !== undefined) options.limit = params.limit\n if (params.offset !== undefined) options.offset = params.offset\n\n const result = await rpc.list(options) as ListResponse<unknown> | unknown[] | undefined\n if (Array.isArray(result)) {\n return { data: result, total: result.length }\n }\n if (result) {\n const items = result.data || result.items || result.result || []\n return { data: items, total: result.count ?? items.length }\n }\n return { data: [], total: 0 }\n } catch (error) {\n console.error('[@mdxui/do] Failed to list things:', error)\n return { data: [], total: 0 }\n }\n },\n\n async get(params: { ns?: string; type: string; id: string }) {\n try {\n const result = await rpc.get({ type: params.type, id: params.id })\n return result\n } catch {\n return null\n }\n },\n\n async create(params: { ns?: string; type: string; data: unknown }) {\n const result = await rpc.create({ type: params.type, data: params.data })\n return result\n },\n\n async update(params: { ns?: string; type: string; id: string; data: unknown }) {\n const result = await rpc.update({ type: params.type, id: params.id, data: params.data })\n return result\n },\n\n async delete(params: { ns?: string; type: string; id: string; hard?: boolean }) {\n await rpc.delete({ type: params.type, id: params.id })\n return { success: true }\n },\n\n async versions(_params: { ns?: string; type: string; id: string }) {\n return []\n },\n\n async stats(_params: { ns?: string; type?: string }) {\n try {\n const options: Record<string, unknown> = {}\n if (_params.type) options.type = _params.type\n const result = await rpc.getStats(options) as { total?: number; byType?: Record<string, number> } | undefined\n return {\n total: result?.total ?? 0,\n byType: result?.byType ?? {},\n }\n } catch (error) {\n console.error('[@mdxui/do] Failed to get stats:', error)\n return { total: 0, byType: {} }\n }\n },\n },\n\n /**\n * SQL operations (not supported by capnweb servers)\n */\n SQL: {\n async execute(_params: { query: string; params?: unknown[] }): Promise<SQLResult> {\n throw new Error('SQL execution is not supported by this server')\n },\n },\n\n // Required for interface compatibility\n dup: () => createCapnwebClient(baseUrl, options),\n onRpcBroken: (callback: (error: unknown) => void) => {\n if ('onRpcBroken' in session && typeof session.onRpcBroken === 'function') {\n (session as { onRpcBroken: (cb: (error: unknown) => void) => void }).onRpcBroken(callback)\n }\n },\n [Symbol.dispose]: () => {\n if (Symbol.dispose in session) {\n (session as { [Symbol.dispose]: () => void })[Symbol.dispose]()\n }\n },\n }\n}\n\n/**\n * Create a capnweb client context - factory function matching DOClient interface\n */\nexport function $CapnwebContext(url: string, options?: CapnwebClientOptions) {\n return createCapnwebClient(url, options)\n}\n\n// Keep these exports for backward compatibility\nexport const $CapnwebHttpContext = $CapnwebContext\nexport const $CapnwebWsContext = $CapnwebContext\n","/**\n * JSON-RPC Client for DO Admin API\n *\n * This client wraps the JSON-RPC API exposed by DO admin servers,\n * translating the standard Thing/Schema interface to the server's\n * actual RPC methods.\n *\n * Auto-discovers available types and endpoints from the server.\n *\n * @module\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface RpcResponse<T = unknown> {\n result?: T\n error?: {\n code: string\n message: string\n data?: unknown\n }\n}\n\ninterface ListResponse<T> {\n data?: T[]\n items?: T[]\n result?: T[]\n count?: number\n}\n\n/** SQL execution result */\nexport interface SQLResult {\n rows: Record<string, unknown>[]\n columns: { name: string; type: string }[]\n rowsAffected?: number\n executionTimeMs?: number\n}\n\n/** Cache for discovered endpoints that exist */\nconst endpointCache = new Map<string, Set<string>>()\n\n// =============================================================================\n// JSON-RPC Client Implementation\n// =============================================================================\n\nexport interface JsonRpcClientOptions {\n /** Auth token to include in Authorization header */\n authToken?: string\n}\n\n/**\n * Create a JSON-RPC compatible client that matches the DOClient interface\n */\nexport function createJsonRpcClient(baseUrl: string, options: JsonRpcClientOptions = {}) {\n // Normalize URL: strip trailing slash and any existing /rpc suffix\n // This prevents double /rpc when the baseUrl already ends with /rpc\n const rpcUrl = baseUrl.replace(/\\/$/, '').replace(/\\/rpc$/, '')\n\n /**\n * Get auth headers if token is available\n */\n function getAuthHeaders(): Record<string, string> {\n if (options.authToken) {\n return { Authorization: `Bearer ${options.authToken}` }\n }\n return {}\n }\n\n /**\n * Make a JSON-RPC call\n */\n async function rpcCall<T>(method: string, args: unknown[] = []): Promise<T> {\n const response = await fetch(`${rpcUrl}/rpc`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...getAuthHeaders(),\n },\n body: JSON.stringify({ method, args }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n const data: RpcResponse<T> = await response.json()\n\n if (data.error) {\n throw new Error(data.error.message || data.error.code)\n }\n\n return data.result as T\n }\n\n /**\n * Make a REST call\n */\n async function restCall<T>(path: string, init?: RequestInit): Promise<T> {\n const response = await fetch(`${rpcUrl}${path}`, {\n ...init,\n headers: {\n 'Content-Type': 'application/json',\n ...getAuthHeaders(),\n ...init?.headers,\n },\n })\n\n if (!response.ok) {\n // Return empty data structure for 404s on GET requests (endpoint doesn't exist)\n // POST/PUT/DELETE 404s should still throw\n const method = init?.method?.toUpperCase() ?? 'GET'\n if (response.status === 404 && method === 'GET') {\n return { data: [], count: 0 } as T\n }\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n return response.json()\n }\n\n // Return a client object that matches the DOClient interface\n return {\n /**\n * Namespace operations\n */\n Namespace: {\n async list(_params?: { includeSystem?: boolean }) {\n // The server doesn't have explicit namespaces, return default\n return [{ id: 'default', name: 'default' }]\n },\n },\n\n /**\n * Schema operations\n */\n Schema: {\n async discover(_params?: { ns?: string }) {\n // Get schemas from RPC\n const schemas = await rpcCall<string[]>('schemas.list', [])\n return {\n namespaces: ['default'],\n types: schemas,\n schemas,\n }\n },\n\n async get(params: { ns?: string; type: string }) {\n const result = await rpcCall<unknown>('schemas.get', [params.type])\n return result\n },\n },\n\n /**\n * Thing operations (maps to REST endpoints)\n */\n Thing: {\n async types(params: { ns?: string; includeSystem?: boolean }) {\n // Discover types from schema and probe which have REST endpoints\n try {\n // Get all schema types from RPC\n const schemas = await rpcCall<string[]>('schemas.list', [])\n\n // Check cache first\n let validEndpoints = endpointCache.get(rpcUrl)\n\n if (!validEndpoints) {\n // Probe each type's endpoint to see if it exists\n validEndpoints = new Set<string>()\n\n const probeResults = await Promise.all(\n schemas.map(async (type) => {\n const endpoint = getEndpointForType(type)\n try {\n const response = await fetch(`${rpcUrl}${endpoint}`, { method: 'HEAD' })\n return { type, exists: response.ok }\n } catch {\n // Network error or CORS - try GET with limit=0\n try {\n const response = await fetch(`${rpcUrl}${endpoint}?limit=0`)\n return { type, exists: response.ok }\n } catch {\n return { type, exists: false }\n }\n }\n })\n )\n\n for (const { type, exists } of probeResults) {\n if (exists) {\n validEndpoints.add(type)\n }\n }\n\n // Cache the results\n endpointCache.set(rpcUrl, validEndpoints)\n }\n\n return Array.from(validEndpoints).map((name) => ({\n name,\n ns: params.ns || 'default',\n }))\n } catch {\n // Fallback: return common types if schema discovery fails\n return ['Noun', 'Verb', 'Action', 'Function'].map((name) => ({\n name,\n ns: params.ns || 'default',\n }))\n }\n },\n\n async list(params: { ns?: string; type?: string; limit?: number; offset?: number }) {\n // Map type to endpoint (lowercase + plural heuristic)\n const endpoint = getEndpointForType(params.type || 'Thing')\n const response = await restCall<ListResponse<unknown>>(endpoint)\n\n // Normalize response\n const items = response.data || response.items || response.result || []\n return {\n data: items,\n total: response.count ?? items.length,\n }\n },\n\n async get(params: { ns?: string; type: string; id: string }) {\n const endpoint = getEndpointForType(params.type)\n const response = await restCall<{ data: unknown }>(`${endpoint}/${params.id}`)\n return response.data\n },\n\n async create(params: { ns?: string; type: string; data: unknown }) {\n const endpoint = getEndpointForType(params.type)\n const response = await restCall<{ data: unknown }>(endpoint, {\n method: 'POST',\n body: JSON.stringify(params.data),\n })\n return response.data\n },\n\n async update(params: { ns?: string; type: string; id: string; data: unknown }) {\n const endpoint = getEndpointForType(params.type)\n const response = await restCall<{ data: unknown }>(`${endpoint}/${params.id}`, {\n method: 'PUT',\n body: JSON.stringify(params.data),\n })\n return response.data\n },\n\n async delete(params: { ns?: string; type: string; id: string; hard?: boolean }) {\n const endpoint = getEndpointForType(params.type)\n await restCall(`${endpoint}/${params.id}`, { method: 'DELETE' })\n return { success: true }\n },\n\n async versions(_params: { ns?: string; type: string; id: string }) {\n // Versions not supported by this server\n return []\n },\n\n async stats(_params: { ns?: string; type?: string }) {\n // Get valid endpoints from cache or discover them\n let validEndpoints = endpointCache.get(rpcUrl)\n\n if (!validEndpoints) {\n // Trigger discovery by calling types()\n await this.types({ ns: _params.ns })\n validEndpoints = endpointCache.get(rpcUrl) || new Set()\n }\n\n // Get counts from discovered endpoints\n const types = Array.from(validEndpoints)\n const results = await Promise.all(\n types.map(async (type) => {\n const endpoint = getEndpointForType(type)\n const response = await restCall<ListResponse<unknown>>(endpoint).catch(() => ({ count: 0 }))\n return { type, count: response.count || 0 }\n })\n )\n\n const byType: Record<string, number> = {}\n let total = 0\n for (const { type, count } of results) {\n byType[type] = count\n total += count\n }\n\n return { total, byType }\n },\n },\n\n /**\n * SQL operations\n */\n SQL: {\n async execute(params: { query: string; params?: unknown[] }): Promise<SQLResult> {\n const startTime = Date.now()\n\n // Try RPC method first\n try {\n const result = await rpcCall<{\n rows: Record<string, unknown>[]\n columns: { name: string; type: string }[]\n rowsAffected?: number\n executionTimeMs?: number\n }>('sql.execute', [params.query, params.params || []])\n\n return {\n rows: result.rows ?? [],\n columns: result.columns ?? [],\n rowsAffected: result.rowsAffected,\n executionTimeMs: result.executionTimeMs ?? (Date.now() - startTime),\n }\n } catch (rpcError) {\n // Check if this is a \"not supported\" error\n const errorMessage = rpcError instanceof Error ? rpcError.message : String(rpcError)\n const isNotSupported =\n errorMessage.includes('not found') ||\n errorMessage.includes('not supported') ||\n errorMessage.includes('unknown method')\n\n // Fallback to REST endpoint if exists\n try {\n const response = await restCall<{\n rows: Record<string, unknown>[]\n columns: { name: string; type: string }[]\n rowsAffected?: number\n }>('/sql', {\n method: 'POST',\n body: JSON.stringify({ query: params.query, params: params.params }),\n })\n\n return {\n rows: response.rows ?? [],\n columns: response.columns ?? [],\n rowsAffected: response.rowsAffected,\n executionTimeMs: Date.now() - startTime,\n }\n } catch (restError) {\n // If both methods fail and RPC indicated not supported, throw clearer error\n if (isNotSupported) {\n throw new Error(\n 'SQL execution is not supported by this server. The server does not expose sql.execute RPC method or /sql REST endpoint.'\n )\n }\n throw restError\n }\n }\n },\n },\n\n // Required for interface compatibility\n dup: () => createJsonRpcClient(baseUrl, options),\n onRpcBroken: (_callback: (error: unknown) => void) => {},\n [Symbol.dispose]: () => {},\n }\n}\n\n/**\n * Map a type name to its REST endpoint\n *\n * Supports two patterns:\n * 1. Standard DO types use lowercase plural (e.g., Noun -> /nouns)\n * 2. Custom collection types use the type name directly (e.g., Author -> /Author)\n */\nfunction getEndpointForType(type: string): string {\n // Standard DO types use lowercase plural\n const typeMap: Record<string, string> = {\n Noun: '/nouns',\n Verb: '/verbs',\n Action: '/actions',\n Function: '/functions',\n Event: '/events',\n Relationship: '/relationships',\n Thing: '/things',\n Workflow: '/workflows',\n }\n\n // If it's a known DO type, use the mapped endpoint\n // Otherwise, use the type name directly (for custom collections like Author, Post, etc.)\n return typeMap[type] || `/${type}`\n}\n\n/**\n * Create a client context - factory function matching $Context interface\n */\nexport function $JsonRpcContext(url: string, options?: JsonRpcClientOptions) {\n return createJsonRpcClient(url, options)\n}\n","/**\n * Mock Data Generators for DO Admin\n *\n * Generates realistic mock data for Things, Schemas, and other entities.\n * Used by the mock client for demo/development mode.\n *\n * @module\n */\n\nimport type { Thing, SemanticType, SemanticProperty } from '../types'\n\n// =============================================================================\n// ID Generation\n// =============================================================================\n\nlet idCounter = 0\n\nfunction generateId(prefix = 'mock'): string {\n return `${prefix}_${Date.now().toString(36)}_${(++idCounter).toString(36)}`\n}\n\n// =============================================================================\n// Mock Types / Schemas\n// =============================================================================\n\nconst mockProperties: Record<string, SemanticProperty[]> = {\n User: [\n { name: 'email', label: 'Email', description: 'Email address', rangeIncludes: ['string'], domainIncludes: ['User'], required: true, isArray: false },\n { name: 'role', label: 'Role', description: 'User role', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n { name: 'avatar', label: 'Avatar', description: 'Profile picture URL', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Account status', rangeIncludes: ['string'], domainIncludes: ['User'], required: false, isArray: false },\n ],\n Project: [\n { name: 'description', label: 'Description', description: 'Project description', rangeIncludes: ['string'], domainIncludes: ['Project'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Project status', rangeIncludes: ['string'], domainIncludes: ['Project'], required: true, isArray: false },\n { name: 'owner', label: 'Owner', description: 'Project owner', rangeIncludes: ['User'], domainIncludes: ['Project'], required: true, isArray: false },\n { name: 'tags', label: 'Tags', description: 'Project tags', rangeIncludes: ['string'], domainIncludes: ['Project'], required: false, isArray: true },\n ],\n Task: [\n { name: 'description', label: 'Description', description: 'Task description', rangeIncludes: ['string'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'status', label: 'Status', description: 'Task status', rangeIncludes: ['string'], domainIncludes: ['Task'], required: true, isArray: false },\n { name: 'priority', label: 'Priority', description: 'Task priority', rangeIncludes: ['string'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'assignee', label: 'Assignee', description: 'Assigned user', rangeIncludes: ['User'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'project', label: 'Project', description: 'Parent project', rangeIncludes: ['Project'], domainIncludes: ['Task'], required: false, isArray: false },\n { name: 'dueDate', label: 'Due Date', description: 'Task due date', rangeIncludes: ['date'], domainIncludes: ['Task'], required: false, isArray: false },\n ],\n Document: [\n { name: 'content', label: 'Content', description: 'Document content', rangeIncludes: ['string'], domainIncludes: ['Document'], required: true, isArray: false },\n { name: 'format', label: 'Format', description: 'Content format', rangeIncludes: ['string'], domainIncludes: ['Document'], required: false, isArray: false },\n { name: 'author', label: 'Author', description: 'Document author', rangeIncludes: ['User'], domainIncludes: ['Document'], required: false, isArray: false },\n { name: 'tags', label: 'Tags', description: 'Document tags', rangeIncludes: ['string'], domainIncludes: ['Document'], required: false, isArray: true },\n ],\n Function: [\n { name: 'description', label: 'Description', description: 'Function description', rangeIncludes: ['string'], domainIncludes: ['Function'], required: false, isArray: false },\n { name: 'code', label: 'Code', description: 'Function code', rangeIncludes: ['string'], domainIncludes: ['Function'], required: true, isArray: false },\n { name: 'runtime', label: 'Runtime', description: 'Execution runtime', rangeIncludes: ['string'], domainIncludes: ['Function'], required: true, isArray: false },\n { name: 'triggers', label: 'Triggers', description: 'Event triggers', rangeIncludes: ['string'], domainIncludes: ['Function'], required: false, isArray: true },\n ],\n Workflow: [\n { name: 'description', label: 'Description', description: 'Workflow description', rangeIncludes: ['string'], domainIncludes: ['Workflow'], required: false, isArray: false },\n { name: 'steps', label: 'Steps', description: 'Workflow steps', rangeIncludes: ['object'], domainIncludes: ['Workflow'], required: true, isArray: true },\n { name: 'status', label: 'Status', description: 'Workflow status', rangeIncludes: ['string'], domainIncludes: ['Workflow'], required: true, isArray: false },\n ],\n Agent: [\n { name: 'description', label: 'Description', description: 'Agent description', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: false },\n { name: 'model', label: 'Model', description: 'AI model', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: true, isArray: false },\n { name: 'systemPrompt', label: 'System Prompt', description: 'Agent system prompt', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: false },\n { name: 'tools', label: 'Tools', description: 'Available tools', rangeIncludes: ['string'], domainIncludes: ['Agent'], required: false, isArray: true },\n ],\n}\n\nexport const MOCK_TYPES = Object.keys(mockProperties)\n\nexport function generateMockSchema(typeName: string): SemanticType {\n const properties = mockProperties[typeName] || []\n return {\n namespace: 'default',\n name: typeName,\n id: `default/${typeName}`,\n label: typeName,\n description: `${typeName} entity type`,\n parentTypes: ['Thing'],\n properties,\n subtypes: [],\n }\n}\n\n// =============================================================================\n// Mock Thing Generators\n// =============================================================================\n\nconst firstNames = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Henry', 'Iris', 'Jack']\nconst lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez']\nconst projectNames = ['Apollo', 'Mercury', 'Gemini', 'Voyager', 'Pioneer', 'Horizon', 'Nebula', 'Cosmos', 'Atlas', 'Phoenix']\nconst taskPrefixes = ['Implement', 'Fix', 'Update', 'Review', 'Design', 'Test', 'Deploy', 'Document', 'Refactor', 'Optimize']\nconst statuses = ['active', 'pending', 'completed', 'archived']\nconst priorities = ['low', 'medium', 'high', 'critical']\nconst roles = ['admin', 'editor', 'viewer', 'developer']\n\nfunction randomItem<T>(arr: T[]): T {\n return arr[Math.floor(Math.random() * arr.length)]\n}\n\nfunction randomDate(daysBack = 30): Date {\n const date = new Date()\n date.setDate(date.getDate() - Math.floor(Math.random() * daysBack))\n return date\n}\n\nfunction generateMockUser(id?: string): Thing {\n const firstName = randomItem(firstNames)\n const lastName = randomItem(lastNames)\n const name = `${firstName} ${lastName}`\n const now = new Date()\n const created = randomDate(60)\n\n return {\n ns: 'default',\n type: 'User',\n id: id || generateId('user'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'User',\n email: `${firstName.toLowerCase()}.${lastName.toLowerCase()}@example.com`,\n role: randomItem(roles),\n avatar: `https://api.dicebear.com/7.x/avataaars/svg?seed=${firstName}`,\n status: randomItem(['active', 'inactive']),\n },\n }\n}\n\nfunction generateMockProject(id?: string): Thing {\n const name = `Project ${randomItem(projectNames)}`\n const now = new Date()\n const created = randomDate(90)\n\n return {\n ns: 'default',\n type: 'Project',\n id: id || generateId('proj'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Project',\n description: `A ${randomItem(['web', 'mobile', 'API', 'data', 'ML'])} project focused on ${randomItem(['performance', 'scalability', 'user experience', 'automation', 'analytics'])}`,\n status: randomItem(statuses),\n owner: `user_${Math.floor(Math.random() * 10)}`,\n tags: [randomItem(['frontend', 'backend', 'fullstack']), randomItem(['react', 'node', 'python', 'go'])],\n },\n }\n}\n\nfunction generateMockTask(id?: string): Thing {\n const action = randomItem(taskPrefixes)\n const target = randomItem(['authentication', 'dashboard', 'API endpoint', 'database schema', 'user flow', 'notification system', 'search feature', 'export functionality'])\n const name = `${action} ${target}`\n const now = new Date()\n const created = randomDate(14)\n\n return {\n ns: 'default',\n type: 'Task',\n id: id || generateId('task'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Task',\n description: `${action} the ${target} to improve ${randomItem(['performance', 'reliability', 'usability', 'security'])}`,\n status: randomItem(['todo', 'in_progress', 'review', 'done']),\n priority: randomItem(priorities),\n assignee: `user_${Math.floor(Math.random() * 10)}`,\n dueDate: new Date(Date.now() + Math.random() * 14 * 24 * 60 * 60 * 1000).toISOString(),\n },\n }\n}\n\nfunction generateMockDocument(id?: string): Thing {\n const docTypes = ['README', 'API Documentation', 'Architecture Guide', 'User Manual', 'Release Notes', 'Meeting Notes', 'Technical Spec', 'Design Document']\n const name = randomItem(docTypes)\n const now = new Date()\n const created = randomDate(30)\n\n return {\n ns: 'default',\n type: 'Document',\n id: id || generateId('doc'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Document',\n content: `# ${name}\\n\\nThis is a sample document with mock content.\\n\\n## Overview\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit.`,\n format: 'markdown',\n author: `user_${Math.floor(Math.random() * 10)}`,\n tags: [randomItem(['documentation', 'guide', 'reference']), randomItem(['v1', 'v2', 'draft'])],\n },\n }\n}\n\nfunction generateMockFunction(id?: string): Thing {\n const funcNames = ['processOrder', 'sendNotification', 'validateInput', 'transformData', 'generateReport', 'syncData', 'handleWebhook', 'calculateMetrics']\n const name = randomItem(funcNames)\n const now = new Date()\n const created = randomDate(45)\n\n return {\n ns: 'default',\n type: 'Function',\n id: id || generateId('fn'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Function',\n description: `Handles ${name.replace(/([A-Z])/g, ' $1').toLowerCase().trim()} operations`,\n code: `export default async function ${name}(ctx, args) {\\n // Implementation\\n return { success: true }\\n}`,\n runtime: randomItem(['typescript', 'javascript', 'python']),\n triggers: [randomItem(['http', 'schedule', 'event', 'queue'])],\n },\n }\n}\n\nfunction generateMockWorkflow(id?: string): Thing {\n const workflowNames = ['Order Processing', 'User Onboarding', 'Content Approval', 'Data Pipeline', 'Release Deploy', 'Support Ticket']\n const name = randomItem(workflowNames)\n const now = new Date()\n const created = randomDate(60)\n\n return {\n ns: 'default',\n type: 'Workflow',\n id: id || generateId('wf'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Workflow',\n description: `Automated workflow for ${name.toLowerCase()}`,\n steps: [\n { id: 'step1', name: 'Initialize', type: 'function' },\n { id: 'step2', name: 'Process', type: 'function' },\n { id: 'step3', name: 'Notify', type: 'notification' },\n ],\n status: randomItem(['active', 'paused', 'draft']),\n },\n }\n}\n\nfunction generateMockAgent(id?: string): Thing {\n const agentNames = ['Code Assistant', 'Data Analyst', 'Support Bot', 'Content Writer', 'Research Agent', 'QA Tester']\n const name = randomItem(agentNames)\n const now = new Date()\n const created = randomDate(30)\n\n return {\n ns: 'default',\n type: 'Agent',\n id: id || generateId('agent'),\n ts: now,\n name,\n createdAt: created,\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': 'Agent',\n description: `AI agent specialized in ${name.toLowerCase()} tasks`,\n model: randomItem(['claude-3-opus', 'claude-3-sonnet', 'gpt-4', 'gpt-4-turbo']),\n systemPrompt: `You are a helpful ${name.toLowerCase()} assistant.`,\n tools: [randomItem(['search', 'code', 'browse', 'analyze'])],\n },\n }\n}\n\n// =============================================================================\n// Unified Generator\n// =============================================================================\n\nconst generators: Record<string, (id?: string) => Thing> = {\n User: generateMockUser,\n Project: generateMockProject,\n Task: generateMockTask,\n Document: generateMockDocument,\n Function: generateMockFunction,\n Workflow: generateMockWorkflow,\n Agent: generateMockAgent,\n}\n\nexport function generateMockThing(type: string, id?: string): Thing {\n const generator = generators[type]\n if (generator) {\n return generator(id)\n }\n\n // Generic fallback for unknown types\n const now = new Date()\n return {\n ns: 'default',\n type,\n id: id || generateId(type.toLowerCase()),\n ts: now,\n name: `${type} ${Math.floor(Math.random() * 1000)}`,\n createdAt: randomDate(30),\n updatedAt: now,\n createdBy: 'system',\n data: {\n '@type': type,\n },\n }\n}\n\nexport function generateMockThings(type: string, count: number): Thing[] {\n return Array.from({ length: count }, () => generateMockThing(type))\n}\n\n/**\n * Generate initial mock data set with various types\n */\nexport function generateInitialMockData(): Thing[] {\n return [\n ...generateMockThings('User', 8),\n ...generateMockThings('Project', 5),\n ...generateMockThings('Task', 15),\n ...generateMockThings('Document', 6),\n ...generateMockThings('Function', 4),\n ...generateMockThings('Workflow', 3),\n ...generateMockThings('Agent', 3),\n ]\n}\n","/**\n * Mock Client for DO Admin\n *\n * Provides a mock implementation of the DOClient interface for demo/development mode.\n * All data is stored in memory and persists for the session.\n *\n * @module\n */\n\nimport type { Thing } from '../types'\nimport {\n MOCK_TYPES,\n generateMockSchema,\n generateMockThing,\n generateInitialMockData,\n} from './mock-data'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MockClientOptions {\n /** Initial data to populate the store */\n initialData?: Thing[]\n /** Simulated network delay in ms (default: 100) */\n delay?: number\n /** Whether to log operations (default: false) */\n verbose?: boolean\n}\n\ninterface MockStore {\n things: Map<string, Thing>\n deletedThings: Set<string>\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction thingKey(ns: string, type: string, id: string): string {\n return `${ns}:${type}:${id}`\n}\n\nasync function delay(ms: number): Promise<void> {\n if (ms > 0) {\n await new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n\n// =============================================================================\n// Mock Client Implementation\n// =============================================================================\n\n/**\n * Create a mock client that matches the DOClient interface\n */\nexport function createMockClient(options: MockClientOptions = {}) {\n const { delay: delayMs = 100, verbose = false, initialData } = options\n\n // Initialize store\n const store: MockStore = {\n things: new Map(),\n deletedThings: new Set(),\n }\n\n // Populate with initial data\n const data = initialData ?? generateInitialMockData()\n for (const thing of data) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n store.things.set(key, thing)\n }\n\n if (verbose) {\n console.log(`[MockClient] Initialized with ${store.things.size} things`)\n }\n\n // Helper to log operations\n function log(operation: string, ...args: unknown[]) {\n if (verbose) {\n console.log(`[MockClient] ${operation}`, ...args)\n }\n }\n\n return {\n /**\n * Namespace operations\n */\n Namespace: {\n async list(_params?: { includeSystem?: boolean }) {\n await delay(delayMs)\n log('Namespace.list')\n\n // Get unique namespaces from things\n const namespaces = new Set<string>()\n for (const thing of store.things.values()) {\n namespaces.add(thing.ns)\n }\n\n // Always include default\n namespaces.add('default')\n\n return Array.from(namespaces).map((ns) => ({\n id: ns,\n name: ns,\n }))\n },\n },\n\n /**\n * Schema operations\n */\n Schema: {\n async discover(_params?: { ns?: string }) {\n await delay(delayMs)\n log('Schema.discover')\n\n // Get unique types from things\n const types = new Set<string>()\n for (const thing of store.things.values()) {\n types.add(thing.type)\n }\n\n // Add standard mock types\n for (const type of MOCK_TYPES) {\n types.add(type)\n }\n\n const typeList = Array.from(types).sort()\n\n return {\n namespaces: ['default'],\n types: typeList,\n schemas: typeList,\n }\n },\n\n async get(params: { ns?: string; type: string }) {\n await delay(delayMs)\n log('Schema.get', params.type)\n\n return generateMockSchema(params.type)\n },\n },\n\n /**\n * Thing operations\n */\n Thing: {\n async types(params: { ns?: string; includeSystem?: boolean }) {\n await delay(delayMs)\n log('Thing.types')\n\n // Get unique types from things in namespace\n const types = new Set<string>()\n for (const thing of store.things.values()) {\n if (!params.ns || thing.ns === params.ns) {\n types.add(thing.type)\n }\n }\n\n // Add standard mock types\n for (const type of MOCK_TYPES) {\n types.add(type)\n }\n\n return Array.from(types)\n .sort()\n .map((name) => ({\n name,\n ns: params.ns || 'default',\n }))\n },\n\n async list(params: { ns?: string; type?: string; limit?: number; offset?: number }) {\n await delay(delayMs)\n log('Thing.list', params)\n\n let things = Array.from(store.things.values())\n\n // Filter by namespace\n if (params.ns) {\n things = things.filter((t) => t.ns === params.ns)\n }\n\n // Filter by type\n if (params.type) {\n things = things.filter((t) => t.type === params.type)\n }\n\n // Filter out deleted\n things = things.filter((t) => {\n const key = thingKey(t.ns, t.type, t.id)\n return !store.deletedThings.has(key)\n })\n\n // Sort by updatedAt descending\n things.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())\n\n const total = things.length\n\n // Apply pagination\n const offset = params.offset || 0\n const limit = params.limit || 50\n things = things.slice(offset, offset + limit)\n\n return { data: things, total }\n },\n\n async get(params: { ns?: string; type: string; id: string }) {\n await delay(delayMs)\n log('Thing.get', params)\n\n const key = thingKey(params.ns || 'default', params.type, params.id)\n\n if (store.deletedThings.has(key)) {\n return null\n }\n\n return store.things.get(key) || null\n },\n\n async create(params: { ns?: string; type: string; name?: string; data: unknown }) {\n await delay(delayMs)\n log('Thing.create', params)\n\n const ns = params.ns || 'default'\n const now = new Date()\n\n // Generate a new thing with provided data\n const baseThing = generateMockThing(params.type)\n const thing: Thing = {\n ...baseThing,\n ns,\n id: baseThing.id,\n name: params.name || baseThing.name,\n createdAt: now,\n updatedAt: now,\n ts: now,\n data: {\n '@type': params.type,\n ...(params.data as Record<string, unknown>),\n },\n }\n\n const key = thingKey(ns, params.type, thing.id)\n store.things.set(key, thing)\n\n return thing\n },\n\n async update(params: { ns?: string; type: string; id: string; data: unknown }) {\n await delay(delayMs)\n log('Thing.update', params)\n\n const ns = params.ns || 'default'\n const key = thingKey(ns, params.type, params.id)\n\n const existing = store.things.get(key)\n if (!existing || store.deletedThings.has(key)) {\n throw new Error(`Thing not found: ${key}`)\n }\n\n const now = new Date()\n const updated: Thing = {\n ...existing,\n updatedAt: now,\n ts: now,\n data: {\n ...existing.data,\n ...(params.data as Record<string, unknown>),\n },\n }\n\n store.things.set(key, updated)\n\n return updated\n },\n\n async delete(params: { ns?: string; type: string; id: string; hard?: boolean }) {\n await delay(delayMs)\n log('Thing.delete', params)\n\n const ns = params.ns || 'default'\n const key = thingKey(ns, params.type, params.id)\n\n if (params.hard) {\n store.things.delete(key)\n } else {\n store.deletedThings.add(key)\n }\n\n return { success: true }\n },\n\n async versions(_params: { ns?: string; type: string; id: string }) {\n await delay(delayMs)\n log('Thing.versions', _params)\n\n // Mock: return empty versions (version history not implemented in mock)\n return []\n },\n\n async stats(_params: { ns?: string; type?: string }) {\n await delay(delayMs)\n log('Thing.stats', _params)\n\n const byType: Record<string, number> = {}\n let total = 0\n\n for (const thing of store.things.values()) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n if (store.deletedThings.has(key)) continue\n if (_params.ns && thing.ns !== _params.ns) continue\n if (_params.type && thing.type !== _params.type) continue\n\n byType[thing.type] = (byType[thing.type] || 0) + 1\n total++\n }\n\n return { total, byType }\n },\n },\n\n /**\n * SQL operations (mock implementation)\n */\n SQL: {\n async execute(params: { query: string; params?: unknown[] }) {\n await delay(delayMs)\n log('SQL.execute', params.query)\n\n // Simple mock SQL that returns things as rows\n const query = params.query.toLowerCase().trim()\n\n if (query.startsWith('select')) {\n // Parse simple SELECT * FROM <type> queries\n const match = query.match(/select\\s+\\*\\s+from\\s+(\\w+)/i)\n if (match) {\n const type = match[1]\n const things = Array.from(store.things.values()).filter(\n (t) => t.type.toLowerCase() === type.toLowerCase()\n )\n\n const rows = things.map((t) => ({\n id: t.id,\n ns: t.ns,\n type: t.type,\n name: t.name,\n createdAt: t.createdAt,\n updatedAt: t.updatedAt,\n data: JSON.stringify(t.data),\n }))\n\n return {\n rows,\n columns: [\n { name: 'id', type: 'string' },\n { name: 'ns', type: 'string' },\n { name: 'type', type: 'string' },\n { name: 'name', type: 'string' },\n { name: 'createdAt', type: 'datetime' },\n { name: 'updatedAt', type: 'datetime' },\n { name: 'data', type: 'json' },\n ],\n rowsAffected: rows.length,\n executionTimeMs: delayMs,\n }\n }\n }\n\n // Default: return empty result\n return {\n rows: [],\n columns: [],\n rowsAffected: 0,\n executionTimeMs: delayMs,\n }\n },\n },\n\n // Required for interface compatibility\n dup: () => createMockClient(options),\n onRpcBroken: (_callback: (error: unknown) => void) => {\n // Mock client never breaks\n },\n [Symbol.dispose]: () => {\n // Nothing to dispose\n },\n\n // Mock-specific methods for testing\n _store: store,\n _reset: () => {\n store.things.clear()\n store.deletedThings.clear()\n const freshData = initialData ?? generateInitialMockData()\n for (const thing of freshData) {\n const key = thingKey(thing.ns, thing.type, thing.id)\n store.things.set(key, thing)\n }\n },\n }\n}\n\n/**\n * Create a mock client context - factory function matching DOClient interface\n */\nexport function $MockContext(options?: MockClientOptions) {\n return createMockClient(options)\n}\n","/**\n * URL utilities for @mdxui/do\n *\n * Provides functions to normalize and derive URLs from the configuration.\n * These utilities ensure consistent URL formatting across the package.\n *\n * @module\n */\n\n/**\n * Normalize a URL to an RPC endpoint\n *\n * Transforms various URL formats into a consistent RPC endpoint URL:\n * - Converts wss:// to https:// and ws:// to http://\n * - Strips trailing /sync or /rpc if present\n * - Appends /rpc\n *\n * @param url - The base URL (e.g., 'https://api.do/admin' or 'wss://api.do/do/workspace')\n * @returns The normalized RPC URL (e.g., 'https://api.do/admin/rpc')\n *\n * @example\n * ```typescript\n * deriveRpcUrl('https://api.do/admin')\n * // => 'https://api.do/admin/rpc'\n *\n * deriveRpcUrl('wss://api.do/do/workspace/sync')\n * // => 'https://api.do/do/workspace/rpc'\n *\n * deriveRpcUrl('https://api.do/admin/rpc')\n * // => 'https://api.do/admin/rpc' (unchanged)\n * ```\n */\nexport function deriveRpcUrl(url: string): string {\n // Convert WebSocket to HTTP if needed\n let rpcUrl = url.replace(/^wss:/, 'https:').replace(/^ws:/, 'http:')\n // Strip any existing /sync or /rpc suffix\n rpcUrl = rpcUrl.replace(/\\/(sync|rpc)$/, '')\n // Strip trailing slash\n rpcUrl = rpcUrl.replace(/\\/$/, '')\n // Append /rpc\n return `${rpcUrl}/rpc`\n}\n","/**\n * Fetch wrapper with configurable timeout\n *\n * Prevents indefinite hangs on slow networks or unresponsive servers\n * by wrapping fetch with AbortController-based timeout.\n *\n * @module\n */\n\n/**\n * Default timeout in milliseconds (30 seconds)\n */\nexport const DEFAULT_REQUEST_TIMEOUT = 30000\n\n/**\n * Extended RequestInit that includes optional timeout\n */\nexport interface FetchWithTimeoutOptions extends RequestInit {\n /** Timeout in milliseconds. Defaults to 30000 (30 seconds) */\n timeout?: number\n}\n\n/**\n * Fetch wrapper with configurable timeout\n *\n * Uses AbortController to cancel requests that exceed the timeout.\n * If the request already has a signal, a composite abort will be used\n * that respects both the existing signal and the timeout.\n *\n * @param url - The URL to fetch\n * @param options - Fetch options including optional timeout\n * @returns Promise resolving to the Response\n * @throws {DOMException} AbortError if the request times out\n *\n * @example\n * ```typescript\n * // Basic usage with default 30s timeout\n * const response = await fetchWithTimeout('https://api.example.com/data')\n *\n * // Custom timeout\n * const response = await fetchWithTimeout('https://api.example.com/data', {\n * timeout: 5000, // 5 seconds\n * })\n *\n * // With other fetch options\n * const response = await fetchWithTimeout('https://api.example.com/data', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json' },\n * body: JSON.stringify({ key: 'value' }),\n * timeout: 10000,\n * })\n * ```\n */\nexport async function fetchWithTimeout(\n url: string,\n options: FetchWithTimeoutOptions = {}\n): Promise<Response> {\n const { timeout = DEFAULT_REQUEST_TIMEOUT, signal: existingSignal, ...fetchOptions } = options\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n // If there's an existing signal, listen for its abort\n const existingAbortHandler = existingSignal\n ? () => controller.abort(existingSignal.reason)\n : null\n\n if (existingSignal) {\n if (existingSignal.aborted) {\n clearTimeout(timeoutId)\n controller.abort(existingSignal.reason)\n } else {\n existingSignal.addEventListener('abort', existingAbortHandler!)\n }\n }\n\n try {\n const response = await fetch(url, {\n ...fetchOptions,\n signal: controller.signal,\n })\n return response\n } finally {\n clearTimeout(timeoutId)\n if (existingSignal && existingAbortHandler) {\n existingSignal.removeEventListener('abort', existingAbortHandler)\n }\n }\n}\n\n/**\n * Create a fetch wrapper with a default timeout from config\n *\n * Useful for creating a configured fetch function that can be shared\n * across multiple hooks/components with consistent timeout behavior.\n *\n * @param defaultTimeout - Default timeout in milliseconds\n * @returns A fetch function with the default timeout applied\n *\n * @example\n * ```typescript\n * // Create a configured fetch\n * const configuredFetch = createFetchWithTimeout(5000)\n *\n * // Use it (timeout defaults to 5000ms)\n * const response = await configuredFetch('https://api.example.com/data')\n *\n * // Override the default timeout\n * const response = await configuredFetch('https://api.example.com/data', {\n * timeout: 10000,\n * })\n * ```\n */\nexport function createFetchWithTimeout(defaultTimeout: number) {\n return (url: string, options: FetchWithTimeoutOptions = {}): Promise<Response> =>\n fetchWithTimeout(url, { timeout: defaultTimeout, ...options })\n}\n","'use client'\n\n/**\n * Health check hook for @mdxui/do\n *\n * Provides a reusable hook for checking API endpoint connectivity\n * with retry logic and exponential backoff.\n *\n * @module\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\nimport { fetchWithTimeout, DEFAULT_REQUEST_TIMEOUT } from './fetch-with-timeout'\nimport { retryWithBackoff } from './utils'\n\n/**\n * Configuration for health check behavior\n */\nexport interface HealthCheckConfig {\n /** API endpoint base URL (e.g., 'https://api.do/admin') */\n apiEndpoint: string\n /** Optional auth token for Bearer authentication */\n authToken?: string\n /** Request timeout in milliseconds (defaults to DEFAULT_REQUEST_TIMEOUT) */\n requestTimeout?: number\n /** Number of retry attempts (defaults to 3) */\n healthCheckRetries?: number\n}\n\n/**\n * Result of the health check hook\n */\nexport interface HealthCheckResult {\n /** Whether the API is reachable */\n isConnected: boolean\n /** Error from the last failed attempt, if any */\n connectionError?: Error\n /** Manually trigger a health check */\n checkConnection: () => Promise<void>\n /** Whether a check is currently in progress */\n isChecking: boolean\n}\n\n/**\n * Hook to perform health checks against an API endpoint\n *\n * Automatically checks connection on mount with retry and exponential backoff.\n * Can also be manually triggered via the returned `checkConnection` function.\n *\n * @param config - Health check configuration\n * @returns Health check state and manual trigger function\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { isConnected, connectionError, checkConnection } = useHealthCheck({\n * apiEndpoint: 'https://api.do/admin',\n * authToken: 'my-token',\n * healthCheckRetries: 3,\n * })\n *\n * if (connectionError) {\n * return <div>Connection failed: {connectionError.message}</div>\n * }\n *\n * if (!isConnected) {\n * return <div>Connecting...</div>\n * }\n *\n * return <div>Connected!</div>\n * }\n * ```\n */\nexport function useHealthCheck(config: HealthCheckConfig): HealthCheckResult {\n const [isConnected, setIsConnected] = useState(false)\n const [connectionError, setConnectionError] = useState<Error>()\n const [isChecking, setIsChecking] = useState(true)\n\n const { apiEndpoint, authToken, requestTimeout, healthCheckRetries = 3 } = config\n\n // AbortController for cancellation support in useEffect\n const abortControllerRef = useRef<AbortController | null>(null)\n\n /**\n * Performs a single health check request\n * Shared between manual checkConnection and useEffect\n * Uses root endpoint (/) for broader compatibility\n */\n const performHealthCheck = useCallback(async (): Promise<void> => {\n const response = await fetchWithTimeout(apiEndpoint, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n timeout: requestTimeout ?? DEFAULT_REQUEST_TIMEOUT,\n })\n\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.status}`)\n }\n }, [apiEndpoint, authToken, requestTimeout])\n\n const checkConnection = useCallback(async () => {\n setIsChecking(true)\n\n try {\n await retryWithBackoff(performHealthCheck, {\n maxRetries: healthCheckRetries,\n backoffMultiplier: 1000,\n })\n\n setIsConnected(true)\n setConnectionError(undefined)\n } catch (error) {\n setIsConnected(false)\n setConnectionError(error instanceof Error ? error : new Error('Connection failed'))\n } finally {\n setIsChecking(false)\n }\n }, [performHealthCheck, healthCheckRetries])\n\n // Check connection on mount\n useEffect(() => {\n abortControllerRef.current = new AbortController()\n const { signal } = abortControllerRef.current\n\n async function runCheck() {\n try {\n await retryWithBackoff(performHealthCheck, {\n maxRetries: healthCheckRetries,\n backoffMultiplier: 1000,\n signal,\n })\n\n if (!signal.aborted) {\n setIsConnected(true)\n setConnectionError(undefined)\n setIsChecking(false)\n }\n } catch (error) {\n if (!signal.aborted) {\n setIsConnected(false)\n setConnectionError(error instanceof Error ? error : new Error('Connection failed'))\n setIsChecking(false)\n }\n }\n }\n\n runCheck()\n\n return () => {\n abortControllerRef.current?.abort()\n }\n }, [performHealthCheck, healthCheckRetries])\n\n return {\n isConnected,\n connectionError,\n checkConnection,\n isChecking,\n }\n}\n"]}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { deriveRpcUrl, $MockContext, $JsonRpcContext, $CapnwebContext, useHealthCheck } from './chunk-OVLO7UOH.js';
|
|
2
|
+
import { useQuery, useQueryClient, useMutation, QueryClientProvider, QueryClient } from '@tanstack/react-query';
|
|
3
|
+
export { useQueryClient } from '@tanstack/react-query';
|
|
4
|
+
import { DataProviderContext } from '@mdxui/app';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var doStateKeys = {
|
|
9
|
+
all: ["do-state"],
|
|
10
|
+
endpoint: () => [...doStateKeys.all, "endpoint"],
|
|
11
|
+
namespace: () => [...doStateKeys.all, "namespace"],
|
|
12
|
+
recentEndpoints: () => [...doStateKeys.all, "recent-endpoints"]
|
|
13
|
+
};
|
|
14
|
+
var STORAGE_KEYS = {
|
|
15
|
+
endpoint: "do-endpoint",
|
|
16
|
+
namespace: "do-namespace",
|
|
17
|
+
recentEndpoints: "do-recent-endpoints"
|
|
18
|
+
};
|
|
19
|
+
var DEFAULTS = {
|
|
20
|
+
namespace: "default",
|
|
21
|
+
maxRecentEndpoints: 5
|
|
22
|
+
};
|
|
23
|
+
function getStoredValue(key, fallback) {
|
|
24
|
+
if (typeof window === "undefined") return fallback;
|
|
25
|
+
try {
|
|
26
|
+
const stored = localStorage.getItem(key);
|
|
27
|
+
return stored ? JSON.parse(stored) : fallback;
|
|
28
|
+
} catch {
|
|
29
|
+
return fallback;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function setStoredValue(key, value) {
|
|
33
|
+
if (typeof window === "undefined") return;
|
|
34
|
+
try {
|
|
35
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function useEndpoint(defaultEndpoint) {
|
|
40
|
+
const { data: endpoint = defaultEndpoint } = useQuery({
|
|
41
|
+
queryKey: doStateKeys.endpoint(),
|
|
42
|
+
queryFn: () => getStoredValue(STORAGE_KEYS.endpoint, defaultEndpoint),
|
|
43
|
+
staleTime: Infinity,
|
|
44
|
+
gcTime: Infinity
|
|
45
|
+
});
|
|
46
|
+
return endpoint;
|
|
47
|
+
}
|
|
48
|
+
function useSetEndpoint() {
|
|
49
|
+
const queryClient = useQueryClient();
|
|
50
|
+
return useMutation({
|
|
51
|
+
mutationFn: async (newEndpoint) => {
|
|
52
|
+
setStoredValue(STORAGE_KEYS.endpoint, newEndpoint);
|
|
53
|
+
const recent = getStoredValue(STORAGE_KEYS.recentEndpoints, []);
|
|
54
|
+
const updated = [
|
|
55
|
+
newEndpoint,
|
|
56
|
+
...recent.filter((e) => e !== newEndpoint)
|
|
57
|
+
].slice(0, DEFAULTS.maxRecentEndpoints);
|
|
58
|
+
setStoredValue(STORAGE_KEYS.recentEndpoints, updated);
|
|
59
|
+
return newEndpoint;
|
|
60
|
+
},
|
|
61
|
+
onSuccess: (newEndpoint) => {
|
|
62
|
+
queryClient.setQueryData(doStateKeys.endpoint(), newEndpoint);
|
|
63
|
+
queryClient.invalidateQueries({ queryKey: doStateKeys.recentEndpoints() });
|
|
64
|
+
queryClient.invalidateQueries({
|
|
65
|
+
predicate: (query) => {
|
|
66
|
+
const key = query.queryKey[0];
|
|
67
|
+
return key !== "do-state";
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function useNamespace(defaultNamespace) {
|
|
74
|
+
const fallback = defaultNamespace ?? DEFAULTS.namespace;
|
|
75
|
+
const { data: namespace = fallback } = useQuery({
|
|
76
|
+
queryKey: doStateKeys.namespace(),
|
|
77
|
+
queryFn: () => getStoredValue(STORAGE_KEYS.namespace, fallback),
|
|
78
|
+
staleTime: Infinity,
|
|
79
|
+
gcTime: Infinity
|
|
80
|
+
});
|
|
81
|
+
return namespace;
|
|
82
|
+
}
|
|
83
|
+
function useSetNamespace() {
|
|
84
|
+
const queryClient = useQueryClient();
|
|
85
|
+
return useMutation({
|
|
86
|
+
mutationFn: async (newNamespace) => {
|
|
87
|
+
setStoredValue(STORAGE_KEYS.namespace, newNamespace);
|
|
88
|
+
return newNamespace;
|
|
89
|
+
},
|
|
90
|
+
onSuccess: (newNamespace) => {
|
|
91
|
+
queryClient.setQueryData(doStateKeys.namespace(), newNamespace);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function useRecentEndpoints() {
|
|
96
|
+
const { data: recentEndpoints = [] } = useQuery({
|
|
97
|
+
queryKey: doStateKeys.recentEndpoints(),
|
|
98
|
+
queryFn: () => getStoredValue(STORAGE_KEYS.recentEndpoints, []),
|
|
99
|
+
staleTime: Infinity,
|
|
100
|
+
gcTime: Infinity
|
|
101
|
+
});
|
|
102
|
+
return recentEndpoints;
|
|
103
|
+
}
|
|
104
|
+
function useDOState(defaults) {
|
|
105
|
+
const endpoint = useEndpoint(defaults.endpoint);
|
|
106
|
+
const namespace = useNamespace(defaults?.namespace);
|
|
107
|
+
const recentEndpoints = useRecentEndpoints();
|
|
108
|
+
const setEndpointMutation = useSetEndpoint();
|
|
109
|
+
const setNamespaceMutation = useSetNamespace();
|
|
110
|
+
return {
|
|
111
|
+
// Current state
|
|
112
|
+
endpoint,
|
|
113
|
+
namespace,
|
|
114
|
+
recentEndpoints,
|
|
115
|
+
// Setters
|
|
116
|
+
setEndpoint: setEndpointMutation.mutate,
|
|
117
|
+
setNamespace: setNamespaceMutation.mutate,
|
|
118
|
+
// Loading/error states (if needed)
|
|
119
|
+
isChangingEndpoint: setEndpointMutation.isPending,
|
|
120
|
+
isChangingNamespace: setNamespaceMutation.isPending
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function createQueryClient() {
|
|
124
|
+
return new QueryClient({
|
|
125
|
+
defaultOptions: {
|
|
126
|
+
queries: {
|
|
127
|
+
// Stale time: 30 seconds (data considered fresh)
|
|
128
|
+
staleTime: 30 * 1e3,
|
|
129
|
+
// Cache time: 5 minutes (keep in cache after unmount)
|
|
130
|
+
gcTime: 5 * 60 * 1e3,
|
|
131
|
+
// Retry failed requests 1 time
|
|
132
|
+
retry: 1,
|
|
133
|
+
// Refetch on window focus for fresh data
|
|
134
|
+
refetchOnWindowFocus: true
|
|
135
|
+
},
|
|
136
|
+
mutations: {
|
|
137
|
+
// Retry mutations once on failure
|
|
138
|
+
retry: 1
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
var DOContext = React.createContext(null);
|
|
144
|
+
function useDO() {
|
|
145
|
+
const context = React.useContext(DOContext);
|
|
146
|
+
if (!context) {
|
|
147
|
+
throw new Error("useDO must be used within a DOProvider");
|
|
148
|
+
}
|
|
149
|
+
return context;
|
|
150
|
+
}
|
|
151
|
+
function useDOClient() {
|
|
152
|
+
const { client } = useDO();
|
|
153
|
+
return client;
|
|
154
|
+
}
|
|
155
|
+
function useDOUrls() {
|
|
156
|
+
const { rpcUrl, config } = useDO();
|
|
157
|
+
return {
|
|
158
|
+
rpcUrl,
|
|
159
|
+
apiEndpoint: config.apiEndpoint
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function useSyncStatus() {
|
|
163
|
+
return "disconnected";
|
|
164
|
+
}
|
|
165
|
+
function DOProviderInner({
|
|
166
|
+
config,
|
|
167
|
+
initialNamespace,
|
|
168
|
+
userId,
|
|
169
|
+
isConnected,
|
|
170
|
+
connectionError,
|
|
171
|
+
rpcUrl,
|
|
172
|
+
client,
|
|
173
|
+
children
|
|
174
|
+
}) {
|
|
175
|
+
const namespace = useNamespace(initialNamespace);
|
|
176
|
+
const { mutate: setNamespace } = useSetNamespace();
|
|
177
|
+
const value = React.useMemo(
|
|
178
|
+
() => ({
|
|
179
|
+
config,
|
|
180
|
+
namespace,
|
|
181
|
+
setNamespace,
|
|
182
|
+
userId,
|
|
183
|
+
isConnected,
|
|
184
|
+
connectionError,
|
|
185
|
+
rpcUrl,
|
|
186
|
+
client
|
|
187
|
+
}),
|
|
188
|
+
[config, namespace, setNamespace, userId, isConnected, connectionError, rpcUrl, client]
|
|
189
|
+
);
|
|
190
|
+
return /* @__PURE__ */ jsx(DOContext.Provider, { value, children });
|
|
191
|
+
}
|
|
192
|
+
function DOProvider({
|
|
193
|
+
config,
|
|
194
|
+
initialNamespace = "default",
|
|
195
|
+
userId,
|
|
196
|
+
children,
|
|
197
|
+
queryClient: providedQueryClient
|
|
198
|
+
}) {
|
|
199
|
+
const rpcUrl = config.rpcUrl ?? deriveRpcUrl(config.apiEndpoint);
|
|
200
|
+
const client = React.useMemo(() => {
|
|
201
|
+
const clientType = config.clientType ?? "capnweb";
|
|
202
|
+
const authToken = config.authToken;
|
|
203
|
+
if (process.env.NODE_ENV === "development") {
|
|
204
|
+
if (clientType === "mock") {
|
|
205
|
+
console.log("[@mdxui/do] Initializing mock client (demo mode)");
|
|
206
|
+
} else {
|
|
207
|
+
const url = clientType === "json-rpc" ? config.apiEndpoint : rpcUrl;
|
|
208
|
+
console.log(`[@mdxui/do] Initializing ${clientType} client with URL: ${url}`, authToken ? "(authenticated)" : "(no auth)");
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (clientType === "mock") {
|
|
212
|
+
return $MockContext({ verbose: process.env.NODE_ENV === "development" });
|
|
213
|
+
}
|
|
214
|
+
if (clientType === "json-rpc") {
|
|
215
|
+
return $JsonRpcContext(config.apiEndpoint, { authToken });
|
|
216
|
+
}
|
|
217
|
+
return $CapnwebContext(rpcUrl, { authToken });
|
|
218
|
+
}, [rpcUrl, config.apiEndpoint, config.clientType, config.authToken]);
|
|
219
|
+
const isMockMode = config.clientType === "mock";
|
|
220
|
+
const healthCheckResult = useHealthCheck({
|
|
221
|
+
apiEndpoint: config.apiEndpoint,
|
|
222
|
+
authToken: config.authToken,
|
|
223
|
+
requestTimeout: config.requestTimeout,
|
|
224
|
+
healthCheckRetries: config.healthCheckRetries
|
|
225
|
+
});
|
|
226
|
+
const isConnected = config.skipHealthCheck || isMockMode ? true : healthCheckResult.isConnected;
|
|
227
|
+
const connectionError = config.skipHealthCheck || isMockMode ? void 0 : healthCheckResult.connectionError;
|
|
228
|
+
const [queryClient] = React.useState(() => providedQueryClient ?? createQueryClient());
|
|
229
|
+
return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(
|
|
230
|
+
DOProviderInner,
|
|
231
|
+
{
|
|
232
|
+
config,
|
|
233
|
+
initialNamespace,
|
|
234
|
+
userId,
|
|
235
|
+
isConnected,
|
|
236
|
+
connectionError,
|
|
237
|
+
rpcUrl,
|
|
238
|
+
client,
|
|
239
|
+
children
|
|
240
|
+
}
|
|
241
|
+
) });
|
|
242
|
+
}
|
|
243
|
+
function useDataProviderSafe() {
|
|
244
|
+
return React.useContext(DataProviderContext);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export { DOProvider, doStateKeys, useDO, useDOClient, useDOState, useDOUrls, useDataProviderSafe, useEndpoint, useNamespace, useRecentEndpoints, useSetEndpoint, useSetNamespace, useSyncStatus };
|
|
248
|
+
//# sourceMappingURL=chunk-WMNT4OIE.js.map
|
|
249
|
+
//# sourceMappingURL=chunk-WMNT4OIE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/state/do-state.ts","../src/providers/do-provider.tsx"],"names":[],"mappings":"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","file":"chunk-WMNT4OIE.js","sourcesContent":["/**\n * DO State Management via TanStack Query\n *\n * Uses QueryClient as a unified state container for both server and client state.\n * Client state uses `staleTime: Infinity` to prevent refetching.\n *\n * Benefits:\n * - Single source of truth (QueryClient)\n * - Built-in devtools\n * - Reactive updates across components\n * - Easy persistence via localStorage\n * - Invalidation patterns (endpoint change → invalidate data)\n */\n\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\n\n// ============================================================================\n// Query Keys\n// ============================================================================\n\nexport const doStateKeys = {\n all: ['do-state'] as const,\n endpoint: () => [...doStateKeys.all, 'endpoint'] as const,\n namespace: () => [...doStateKeys.all, 'namespace'] as const,\n recentEndpoints: () => [...doStateKeys.all, 'recent-endpoints'] as const,\n} as const\n\n// ============================================================================\n// LocalStorage Keys & Defaults\n// ============================================================================\n\nconst STORAGE_KEYS = {\n endpoint: 'do-endpoint',\n namespace: 'do-namespace',\n recentEndpoints: 'do-recent-endpoints',\n} as const\n\nconst DEFAULTS = {\n namespace: 'default',\n maxRecentEndpoints: 5,\n} as const\n\n// ============================================================================\n// Storage Utilities\n// ============================================================================\n\nfunction getStoredValue<T>(key: string, fallback: T): T {\n if (typeof window === 'undefined') return fallback\n try {\n const stored = localStorage.getItem(key)\n return stored ? JSON.parse(stored) : fallback\n } catch {\n return fallback\n }\n}\n\nfunction setStoredValue<T>(key: string, value: T): void {\n if (typeof window === 'undefined') return\n try {\n localStorage.setItem(key, JSON.stringify(value))\n } catch {\n // Ignore storage errors\n }\n}\n\n// ============================================================================\n// Endpoint State\n// ============================================================================\n\n/**\n * Get the current API endpoint.\n *\n * @param defaultEndpoint - Required fallback from config (e.g., config.do.apiEndpoint)\n */\nexport function useEndpoint(defaultEndpoint: string) {\n const { data: endpoint = defaultEndpoint } = useQuery({\n queryKey: doStateKeys.endpoint(),\n queryFn: () => getStoredValue(STORAGE_KEYS.endpoint, defaultEndpoint),\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return endpoint\n}\n\n/**\n * Set the API endpoint and track in recent list\n */\nexport function useSetEndpoint() {\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (newEndpoint: string) => {\n // Update endpoint\n setStoredValue(STORAGE_KEYS.endpoint, newEndpoint)\n\n // Update recent endpoints list\n const recent = getStoredValue<string[]>(STORAGE_KEYS.recentEndpoints, [])\n const updated = [\n newEndpoint,\n ...recent.filter((e) => e !== newEndpoint),\n ].slice(0, DEFAULTS.maxRecentEndpoints)\n setStoredValue(STORAGE_KEYS.recentEndpoints, updated)\n\n return newEndpoint\n },\n onSuccess: (newEndpoint) => {\n // Update query cache\n queryClient.setQueryData(doStateKeys.endpoint(), newEndpoint)\n queryClient.invalidateQueries({ queryKey: doStateKeys.recentEndpoints() })\n\n // Invalidate all data queries when endpoint changes\n // This forces refetch from new server\n queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey[0]\n // Invalidate everything except our state keys\n return key !== 'do-state'\n },\n })\n },\n })\n}\n\n// ============================================================================\n// Namespace State\n// ============================================================================\n\n/**\n * Get the current namespace\n */\nexport function useNamespace(defaultNamespace?: string) {\n const fallback = defaultNamespace ?? DEFAULTS.namespace\n\n const { data: namespace = fallback } = useQuery({\n queryKey: doStateKeys.namespace(),\n queryFn: () => getStoredValue(STORAGE_KEYS.namespace, fallback),\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return namespace\n}\n\n/**\n * Set the current namespace\n */\nexport function useSetNamespace() {\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationFn: async (newNamespace: string) => {\n setStoredValue(STORAGE_KEYS.namespace, newNamespace)\n return newNamespace\n },\n onSuccess: (newNamespace) => {\n queryClient.setQueryData(doStateKeys.namespace(), newNamespace)\n\n // Optionally invalidate namespace-scoped queries\n // queryClient.invalidateQueries({ queryKey: ['things'] })\n },\n })\n}\n\n// ============================================================================\n// Recent Endpoints\n// ============================================================================\n\n/**\n * Get list of recently used endpoints\n */\nexport function useRecentEndpoints() {\n const { data: recentEndpoints = [] } = useQuery({\n queryKey: doStateKeys.recentEndpoints(),\n queryFn: () => getStoredValue<string[]>(STORAGE_KEYS.recentEndpoints, []),\n staleTime: Infinity,\n gcTime: Infinity,\n })\n\n return recentEndpoints\n}\n\n// ============================================================================\n// Combined Hook (convenience)\n// ============================================================================\n\n/**\n * Combined hook for all DO state (endpoint, namespace, recentEndpoints)\n */\nexport function useDOState(defaults: { endpoint: string; namespace?: string }) {\n const endpoint = useEndpoint(defaults.endpoint)\n const namespace = useNamespace(defaults?.namespace)\n const recentEndpoints = useRecentEndpoints()\n const setEndpointMutation = useSetEndpoint()\n const setNamespaceMutation = useSetNamespace()\n\n return {\n // Current state\n endpoint,\n namespace,\n recentEndpoints,\n\n // Setters\n setEndpoint: setEndpointMutation.mutate,\n setNamespace: setNamespaceMutation.mutate,\n\n // Loading/error states (if needed)\n isChangingEndpoint: setEndpointMutation.isPending,\n isChangingNamespace: setNamespaceMutation.isPending,\n }\n}\n","'use client'\n\nimport type { DataProvider } from '@mdxui/app'\nimport { DataProviderContext } from '@mdxui/app'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport * as React from 'react'\nimport { $CapnwebContext } from '../lib/capnweb-client'\nimport { $JsonRpcContext } from '../lib/json-rpc-client'\nimport { $MockContext } from '../lib/mock-client'\nimport { deriveRpcUrl } from '../lib/url-utils'\nimport { useHealthCheck } from '../lib/use-health-check'\nimport { useNamespace, useSetNamespace } from '../state'\nimport type { DOAdminConfig } from '../types'\n\n/**\n * Create a QueryClient with sensible defaults for @mdxui/do\n */\nfunction createQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n // Stale time: 30 seconds (data considered fresh)\n staleTime: 30 * 1000,\n // Cache time: 5 minutes (keep in cache after unmount)\n gcTime: 5 * 60 * 1000,\n // Retry failed requests 1 time\n retry: 1,\n // Refetch on window focus for fresh data\n refetchOnWindowFocus: true,\n },\n mutations: {\n // Retry mutations once on failure\n retry: 1,\n },\n },\n })\n}\n\n/**\n * Type for the DO client instance\n *\n * The client provides a structured interface for RPC operations.\n * Common patterns:\n * - client.Thing.list({ type: 'User' })\n * - client.Thing.get({ id: 'xxx' })\n * - client.Thing.create({ type: 'User', name: 'Alice', data: {} })\n * - client.Schema.discover()\n */\nexport type DOClient = ReturnType<typeof $CapnwebContext>\n\n/**\n * DO Context value\n *\n * Provides access to config, connection state, RPC URL, and the @dotdo/client instance.\n */\nexport interface DOContextValue {\n /** Admin configuration */\n config: DOAdminConfig\n /** Current namespace */\n namespace: string\n /** Set current namespace */\n setNamespace: (ns: string) => void\n /** Current user ID */\n userId?: string\n /** Is connected to backend? */\n isConnected: boolean\n /** Connection error */\n connectionError?: Error\n /** RPC URL for capnweb session */\n rpcUrl: string\n /** @dotdo/client instance for direct RPC calls */\n client: DOClient\n}\n\n/**\n * DO Context\n */\nconst DOContext = React.createContext<DOContextValue | null>(null)\n\n/**\n * Primary hook for accessing the DO provider context.\n *\n * This is the **main hook for application development** with @mdxui/do.\n * It provides access to configuration, connection state, RPC URL, and the client.\n *\n * @returns The DO context value containing config, state, rpcUrl, and client\n * @throws Error if called outside of a `DOProvider`\n *\n * @example\n * ```tsx\n * import { useDO } from '@mdxui/do'\n *\n * function ConnectionStatus() {\n * const { isConnected, namespace, rpcUrl, client } = useDO()\n *\n * const handleFetch = async () => {\n * const users = await client.Thing.list({ type: 'User' })\n * console.log(users)\n * }\n *\n * return (\n * <div>\n * <span>Namespace: {namespace}</span>\n * <span>Connected: {isConnected ? 'Yes' : 'No'}</span>\n * <button onClick={handleFetch}>Fetch Users</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function useDO(): DOContextValue {\n const context = React.useContext(DOContext)\n if (!context) {\n throw new Error('useDO must be used within a DOProvider')\n }\n return context\n}\n\n/**\n * Hook to access the @dotdo/client instance directly.\n *\n * Convenience hook for components that only need the RPC client.\n *\n * @returns The @dotdo/client instance\n * @throws Error if called outside of a `DOProvider`\n *\n * @example\n * ```tsx\n * import { useDOClient } from '@mdxui/do'\n *\n * function UserList() {\n * const client = useDOClient()\n * const [users, setUsers] = useState([])\n *\n * useEffect(() => {\n * client.Thing.list({ type: 'User' }).then(setUsers)\n * }, [client])\n *\n * return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>\n * }\n * ```\n */\nexport function useDOClient(): DOClient {\n const { client } = useDO()\n return client\n}\n\n/**\n * Convenience hook to access derived URLs for API operations.\n *\n * Returns URL endpoints from the DOProvider configuration,\n * useful for making direct API calls or debugging connection issues.\n *\n * @returns Object containing rpcUrl and apiEndpoint\n */\nexport function useDOUrls() {\n const { rpcUrl, config } = useDO()\n return {\n rpcUrl,\n apiEndpoint: config.apiEndpoint,\n }\n}\n\n/**\n * @deprecated Sync status is no longer available in the simplified RPC-only architecture.\n * This function is kept for backward compatibility but always returns 'disconnected'.\n */\nexport function useSyncStatus(): 'disconnected' {\n return 'disconnected'\n}\n\n/**\n * Props for DOProvider\n */\nexport interface DOProviderProps {\n /** Admin configuration */\n config: DOAdminConfig\n /** Initial namespace */\n initialNamespace?: string\n /** Current user ID */\n userId?: string\n /** Children */\n children: React.ReactNode\n /** Custom QueryClient (for testing) */\n queryClient?: QueryClient\n}\n\n/**\n * Inner props for the context provider (after QueryClientProvider is set up)\n */\ninterface DOProviderInnerProps {\n config: DOAdminConfig\n initialNamespace: string\n userId?: string\n isConnected: boolean\n connectionError?: Error\n rpcUrl: string\n client: DOClient\n children: React.ReactNode\n}\n\n/**\n * Inner component that provides the DO context.\n * This is inside QueryClientProvider, so it can use Query hooks for namespace state.\n */\nfunction DOProviderInner({\n config,\n initialNamespace,\n userId,\n isConnected,\n connectionError,\n rpcUrl,\n client,\n children,\n}: DOProviderInnerProps) {\n // Namespace from TanStack Query state (with localStorage persistence)\n // Falls back to initialNamespace if nothing in storage\n const namespace = useNamespace(initialNamespace)\n const { mutate: setNamespace } = useSetNamespace()\n\n // Context value\n const value = React.useMemo<DOContextValue>(\n () => ({\n config,\n namespace,\n setNamespace,\n userId,\n isConnected,\n connectionError,\n rpcUrl,\n client,\n }),\n [config, namespace, setNamespace, userId, isConnected, connectionError, rpcUrl, client]\n )\n\n return <DOContext.Provider value={value}>{children}</DOContext.Provider>\n}\n\n/**\n * DOProvider - Main provider for @mdxui/do\n *\n * Provides a single-mode RPC-first architecture using @dotdo/client for typed RPC calls.\n * All data operations go through the RPC endpoint using promise pipelining.\n *\n * Namespace state is managed via TanStack Query with localStorage persistence,\n * allowing it to be shared across components and persist across sessions.\n *\n * @example\n * ```tsx\n * <DOProvider\n * config={{\n * apiEndpoint: 'https://admin.do.ai',\n * authMethod: 'jwt',\n * authToken: 'xxx',\n * bindings: [...],\n * realTimeUpdates: false,\n * }}\n * initialNamespace=\"my-app\"\n * userId=\"user_123\"\n * >\n * <App />\n * </DOProvider>\n * ```\n *\n * @example\n * ```tsx\n * // Accessing the client in a child component\n * function MyComponent() {\n * const { client } = useDO()\n *\n * const fetchData = async () => {\n * // Promise pipelining - efficient batched RPC calls\n * const [users, projects] = await Promise.all([\n * client.Thing.list({ type: 'User' }),\n * client.Thing.list({ type: 'Project' }),\n * ])\n * return { users, projects }\n * }\n * }\n * ```\n */\nexport function DOProvider({\n config,\n initialNamespace = 'default',\n userId,\n children,\n queryClient: providedQueryClient,\n}: DOProviderProps) {\n // Derive RPC URL from config - use explicit rpcUrl if provided, otherwise derive from apiEndpoint\n const rpcUrl = config.rpcUrl ?? deriveRpcUrl(config.apiEndpoint)\n\n // Create RPC client instance based on clientType config\n // Re-create client when authToken changes to ensure fresh auth headers\n const client = React.useMemo(() => {\n const clientType = config.clientType ?? 'capnweb'\n const authToken = config.authToken\n\n // Log client initialization in development for debugging\n if (process.env.NODE_ENV === 'development') {\n if (clientType === 'mock') {\n console.log('[@mdxui/do] Initializing mock client (demo mode)')\n } else {\n const url = clientType === 'json-rpc' ? config.apiEndpoint : rpcUrl\n console.log(`[@mdxui/do] Initializing ${clientType} client with URL: ${url}`, authToken ? '(authenticated)' : '(no auth)')\n }\n }\n\n if (clientType === 'mock') {\n // Mock client - in-memory data for demos and development\n return $MockContext({ verbose: process.env.NODE_ENV === 'development' }) as unknown as DOClient\n }\n\n if (clientType === 'json-rpc') {\n // JSON-RPC over HTTP - for servers that use simple JSON format\n return $JsonRpcContext(config.apiEndpoint, { authToken }) as unknown as DOClient\n }\n\n // Default: Cap'n Proto HTTP batch with structured interface\n return $CapnwebContext(rpcUrl, { authToken }) as unknown as DOClient\n }, [rpcUrl, config.apiEndpoint, config.clientType, config.authToken])\n\n // Health check for API connectivity (with retry and exponential backoff)\n // Skip health check if configured (useful for backends without /health endpoint)\n // Mock mode always skips health check since it's in-memory\n const isMockMode = config.clientType === 'mock'\n const healthCheckResult = useHealthCheck({\n apiEndpoint: config.apiEndpoint,\n authToken: config.authToken,\n requestTimeout: config.requestTimeout,\n healthCheckRetries: config.healthCheckRetries,\n })\n\n // When skipHealthCheck is true or mock mode, assume connected\n const isConnected = config.skipHealthCheck || isMockMode ? true : healthCheckResult.isConnected\n const connectionError = config.skipHealthCheck || isMockMode ? undefined : healthCheckResult.connectionError\n\n // Use provided QueryClient or create one\n const [queryClient] = React.useState(() => providedQueryClient ?? createQueryClient())\n\n return (\n <QueryClientProvider client={queryClient}>\n <DOProviderInner\n config={config}\n initialNamespace={initialNamespace}\n userId={userId}\n isConnected={isConnected}\n connectionError={connectionError}\n rpcUrl={rpcUrl}\n client={client}\n >\n {children}\n </DOProviderInner>\n </QueryClientProvider>\n )\n}\n\n/**\n * Hook to access the QueryClient for manual cache operations\n */\nexport { useQueryClient } from '@tanstack/react-query'\n\n/**\n * Hook to safely access the DataProvider, returning null if not available.\n *\n * This is useful for hooks that can optionally use a DataProvider when one\n * is configured, but should fall back to RPC when no DataProvider is present.\n */\nexport function useDataProviderSafe(): DataProvider | null {\n return React.useContext(DataProviderContext)\n}\n"]}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
|
+
export { a as BreadcrumbItemConfig, B as BreadcrumbLinkProps, c as Breadcrumbs, b as BreadcrumbsProps } from '../breadcrumbs-C9Qn3S7d.js';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
1
3
|
import * as React from 'react';
|
|
2
4
|
|
|
5
|
+
interface EndpointSelectorProps {
|
|
6
|
+
/** Current endpoint URL */
|
|
7
|
+
endpoint: string;
|
|
8
|
+
/** Callback when endpoint changes */
|
|
9
|
+
onEndpointChange: (endpoint: string) => void;
|
|
10
|
+
/** Recent endpoints for quick selection */
|
|
11
|
+
recentEndpoints?: string[];
|
|
12
|
+
/** Placeholder text for the trigger input */
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
/** Additional class name for the trigger */
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* EndpointSelector - Search-like input that opens a command palette for endpoint selection
|
|
19
|
+
*/
|
|
20
|
+
declare function EndpointSelector({ endpoint, onEndpointChange, recentEndpoints, placeholder, className, }: EndpointSelectorProps): react_jsx_runtime.JSX.Element;
|
|
21
|
+
|
|
3
22
|
/**
|
|
4
23
|
* Error Boundary Component for @mdxui/do
|
|
5
24
|
*
|
|
@@ -73,4 +92,4 @@ declare function useErrorBoundary(): {
|
|
|
73
92
|
showBoundary: React.Dispatch<React.SetStateAction<Error | null>>;
|
|
74
93
|
};
|
|
75
94
|
|
|
76
|
-
export { DOErrorBoundary, type DOErrorBoundaryProps, useErrorBoundary };
|
|
95
|
+
export { DOErrorBoundary, type DOErrorBoundaryProps, EndpointSelector, type EndpointSelectorProps, useErrorBoundary };
|
package/dist/components/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { DOErrorBoundary, useErrorBoundary } from '../chunk-
|
|
1
|
+
export { DOErrorBoundary, useErrorBoundary } from '../chunk-LJIWB7KE.js';
|
|
2
|
+
export { Breadcrumbs, EndpointSelector } from '../chunk-3XKYQRXY.js';
|
|
2
3
|
import '../chunk-Y52IEYVM.js';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { i as DOAdminConfig } from './do-
|
|
2
|
+
import { i as DOAdminConfig } from './do-D27i5bU0.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Configuration types for DOShell
|
|
@@ -107,16 +107,5 @@ interface DOShellConfig {
|
|
|
107
107
|
/** Enable debug mode with extra logging */
|
|
108
108
|
debug?: boolean;
|
|
109
109
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Context value provided by DOShellProvider
|
|
112
|
-
*/
|
|
113
|
-
interface DOShellContextValue {
|
|
114
|
-
/** Shell configuration */
|
|
115
|
-
config: DOShellConfig;
|
|
116
|
-
/** Current namespace */
|
|
117
|
-
namespace: string;
|
|
118
|
-
/** Set current namespace */
|
|
119
|
-
setNamespace: (ns: string) => void;
|
|
120
|
-
}
|
|
121
110
|
|
|
122
|
-
export type { DOIdentity as D, DOBranding as a, DOTheme as b, DOCustomRoute as c, DOShellConfig as d
|
|
111
|
+
export type { DOIdentity as D, DOBranding as a, DOTheme as b, DOCustomRoute as c, DOShellConfig as d };
|
|
@@ -185,9 +185,10 @@ interface DOAdminConfig {
|
|
|
185
185
|
* - 'capnweb-http': Cap'n Proto over HTTP batch - stateless requests
|
|
186
186
|
* - 'capnweb': Legacy @dotdo/client wrapper
|
|
187
187
|
* - 'json-rpc': JSON-RPC over HTTP - simple JSON format
|
|
188
|
+
* - 'mock': Mock client with in-memory data - for demos and development
|
|
188
189
|
* @default 'capnweb-ws'
|
|
189
190
|
*/
|
|
190
|
-
clientType?: 'capnweb-ws' | 'capnweb-http' | 'capnweb' | 'json-rpc';
|
|
191
|
+
clientType?: 'capnweb-ws' | 'capnweb-http' | 'capnweb' | 'json-rpc' | 'mock';
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
export type { DOStatus as D, SyncStatus as S, DOClassType as a, DOInstance as b, DOAlarm as c, DOStorageEntry as d, DOBinding as e, DORPCMethod as f, DOHealthCheck as g, DOMetrics as h, DOAdminConfig as i };
|
|
@@ -343,4 +343,4 @@ declare function isValidationError(error: unknown): error is ValidationError;
|
|
|
343
343
|
*/
|
|
344
344
|
declare function isSyncError(error: unknown): error is SyncError;
|
|
345
345
|
|
|
346
|
-
export { APIError as A, DEFAULT_REQUEST_TIMEOUT as D, type FetchWithTimeoutOptions as F, NetworkError as N, type RetryConfig as R, SyncError as S, ValidationError as V,
|
|
346
|
+
export { APIError as A, DEFAULT_REQUEST_TIMEOUT as D, type FetchWithTimeoutOptions as F, NetworkError as N, type RetryConfig as R, SyncError as S, ValidationError as V, capitalize as a, cn as b, camelToTitle as c, debounce as d, formatBytes as e, fetchWithTimeout as f, formatDate as g, formatDateTime as h, formatDuration as i, formatNumber as j, formatRelativeTime as k, formatSemanticId as l, generateId as m, groupBy as n, isAPIError as o, isNetworkError as p, isSyncError as q, isValidationError as r, parseSemanticId as s, truncate as t, retryWithBackoff as u, createFetchWithTimeout as v };
|