Files
upstream-mirror 30810eecd7
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 2s
snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:21:02 +05:00

2.5 KiB

Rocket.Chat HTTP Router

This package provides a flexible HTTP routing solution for Rocket.Chat services, built on top of Hono and Express.

Features

  • Type-safe route definitions with TypeScript
  • Express compatibility
  • Request validation via JSON Schema
  • Response validation
  • Middleware support
  • Nested routers
  • Strong TypeScript types for request and response objects

Installation

yarn add @rocket.chat/http-router

Usage

import { Router } from '@rocket.chat/http-router';
import express from 'express';

// Create a new router
const api = new Router('api');

// Define routes with typed handlers
api.get(
  'users',
  { 
    // Request validation options
    query: {
      schema: {
        type: 'object',
        properties: {
          limit: { type: 'number' },
          skip: { type: 'number' }
        }
      }
    },
    // Response validation
    response: {
      '200': {
        schema: {
          type: 'object',
          properties: {
            users: { type: 'array' },
            total: { type: 'number' }
          }
        }
      }
    }
  },
  // Optional middleware
  async (c, next) => {
    console.log('Middleware 1');
    await next();
  },
  // Route handler
  async (c) => {
    const { limit, skip } = c.req.valid('query');
    
    return {
      body: { 
        users: [],
        total: 0
      },
      statusCode: 200
    };
  }
);

// Create an Express app and use the router
const app = express();
app.use(api.router);

Middleware

The router supports middleware functions that can be used for authentication, logging, metrics, and more:

// Authentication middleware
const authMiddleware = async (c, next) => {
  const token = c.req.header('Authorization');
  if (!token) {
    return {
      body: { error: 'Unauthorized' },
      statusCode: 401
    };
  }
  // Set context variables for later use
  c.set('userId', 'user123');
  await next();
};

api.get('protected-route', {}, authMiddleware, async (c) => {
  const userId = c.get('userId');
  return {
    body: { message: `Hello, ${userId}` },
    statusCode: 200
  };
});

Express Integration

This router is designed to work seamlessly with Express applications:

import express from 'express';
import { Router } from '@rocket.chat/http-router';

const app = express();
const api = new Router('api');

// Define routes...

// Use the router with Express
app.use(api.router);

app.listen(3000, () => {
  console.log('Server running on port 3000');
});