import type { ActionInvocation, ActionMetadata } from '@yaakapp-internal/proxy-lib'; import { useEffect, useState } from 'react'; import { rpc } from '../lib/rpc'; /** Look up metadata for a specific action invocation. */ export function useActionMetadata(action: ActionInvocation): ActionMetadata | null { const [meta, setMeta] = useState(null); useEffect(() => { getActions().then((actions) => { const match = actions.find( ([inv]) => inv.scope === action.scope && inv.action === action.action, ); setMeta(match?.[1] ?? null); }); }, [action]); return meta; } let cachedActions: [ActionInvocation, ActionMetadata][] | null = null; /** Fetch and cache all action metadata. */ async function getActions(): Promise<[ActionInvocation, ActionMetadata][]> { if (!cachedActions) { const { actions } = await rpc('list_actions', {}); cachedActions = actions; } return cachedActions; }