UNPKG

@mobtakronio/schemakit-elysia

Version:

Elysia adapter for SchemaKit with auto-generated REST endpoints

1 lines 29 kB
{"version":3,"sources":["../src/utils.ts","../src/plugin.ts"],"names":["createSuccessResponse","data","message","createErrorResponse","error","createPaginatedResponse","page","limit","total","totalPages","meta","parseListQuery","query","filters","sort","excludeParams","validKey","key","value","extractContext","request","tenantId","contextProvider","headers","shouldIncludeEntity","entityName","options","pattern","sanitizeEntityName","handleAsync","operation","operationType","schemaKitElysia","schemaKit","config","plugin","Elysia","set","swagger","handleError","getEntity","getContext","context","app","entityApp","params","result","entity","pagination","records","start","end","paginatedRecords","t","body","record","id","viewName","stats","viewResult"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { Context } from '@mobtakronio/schemakit';\nimport type { \n ApiResponse, \n PaginatedResponse, \n PaginationMeta, \n ListQueryParams,\n SchemaKitElysiaOptions \n} from './types';\n\n/**\n * Create a successful API response\n */\nexport function createSuccessResponse<T>(\n data: T, \n message?: string\n): ApiResponse<T> {\n return {\n success: true,\n data,\n message,\n timestamp: new Date().toISOString(),\n };\n}\n\n/**\n * Create an error API response\n */\nexport function createErrorResponse(\n error: string | Error, \n message?: string\n): ApiResponse {\n const errorMessage = error instanceof Error ? error.message : error;\n return {\n success: false,\n error: errorMessage,\n message: message || 'Operation failed',\n timestamp: new Date().toISOString(),\n };\n}\n\n/**\n * Create a paginated response\n */\nexport function createPaginatedResponse<T>(\n data: T[],\n page: number,\n limit: number,\n total: number,\n message?: string\n): PaginatedResponse<T> {\n const totalPages = Math.ceil(total / limit);\n \n const meta: PaginationMeta = {\n page,\n limit,\n total,\n totalPages,\n hasNext: page < totalPages,\n hasPrev: page > 1,\n };\n\n return {\n success: true,\n data,\n meta,\n message,\n timestamp: new Date().toISOString(),\n };\n}\n\n/**\n * Parse query parameters for list operations\n */\nexport function parseListQuery(query: Record<string, any>): {\n pagination: { page: number; limit: number };\n filters: Record<string, any>;\n sort?: { field: string; order: 'asc' | 'desc' };\n} {\n const page = Math.max(1, parseInt(query.page as string) || 1);\n const limit = Math.min(100, Math.max(1, parseInt(query.limit as string) || 10));\n \n const filters: Record<string, any> = {};\n const sort = query.sort ? {\n field: query.sort as string,\n order: (query.order as 'asc' | 'desc') || 'asc'\n } : undefined;\n\n // Extract filters (exclude pagination and sort params)\n const excludeParams = new Set(['page', 'limit', 'sort', 'order', 'search']);\n const validKey = /^[A-Za-z_][A-Za-z0-9_]*$/;\n for (const [key, value] of Object.entries(query)) {\n if (excludeParams.has(key)) continue;\n if (value === undefined || value === '') continue;\n if (!validKey.test(key)) continue; // ignore potentially malicious/invalid identifiers (e.g., ^(.*)$)\n filters[key] = value;\n }\n\n // Handle search parameter\n if (query.search) {\n filters._search = query.search; // reserved internal key, not a DB column\n }\n\n return {\n pagination: { page, limit },\n filters,\n sort,\n };\n}\n\n/**\n * Extract context from request\n */\nexport function extractContext(\n request: Request, \n tenantId: string,\n contextProvider?: (request: Request) => Context | Promise<Context>\n): Context | Promise<Context> {\n if (contextProvider) {\n return contextProvider(request);\n }\n\n // Default context extraction\n const headers = request.headers;\n const context: Context = {\n tenantId,\n user: {\n id: headers.get('x-user-id') || 'anonymous',\n role: headers.get('x-user-role') || 'user',\n },\n request: {\n ip: headers.get('x-forwarded-for') || headers.get('x-real-ip') || 'unknown',\n userAgent: headers.get('user-agent') || 'unknown',\n },\n };\n\n return context;\n}\n\n/**\n * Check if entity should be included based on options\n */\nexport function shouldIncludeEntity(\n entityName: string, \n options: SchemaKitElysiaOptions\n): boolean {\n // Check exclusions first\n if (options.excludeEntities) {\n for (const pattern of options.excludeEntities) {\n if (pattern instanceof RegExp ? pattern.test(entityName) : pattern === entityName) {\n return false;\n }\n }\n }\n\n // Check inclusions\n if (options.includeEntities) {\n for (const pattern of options.includeEntities) {\n if (pattern instanceof RegExp ? pattern.test(entityName) : pattern === entityName) {\n return true;\n }\n }\n return false; // If include list exists, only include matching entities\n }\n\n return true; // Include by default\n}\n\n/**\n * Sanitize entity name for URL paths\n */\nexport function sanitizeEntityName(entityName: string): string {\n return entityName.toLowerCase().replace(/[^a-z0-9-_]/g, '-');\n}\n\n/**\n * Handle async operations with error wrapping\n */\nexport async function handleAsync<T>(\n operation: () => Promise<T>,\n entityName?: string,\n operationType?: string\n): Promise<{ success: true; data: T } | { success: false; error: Error }> {\n try {\n const data = await operation();\n return { success: true, data };\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return { success: false, error: err };\n }\n}","import { Elysia, t } from 'elysia';\nimport { swagger } from '@elysiajs/swagger';\nimport type { SchemaKit, Entity, Context } from '@mobtakronio/schemakit';\nimport type { SchemaKitElysiaOptions, RouteMetadata } from './types';\nimport {\n createSuccessResponse,\n createErrorResponse,\n createPaginatedResponse,\n parseListQuery,\n extractContext,\n shouldIncludeEntity,\n sanitizeEntityName,\n handleAsync,\n} from './utils';\n\n/**\n * SchemaKit Elysia Plugin\n * \n * Auto-generates REST endpoints for all SchemaKit entities with:\n * - CRUD operations\n * - Permission handling\n * - Validation\n * - Workflow execution\n * - OpenAPI/Swagger documentation\n */\nexport function schemaKitElysia(\n schemaKit: SchemaKit,\n options: SchemaKitElysiaOptions = {}\n) {\n const config = {\n basePath: '/api',\n tenantId: 'default',\n enableDocs: true,\n docsPath: '/docs',\n enableCors: true,\n ...options,\n };\n\n const plugin = new Elysia({ name: 'schemakit' });\n\n // Add CORS if enabled\n if (config.enableCors) {\n plugin.use(\n new Elysia().all('*', ({ set }) => {\n set.headers['Access-Control-Allow-Origin'] = '*';\n set.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';\n set.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization, X-User-Id, X-User-Role';\n })\n );\n }\n\n // Add Swagger/OpenAPI documentation if enabled\n if (config.enableDocs) {\n plugin.use(\n swagger({\n path: config.docsPath,\n documentation: {\n info: {\n title: 'SchemaKit API',\n description: 'Auto-generated REST API for SchemaKit entities',\n version: '1.0.0',\n },\n tags: [\n {\n name: 'Entities',\n description: 'CRUD operations for dynamic entities',\n },\n {\n name: 'Views',\n description: 'View execution endpoints for dynamic entities',\n },\n ],\n },\n })\n );\n }\n\n // Error handler\n const handleError = (error: Error, entityName?: string, operation?: string) => {\n if (config.errorHandler) {\n return config.errorHandler(error, entityName, operation);\n }\n \n console.error(`SchemaKit Error [${entityName}:${operation}]:`, error);\n return createErrorResponse(error);\n };\n\n // Helper to get entity\n const getEntity = async (entityName: string): Promise<Entity> => {\n return await schemaKit.entity(entityName, config.tenantId);\n };\n\n // Helper to get context from request\n const getContext = async (request: Request): Promise<Context> => {\n const context = extractContext(request, config.tenantId, config.contextProvider);\n return context instanceof Promise ? await context : context;\n };\n\n // Register CRUD routes for entities\n plugin.group(config.basePath, (app) => {\n \n // List entities endpoint\n app.get('/entities', async () => {\n try {\n // This would require a method to list all entities in SchemaKit\n // For now, return a placeholder\n return createSuccessResponse([], 'Available entities');\n } catch (error) {\n return handleError(error as Error, 'system', 'list-entities');\n }\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'List all available entities',\n description: 'Get a list of all entities registered in SchemaKit',\n },\n });\n\n // Dynamic entity routes\n app.group('/entity', (entityApp) => {\n \n // GET /entity/:entityName - List records\n entityApp.get('/:entityName', async ({ params, query, request }) => {\n const { entityName } = params;\n \n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n const { pagination, filters } = parseListQuery(query);\n\n // Get records with filters\n const records = await entity.get(filters, context);\n \n // For now, we'll do client-side pagination\n // In a real implementation, you'd want server-side pagination\n const start = (pagination.page - 1) * pagination.limit;\n const end = start + pagination.limit;\n const paginatedRecords = records.slice(start, end);\n\n return createPaginatedResponse(\n paginatedRecords,\n pagination.page,\n pagination.limit,\n records.length,\n `Retrieved ${paginatedRecords.length} records`\n );\n }, entityName, 'list');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'list');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'List entity records',\n description: 'Get a paginated list of entity records with optional filtering',\n },\n query: t.Object({\n page: t.Optional(t.Number({ minimum: 1 })),\n limit: t.Optional(t.Number({ minimum: 1, maximum: 100 })),\n sort: t.Optional(t.String()),\n order: t.Optional(t.Union([t.Literal('asc'), t.Literal('desc')])),\n search: t.Optional(t.String()),\n }),\n });\n\n // POST /entity/:entityName - Create record\n entityApp.post('/:entityName', async ({ params, body, request }) => {\n const { entityName } = params;\n \n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n\n const record = await entity.insert(body as Record<string, any>, context);\n return createSuccessResponse(record, 'Record created successfully');\n }, entityName, 'create');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'create');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'Create entity record',\n description: 'Create a new entity record',\n },\n body: t.Record(t.String(), t.Any()),\n });\n\n // GET /entity/:entityName/:id - Get single record\n entityApp.get('/:entityName/:id', async ({ params, request }) => {\n const { entityName, id } = params;\n \n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n\n const record = await entity.getById(id, context);\n if (!record) {\n throw new Error(`Record with ID ${id} not found`);\n }\n\n return createSuccessResponse(record, 'Record retrieved');\n }, entityName, 'read');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'read');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'Get entity record by ID',\n description: 'Retrieve a specific entity record by its ID',\n },\n params: t.Object({\n entityName: t.String(),\n id: t.Union([t.String(), t.Number()]),\n }),\n });\n\n // GET /entity/:entityName/views/:viewName - Execute a view\n entityApp.get('/:entityName/views/:viewName', async ({ params, query, request }) => {\n const { entityName, viewName } = params as any;\n\n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n const { pagination, filters } = parseListQuery(query);\n const stats = String((query as any).stats || '').toLowerCase() === 'true';\n\n const viewResult = await entity.view(\n viewName,\n { filters, pagination, stats },\n context\n );\n\n return createSuccessResponse(viewResult, 'View executed successfully');\n }, entityName, 'view');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'view');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Views'],\n summary: 'Execute view',\n description: 'Execute a named view for the entity with optional pagination and filters',\n },\n params: t.Object({\n entityName: t.String(),\n viewName: t.String(),\n }),\n query: t.Object({\n page: t.Optional(t.Number({ minimum: 1 })),\n limit: t.Optional(t.Number({ minimum: 1, maximum: 100 })),\n stats: t.Optional(t.Union([t.Literal('true'), t.Literal('false')])),\n }),\n });\n\n // PUT /entity/:entityName/:id - Update record\n entityApp.put('/:entityName/:id', async ({ params, body, request }) => {\n const { entityName, id } = params;\n \n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n\n const record = await entity.update(id, body as Record<string, any>, context);\n return createSuccessResponse(record, 'Record updated successfully');\n }, entityName, 'update');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'update');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'Update entity record',\n description: 'Update an existing entity record',\n },\n params: t.Object({\n entityName: t.String(),\n id: t.Union([t.String(), t.Number()]),\n }),\n body: t.Record(t.String(), t.Any()),\n });\n\n // DELETE /entity/:entityName/:id - Delete record\n entityApp.delete('/:entityName/:id', async ({ params, request }) => {\n const { entityName, id } = params;\n \n if (!shouldIncludeEntity(entityName, config)) {\n return createErrorResponse('Entity not accessible', 'Access denied');\n }\n\n const result = await handleAsync(async () => {\n const entity = await getEntity(entityName);\n const context = await getContext(request);\n\n const deleted = await entity.delete(id, context);\n if (!deleted) {\n throw new Error(`Failed to delete record with ID ${id}`);\n }\n\n return createSuccessResponse(\n { id, deleted: true },\n 'Record deleted successfully'\n );\n }, entityName, 'delete');\n\n if (!result.success) {\n return handleError(result.error, entityName, 'delete');\n }\n\n return result.data;\n }, {\n detail: {\n tags: ['Entities'],\n summary: 'Delete entity record',\n description: 'Delete an entity record by its ID',\n },\n params: t.Object({\n entityName: t.String(),\n id: t.Union([t.String(), t.Number()]),\n }),\n });\n\n return entityApp;\n });\n\n return app;\n });\n\n return plugin;\n}"]}