// ============================================================================ // Resolver Templates // ============================================================================ export const healthCheckResolver = `import type { ResolverContext } from 'ont-run'; interface HealthCheckResult { status: string; env: string; timestamp: string; } export default async function healthCheck(ctx: ResolverContext): Promise { ctx.logger.info('Health check called'); return { status: 'ok', env: ctx.env, timestamp: new Date().toISOString(), }; } `; export const getUserResolver = `import type { ResolverContext } from 'ont-run'; interface GetUserArgs { userId: string; currentUser: { id: string; email: string; }; } interface GetUserResult { id: string; name: string; email: string; createdAt: string; } export default async function getUser(ctx: ResolverContext, args: GetUserArgs): Promise { ctx.logger.info(\`Getting user: \${args.userId}\`); ctx.logger.info(\`Requested by: \${args.currentUser.email}\`); // Example: Check if user can access this resource // Support can only view their own account if (!ctx.accessGroups.includes('admin') && args.userId !== args.currentUser.id) { throw new Error('You can only view your own account'); } // This is where you'd query your database // Example response: return { id: args.userId, name: 'Example User', email: 'user@example.com', createdAt: '2025-01-01T00:00:00Z', }; } `; export const deleteUserResolver = `import type { ResolverContext } from 'ont-run'; interface DeleteUserArgs { userId: string; reason?: string; } interface DeleteUserResult { success: boolean; deletedUserId: string; deletedAt: string; } export default async function deleteUser(ctx: ResolverContext, args: DeleteUserArgs): Promise { ctx.logger.warn(\`Deleting user: \${args.userId}, reason: \${args.reason || 'none'}\`); // This is where you'd delete from your database // Example response: return { success: true, deletedUserId: args.userId, deletedAt: new Date().toISOString(), }; } `; export const getSalesDataResolver = `import type { ResolverContext } from 'ont-run'; interface GetSalesDataArgs { region?: string; } interface SalesDataPoint { month: string; sales: number; orders: number; } /** * Returns sales data for visualization. * This function has ui: true, so MCP clients will display results * in an interactive chart/table visualization. */ export default async function getSalesData( ctx: ResolverContext, args: GetSalesDataArgs ): Promise { ctx.logger.info(\`Getting sales data for region: \${args.region || 'all'}\`); // Example data - replace with real database queries const data: SalesDataPoint[] = [ { month: 'Jan', sales: 4000, orders: 240 }, { month: 'Feb', sales: 3000, orders: 198 }, { month: 'Mar', sales: 5000, orders: 300 }, { month: 'Apr', sales: 4500, orders: 278 }, { month: 'May', sales: 6000, orders: 389 }, { month: 'Jun', sales: 5500, orders: 349 }, ]; // Filter by region if specified if (args.region) { // In a real app, you'd filter the database query ctx.logger.info(\`Filtering by region: \${args.region}\`); } return data; } `;