JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q102845F
  • License MIT

Complete admin dashboard system for Blok Framework applications with authentication, user management, and security features

Package Exports

  • @well-prado/blok-admin-dashboard/dist/src
  • @well-prado/blok-admin-dashboard/dist/src/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@well-prado/blok-admin-dashboard) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@well-prado/blok-admin-dashboard

Complete admin dashboard with authentication, user management, security, and database operations for Blok Framework.

npm version License: MIT

Overview

The @well-prado/blok-admin-dashboard is a comprehensive backend solution that provides everything you need to build secure, scalable admin applications. It includes 25+ pre-built nodes, 15+ workflows, complete authentication system, user management, security features, and database operations.

Features

  • 🔐 Complete Authentication System - Login, register, session management, password reset
  • 👥 User Management - CRUD operations, role management, profile updates
  • 🛡️ Advanced Security - Rate limiting, audit logging, request interception, 2FA
  • 📊 Database Operations - SQLite with Drizzle ORM, migrations, schemas
  • 📧 Email Integration - Templated emails, verification, notifications
  • 🔍 Workflow Discovery - Automatic API documentation and type generation
  • 📝 Audit Logging - Complete activity tracking and system logs
  • High Performance - Optimized queries, caching, connection pooling

Installation

npm install @well-prado/blok-admin-dashboard

Or use the CLI for automatic setup:

npx @well-prado/blok-cli install admin-dashboard

Quick Start

1. Basic Setup

// src/index.ts
import { AdminDashboard } from "@well-prado/blok-admin-dashboard";

const dashboard = new AdminDashboard({
  database: {
    url: "file:./database/app.db",
  },
  auth: {
    sessionDuration: 3600, // 1 hour
    requireEmailVerification: true,
  },
  security: {
    rateLimiting: true,
    auditLogging: true,
  },
});

// Start the server
dashboard.start(4000);

2. With Custom Configuration

import { AdminDashboard, AdminConfig } from "@well-prado/blok-admin-dashboard";

const config: AdminConfig = {
  database: {
    url: process.env.DATABASE_URL || "file:./database/app.db",
    enableWAL: true,
    connectionPooling: true,
  },
  auth: {
    sessionDuration: 7200, // 2 hours
    passwordMinLength: 8,
    requireEmailVerification: false,
    allowRegistration: true,
  },
  security: {
    rateLimiting: {
      enabled: true,
      windowMs: 15 * 60 * 1000, // 15 minutes
      maxRequests: 100,
    },
    auditLogging: true,
    requestInterception: true,
  },
  email: {
    provider: "smtp",
    config: {
      host: process.env.SMTP_HOST,
      port: parseInt(process.env.SMTP_PORT || "587"),
      auth: {
        user: process.env.SMTP_USER,
        pass: process.env.SMTP_PASS,
      },
    },
  },
};

const dashboard = new AdminDashboard(config);
dashboard.start(process.env.PORT || 4000);

Architecture

Node Categories

The package includes 25+ nodes organized into 8 categories:

🔐 Authentication Nodes (7 nodes)

  • authentication-checker - Validates user sessions and permissions
  • password-hash - Secure password hashing with bcrypt
  • password-verify - Password verification and validation
  • user-login - User login with session creation
  • user-logout - Session cleanup and logout
  • user-register - New user registration with validation

👥 Database Nodes (4 nodes)

  • user-find - Find users by various criteria
  • user-list - Paginated user listings with filtering
  • user-update - Update user information with validation
  • user-delete - Safe user deletion with audit trail

🛡️ Security Nodes (6 nodes)

  • audit-logger - Log all system activities
  • rate-limiter - Prevent abuse with configurable limits
  • request-interceptor - Inspect and modify requests
  • system-action-logger - Track administrative actions
  • two-factor-auth - TOTP-based 2FA implementation

✅ Validation Nodes (3 nodes)

  • email-validator - Email format and domain validation
  • input-sanitizer - Clean and sanitize user inputs
  • password-validator - Password strength validation

📧 Email Nodes (3 nodes)

  • EmailServiceManager - Multi-provider email handling
  • EmailTemplates - Template management and rendering
  • EmailVerification - Email verification workflows

📊 Profile Nodes (3 nodes)

  • profile-image-upload - Handle avatar uploads
  • theme-preference-update - User theme preferences
  • user-profile-update - Complete profile management

🔍 Meta Nodes (2 nodes)

  • workflow-discovery - Automatic API documentation

🔔 Notification Nodes (5 nodes)

  • clear-all-notifications - Bulk notification management
  • create-notification - Create system notifications
  • get-user-notifications - Fetch user notifications
  • mark-notification-read - Mark notifications as read

Workflow Categories

The package includes 15+ workflows organized by functionality:

Authentication Workflows

  • auth/login - User login with session creation
  • auth/logout - Session cleanup
  • auth/register - User registration
  • auth/verify-session - Session validation
  • auth/protected-example - Protected route example

Admin Workflows

  • admin/dashboard - Admin dashboard data
  • admin/user-management - User CRUD operations
  • admin/user-role-management - Role assignments
  • admin/admin-logs - System activity logs

Profile Workflows

  • profile/profile-update - User profile updates
  • profile/profile-image-upload - Avatar management
  • profile/theme-preferences - Theme settings

Security Workflows

  • security/audit-logs - Security event logs
  • security/two-factor-auth - 2FA setup and verification
  • security/rate-limit-test - Rate limiting demonstrations

Database Schema

The package includes complete database schemas with migrations:

Users Table

CREATE TABLE users (
  id TEXT PRIMARY KEY,
  email TEXT UNIQUE NOT NULL,
  password_hash TEXT NOT NULL,
  name TEXT NOT NULL,
  role TEXT DEFAULT 'user',
  avatar TEXT,
  email_verified BOOLEAN DEFAULT FALSE,
  theme_preference TEXT DEFAULT 'system',
  notification_preferences TEXT DEFAULT '{}',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Sessions Table

CREATE TABLE sessions (
  id TEXT PRIMARY KEY,
  user_id TEXT NOT NULL,
  expires_at DATETIME NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Audit Logs Table

CREATE TABLE audit_logs (
  id TEXT PRIMARY KEY,
  user_id TEXT,
  action TEXT NOT NULL,
  resource TEXT,
  resource_id TEXT,
  details TEXT,
  ip_address TEXT,
  user_agent TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

System Logs Table

CREATE TABLE system_logs (
  id TEXT PRIMARY KEY,
  level TEXT NOT NULL,
  message TEXT NOT NULL,
  category TEXT,
  user_id TEXT,
  session_id TEXT,
  metadata TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

API Endpoints

Authentication Endpoints

POST /auth/login

Login with email and password.

Request:

{
  "email": "user@example.com",
  "password": "securepassword"
}

Response:

{
  "success": true,
  "data": {
    "user": {
      "id": "user_123",
      "email": "user@example.com",
      "name": "John Doe",
      "role": "user"
    },
    "session": {
      "id": "session_456",
      "expiresAt": "2024-01-01T12:00:00Z"
    }
  }
}

POST /auth/register

Register a new user.

Request:

{
  "email": "newuser@example.com",
  "password": "securepassword",
  "name": "Jane Doe"
}

POST /auth/logout

Logout and destroy session.

Request:

{
  "sessionId": "session_456"
}

User Management Endpoints

GET /admin/users

Get paginated list of users (admin only).

Query Parameters:

  • page - Page number (default: 1)
  • limit - Items per page (default: 10)
  • search - Search term
  • role - Filter by role

Response:

{
  "success": true,
  "data": {
    "users": [...],
    "pagination": {
      "page": 1,
      "limit": 10,
      "total": 50,
      "totalPages": 5
    }
  }
}

PUT /admin/users/:id

Update user information (admin only).

DELETE /admin/users/:id

Delete user (admin only).

Profile Endpoints

GET /profile

Get current user profile.

PUT /profile

Update current user profile.

Request:

{
  "name": "Updated Name",
  "themePreference": "dark",
  "notificationPreferences": {
    "email": true,
    "push": false
  }
}

POST /profile/avatar

Upload profile avatar.

Security Endpoints

GET /admin/audit-logs

Get audit logs (admin only).

GET /admin/system-logs

Get system logs (admin only).

POST /security/2fa/setup

Setup two-factor authentication.

POST /security/2fa/verify

Verify 2FA token.

Configuration Options

Complete Configuration

interface AdminConfig {
  // Database configuration
  database: {
    url: string;
    enableWAL?: boolean;
    connectionPooling?: boolean;
    maxConnections?: number;
    queryTimeout?: number;
  };

  // Authentication settings
  auth: {
    sessionDuration?: number; // seconds
    passwordMinLength?: number;
    passwordRequireSpecialChar?: boolean;
    requireEmailVerification?: boolean;
    allowRegistration?: boolean;
    maxLoginAttempts?: number;
    lockoutDuration?: number; // seconds
  };

  // Security configuration
  security: {
    rateLimiting?: {
      enabled: boolean;
      windowMs: number;
      maxRequests: number;
    };
    auditLogging?: boolean;
    requestInterception?: boolean;
    corsOrigins?: string[];
    trustedProxies?: string[];
  };

  // Email configuration
  email: {
    provider: "smtp" | "sendgrid" | "mailgun";
    config: {
      // SMTP configuration
      host?: string;
      port?: number;
      secure?: boolean;
      auth?: {
        user: string;
        pass: string;
      };
      // Or API key for other providers
      apiKey?: string;
    };
    templates?: {
      welcome?: string;
      passwordReset?: string;
      emailVerification?: string;
    };
  };

  // Server configuration
  server: {
    port?: number;
    host?: string;
    cors?: {
      origin: string | string[];
      credentials: boolean;
    };
    bodyParser?: {
      limit: string;
    };
  };
}

Advanced Usage

Custom Nodes

Extend the dashboard with custom nodes:

import { AdminDashboard, BaseNode } from "@well-prado/blok-admin-dashboard";

class CustomReportNode extends BaseNode {
  async handle(input: any) {
    // Custom logic here
    return {
      success: true,
      data: { report: "Generated report data" },
    };
  }
}

const dashboard = new AdminDashboard(config);
dashboard.registerNode("custom-report", CustomReportNode);

Custom Workflows

Add custom workflows:

const customWorkflow = {
  name: "custom-analytics",
  steps: [
    {
      node: "authentication-checker",
      config: { requireAuth: true, requiredRole: "admin" },
    },
    {
      node: "custom-report",
      config: { reportType: "analytics" },
    },
  ],
};

dashboard.registerWorkflow(customWorkflow);

Middleware

Add custom middleware:

dashboard.use((req, res, next) => {
  console.log(`${req.method} ${req.path}`);
  next();
});

// Authentication middleware
dashboard.use("/admin/*", async (req, res, next) => {
  const session = await validateSession(req);
  if (!session || session.user.role !== "admin") {
    return res.status(403).json({ error: "Admin access required" });
  }
  next();
});

Database Operations

Direct database access:

import { database } from "@well-prado/blok-admin-dashboard";
import { users, sessions } from "@well-prado/blok-admin-dashboard/schemas";

// Query users
const allUsers = await database.select().from(users);

// Create user
const newUser = await database.insert(users).values({
  id: generateId(),
  email: "user@example.com",
  passwordHash: await hashPassword("password"),
  name: "New User",
});

// Update user
await database
  .update(users)
  .set({ name: "Updated Name" })
  .where(eq(users.id, userId));

// Delete user
await database.delete(users).where(eq(users.id, userId));

Security Features

Rate Limiting

Configurable rate limiting per endpoint:

const config = {
  security: {
    rateLimiting: {
      enabled: true,
      windowMs: 15 * 60 * 1000, // 15 minutes
      maxRequests: 100,
      skipSuccessfulRequests: false,
      skipFailedRequests: false,
    },
  },
};

Audit Logging

All actions are automatically logged:

// Automatically logged actions:
// - User login/logout
// - User creation/update/deletion
// - Admin actions
// - Security events
// - System errors

// Custom audit logging
import { auditLogger } from "@well-prado/blok-admin-dashboard";

await auditLogger.log({
  userId: "user_123",
  action: "CUSTOM_ACTION",
  resource: "custom_resource",
  resourceId: "resource_456",
  details: { customData: "value" },
});

Two-Factor Authentication

Built-in TOTP-based 2FA:

// Setup 2FA for user
const setup2FA = useWorkflowMutation("security/two-factor-auth");
const { qrCode, secret } = await setup2FA.mutateAsync({ action: "setup" });

// Verify 2FA token
const verify2FA = useWorkflowMutation("security/two-factor-auth");
const result = await verify2FA.mutateAsync({
  action: "verify",
  token: "123456",
});

Email Integration

SMTP Configuration

const config = {
  email: {
    provider: "smtp",
    config: {
      host: "smtp.gmail.com",
      port: 587,
      secure: false,
      auth: {
        user: "your-email@gmail.com",
        pass: "your-app-password",
      },
    },
  },
};

Email Templates

Customize email templates:

const config = {
  email: {
    templates: {
      welcome: `
        <h1>Welcome to {{appName}}!</h1>
        <p>Hello {{userName}}, welcome to our platform.</p>
      `,
      passwordReset: `
        <h1>Password Reset</h1>
        <p>Click <a href="{{resetLink}}">here</a> to reset your password.</p>
      `,
    },
  },
};

Sending Emails

import { emailService } from "@well-prado/blok-admin-dashboard";

await emailService.send({
  to: "user@example.com",
  subject: "Welcome!",
  template: "welcome",
  data: {
    userName: "John Doe",
    appName: "My App",
  },
});

Monitoring and Logging

System Logs

View system logs:

import { systemLogger } from "@well-prado/blok-admin-dashboard";

// Log custom events
systemLogger.info("Custom event", {
  category: "CUSTOM",
  userId: "user_123",
  metadata: { customData: "value" },
});

// Query logs
const logs = await systemLogger.query({
  level: "error",
  category: "AUTH",
  startDate: new Date("2024-01-01"),
  endDate: new Date("2024-01-31"),
});

Health Checks

Built-in health check endpoints:

# Check system health
GET /health

# Response
{
  "status": "healthy",
  "timestamp": "2024-01-01T12:00:00Z",
  "checks": {
    "database": "healthy",
    "email": "healthy",
    "cache": "healthy"
  }
}

Testing

Unit Tests

import { AdminDashboard } from "@well-prado/blok-admin-dashboard";
import { createTestConfig } from "@well-prado/blok-admin-dashboard/testing";

describe("Admin Dashboard", () => {
  let dashboard: AdminDashboard;

  beforeEach(() => {
    dashboard = new AdminDashboard(createTestConfig());
  });

  test("should authenticate user", async () => {
    const result = await dashboard.executeWorkflow("auth/login", {
      email: "test@example.com",
      password: "password",
    });

    expect(result.success).toBe(true);
    expect(result.data.user.email).toBe("test@example.com");
  });
});

Integration Tests

import request from "supertest";
import { AdminDashboard } from "@well-prado/blok-admin-dashboard";

describe("API Integration", () => {
  let app: AdminDashboard;

  beforeAll(async () => {
    app = new AdminDashboard(testConfig);
    await app.start();
  });

  test("POST /auth/login", async () => {
    const response = await request(app.server).post("/auth/login").send({
      email: "test@example.com",
      password: "password",
    });

    expect(response.status).toBe(200);
    expect(response.body.success).toBe(true);
  });
});

Deployment

Production Configuration

const productionConfig = {
  database: {
    url: process.env.DATABASE_URL,
    enableWAL: true,
    connectionPooling: true,
    maxConnections: 20,
  },
  auth: {
    sessionDuration: 3600, // 1 hour
    requireEmailVerification: true,
  },
  security: {
    rateLimiting: {
      enabled: true,
      windowMs: 15 * 60 * 1000,
      maxRequests: 1000,
    },
    auditLogging: true,
    corsOrigins: [process.env.FRONTEND_URL],
  },
  server: {
    port: process.env.PORT || 4000,
    host: "0.0.0.0",
  },
};

Docker Deployment

FROM node:18-alpine

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

COPY . .
RUN npm run build

EXPOSE 4000
CMD ["npm", "start"]

Environment Variables

# Database
DATABASE_URL=file:./database/app.db

# Authentication
SESSION_DURATION=3600
REQUIRE_EMAIL_VERIFICATION=true

# Email
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password

# Security
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100

# Server
PORT=4000
NODE_ENV=production

Migration Guide

From v0.x to v1.x

  1. Update configuration format:

    // Old
    const config = {
      databaseUrl: "file:./app.db",
      sessionDuration: 3600,
    };
    
    // New
    const config = {
      database: { url: "file:./app.db" },
      auth: { sessionDuration: 3600 },
    };
  2. Update imports:

    // Old
    import { AdminDashboard } from "@well-prado/blok-admin-dashboard/core";
    
    // New
    import { AdminDashboard } from "@well-prado/blok-admin-dashboard";

Troubleshooting

Common Issues

  1. Database connection errors

    • Check file permissions for SQLite database
    • Ensure database directory exists
    • Verify connection string format
  2. Authentication failures

    • Check session configuration
    • Verify password hashing
    • Ensure cookies are being sent
  3. Email sending failures

    • Verify SMTP credentials
    • Check firewall settings
    • Test with email provider's test tools

Debug Mode

Enable debug logging:

DEBUG=blok-admin:* npm start

Performance Tips

  1. Database Optimization

    • Enable WAL mode for better concurrency
    • Use connection pooling
    • Add appropriate indexes
  2. Caching

    • Enable session caching
    • Cache frequently accessed data
    • Use Redis for distributed caching
  3. Rate Limiting

    • Configure appropriate limits
    • Use distributed rate limiting for multiple servers

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support