CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-medusajs--admin

Admin dashboard plugin for Medusa e-commerce platform providing web interface for managing products, orders, customers, and store configuration.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

plugin-integration.mddocs/

Plugin Integration

Core plugin functionality for integrating @medusajs/admin with Medusa server instances. Provides Express routes, static file serving, and automatic build management.

Capabilities

Webpack Configuration

Provides custom webpack configuration integration with @medusajs/admin-ui.

/**
 * Custom webpack configuration function
 * Re-exported from @medusajs/admin-ui
 */
function withCustomWebpackConfig(): any;

API Route Handler

Creates Express router for serving the admin dashboard and handling production/development modes.

/**
 * Creates Express routes for admin dashboard
 * @param rootDirectory - Application root directory
 * @param options - Plugin configuration options
 * @returns Express Router instance
 */
function createAdminRoutes(
  rootDirectory: string, 
  options: PluginOptions
): Router;

Implementation details:

  • Serves static files in production mode
  • Returns development message in develop mode
  • Handles missing build files with helpful error messages
  • Sets appropriate caching headers for static assets

Setup Function

Automatic setup and build management for admin dashboard during server startup.

/**
 * Setup admin dashboard during server startup
 * Automatically builds if autoRebuild is enabled and changes detected
 */
function setupAdmin(): Promise<void>;

Setup process:

  1. Checks if running in development mode (skips if true)
  2. Validates serve and autoRebuild options
  3. Determines if rebuild is needed using build manifest
  4. Executes clean and build process if required
  5. Creates new build manifest with current state

Configuration Loading

Loads plugin configuration from Medusa config file.

/**
 * Load plugin configuration from medusa-config.js
 * @param isDev - Whether running in development mode
 * @returns Plugin options or null if not configured
 */
function loadConfig(isDev?: boolean): PluginOptions | null;

Configuration resolution:

  • Searches for @medusajs/admin in plugins array
  • Merges default options with user-provided options
  • Applies development-specific defaults when isDev=true
  • Returns null if plugin not found in configuration

Plugin Path Discovery

Discovers other plugins with admin UI extensions enabled.

/**
 * Get paths of plugins with admin UI enabled
 * @returns Array of plugin paths with UI extensions
 */
function getPluginPaths(): Promise<string[]>;

Discovery process:

  • Reads medusa-config.js for plugin configuration
  • Filters plugins with enableUI: true option
  • Returns array of plugin resolve paths for bundling

Configuration Options

Plugin Options

interface PluginOptions extends AdminOptions {
  /** Whether to serve the admin dashboard */
  serve?: boolean;
  /** 
   * Re-build admin automatically when options change
   * Memory intensive - use carefully in production
   */
  autoRebuild?: boolean;
}

interface AdminOptions {
  /** Path to serve admin dashboard (default: "/app") */
  path?: string;
  /** Output directory for build files (default: "build") */
  outDir?: string;
  /** Backend URL for API calls (default: "/") */
  backend?: string;
  /** Development server configuration */
  develop?: DevelopmentOptions;
}

interface DevelopmentOptions {
  /** Development server port (default: 7001) */
  port?: number;
  /** Development server host (default: "localhost") */
  host?: string;
  /** Auto-open browser (default: true) */
  open?: boolean;
  /** Allowed hosts configuration (default: "auto") */
  allowedHosts?: string;
  /** WebSocket URL for hot reload */
  webSocketURL?: string;
}

Usage Examples

Basic Plugin Configuration

// medusa-config.js
module.exports = {
  plugins: [
    {
      resolve: "@medusajs/admin",
      options: {
        serve: true,
        path: "/admin",
        autoRebuild: false
      }
    }
  ]
};

Development Configuration

// medusa-config.js
module.exports = {
  plugins: [
    {
      resolve: "@medusajs/admin",
      options: {
        serve: true,
        autoRebuild: true,
        develop: {
          port: 3001,
          open: false
        }
      }
    }
  ]
};

Production Configuration

// medusa-config.js
module.exports = {
  plugins: [
    {
      resolve: "@medusajs/admin",
      options: {
        serve: true,
        path: "/dashboard",
        outDir: "admin-build",
        backend: "https://api.mystore.com",
        autoRebuild: false
      }
    }
  ]
};

Build Manifest System

The plugin uses a build manifest system to determine when rebuilds are necessary:

Manifest Location

  • Stored at .cache/admin-build-manifest.json
  • Contains build metadata for change detection

Change Detection

Rebuilds are triggered when:

  • Plugin options have changed
  • Package dependencies have changed
  • Admin extension files have been modified
  • Plugin list with UI extensions has changed
  • Build manifest is missing or corrupted

Manifest Contents

  • dependencies: Package.json dependencies snapshot
  • modifiedAt: Most recent modification time of admin files
  • plugins: List of plugins with admin UI enabled
  • options: Plugin configuration used for build

Error Handling

Missing Build Files

When admin build files are missing in production:

Could not find the admin UI build files. Please run "medusa-admin build" or enable "autoRebuild" in the plugin options.

Configuration Errors

  • Invalid medusa-config.js files are handled gracefully
  • Missing plugin configuration returns null from loadConfig
  • Malformed plugin options use sensible defaults

Development Mode Detection

  • Uses process.env.COMMAND_INITIATED_BY === "develop" to detect development mode
  • Serves different responses for development vs production modes

docs

cli-commands.md

index.md

plugin-integration.md

types.md

tile.json