Skip to content

Ajayos/node-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

@ajayos/server

A flexible, plugin-driven Express server wrapper with first-class TypeScript support, built-in middleware, and optional HTTPS.

npm version license


✨ Overview

@ajayos/server is a thin, powerful wrapper around Express that helps you:

  • Start HTTP or HTTPS servers easily
  • Enable common middleware using simple config flags
  • Extend behavior using a plugin system
  • Use flexible constructors (port, config, callbacks)
  • Keep server bootstrap code clean and readable

Designed to be:

  • βœ… Simple by default
  • πŸ”Œ Plugin-driven when needed
  • 🧠 TypeScript-first
  • πŸš€ Production-ready

πŸ“¦ Installation

npm install @ajayos/server

πŸš€ Quick Start

import SERVER from "@ajayos/server";

const app = new SERVER(3000);

app.get("/", (_req, res) => {
  res.send("Hello World");
});

app.start();

πŸ”§ Flexible Constructors

All of the following are valid:

new SERVER(3000);
new SERVER(3000, () => console.log("started"));
new SERVER(3000, { cors: true });

new SERVER({ port: 3000 });
new SERVER({ port: 3000 }, () => console.log("started"));

βš™οΈ Server Configuration

interface ServerConfig {
  port?: number;

  https?: {
    key: string | Buffer;
    cert: string | Buffer;
  };

  // Built-in middleware flags
  cors?: boolean | object;
  helmet?: boolean | object;
  bodyParser?: boolean | object;
  compression?: boolean | object;
  morgan?: boolean | string;
  rateLimit?: boolean | object;
  timeout?: boolean | object;
  static?: string;

  // Plugins
  plugins?: ServerPlugin[];

  // Lifecycle hooks
  onServerStart?: () => void;
  onServerError?: (error: any) => void;
}

πŸ” HTTPS Support

import fs from "fs";
import SERVER from "@ajayos/server";

new SERVER({
  port: 8443,
  https: {
    key: fs.readFileSync("./key.pem"),
    cert: fs.readFileSync("./cert.pem"),
  },
}).start();

πŸ”Œ Plugins System (3 Ways)

You can add plugins in three different ways.


βœ… 1️⃣ Via Config Flags (Simplest)

new SERVER({
  port: 3000,
  cors: true,
  helmet: true,
  bodyParser: true,
  compression: true,
  morgan: "dev",
  static: "public",
}).start();

Built-in flags are internally converted into plugins automatically.


βœ… 2️⃣ Via config.plugins[]

import { cors, bodyParser, static as serveStatic } from "@ajayos/server";

new SERVER({
  port: 3000,
  plugins: [cors({ origin: "*" }), bodyParser(), serveStatic("public")],
}).start();

βœ… 3️⃣ Via usePlugin() (Manual)

import { cors } from "@ajayos/server";

const app = new SERVER(3000);

app.usePlugin(cors({ origin: "*" }));

app.start();

πŸ“¦ Built-in Plugins List

Available out of the box:

Plugin Description
cors() Cross-Origin Resource Sharing
helmet() Security headers
bodyParser() JSON + URL-encoded body parsing
compression() Gzip / Brotli compression
morgan() HTTP request logging
rateLimit() Request rate limiting
timeout() Request timeout handling
static() Static file serving
jsonError() JSON parse error handling

All plugins are available from:

import { cors, helmet, bodyParser } from "@ajayos/server";

🧩 Plugin Usage Examples

CORS

import { cors } from "@ajayos/server";

cors({ origin: "https://example.com" });

or via config:

new SERVER({
  cors: { origin: "*" },
});

Body Parser

bodyParser({ limit: "10mb" });

Static Files

import { static as serveStatic } from "@ajayos/server";

serveStatic("public");

Rate Limiting

rateLimit({
  windowMs: 60_000,
  max: 100,
});

JSON Parse Error Handling

jsonError({ error: "Invalid JSON body" });

or with callback:

jsonError((err, req, res) => {
  res.status(400).json({
    message: err.message,
    path: req.path,
  });
});

Only JSON parse errors are handled. Other errors pass through.


🧠 Express-Compatible Routing API

app.use(middleware);

app.get("/users", handler);
app.post("/users", handler);
app.put("/users/:id", handler);
app.delete("/users/:id", handler);
app.patch("/users/:id", handler);
app.all("/health", handler);

πŸ”” Events & Lifecycle APIs

Server Events

app.on("error", (err) => {});
app.once("close", () => {});
app.off("error", handler);

Express App Events

app.onApp("mount", () => {});
app.onceApp("mount", () => {});
app.offApp("mount", handler);

🌐 Network Utilities

const interfaces = app.getActiveNetworkInterfaces();

Returns active IPv4 addresses (excluding localhost).


πŸ›‘ Graceful Shutdown

app.close();

πŸ§ͺ TypeScript Support

  • Written in TypeScript
  • Ships .d.ts files
  • Fully typed plugin system
  • Works with ESM and CommonJS

πŸ“„ License

Apache-2.0 License β€” free to use, modify, and distribute.

About

A lightweight Express-based HTTP/HTTPS server wrapper with built-in middleware, lifecycle hooks, logging, and utility helpers.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors