Files
livedash-node/lib/api/index.ts
Kaj Kowalski dd145686e6 fix: resolve all TypeScript compilation errors and enable production build
- Fixed missing type imports in lib/api/index.ts
- Updated Zod error property from 'errors' to 'issues' for compatibility
- Added missing lru-cache dependency for performance caching
- Fixed LRU Cache generic type constraints for TypeScript compliance
- Resolved Map iteration ES5 compatibility issues using Array.from()
- Fixed Redis configuration by removing unsupported socket options
- Corrected Prisma relationship naming (auditLogs vs securityAuditLogs)
- Applied type casting for missing database schema fields
- Created missing security types file for enhanced security service
- Disabled deprecated ESLint during build (using Biome for linting)
- Removed deprecated critters dependency and disabled CSS optimization
- Achieved successful production build with all 47 pages generated
2025-07-13 11:52:53 +02:00

136 lines
3.3 KiB
TypeScript

/**
* API Infrastructure Export Module
*
* Centralized exports for the standardized API layer architecture.
* This module provides a clean interface for importing API utilities
* throughout the application.
*/
// Authorization system
export {
type CompanyAccessResult,
canManageUser,
createPermissionChecker,
getUserPermissions,
hasAllPermissions,
hasAnyPermission,
hasPermission,
isRoleHigherThan,
Permission,
ResourceType,
requireAllPermissions,
requireAnyPermission,
requireCompanyAccess,
requireCompanyAccessFromRequest,
requirePermission,
requireUserManagementPermission,
validateCompanyAccess,
withPermissions,
} from "./authorization";
// Error handling
export {
APIError,
AuthenticationError,
AuthorizationError,
asyncErrorHandler,
ConflictError,
DatabaseError,
ExternalServiceError,
handleAPIError,
NotFoundError,
RateLimitError,
ValidationError,
withErrorHandling,
} from "./errors";
// API handlers and middleware
export {
type APIContext,
type APIHandler,
type APIHandlerOptions,
createAdminHandler,
createAPIHandler,
createAuthenticatedHandler,
createGETHandler,
createPOSTHandler,
type RateLimitConfig,
UserRole,
} from "./handler";
// Re-import types for use in functions below
import type { APIContext, APIHandler, APIHandlerOptions } from "./handler";
import { createAPIHandler } from "./handler";
import { Permission, createPermissionChecker } from "./authorization";
// Response utilities
export {
type APIResponse,
type APIResponseMeta,
calculatePaginationMeta,
createErrorResponse,
createPaginatedResponse,
createSuccessResponse,
extractPaginationParams,
type PaginationMeta,
} from "./response";
/**
* Utility function to create a fully configured API endpoint
* with authentication, authorization, and validation
*/
export function createSecureAPIEndpoint<T = unknown>(
handler: APIHandler<T>,
requiredPermission: Permission,
options: Omit<APIHandlerOptions, "requireAuth" | "requiredRole"> = {}
) {
return createAPIHandler(
async (context, validatedData, validatedQuery) => {
// Check permission
const permissions = createPermissionChecker(context);
permissions.require(requiredPermission);
// Execute handler
return handler(context, validatedData, validatedQuery);
},
{
...options,
requireAuth: true,
auditLog: true,
}
);
}
/**
* Utility function to create a company-scoped API endpoint
*/
export function createCompanyScopedEndpoint<T = unknown>(
handler: (
context: APIContext,
validatedData?: unknown,
validatedQuery?: unknown
) => Promise<T>,
requiredPermission: Permission,
getCompanyId: (context: APIContext) => string | Promise<string>,
options: Omit<APIHandlerOptions, "requireAuth"> = {}
) {
return createAPIHandler(
async (context, validatedData, validatedQuery) => {
// Check permission
const permissions = createPermissionChecker(context);
permissions.require(requiredPermission);
// Validate company access
const companyId = await getCompanyId(context);
permissions.requireCompanyAccess(companyId);
// Execute handler with company context
return handler(context, validatedData, validatedQuery);
},
{
...options,
requireAuth: true,
auditLog: true,
}
);
}