1.0.17 • Published 10 months ago
@rbxts/router v1.0.17
Router
📦 Types
type RouteContext<T = unknown> = {
player: Player;
payload: T;
meta?: {
route: string;
timestamp: number;
[key: string]: unknown;
};
};
type RouteHandler<T = unknown> = (ctx: RouteContext<T>) => unknown;
type MiddlewareResult =
| { continue: true }
| { continue: false; error: string; code?: number };
type Middleware = (ctx: RouteContext) => MiddlewareResult;
type RegisteredRoute<T = unknown> = {
name: string;
schema?: (value: unknown) => boolean | [boolean, string?];
handler: RouteHandler<T>;
middleware?: Middleware[];
};🛠 Route Example
import { t } from "@rbxts/t";
import {
defineRoute,
handleRoute,
registerRoute,
registerRoutes,
} from "rest-core";
const ExampleSchema = t.interface({
name: t.string,
age: t.number,
});
registerRoute(
defineRoute(ExampleSchema, {
name: "example_1",
handler: ({ payload }) => {
print(payload.name);
},
}),
);
registerRoutes("example_2", [
defineRoute(ExampleSchema, {
name: "check age",
handler: ({ payload }) => {
print(payload.age);
},
}),
defineRoute(ExampleSchema, {
name: "create",
handler: ({ payload }) => {
print(payload); // { age: 10, name: "test" }
},
}),
]);
handleRoute("example_2:create", game.GetService("Players").LocalPlayer, {
age: 10,
name: "test",
});🧩 Middleware
rest-core supports both global and per-route middleware, giving you control over authentication, permissions, rate limiting, logging, and more.
✅ Global Middleware
Use use() to register middleware that runs on every route:
import { use } from "rest-core";
use((ctx) => {
print(`[ROUTER] ${ctx.meta?.route} called by ${ctx.player.Name}`);
return { continue: true };
});✅ Route-Specific Middleware
Apply middleware to individual routes:
import { defineRoute, registerRoute, success } from "rest-core";
import { t } from "@rbxts/t";
import { requireAuth } from "rest-core";
const ProfileSchema = t.interface({});
registerRoute(
defineRoute(ProfileSchema, {
name: "profile:get",
middleware: [requireAuth],
handler: ({ player }) => {
return success({ username: player.Name });
},
}),
);✅ Create Custom Middleware
Write your own checks using the RouteContext:
export function requireRole(role: string): Middleware {
return (ctx) => {
const userRole = ctx.player.GetAttribute("role");
return userRole === role
? { continue: true }
: { continue: false, error: "Forbidden", code: 403 };
};
}Use it like this:
middleware: [requireRole("admin")]1.0.17
10 months ago
1.0.16
10 months ago
1.0.15
10 months ago
1.0.14
10 months ago
1.0.13
10 months ago
1.0.11
10 months ago
1.0.10
10 months ago
1.0.9
10 months ago
1.0.8
10 months ago
1.0.7
10 months ago
1.0.6
10 months ago
1.0.5
10 months ago
1.0.4
10 months ago
1.0.3
10 months ago
1.0.2
10 months ago
1.0.1
10 months ago
1.0.0
10 months ago